Skip to content

winconditions.hpp

McDiod edited this page May 11, 2017 · 13 revisions

In USERSCRIPTS\winconditions.hpp werden die Siegbedingungen für die Mission festgelegt.

Eintrag Erklärung
condition Code (String) - Die Bedingung, die erfüllt sein muss, damit diese Siegbedingung ausgelöst wird.
checkInterval Number - Zeit in Sekunden, die angibt wie häufig diese Siegbedingung evaluiert wird.
winners Array - Alle Parteien, die als Sieger gelten, wenn diese Siegbedingung ausgelöst wird. (WEST, EAST, INDEPENDENT, CIVILIAN)
winText String - Text, der am Ende der Mission bei allen Spielern angezeigt wird.
winTextParams Array - Code oder Variablen, die dem winText übergeben werden. Variablen müssen lokal zu allen Clients sein.

Versuchen wir diese Datei anhand der beiden vorhandenen Siegbedingungen zu verstehen:

class bluforeliminated {
    condition = "({side _x == WEST} count playableUnits) == 0";
    checkInterval = 5;
    winners[] = {"EAST","INDEPENDENT"};
    winText = "OPFOR eliminated after %1 minutes.<br/>BLUFOR wins!";
    winTextParams[] = {"round (CBA_missionTime/60)"};
};

class opforeliminated {
    condition = "({side _x == EAST} count playableUnits) == 0";
    checkInterval = 5;
    winners[] = {"WEST","INDEPENDENT"};
    winText = "BLUFOR eliminated after %1 minutes.<br/>OPFOR wins!";
    winTextParams[] = {"round (CBA_missionTime/60)"};
};

Die Siegbedingung bluforeliminated überprüft also alle 5 Sekunden, ob die Anzahl der lebenden, spielbaren Blufor Einheiten gleich 0 ist. Sobald diese Bedingung erfüllt ist wird bei allen Spielern der Siegtext angezeigt. An Stelle des "%1" wird dabei der erste winText-Parameter geschrieben, nämlich die vergangene Missionszeit in Sekunden geteilt durch 60 und das ganze gerundet. Die Mission wird beendet. Bei allen Blufor Spielern wird "Mission Failed", bei allen Opfor und Independent Spielern wird "Mission Completed" angezeigt.

Die vorhandenen Siegbedingungen können wir ohne Probleme löschen. Nach dem gleichen Muster können wir weitere Siegbedingungen definieren.

Beispiel:
Alle 60 Sekunden wollen wir überprüfen, ob Opfor zu viele Zivilisten getötet hat. Die Anzahl der getöteten Zivilisten speichern wir über ein eigenes Skript in der Variablen meineMission_civsKilledOpf. Im abschließenden Text wird angezeigt wie lange die Mission in Minuten lief und wie viele Zivilisten Opfor getötet hat. Blufor gewinnt.

class civsKilledOpf {
    condition = "meineMission_civsKilledOpf >= 5";
    checkInterval = 60;
    winners[] = {"WEST"};
    winText = "OPFOR hat innerhalb von %1 Minuten %2 Zivilisten getötet.<br/>BLUFOR gewinnt.";
    winTextParams[] = {"round (CBA_missionTime/60)","meineMission_civsKilledOpf"};
};

Weiter geht's mit der scopes.hpp.

Clone this wiki locally