Tutorial napisany przez Manitasa:
Skrypt jest to ciąg operacji rozdzielonych przecinkami, wykonywanych po kolei.
Każda operacja wygląda następująco:
(nazwa_operacji, argument1, arg2, arg3)
Przy czym każda operacja ma właściwa dla niej liczbę argumentów, od 0 do 3.
Wszystkie dostępne operacje można obejrzeć w pliku header_operations.py
Na szczęście w większości wypadków z nazwy operacji można wywnioskować co dana operacja robi.
Przykład:
(troop_add_gold, "trp_player", 100)
i stówka ląduje w kieszeni naszego bohatera.
Jako argumenty operacji można podawać liczby całkowite lub zmienne.
Głupio mi pisac o zmiennych, ale napisze na wszelki wypadek gdyby ktoś nie wiedział.
Otóż zmienna jest jakby pojemnikiem, który jest opatrzony nazwą, który może przechowywać jakąś wartość liczbową.
Są 2 główne rodzaje zmiennych:
- zwykłe, np "$nazwa_zmiennej" (cudzysłowy i znak $ są obowiązkowe)
- rejestry, np reg(numer), gdzie numer może przybierać wartości od 0 do 40.
Różnią się one tym, ze jeżeli ustawimy wartość zmiennej zwykłej w jednym skrypcie, możemy mieć pewność, ze jej wartość będzie taka sama w innym, co do rejestrów takiej pewności mieć nie można.
Przy okazji zmiennych trzeba wymienić operację assign, która przypisuje wartość zmiennej.
Przykład:
(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 już poznaliśmy - troop_add_gold jest to tzw. konsekwencja, czyli operacja która zmienia stan rzeczy w grze (w tym wypadku stan posiadania bohatera).
2. Zapytania - operacje które nie zmieniają stanu rzeczy w grze ale pozwalają uzyskać pewne informacje np:
Załóż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 się wartość 101. Jakakolwiek wartość, która mogla tam być przed wykonaniem operacji zostanie stracona.
3. Warunki np:
eq - equal - równy
gt - greater than - większy
lt - less than - mniejszy
ge - greater or equal - większy lub równy
le - zgadnijcie
(main_hero_fallen) - sprawdza czy hero poległ w boju
Warunki działają w ten sposób, że jeżeli któryś z nich jest fałszywy, działanie skryptu zostaje przerwane.
Przykład:
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 szczęście w tym przypadku się nie wykona, gdyż warunek (100 > 100) jest rzecz jasna fałszywy i skrypt zakończy działanie zaraz po operacji 'gt'.
4. Operacje grupujące
Są to operacje blokowe. Blok zaczyna się od jednej z operacji (try_...) a kończy operacją (end_try)
Najprostszą operacją tego typu jest (try_begin). Służy ona do wydzielenia ciągu operacji w skrypcie, głównie do stosowania z operacjami warunkowymi.
Przykład:
(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, jeżeli warunek gt będzie fałszywy, nie spowoduje to zakończenia działania całego skryptu, ale tylko jego części, znajdującej się w bloku try. Czyli w tym przykładzie operacja troop_deduce_gold się nie wykona, ale jakas_inna_operacja zostanie wykonana bez przeszkod. Dla wtajemniczonych, działanie tej konstrukcji jest podobne do bloku 'if' z normalnych języków.
(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),
Przykład podobny, z tym, że dodatkowo zawiera operacje (else_try). W tym przypadku jakas_inna_operacja wykona się tylko wtedy, jeżeli warunek gt jest fałszywy. W przeciwnym wypadku wykona się tylko deduce_gold.
Pozostałe operacje grupujące to:
(try_for_range, "$zmienna", start, end) - operacje zamknięte w takim bloku wykonają się start - end + 1 razy, za każdym razem zmieniając zawartość zmiennej "$zmienna" od wartości start do end co 1.
(try_for_agents, "$numer_agenta") - agent jest to każda istota ożywiona, która może pojawić się w bitwie, czyli agentem jest player, agentami są jego żołnierze, wrogowie i konie.
Operacje zamknięte w takim bloku wykonają się tyle razy, ile agentów jest obecnych na placu boju, za każdym razem podstawiając pod zmienną "$numer_agenta" numer kolejnego agenta na polu bitwy