Manitas
Administrator
Dołączył: 12 Lip 2006
Posty: 348
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Sob 21:10, 18 Lis 2006 Temat postu: Skrypty - Wprowadzenie. |
|
|
Skrypt jest to ciąg operacji rozdzielonych przecinkami, wykonywanych po kolei.
Kazda operacja wyglada nastepujaco:
(nazwa_operacji, argument1, arg2, arg3)
Przy czym kazda operacja ma wlasciwa dla niej liczbe adgumentow, od 0 do 3.
Wszystkie dostepne operacje mozna obejrzec w pliku header_operations.py
Na szczescie w wiekszosci wypadkow z nazwy operacji mozna wywnioskowac co dana operacja robi.
przykład:
(troop_add_gold, "trp_player", 100)
i stówka ląduje w kieszeni naszego bohatera.
Jako argumenty operacji mozna podawac liczby calkowite, lub zmienne.
Glupio mi pisac o zmiennych, ale napisze na wszelki wypadek gdyby ktos nie wiedzial.
Otoz zmienna jest jakby pojemnikiem ktory jest opatrzony nazwą, ktory moze przechowywac jakąs wartosc liczbową.
Są 2 głowne rodzaje zmiennych:
- zwykłe, np "$nazwa_zmiennej" (cudzyslowy i znak $ sa obowiazkowe)
- rejestry, np reg(numer), gdzie numer moze przybierac wartosci od 0 do 40.
Roznia sie one tym, ze jezeli ustawimy wartosc zmiennej zwyklej w jednym skrypcie, mozemy miec pewnosc ze jej wartosc bedzie taka sama w innym, co do rejestrow takiej pewnosci miec nie mozna.
Przy okazji zmiennych trzeba wymienic operacje assign, ktora przypisuje wartosc zmiennej.
Przyklad:
(assign, "$ile_kasy", 100),
(val_add, "$ile_kasy, 1),
(troop_add_gold, "trp_player", "$ile_kasy"),
Tym razem w kieszeni naszego hero wyląduje 101 dukatów.
Rodzaje operacji.
1. Jeden rodzaj juz poznalismy - troop_add_gold jest to tzw. konsekwencja, czyli operacja ktora zmienia stan rzeczy w grze (w tym wypadku stan posiadania bohatera).
2. Zapytania - operacje ktore nie zmieniaja stanu rzeczy w grze ale pozwalaja uzyskac pewne informacje np:
Założmy że nasz hero ma przy sobie 101 dukatów.
operacja (store_troop_gold, "$ile_on_ma", "trp_player") spowoduje ze od tej chwili w zmiennej "$ile_on_ma" pojawi sie wartosc 101. Jakakolwiek wartosc ktora mogla tam byc przed wykonaniem operacji zostanie stracona.
3. Warunki np:
eq - equal - równy
gt - greater than - wiekszy
lt - less than - mniejszy
ge - greater or equal - wiekszy lub rowny
le - zgadnijcie ;)
(main_hero_fallen) - sprawdza czy hero poległ w boju
Warunki dzialaja w ten sposob, ze jezeli ktorys z nich jest falszywy dzialanie skryptu zostaje przerwane.
przyklad:
Zalozmy ze nasz hero ma 100 gold
(store_troop_gold, "$ile_on_ma", "trp_player"),
(gt, "$ile_on_ma", 100),
(troop_deduce_gold, "trp_player", 100),
Ostatnia operacja zabiera graczowi 100 gold.
Na szczescie w tym przypadku sie nie wykona, gdyz warunek (100 > 100) jest rzecz jasna falszywy i skrypt zakonczy dzialanie zaraz po operacji 'gt'.
4. Operacje grupujace
Sa to operacje blokowe. Blok zaczynaja sie od jednej z operacji (try_...) a konczy operacją (end_try)
Najprostszą operacja tego typu jest (try_begin). Sluzy ona do wydzielenia ciagu operacji w skrypcie, glownie do stosowania z operacjami warunkowymi.
przyklad:
Kod: |
(try_begin),
(store_troop_gold, "$ile_on_ma", "trp_player"),
(gt, "$ile_on_ma", 100),
(troop_deduce_gold, "trp_player", 100),
(end_try),
(jakas_inna_operacja), |
W tym przypadku, jezeli warunek gt bedzie falszywy, nie spowoduje to zakonczenia dzialania calego skryptu, ale tylko jego czesci znajdujacej sie w bloku (try. Czyli w tym przykladzie operacja troop_deduce_gold sie nie wykona, ale jakas_inna_operacja zostanie wykonana bez przeszkod. Dla wtajemniczonych, dzialanie tej konstrukcji jest podobne do bloku 'if' z normalnych językow.
Kod: |
(try_begin),
(store_troop_gold, "$ile_on_ma", "trp_player"),
(gt, "$ile_on_ma", 100),
(troop_deduce_gold, "trp_player", 100),
(else_try),
(jakas_inna_operacja),
(end_try), |
przyklad podobny, z tym ze dodatkowo zawiera operacje (else_try). W tym przypadku jakas_inna_operacja wykona sie tylko wtedy jezeli warunek gt jest falszywy. W przeciwnym wypadku wykona sie tylko deduce_gold.
Pozostale operacje grupujace to:
(try_for_range, "$zmienna", start, end) operacje zamkniete w takim bloku wykonaja sie start - end + 1 razy, za kazdym razem zmieniajac zawartosc zmiennej "$zmienna" od wartosci start do end co 1.
(try_for_agents, "$numer_agenta") - agent jest to kazda istota ozywiona ktora moze pojawic sie w bitwie, czyli agentem jest player, agentami sa jego zolnierze, wrogowie i konie.
Operacje zamkniete w takim bloku wykonaja sie tyle razy ile agentow jest obecnych na placu boju, za kazdym razem podstawiajac pod zmienna "$numer_agenta" numer kolejnego agenta na polu bitwy.
CDN...
Post został pochwalony 0 razy
|
|