Skrypty ERM
Aby napisać nasz pierwszy skrypt ERM nie potrzebujemy żadnego specjalnego edytora. Wystarczy "zwykły" edytor map WoG. Zaczynamy od otwarcia okna edycji wydarzenia czasowego. Usuwamy zaznaczenia przy wszystkich graczach. Niewykonanie ostatniej czynności nie spowoduje co prawda błędów w działaniu skryptu., ale nie chcemy przecież nikomu wyświetlać naszego kodu podczas rozgrywki.
Większość marzeń moderów/skrypterów ma szanse spełnić się właśnie dzięki ERA.
Nowe wersje dodają mnóstwo udogodnień dzięki czemu wiele rzeczy da się wykonać bez użycia brzydków UNCowych "haków".
Pierwsze pytanie jakie to jaka jest różnica pomiędzy pisaniem skryptów po 3.58F i ERĄ?
ERA w przeciwieństwie do edycji WoGowych jest środowiskiem rozwojowym i nowe uaktualnienie pojawiają się najczęściej co kilka miesięcy.
Wymusza to na programiście większą dyscyplinę podczas tworzenia kodu. O ile oczywiście zamierzamy używać nowych "ficzerów". Dlatego pierwsza rzecz o którą powinniśmy zadbać to sprawdzanie wersji.
Można do tego użyć starej dobrzej składni
UN:V?$1/?$2
$1 - wersja WoGa (400 dla ERY)
$2 - wersja ERM (2400 dla 2.4).
Uwaga! Niestety z nieznanych mi powodów (zapewne przez niedopatrzenie developerów ERY) sprawdzanie wersji będzie działać tylko od wersji 2.4 w starszych wersjach nie będziemy wstanie rozróżnić środowiska od 3.58F
W standardowym 3.58F i Erze w wersji < 2.0 kolejność ładowania skryptów jest następująca:
Od wersji 2.0 wraz ze wprowadzeniem koncepcji modów kolejność uległa zmianie
Łatwo zauważyć, że zniknęła możliwość dołączania do mapy zewnętrznych skryptów. W chwili obecnej (wersja ERY 2.2) własne zewnętrzne skrypty (nie będące rozszerzenie Wogifikacji) można załadować tylko definiując plik load only these scripts.txt
Składnia znana z języków programowania wyższego poziomu. Dostępna od czasu WoGa TE
Zamiast skryptu:
!!IF&v1=1:M^Jeden^;
!!IF&v1=1:M^Nadal jeden^;
!!IF&v1=2:M^Teraz dwa^;
!!IF&v1=2:M^Nadal dwa^;
!!IF&v1=3:M^Trzy^;
!!IF&v1=1:M^Nadal jeden^;
!!IF&v1=2:M^Teraz dwa^;
!!IF&v1=2:M^Nadal dwa^;
!!IF&v1=3:M^Trzy^;
można:
!!if&v1=1;
!!IF:M^Jeden^;
!!IF:M^Nadal jeden^;
!!el;
!!if&v1=2;
!!IF:M^Teraz dwa^;
!!IF:M^Nadal dwa^;
!!el;
!!IF:M^Trzy^;
!!en;
!!en;
Czy to bardziej czytelne? Oceńcie sami. Moim zdaniem lepiej podzielić całość na funkcje i je wywoływać oddzielnie (z pomocą !!FU:E; i FU:P) można też spróbować pokusić się o wcięcia w zagnieżdżonych if'ach (o ile interpreter na to pozwoli).!!IF:M^Jeden^;
!!IF:M^Nadal jeden^;
!!el;
!!if&v1=2;
!!IF:M^Teraz dwa^;
!!IF:M^Nadal dwa^;
!!el;
!!IF:M^Trzy^;
!!en;
!!en;
Uwaga! IF to nie to samo co "if". Jeśli chcemy korzystać z instrukcji "jeżeli" to "if" koniecznie musi być pisany małymi literami.
Uwaga 2! zagnieżdżenie if'ów nie mogą wynieść więcej niż 10 poziomów (w obrębie jednej funkcji /wyzwalacza)
Każdy kto próbował napisać skrypt zgodny z Wogifikacją (lub z innymi skryptami) napotykał do tej pory na podobne problemy: ograniczona ilość zmiennych, duplikujące się zmienne itd.
W dodatku do tej pory brakowało struktur dynamicznych takich jak listy czy tablice dynamiczne. Samo zwiększenie ilości dostępnych zmiennych nie jest dobrym pomysłem dlatego twórcy ERY nie poszli w tą stronę. Zamiast tego mamy dostępnych kilka miliardów (bilionów?) "slotów" które mogą mieć z góry określony rozmiar, typ(INT - V, lub STRING Z) możemy też wybrać czy mają być zapisane grze (zbyt duża ilość zmiennych może negatywnie wpłynąć na szybkość zapisu i zwiększyć rozmiar saveów)
Tworzenie slotu:
!!SN:M[number slotu]/[ilość elementów]/[typ(0 liczba, 1 tekst)]/[zapisanie w save(0 nie zapisuj, 1 zapisuj)];
!!SN:M2013/5/0/0; **stworzenie slotu 2013 z pięcioma elementami
**zawierającego liczby NIEZAPISYWANY w stanie gry
**zawierającego liczby NIEZAPISYWANY w stanie gry
!!SN:M2013/5/0/1; **stworzenie slotu 2013 z pięcioma elementami
**zawierającego liczby ZAPISYWANY w stanie gry
**zawierającego liczby ZAPISYWANY w stanie gry
!!SN:M2013/5/0/0; **stworzenie slotu 2013 z pięcioma elementami
**zawierającego tekst NIEZAPISYWANY w stanie gry
**zawierającego tekst NIEZAPISYWANY w stanie gry
!!SN:M2013/5/0/1; **stworzenie slotu 2013 z pięcioma elementami
**zawierającego tekst ZAPISYWANY w stanie gry
**zawierającego tekst ZAPISYWANY w stanie gry
Jeśli chcemy dynamicznie wykorzystywać sloty wtedy zamiast ich numeru wystarczy wpisać -1. Slot zostanie przydzielony najbliższy wolny numer (który zostaje zapisany w zmienne v1)
zapis do slotu:
!!SN:M2013/4/777;**zapisane liczby 777 w slocie 2013 na miejscu 4
odczyt ze slotu:
!!SN:M2013/4/?y1;**odczyt slotu 2013 elementu 4
usunięcie slotu:
!!SN:M2013; **usunięcie slotu 2013
Chcemy przypisać specjalne właściwości do naszych obiektów na mapie, powiększyć sakwy bohaterów, dodać nowe zdolności/zaklęcia stworzenia. Pomijamy sam fakt jak to zrobić to tego potrzebujemy zmiennych, duuużo zmiennych dla danych. Wszystkie będą mieć tą samą cechę można je pogrupować w tablice. Dla obiektów na mapie XL (podziemiami) potrzebować będziemy 144x144x2 zmiennych czyli ok 42500 zmiennych, dla bohaterów 156x64 ok. 10000 zmiennych. Najlepiej skorzystać z gotowych tablic !!PO dla obiektów mapy zmiennych "w" dla bohaterów. A co jeśli to za mało ub nie chcemy wykorzystywać całej puli dla jednego skryptu?
Otóż ERA daje nam do dyspozycji tablice asocjacyjne!
Korzystanie z pamięci asocjacyjnej jest bardzo proste. Przez analogie do komendy !!PO
!!SN:W^Mapa%Y1/%Y2/%Y3^/wartość;
czyli jako pierwszy parametr podajemy (tekst) - klucz jak drugi wartość:
!!SN:W^Mapa1/2/3^/15;
Jeśli nie podamy/pobierzemy ostatniego parametru skasuje wartość dla tego klucza
Całą asocjacyjną pamięć kasujemy komendą:
!!SN:W;
Uwaga w obecnej wersji (2.4) komendy SN:W mogą sprawiać problemy podczas gry przez sieć.