Bethesda Tutorial Papyrus Introduction to Properties and Functions/pl

From the CreationKit Wiki
Jump to navigation Jump to search

Poradnik Bethesdy - Papyrus - Własności i funkcje



RoundPolishFlag.pngStrona w języku polskim
Wymaga poprawek redakcyjnych lub przetłumaczenia linkowanych stron
Poradnik Bethesdy - Papyrus - Własności i funkcje
seria: Skypty, rozdział: 3
Powrót do spisu poradników
LeftArrow.png Poprzedni poradnik Następny poradnikRightArrow.png


Przegląd[edit | edit source]

Ten poradnik jest kontynuacją ze stron o skrypcie "Witaj świecie!" oraz o zmiennych i wyrażeniach warunkowych. Aby móc w pełni wykorzystać zapisane tu informacje, musisz wpierw przejść przez ćwiczenia z wymienionych wcześniejszych poradników.

Nauczysz się:

  • O rzeczach, które już używaliśmy ale nie omówiliśmy ich znaczenia:
    • Co zawiera pierwsza linia skryptu
    • Co to znaczy rozszerzyć "extend" skrypt
    • Jak dodawać w skrypcie podpowiedzi, używając nawiasów klamrowych {}
  • Jak używać własności "Property" i jak ją zakotwiczać w edytorze
  • Jak stworzyć i korzystać ze nowej, utworzonej przez siebie funkcji


Pierwsza linijka[edit | edit source]

Zanim kontynuujemy tworzenie nowych skryptów, na chwilę wracamy do wcześniejszej jego wersji i omówimy rzeczy, o których wcześniej nie rozmawialiśmy. Pierwsza linia skryptu:

 Scriptname HelloWorldScript extends ObjectReference
  • Scriptname HelloWorldScript extends ObjectReference: Pierwsza linijka w każdym skrypcie zaczyna się od tego słowa. Wskazujemy nim, że za chwilę podamy nazwę skryptu.
  • Scriptname HelloWorldScript extends ObjectReference: To jest nazwa skryptu. Jeśli jakiś inny skrypt będzie miał się odwołać do tego, to posłuży się właśnie nazwą.
  • Scriptname HelloWorldScript extends ObjectReference: To specjalne słowo które oznacza tylko że ten skrypt jest oparty na innym skrypcie, który już istnieje.
  • Scriptname HelloWorldScript extends ObjectReference: Nasz skrypt rozszerza inny skrypt (jest oparty na innym skrypcie), w tym przypadku rozszerza skrypt o nazwie "ObjectReference".


Rozszerzenie skryptu[edit | edit source]

Praktycznie wszystkie skrypty, które piszesz, muszą "rozszerzyć" inny skrypt. Rozszerzając inny skrypt, mówisz: "Mój skrypt jest takiego samego rodzaju i operuje na podobnych danych, co inny skrypt, plus ma wszelkie dodatkowe rzeczy przeze mnie dodane."

Wybór rozszerzanego skryptu to również sposób, aby przekazać grze iż "Mój skrypt jest takiego a takiego rodzaju."

Na przykład, jeśli chcesz dodać skrypt do obiektu, który ma być punktem odniesienia w świecie gry (jak filar w naszym przykładzie), to skrypt będzie musiał przedłużać skrypt o nazwie "ObjectReference". Jeśli chcesz dodać skrypt do questu, przedłużasz skrypt o nazwie "Quest". I tak dalej.

Jak zdobędziesz więcej doświadczenia w pisaniu skryptów, będziesz wiedzieć co mogą robić skrypty które rozszerzasz. Na razie po prostu musisz przyjąć, że twój skrypt będzie musiał rozszerzać inny skrypt, zależnie od rodzaju obiektu, do którego chcesz swój skrypt podpiąć.


Dodawanie podpowiedzi kontekstowych[edit | edit source]

Zastanawiasz się po co jest druga linia w skrypcie?

 {To moj pierwszy prawdziwy skrypt!}

Podczas tworzenia nowego skryptu i wszedł ciąg dokumentacji, linia ta została stworzona dla Ciebie:

Papyrus Tutorial1 NewScript.jpg

To teraz pokazuje się jako podpowiedź kontekstowa przy najechaniu wskaźnikiem na skrypt w zakładce Scripts:

Script Tooltip.jpg

Jeśli chcesz zmienić tę podpowiedź, wystarczy zmienić tekst pomiędzy nawiasami klamrowymi {}. Można również dodawać podpowiedzi, które pomogą Ci zarządzać własnościami Property - omówimy to w kolejnym podrozdziale.


Własności[edit | edit source]

Własność jest jak zmienna, można ją podłączyć do różnych rzeczy w edytorze. Zróbmy to teraz. Dodaj to w skrypcie powyżej linii "int count":

 Message property box1 auto
 {Wskazuje na okno wiadomosci ktore zostanie wyswietlone w grze po pierwszej aktywacji.}

 Message property box2 auto
 {Wskazuje na okno wiadomosci ktore zostanie wyswietlone w grze po drugiej aktywacji.}

 Message property box3 auto
 {Wskazuje na okno wiadomosci ktore zostanie wyswietlone w grze po trzeciej aktywacji.}
  • Message property box1 auto: Rodzaj własności, w tym przypadku jest to własność typu "Message" (wiadomość dla gracza). W ten sposób definiujemy nową własność, podobnie jak wcześniej definiowaliśmy zmienną count, które była typu int.
  • Message property box1 auto: Używając tego słowa stwierdzamy, że definiujemy własność Property, a nie zwykłą zmienną taką jak count typu int.
  • Message property box1 auto: To wymyślona przez nas nazwa własności.
  • Message property box1 auto: To specjalne słowo kluczowe, którego używa się praktycznie zawsze przy definiowaniu własności. Nie trzeba właściwie nic więcej na ten temat wiedzieć, wystarczy pamiętać, aby dodać to słowo na końcu linii z definicją.

Cała linia jest zapisana w nawiasach klamrowych. Te nawiasy oznaczają właśnie, że to co wewnątrz jest podpowiedzią dla osoby tworzącej skrypty i używającej ich w modach. Zobaczmy jak to działa:


Kliknij na File -> Save. Zamknij okno skryptu. Kliknij na przycisk Properties w oknie właściwości referencji dla filara. Powinieneś zobaczyć listę właściwości. Najedź kursorem na ich nazwy, bez klikania, a zobaczysz teksty podpowiedzi (na poniższych rysunkach są w języku angielskim).

Properties Tooltip.jpg


Tworzenie wiadomości dla gracza w Messagebox[edit | edit source]

Teraz stworzymy obiekty wiadomości Message (en), którą podepniemy do naszych własności. W oknie Object (en) rozwiń kategorię "Miscellaneous", kliknij na kategorię "Messages". Na liście kliknij prawym przyciskiem i wybierz "New" z menu kontekstowego. (Teksty na obrazkach są w jęz. angielskim, teksty wiadomości w edytorze Creation Kit możesz pisać w języku polskim, z polskimi znakami specjalnymi.)

New Message.jpg

W polach wpisz:

  • ID: myMessageBox1
  • Message Text: Witaj świecie! Gracz aktywował filar po raz pierwszy.
Hello World Message example.jpg

Dodaj jeszcze dwa obiekty wiadomości:

  • ID: myMessageBox2
  • Message Text: Gracz aktywował filar drugi raz.
  • ID: myMessageBox3
  • Message Text: Gracz aktywował filar trzy lub więcej razy.


Podpięcie okien wiadomości do własności w skrypcie[edit | edit source]

Wróć i otwórz okno właściwości Properties skryptu dołączonego do filaru. Kliknij na linię z "box1", a następnie naciśnij przycisk "Edit value". Otworzy się rozwijana lista, z której należy wybrać myMessageBox1. Podobnie wybierz myMessageBox2 i myMessageBox3 odpowiednio dla box2 i box3.

Edit Property Value example.jpg
Edit Property Value example2.jpg
Edit Property Value example3.jpg

Pamiętaj aby kliknąć na "OK" w celu zamknięcia okna (w przeciwnym razie stracisz wprowadzone zmiany), a następnie zapisać plugin.

To, co przed chwilą zrobiliśmy, to utworzyliśmy w edytorze połączenie między naszymi własnościami (box1, box2 i box3) a trzema obiektami wiadomości (myMessageBox1, myMessageBox2 i myMessageBox3). Po kliknięciu na OK wiadomości są podpięte we własnościach i możemy kontynuować tworzenie skryptu.


Wywoływanie funkcji na własnościach[edit | edit source]

Teraz sprawimy iż wiadomości z trzech obiektów Messagebox pokażą się w grze. Otwórz swój skrypt do edycji i ZASTĄP te linie:

    if count == 1
        Debug.MessageBox("Witaj świecie!")
     elseif count == 2
        Debug.MessageBox("Witaj świecie. Ponownie!")
    else
        Debug.MessageBox("Witaj świecie. Już dosyć!")
    endif

TYMI liniami:

if count == 1
   box1.Show()
elseif count == 2
   box2.Show()
else
   box3.Show()
endif

W ten sposób używamy funckji "Show ()" na każdym z obiektów wiadomości we własnościach box1, box2 i box3. Kropka (.) oznacza, że funkcja do prawej (Show ()) powinna zostać wywołana na obiekcie po lewej (który jest wiadomością siedzącą wewnątrz własności "box1").

Zapisz skrypt, naciśnij OK, aby zamknąć okno edycji. Następnie zapisz plugin i uruchom grę (COC MolagBalVoiceCell).

Powinieneś zobaczyć tekst każdej wiadomości pojawiający się po każdym kliknięciu na filar. Jeśli pojawi się ostrzeżenie "cannot call show() on a none object", wrócić i upewnij się, że twoje własności są podłączone prawidłowo do obiektów wiadomości Message, i że zapisujesz zmiany klikając na OK, oraz że zapisujesz plugin. Dobra, teraz stwórzmy funkcję!


Tworzenie funkcji[edit | edit source]

Podobnie jak używaliśmy funkcji "MessageBox ()" na Debug, oraz funkcji "Show ()" na wiadomości w naszych własnościach, możemy wywołać nową, stworzoną przez nas funkcję. Ale zanim będzie można to zrobić, musimy ją utworzyć. Dodaj to do końca skryptu:

 Message function PobierzWiadomosc(int aktualnyLicznik)   
   Message wybranaWiadomosc 

   if aktualnyLicznik == 1
       wybranaWiadomosc = box1 
   elseif aktualnyLicznik == 2
       wybranaWiadomosc = box2
   else
       wybranaWiadomosc = box3
   endif

   Return wybranaWiadomosc 

 endFunction

Omówmy pierwszą linię:

  • Message function PobierzWiadomosc(int aktualnyLicznik): W tym miejscu mówimy, że ta funkcja będzie zawsze zwracać obiekt typu wiadomość Message. Nie trzeba tego robić w przypadku definiowania każdej funkcji, ponieważ nie każda funkcja ma coś zwracać.
  • Message function PobierzWiadomosc(int aktualnyLicznik): Używając tego słowa mówimy, że to jest funkcja, a nie coś innego, podobnie jak wcześniej używaliśmy słowa property, aby wskazać że to własność Property.
  • Message function PobierzWiadomosc(int aktualnyLicznik): To jest wymyślona przez nas nazwa nowej funkcji. Będziemy jej potem używać w skrypcie, aby ją wywołać.
  • Message function PobierzWiadomosc(int aktualnyLicznik): Wszystko co jest zapisane pomiędzy okrągłymi nawiasami () to argumenty lub parametry, które trzeba przekazać w funkcji, aby móc jej użyć. W naszej funkcji mówimy, że wymagana ona parametru w postaci zmiennej typu INT (liczba całkowita). Nazwa tej zmiennej jest wymyślona przez nas. Będziemy używać tej nazwy, aby wykonywać operacje na zmiennej wewnątrz bloku definiującego naszą nową funkcję.

Kolejna linia:

  • Message wybranaWiadomosc: deklarujemy zmienną typu wiadomość Message. Tak jak deklarowaliśmy zmienną "licznik" typu "int", tak możemy deklarować każdą zmienną innego typu.
  • Message wybranaWiadomosc: To wybrana przez nas nazwa nowej zmiennej.

W dalszej części kodu sprawiamy, aby zmienna wybranaWiadomosc była jednym z naszych obiektów wiadomości z własności box1, box2 albo box3 properties. (Zwróć uwagę na różnice między operatorami "==" oraz "=")

Ostatnia z nowości:

 Return wybranaWiadomosc

To oznacza, iż gdy w innym miejscu w skrypcie wywołamy naszą funkcję PobierzWiadomosc(int), to funkcja ta zwróci nam obiekt, który wyliczy i zapisze we własności wybranaWiadomosc.


Czas zmienić skrypt, aby wykorzystał naszą nową funkcję. ZASTĄP te linie:

if licznik == 1
   box1.Show()
elseif licznik == 2
   box2.Show()
else
   box3.Show()
endif

TĄ JEDNĄ linią:

 PobierzWiadomosc(licznik).Show()

Co tu się dzieje? Najpierw wywołujemy naszą funkcję PobierzWiadomosc(int), a jako parametr przekazujemy się aktualną wartość zapisaną w zmiennej "licznik". Nasza funkcja zwróci nam obiekt typu wiadomość Message, dlatego możemy od razu ją wyświetlić graczowi, używając operatora kropki oraz oryginalnej funkcji Show(). Zależenie jaka będzie w danej chwili wartość zmiennej "licznik", zostanie użyta wiadomość z własności box1, box2 albo box3.

Tak więc cały skrypt powinien wyglądać teraz tak:

 Scriptname HelloWorldScript extends ObjectReference  
 {To moj pierwszy prawdziwy skrypt!}

 Message property box1 auto
 {Wskazuje na okno wiadomosci ktore zostanie wyswietlone w grze po pierwszej aktywacji.}

 Message property box2 auto
 {Wskazuje na okno wiadomosci ktore zostanie wyswietlone w grze po drugiej aktywacji.}

 Message property box3 auto
 {Wskazuje na okno wiadomosci ktore zostanie wyswietlone w grze po trzecej aktywacji.}

 int licznik  ;przechowuje liczbe ile razy gracz aktywowal ten obiekt

 Event OnActivate(ObjectReference akActionRef)
    licznik = licznik + 1

    PobierzWiadomosc(licznik).Show()
 endEvent

 Message function PobierzWiadomosc(int aktualnyLicznik)
   Message wybranaWiadomosc

   if aktualnyLicznik == 1
       wybranaWiadomosc = box1 
   elseif aktualnyLicznik == 2
       wybranaWiadomosc = box2
   else
       wybranaWiadomosc = box3
   endif

   Return wybranaWiadomosc 

 endFunction

Uruchom grę i sprawdź czy okna z wiadomościami są wyświetlane poprawnie. (COC MolagBalVoiceCell)


Co dalej[edit | edit source]

Doszliśmy do końca poradników o podstawach. W kolejnym zobaczysz jak sprawić, aby jeden z bossów wskrzeszał swoich ziomków.


LeftArrow.png Poprzedni poradnik Powrót do spisu poradników Następny poradnik RightArrow.png


Language: English  • français • 日本語 • 한국어 • polski