SAIL - Zakończenie misji po dojściu do arei

Gotowe kody SAIL'a, informacje na temat moddingu, itd.

Модератор: zoNE

User avatar
zoNE
The Great Uniter & Site Administrator
The Great Uniter & Site Administrator
Сообщения: 2061
Зарегистрирован: Fri Feb 17, 2006 3:44 pm
Location: Poland
Контактная информация:

SAIL - Zakończenie misji po dojściu do arei

Post zoNE »

NNPlaya wrote:http://forum.original-war.net/viewtopic.php?t=551

Konkretnie chodzi o ostatni fragment kodu:

Code: Select all

every 0$1 trigger IsInArea(heros,Area02) do
Begin
Case Query("Zapytanie1") of
1 : begin
ComEnterUnit(kolo1,eon);
Wait(0$3);
ComEnterUnit(kolo2,eon);
Wait(0$3);
ComEnterUnit(kolo3,eon);
Wait(0$3);
ComEnterUnit(heros,eon);
AddMedal('med1',1);
AddMedal('med2',1);
AddMedal('med3,-1); //Tutaj też -, czyli nie dostajesz medalu.
GiveMedals('Main');
RewardPeople(heros);
SaveCharacters(heros,'heros');
YouWin;
end;
2: begin
YouLost('tchorz');
end;
end;
end;
Przeróbmy go na Twoje potrzeby. Najpierw podsumujmy - potrzebna nam reakcja w postaci zakończenia misji (zakładam, że obejmuje to rówież medale i zapisywanie postaci). Ta reakcja ma mieć miejsce gdy spełniamy warunek - ktoś jest w określonej arei. Teraz przetłumaczmy to na język zrozumiały dla kompilatora SAIL.

Code: Select all

every 0$1 trigger IsInArea(Twoj_identyfikator_postaci,Twoja_area) do //1
Begin
AddMedal('med1',1); //2
AddMedal('med2',1);
AddMedal('med3,-1); 

GiveMedals('Main'); //3

RewardPeople(Twoj_identyfikator_postaci); //4
SaveCharacters(Twoj_identyfikator_postaci,'Twoj_identyfikator_postaci_do_zapisu_w_pamięci_gry'); //5
YouWin; //6
end;
Objaśnienie sekcji po kolei:
  1. Deklaracja powtarzania co 1 sekundę (0$1 - 1 sekunda) operacji sprawdzania, czy warunek IsInArea(Twoj_identyfikator_postaci,Twoja_area) jest prawdziwy. Warunek to taka funkcja, która przyjmuje pewną liczbę argumentów(wpisuje się je w nawiasy i oddziela przecinkami) i na podstawie ich stanu zwraca wartości typu boolean - true(czyli prawdziwy warunek) bądź false w przypadku gdy warunek nie jest spełniony. Instrukcja every pozwala na reakcję tylko w przypadku spełnienia bądź nie spełnienia warunku, żeby wprowadzić jakąś reakcję gdy nie ma określonego gościa w arei należy utworzyć drugie every.
  2. W drugiej sekcji w pamięci dodawane są medale. O medalach jest nawet w poradniku dołączonym do patcha, więc sobie daruję opisywanie.
  3. Trzecia sekcja zawiera komendę wyświetlającą tablicę z medalami (oczywiście wcześniej muszą zostać dodane komendami AddMedal;). Ponownie odsyłam do poradnika załączonego do patcha.
  4. W sekcji nr 4 masz komendę RewardPeople, która jako argument przyjmuje identyfikator jednego gostka bądź grupy ludzi. Wyświetla tablicę rozdzielania doświadczenia.
  5. Piąta sekcja to nic innego jak zapisanie postaci do pamięci pod dowolnym identyfikatorem podawanym w drugim argumencie jako ciąg literowy w apostrofach.
  6. Szósta i ostatnia sekcja to instrukcja YouWin nie wymagająca argumentów; kończy ona misję wygraną.
Na koniec jeszcze na pewno zauważyłeś bloki Begin end;. Oznaczają one, że zawarte w nich kod należy do wyrażenia warunkowego, w tym przypadku every. To się tyczy większości, o ile nie wszystkich języków programowania. Akurat bloki Begin end; zaczerpnięto z Pascala, w innych językach np PHP czy C++ są one zastąpione znakami nawiasów klamrowych. To wszystko :wink:
Author: NNPlaya
Topic: http://forum.original-war.net/viewtopic.php?t=1069