Bethesda Tutorial Papyrus Events and Properties/pl
Poradnik Bethesdy - Papyrus - Zdarzenia i własności
Strona w języku polskim Wymaga poprawek redakcyjnych lub przetłumaczenia linkowanych stron |
Poradnik Bethesdy - Papyrus - Zdarzenia i własności | |
---|---|
seria: Skypty, rozdział: 4 | |
Powrót do spisu poradników | |
Poprzedni poradnik | Następny poradnik |
Przegląd[edit | edit source]
Nauczysz się:
- Podstawowych informacji o Zdarzeniach Event oraz co je włącza
- Jak tworzyć i wykorzystywać Własności
- W jaki sposób gra wpływa na Papyrusa wysyłając mu Zdarzenia
- W jaki sposób Papyrus wpływa na grę, wykonując działania na Własnościach
W tym poradniku zajmiemy się poziomem grobowca Lokira, który wspólnie utworzyliśmy w serii poradników na temat tworzenia podziemi. Możesz pobrać gotowy plugin Grobowiec Lokira (Lokir's Tomb), ale miej na uwadze, że aby kontynuować tę serię o skryptach, musisz znać wiele rzeczy, o których była mowa przy tworzeniu podziemi, np.:
- Poruszanie się po edytorze
- Pojęcia takie jak pułapki, aktywowanie oraz aktywujący rodzice (Activate Parents).
Plan[edit | edit source]
Obecnie, kiedy wchodzi się do ostatniej komory w grobie Lokira, boss draugr wstaje z sarkofagu i atakuje. Sprawmy, by ta walka była bardziej ekscytująca, wprowadzając pewne unikalne elementy skryptowe. Zaczniemy od dodania dwóch nieumarłych draugrów, by ich reanimować (z pełnymi efektów czarów) gdy boss zacznie wychodzić z grobu.
Zmodyfikowanie sceny[edit | edit source]
Najpierw trzeba na scenie ustawić draugra, którego będziemy wskrzeszać. W edytorze otwórz obszar LokirsTomb i ustaw widok na terenie jaskini, to komnata z bossem. W oknie Object przejdź do Actors > Actor albo użyj filtru, aby znaleźć "LvlDraugrMissileMale" i "LvlDraugrWarlockMale" i wybierz all. Ustaw oba draugry w jaskini.
Aktorzy ze Skyrim, tacy jak te druagry, zaczynają żywi (well, relatively speaking), my zaś chcemy, aby byli martwi. Podwójne kliknij na każdego z nich i w oknie właściwości Reference ustaw zaznaczenie przy Starts Dead.
Zapisz swój plugin i uruchom go w grze, aby sprawdzić czy wszystko działa tak jak założyliśmy. Dwa martwe Draugr mają leżeć na podłodze w komnacie. O to na razie nam chodziło - ale wróćmy do Creation Kit i spróbujmy te dwa druagry postawić na nogach.
Planowanie zdarzeń[edit | edit source]
Wprowadzenie do Zdarzeń[edit | edit source]
Chcemy wskrzesić Draugry gdy tylko ich szef wyjdzie z grobu. To znaczy, że chcemy, aby tak się stało w odpowiedzi na Zdarzenie. "Zdarzenia" (Event) to działania lub zmiany stanu, o których gra powiadamia Papyrusa. Istnieją dziesiątki różnych zdarzeń, np.:
- Interakcja z obiektem lub postacią (pociągnięcie za dźwignię, otwieranie drzwi, plądrowanie zwłok).
- Podnoszenie, wyciąganie lub schowanie do ekwipunku, upuszczanie przedmiotów.
- Wchodzenie lub wychodzenie z obszarów.
- Wchodzenie lub wychodzenie z trybu walki, otrzymywanie obrażeń, umieranie.
- wiele, wiele więcej.
Po prostu - jeśli gracz lub inna postać w grze wykonuje pewne czynności, robi to poprzez zdarzenia.
Wywołanie zdarzenia aktywującego[edit | edit source]
Być może nawet nie zdajesz sobie z tego sprawy, ale nasz przykładowy plugin już korzysta z zdarzenia wysyłanego do Papyrusa. To dzięki niemu boss wie, kiedy wyjść z sarkofagu. Jeśli pamiętasz z poradnika o tworzeniu pułapek - boss wykorzystuje pole wyzwalacza jako swojego aktywującego rodzica (Activate Parent). Kiedy gracz wchodzi do pola wyzwalacza, wyzwalacz aktywuje bossa, zmuszając go żeby powstał.
Możemy użyć tego samego pola wyzwalacza do wysłania zdarzenia Activate (en) do naszych dwóch martwych draugrów ochotników.
Dla każdego z Draugrów:
- Dwukrotnie kliknij na Draugra aby otworzyć jego okno właściwości.
- Odszukaj i wybierz zakładkę Activate Parents.
- Kliknij prawym w pustą listę i wybierz "New". Wskaźnik myszy zmieni się na wskaźnik wyboru obiektu-referencji.
- Kliknij na "Select Reference in Render Window"
- Gdy pojawi się kursor celownika, kliknij dwukrotnie na pole wyzwalacza.
Teraz oba draugry dostaną powiadomienie o zdarzeniu aktywacji, gdy gracz wdepnie w pole wyzwalacza. Na razie właściwie nic się nie stanie, ponieważ draugry nie posiadają odpowiedniego skryptu, który będzie im mówił, co mają zrobić gdy wyzwalacz zostanie aktywowany.
Skrypty sterujące[edit | edit source]
Pierwsze koty za płoty[edit | edit source]
Czas napisać jakiś skrypt. Uruchom swój edytor tekstów (my dostarczamy ustawień, takich jak kolorowania składni, na razie tylko dla edytorów Notepad++ oraz Sublime Text), stwórz nowy plik o nazwie "LokirsDraugrResurrection.psc".
Zacznijmy od nazwania skryptu i wskazania jego rodzaju:
scriptName LokirsDraugrResurrection extends Actor
{Wskrzesza dwa martwe Draugry w grobowcu Lokira.}
Chcemy teraz sprawić, aby skrypt reagował na zdarzenie aktywowania, czyli onActivate. Aktywacja ma miejsce, gdy inny podmiot, np. gracz lub NPC, próbuje "używać" lub "aktywować" obiekt. W tym przypadku skrypt ustawiony na polu wyzwalacza prześle informację o aktywacji, jeśli nastąpi.
scriptName LokirsDraugrResurrection extends Actor
{Wskrzesza dwa martwe Draugry w grobowcu Lokira.}
Event OnActivate(ObjectReference akActionRef)
; Rzuca na Draugra zaklecie wskrzeszenia
EndEvent
Rzucenie zaklęcia[edit | edit source]
Aby wskrzesić Draugry, rzucimy na nie zaklęcie wskrzeszenia. W tym celu wpierw należy utworzyć własność Property. Będzie to własność typu Spell (zaklęcie). Dopiero wtedy edytor będzie wiedział jakiego zaklęcia ma użyć, aby wskrzesić naszych dwóch ochotników z przykładowego pluginu.
Dla osób znających poprzednie języki skryptowe z gier ze stajni BGS jest to bardzo duża zmiana. W Papyrusie nie można tak po prostu napisać Editor ID obiektu, na którym chcesz wykonać jakieś działania. Trzeba posłużyć się własnością (Property). Dzięki temu, jak przekonasz się w przyszłości, używanie skryptów bardziej elastyczne, jeden skrypt można wykorzystywać w wielu miejscach i projektach, ponieważ każda instancja skryptu może mieć różne wartości dla swych własności Property. Na tej stronie znajdziesz informacje o własnościach i zmiennych w Papyrusie. (en)
Zaczniemy od "deklaracji" własności typu zaklęcie - Spell:
scriptName LokirsDraugrResurrection extends Actor
{Wskrzesza dwa martwe Draugry w grobowcu Lokira.}
Spell property reanimateSpell auto
EVENT OnActivate(ObjectReference akActionRef)
; Rzuca na Draugra zaklecie wskrzeszenia
EndEVENT
Mamy zdefiniowane zaklęcie, ale na razie nic ono nie robi. Zaklęcia można rzucać, własności typu Spell mogą używać funkcji "rzuć zaklęcie", a jest to funkcja Cast. W bloku zdarzenia onActivate możemy zatem dodać nową linię:
scriptName LokirsDraugrResurrection extends Actor
{Wskrzesza dwa martwe Draugry w grobowcu Lokira.}
Spell property reanimateSpell Auto
EVENT OnActivate(ObjectReference akActionRef)
; Rzuca na Draugra zaklecie wskrzeszenia
reanimateSpell.Cast(Self, Self)
EndEVENT
Podobnie jak w przypadku wielu innych funkcji, musimy jej podać jeden lub więcej "argumentów", aby funkcja miała na czym pracować. W przypadku funkcji Cast należy podać źródło (kto rzuca zaklęcie) oraz cel (na kogo jest rzucane zaklęcie). W tym przykładzie założyliśmy, że Draugr będzie rzucał zaklęcie sam na siebie, dlatego podaliśmy argument Self zarówno jako źródło, jak i cel. Self to takie ułatwienie, inaczej musielibyśmy tworzyć nowe własności dla wskrzeszanych Draugrów. Self oznacza "na siebie", Papyrus będzie wiedział, że funkcja Cast ma zostać użyta na tych obiektach, do których cały ten skrypt jest przypisany.
Zapisz i skompiluj skrypt, a następnie powróć do Creation Kit.
Przypisanie skryptu do aktora[edit | edit source]
W edytorze kliknij podwójne na jednym z Draugrów, aby otworzyć okno właściwości, a następnie przejdź do zakładki Scripts (można nacisnąć klawisz 'End', aby przejść na koniec, jest to ostatnia zakładka na liście). To miejsce, gdzie podłączymy nasz skrypt:
- Kliknij przycisk Add.
- W oknie Add script... wprowadź nazwę naszego nowego skryptu, LokirsDraugrResurrection.
- Podwójne kliknij na skrypcie, aby dodać go do Draugra.
Teraz skrypt został przypisany do aktora, ale musimy jeszcze powiedzieć edytorowi którego właściwie zaklęcia chcemy użyć (na razie mamy zdefiniowaną własną, wymyśloną nazwę zaklęcia). Użyjemy zaklęcia dunReanimateSelf. Jest to specjalne zaklęcie, którego gracz nie może używać w grze, a stworzone zostało właśnie specjalnie do przypadków takich jak ten.
- Wybierz LokirsDraugrResurrection w zakładce Scripts.
- Kliknij na Properties.
- Lista, która się pojawi, będzie mieć tylko jedną własność - naszą reanimateSpell.
- Wybierz reanimateSpell i kliknij na Edit Value.
- Zauważ, że lista ta wyświetla tylko obiekty właściwe dla danego rodzaju obiektów - zaklęcia w tym przypadku.
- Wybierz dunReanimateSelf. Kliknij przycisk OK.
Powtórz tę czynność dla drugiego Draugra. Zapisz pracę i przetestuj plugin w grze!
Śledzenie przebiegu działania skryptu[edit | edit source]
Na pierwszy rzut oka wszystko zapewne zadziałało zgodnie z oczekiwaniami. Jednakże, jeśli pograsz trochę dłużej, być może zauważysz, że zmartwychwstanie nastąpi w dowolnej chwili gdy draugr odbierze informację o zdarzeniu aktywowania. Nawet jeśli gracz podejdzie do zwłok draugra i je aktywuje, to draugr powstanie! To dosyć niemiła niespodzianka i wcale nie taki był nasz zamiar! Takie nieoczekiwane błędy można na szczęście wyeliminować, dodając w skrypcie więcej warunków.
Istnieje wiele sposobów, by to naprawić, by mieć pewność że zmartwychwstanie zdarzy się tylko raz - na przykład można użyć zmiennej sterującej. Można również sprawić, aby skrypt pomijał aktywację od gracza, ale nadal może spowodować przypadkowe ponowne zmartwychwstanie np. przez NPC.
Naszą nową własność przyrównany do akActionRef, który jest parametrem ze zdarzenia OnActivate(). Ten parametr jest taką specjalną zmienną, używaną tylko w zdarzeniach aktywacji onActivate. W zmiennej akActionRef Papyrus przechowuje informację kto dokonał aktywacji.
scriptName LokirsDraugrResurrection extends Actor
{Ten skrypt jest dla martwego draugra w grobowcu Lokira. Sprawia ze Draugr powstaje z martwych.}
Spell property reanimateSpell Auto ; zaklecie uzywane na sobie aby sie wskrzesic
objectReference property myTrigger auto ; w zmiennej myTrigger czekamy na wlasciwy podmiot, ktory dokona aktywacji
Event OnActivate(ObjectReference akActionRef)
; Ktos mnie aktywowal - sprawdz czy to byl moj wyzwalacz.
if (akActionRef == myTrigger)
; Rzuc czar wskrzeszenia na Draugra.
reanimateSpell.Cast(Self, Self)
EndIf
EndEvent
Na koniec musimy jeszcze coś wsadzić do naszej własności myTrigger. W edytorze podwójnie kliknij na jednym z Draugrów. Przejdź do zakładki Scripts i wybierz nasz skrypt LokirsDraugrResurrection. Kliknij na Properties. Wtedy wybierz naszą własność myTrigger i kliknij na Edit Value. Wybierz Pick Reference in Render Window. Wreszcie podwójnie kliknij na niebieskie pudło pola wyzwalacza, które powoduje że Draugr boss wychodzi ze swojego grobu.
Zapisz pluga i przetestuj.
Zauważysz że Draugry powstają tylko raz, mimo że gracz może chodzić w tę i nazad przez pole wyzwalacza przy wejściu do komnaty z jaskinią. Dzieje się tak ponieważ własność skryptu przypisanego do pola wyzwalacza używa zmiennej doOnce, która powoduje, że aktywacja jest przesyłana tylko za pierwszym razem gdy gracz wdepnie w pole wyzwalacza. Możesz sprawdzić skrypt przypisany do pola wyzwalacza (defaultActivateSelf) i zobaczyć w jaki sposób przypisywać domyślne lub automatyczne wartości do własności.
Poprzedni poradnik | Powrót do spisu poradników | Następny poradnik |
Language: | English • français • 日本語 • polski |
---|