Hilfe bei PublicVariableEventHandler

  • Moinsen.


    Ich kapiere das mit den PulicVariableEventhandler irgnedwie nicht.


    Ich erstelle in der ServerInit die Variable var_killedCiv_total und setze diese auf 0. Die Variable wird public gemacht missionnameSpace setVariable ["var_killedCiv_total",0,true];
    Ich lasse serverseitig auf der Karte Zivilisten spawen. Jeder bekommt einen KILLED-EH angehangen, welcher die Variable um 1 erhöht.


    Ich will die Mission als verloren beenden lassen, wenn mehr als 20 Zivlisten durch die Spieler getötet wurden. Dazu frage ich ab, ob der Schütze eine blaue Einheit ist. (in meinem Fall kämpft man für die NATO)
    Bis jetzt mache ich das über ein waituntil, was funktioniert, aber absolut nicht perfomant ist.


    Ich wollte jetzt einen PVEH einsetzen. Ich bekomme das aber irgendwie nicht hin. Muss der in die Init oder reicht der Server aus? Muss meine Variable vorne angestellt werden oder muss die im Code des PVEH "aktualisiert" werden.
    Wenn mir hier einer einen Code zur Verfügung stellen könnte, wäre ich dankbar.
    Dann kann ich mir daran zusammen bauen, wie das funktioniert.

  • Theortisch sollte der PVEH wohl nur auf dem Server laufen. Der PVEH wird dort ausgeführt, wo er vorhanden ist, außer auf der Maschine, wo die Variable public gesetzt wurde.
    Ich vermute mal, sowas sollte ausreichen:


    C
    1. "var_killedCiv" addPublicVariableEventHandler {
    2. params ["_name","_value"];
    3. if ( _value > 20 ) then {
    4. ["failed",false,5,false] remoteExec ["BIS_fnc_endMission",0];
    5. };
    6. };


    Alternativ - und das würde ich machen, da PVEH nur im MP-Environment funktionieren können - könntest du das auch über ein CBA_fnc_waitUntilAndExecute ausführen.

  • Grundsätzlich sollte es in etwa wie folgt funktionieren

    C
    1. // initServer.sqf
    2. "var_killedCiv_total" addPublicVariableEventHandler {
    3. _this params ["_variableName","_value"];
    4. If (_value >= 20) exitWith {
    5. _variableName addPublicVariableEventHandler {};
    6. "EveryoneLost" call BIS_fnc_endMissionServer;
    7. };
    8. };


    Aber wenn du sowieso alles auf dem Server machst, warum dann Publicvariable?



    // EDIT: Da war wohl jemand schneller :-)

  • Ich glaube, ich erkenne das Problem:
    Das PublicVariable-Event triggert nicht lokal!



    Da du sowieso mit Killed-Event arbeitest, wäre mein persönlicher Favorit etwas wie:

  • Manchmal sieht man den Wald vor lauter Bäumen nicht.
    Im Killed-EH die Variable setzen und auch gleich da heraus die Mission beenden lassen.


    so mach ich es jetzt, nur vom Server aus.