Kwasowa Grota Heroes VIIMight & Magic XHeroes III - Board GameHorn of the AbyssHistoria Światów MMSkarbiecCzat
Po cmentarzu włóczy się:
   Kuririn
Witaj nieznajomy.
rejestracjalogowanieRSSFB

Skrypty ERM






Jak zacząć?



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.



Skrypty pod ERA 2



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



Kolejność ładowania skryptów



W standardowym 3.58F i Erze w wersji < 2.0 kolejność ładowania skryptów jest następująca:

  • oryginalne Skrypty Woga
  • zewnętrzne skrypty(w pliku o nazwie takiej jak mapa)
  • skrypty umieszczone w zdarzeniach czasowych mapy WoGa

  • Od wersji 2.0 wraz ze wprowadzeniem koncepcji modów kolejność uległa zmianie

  • Pierwsze ładowane są skrypty zgodnie z kolejnością ładowania modów (zdefiniowane w katalogu mod, w pliku list.txt )
  • gdy w katalogu Data/s istnieje plik "load only these scripts.txt" ładowane są tylko te pliki skryptów
  • skrypty umieszczone w zdarzeniach czasowych mapy WoGa

  • Ł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




    If Else Endif



    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^;

    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).

    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)



    Za mało zmiennych?



    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

    !!SN:M2013/5/0/1; **stworzenie slotu 2013 z pięcioma elementami
    **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

    !!SN:M2013/5/0/1; **stworzenie slotu 2013 z pięcioma elementami
    **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




    Tablice asocjacyjne



    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ć.


    © 2003-24 Kwasowa Grota. Wszelkie prawa zastrzeżone. Jakiekolwiek kopiowanie, publikowanie lub modyfikowanie tekstów grafiki i innych materiałów chronionych prawem autorskim znajdujących się na stronie bez wyraźnej zgody autorów jest zabronione.
    Komnaty "In The Wake of Gods". Redakcja, kontakt