Stat4u.pl dla Emergency Stat4u.pl

www.gry-online.pl - wortal rozrywkowy Techland
Licznik Emergency
klimatyzacja
rekuperacja
Brak serwerów w ciągu najbliższych 2 tygodni. Kliknij, by dodać swój serwer!
Poradnik - skrypty misji

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
 


Poradnik napisany przez: bercik