Hmm, ich kann irgendwie nicht dem Server joinen. Die Konsole sagt nur dass er die Mission am laden ist, keine Fehlermeldung o.ä.
Alle Spieler einer Seite Tod?
-
-
Eventuell noch Mods aktiviert, die der Server nicht akzeptiert?
-
-
Von einem einfachen Auslöser auf der Map für Spieler die sich mit scripten nicht so auskennen hält hier niemand was?
Die Fragestellung im 1. Post lässt sich doch komplett ohne Scrips nur mit den Werkzeugen die der Editor bietet lösen.Grüße
-
Sorry für die lange Zeit ohne Antwort, war leider mit anderen Dingen beschäftigt.
Habe heute die Mission mal auf dem Server getestet und siehe da, es klappt nicht :D.
Ich hatte den code nur ein wenig modifziert (line 17), um auch im SP ein wenig zu testen.Code- [] spawn {
- while {true} do {
- private ["_blu", "_indi"];
- _blu = 0;
- _indi = 0;
- {
- if (side _x == blufor) then {
- if (alive _x) then {
- _blu = _blu + 1;
- };
- };
- if (side _x == resistance) then {
- if (alive _x) then {
- _indi = _indi + 1;
- };
- };
- } count allPlayers + switchableUnits + playableUnits;
- if (_blu == 0) then {
- "end1" call bis_fnc_endMission;
- };
- if (_indi == 0) then {
- "end2" call bis_fnc_endMission;
- };
- sleep 10;
- };
- };
Dort (im SP) hatte ich auch das Phänomen, dass wenn alle Einheiten einer Seite verstorben sind, zwar der Text erscheint (also halt bis_fnc_endmission ausgeführt wird), jedoch die Mission nicht beendet wird und statt dessen der Text - immer wenn er verschwinden sollte - erneut erscheint.
PS: Getestet habe ich auf dem Server nur alleine mit den playable units.
-
1. Du hast in Zeile 17 die () Klammern vergessen.
} count (allPlayers + switchableUnits + playableUnits);
2. Da du die Schleife nie abbrichst, rufst du die Funktion zum Beenden der Mission alle 10 Sekunden auf. Habe das gerade getestet, das endet in genau deiner Endlosschleife.
3. side von Einheiten ist nicht wirklich verlässlich, da dass auch CIVILIAN sein kann (setCaptive) oder ENEMY (rating < -2000). Immer side group _unit verwenden.
C- [] spawn {
- while {true} do {
- private ["_units", "_blu", "_indi"];
- _units = allPlayers + playableUnits;
- _blu = {side group _x == west && alive _x} count _units;
- _indi = {side group _x == independent && alive _x} count _units;
- if (_blu == 0) exitWith {
- "end1" call bis_fnc_endMission;
- };
- if (_indi == 0) exitWith {
- "end2" call bis_fnc_endMission;
- };
- sleep 10;
- };
- };
So würde ich das machen. Das exitWith beendet quasi die Schleife, da der Code außerhalb des while-scopes fortgeführt wird. -
Warum hast du dann in Zeile 4. das nicht in Klammern gepackt und was würde passieren wenn man es täte? Was so Sachen angeht bin ich echt nicht der hellste
-
Weil = eine niedrigere Priorität hat als +, forEach aber eine höhere.
-
Also quasi wie in Mathe, dass die Klammer zuerst angeschaut/berechnet wird und danach mit diesem "Wert" weiter gemacht wird?
-
Klammern immer zuerst, aber wenn man eine Variable definiert, BSP:
_var = b l a h;
Dann brauchst keine Klammern um blah herum. -
Habs ausprobiert. Wieder das gleiche: Im SP funktionierts, MP nicht...
Testen tu ichs indem ich einfach die playbleunits per zeus töte, dass sollte doch reichen?
Falls es was zur Sache tut, auf dem Server ist auch ein HC, jedoch nicht eingeslottet, hat er dennoch eine Auswirkung? -
Was sagt den die Debugkonsole bei
{side group _x == west && alive _x} count (allPlayers + playableUnits);
? -
Generell liebe ich ja solche Aussagen: "Es funktioniert nicht".
Etwas mehr Infos sind immer hilfreich: Was genau passiert denn stattdessen?Falls überhaupt nichts passiert solltest du überprüfen ob das Script im MP überhaupt ausgerufen wird.
Falls doch etwas passiert solltest du uns das nochmal mitteilen. -
Das script wird über die initServer.[lexicon]sqf[/lexicon] aufgerufen. Und es passiert halt nichts, garnichts.
Wenn etwas anderes oder ungewöhnliches passiert wäre, hätte ich es geschrieben. -
Du musst das auf jeder Maschiene ausführen. Also z.B. via. init.[lexicon]sqf[/lexicon]
Allerdings weiß ich nicht, ob das Beenden von solchen Missionen überhaupt im MP funktioniert. Diese BIS_fnc_endMission ist eher für die Kampagne. -
Ich habe in der Mission noch ne andere Bedingung die zum Ende führt, welche ebenfalls per _endMission funktioniert - da klappt alles einwandfrei.
Und was ist damit commy:
Zitat von PhillipJFryAm besten du lässt das auf dem Server laufen.
-
K.A. Versuche es über die init.[lexicon]sqf[/lexicon] und führe das auf jeder Maschine aus.
-
das problem ist das BIS_fnc_endMission nur Local funktioniert d.h. man muss es über RemoteExec oder BIS_fnc_MP ausführen bei jedem Client
oder man benutzt die BIS_fnc_endMissionServer diese wird wenn ich es noch richtig sehe überall ausgeführt -
So siehts aus.
Hier mal ein kleines Beispiel, mit BIS_fnc_endmission. Das Script läuft nur auf dem Server
Wir haben alle die Mission beendet bekommen. -
Der Code funktioniert im MP immernoch nicht und sieht nun wie folgt aus (wurde in die init.[lexicon]sqf[/lexicon] verschoben):
C- if (isServer) then {
- [] spawn {
- while {true} do {
- private ["_units", "_blu", "_indi"];
- _units = allPlayers + playableUnits;
- _blu = {side group _x == west && alive _x} count _units;
- _indi = {side group _x == independent && alive _x} count _units;
- if (_blu == 0) exitWith {
- [{"end1" call BIS_fnc_endMission;},"BIS_fnc_spawn",true,true] call BIS_fnc_MP;
- };
- if (_indi == 0) exitWith {
- [{"end2" call BIS_fnc_endMission;},"BIS_fnc_spawn",true,true] call BIS_fnc_MP;
- };
- sleep 10;
- };
- };
- };
Da die endMission auch im MP über nen Trigger funktioniert denke ich, dass es an an der Definition von _blu bzw. _indi liegt, auch wenn ich mir nicht wirklich vorstellen kann, was daran nicht richtig ist, bzw. im MP nicht funktionieren sollte...