Skrypty są pisane w API gry (stanowiącym spory zbiór funkcji,
w większości specyficznych dla gry) opartym C++. Niestety nie
spotkałem jeszcze pełnej dokumentacji tego API, jedyne na co
trafiłem to:
http://www.emergency-wiki.de/index.php/Kategorie:Scripts. Poniżej
przedstawiam podstawowy skrypt misji wraz z komentarzami co robi
dana funkcja:
object Mission00 : MissionScript {
Mission00() {
// konstruktor - funkcja uruchamiana przy ładowaniu skryptu
}
void Start() {
// funkcja uruchamiana przy starcie misji
System::Log("MISJA 00
URUCHOMIONA");
Mission::AddObjective("POZARY");
Mission::AddObjective("RANNI");
}
MissionState GetMissionState() { // funkcja wywoływana
celem określenia stanu misji
// zakonczenie misji - porazka
if( Mission::IsDefaultLogicNegative() ||
Mission::GetCounter("Person deaths")
> 0 )
return MISSION_FAILED;
/// IsDefaultLogicNegative() -
sprawdza czy nie zaszły zdarzenia określające warunki porażki
/// ustawione w edytorze
/// GetCounter() - pobiera licznik misji (w tym
wypadku całkowitą ilość osób zabitych)
// warunki konieczne dla sukcesu, niepowodujace porazki
if( Mission::GetCounter("Burning
Houses") ++ Mission::GetCounter("Burning
Objects") == 0 )
Mission::SetObjectiveAccomplished("POZARY",
true);
else
Mission::SetObjectiveAccomplished("POZARY",
false);
/// GetCounter() - jak wyżej (w tym wypadku
aktualną liczbę płonących domów i obiektów)
if( Mission::GetCounter("Injured
Persons") + Mission::GetCounter("Dead
Persons") == 0 )
Mission::SetObjectiveAccomplished("RANNI",
true);
else
Mission::SetObjectiveAccomplished("RANNI",
false);
/// GetCounter() - jak wyżej (w
tym wypadku aktualną liczbę rannych i zabitych)
// zakonczenie misji - sukces
if( Mission::IsDefaultLogicPositive() &&
Mission::AllObjectivesAccomplished() )
return MISSION_SUCCEEDED;
/// IsDefaultLogicPositive() -
sprawdza czy spełnione zostały wszystkie warunki zwycięstwa
/// określone w edytorze
/// AllObjectivesAccomplished() - sprawdza czy
zaliczone zostały wszystkie punkty określone
/// w skrypcie dodaje je się przez AddObjective()
return MISSION_RUNNING;
}
const char *GetFailReason() { // funkcja zwracająca powód
porażki
if( Mission::GetCounter("Burning
Objects") + Mission::GetCounter("Burning
Houses") > 0 )
return "WYBUCHL_POZAR";
if( Mission::GetCounter("Person of
injuries") + Mission::GetCounter("Person
deaths") > 2 )
return "RANNY_CYWIL";
return "UNKNOWN";
}
};
Oczywiście skrypt taki można rozbudowywać,
tutaj zamieszczam przykład bardziej rozbudowanego skryptu -
oprócz powyższego wyszukuje on na mapie obiekty o odpowiedniej
nazwie (wraki samochodów) i wymaga wywiezienia ich poza teren
misji. Więcej o programowaniu w C/C++ w
dziale programowanie.
Legenda:
Pogrubione wyrazy - treść skryptu
Podkreślone wyrazy - Objaśnienie wartości/warunków danej
funkcji
Czerwony tekst - wartości które
trzeba określić w funkcji
Pochylone wyrazy - Komentarz