Fahrzeug spawnt doppelt auf einen Dedicated Server

  • Tach zusammen,


    ich habe ein Problem. Ich möchte in einen Skript ein Fahrzeug spawnen lassen. Mein Problem ist, dass das Fahrzeug auf meinem Testserver zwei mal erstellt wird. Wenn ich die Mission im Editor lade, dann wird nur ein Fahrzeug gespawnt.
    Hier ist der Code Snippet, mit welchem das Fahrzeug gespawnt werden soll:


    Code
    1. _eng = createVehicle ["C_Truck_02_covered_F",[(getMarkerpos "vehiclespawn" select 0), getMarkerpos "vehiclespawn" select 1,0],[], 0, "NONE"];
    2. _eng setFuel 1;
    3. _eng allowDammage false;

    Hat jemand eine Idee, warum auf den Server zwei Fahrzeuge erstellt werden.


    Vielen Dank für die Unterstützung.

  • if{!isServer} exitWith {};
    Führt nur auf dem Server aus, somit nur genau ein mal.
    Einfach vor deinem Code einsetzen.

    achtung fabi das ist eine "gefährliche" aussage. denn wenn man z.b. der code NUR auf dem client ausgeführt wird dann passiert garnichts. denn dieser code führt den code nicht auf dem server aus sondern beendet nur die function wenn der aktuelle client nicht der server ist.

  • achtung fabi das ist eine "gefährliche" aussage. denn wenn man z.b. der code NUR auf dem client ausgeführt wird dann passiert garnichts. denn dieser code führt den code nicht auf dem server aus sondern beendet nur die function wenn der aktuelle client nicht der server ist.

    gewagt ja, aber gefährlich?
    Ich bezweifle das er den code auf mehreren clienten ausführt und nicht auf dem Server.

  • Tach zusammen,


    vielen Dank für die rege Teilnahme.
    Ich habe meinen Anliegen leider nicht ganz verständlich vorgetragen, sorry dafür. Also der Vehicle Spawn ist nur ein Teil vom Code. Nach dem das Fahrzeug gespawnt ist, sollte der Rest des Codes noch ausgeführt werden.
    mit if{!isServer} exitWith {}; hat das leider nicht geklappt.
    Mit

    Code
    1. if (isServer) then {
    2. _eng = createVehicle ["C_Truck_02_covered_F",[(getMarkerpos "vehiclespawn" select 0), getMarkerpos "vehiclespawn" select 1,0],[], 0, "NONE"];
    3. _eng setFuel 1;
    4. _eng allowDammage true;
    5. };

    wird ein Fahrzeug gespawnt und der Rest des Codes ordnungsgemäß ausgeführt.


    Vielen Dank für die Unterstützung.

  • Moin,


    tja, dass ganze klappt nicht ganz wie gewünscht. Der Code wird aus einen Dialog heraus gestartet:

    Code
    1. action = "closeDialog 0;[[[],'snakedog\SupportOperations\MedicationDelivery.sqf'],'BIS_fnc_execVM',true] call BIS_fnc_MP;";

    Hier ist der ganze Code in dem auch das Fahrzeug erstellt werden soll:

    Ab Zeile 26 bis 31 wird das Fahrzeug erstellt. Das Problem ist nun, das meine Variable _eng was eigentlich das Fahrzeug sein sollte, nicht definiert wird. Hier ist die Fehlermeldung im Spiel:
    Error Nicht definierte Variable in Ausdruck: _eng

    Bedeutet das, dass das Fahrzeug zwar auf dem Server erstellt wurde, aber die Variable nicht an den Clients übertragen wird? Wenn das so ist, wie kann ich das ändern. Um den Task abschließen zu können, sollten die Clients auch die Variable _eng kennen.

  • Mir scheint, dass du noch sehr verwirrt bist, was Lokalität in Arma angeht. Wenn du Englisch beherrscht, lies dir mal das hier durch.


    Den Truck allen Clients bekanntmachen kannst du, indem du ihn in eine nicht-lokale Variable speicherst und diese dann mit publicVariable verschickst.

    Code
    1. ENG = createVehicle ["C_Truck_02_covered_F",[(getMarkerpos "vehiclespawn" select 0), getMarkerpos "vehiclespawn" select 1,0],[], 0, "NONE"];
    2. publicVariable "ENG";

    Mit der BIS_fnc_MP führst du dein MedicationDelivery.sqf auf allen Clients + Server aus. Also jeder Befehl in dem Skript wird von jedem ein mal ausgeführt. Manche Befehle haben aber von sich aus schon globale Wirkung. Beispiel: In Zeile 13 - createMarker.
    Ob ein Befehl global oder lokal wirkt und ob er globale oder lokale Parameter akzeptiert, siehst du im Biki immer oben links an dem kleinen Symbol unter der Überschrift. createMarker im Biki


    Auch die Sache mit den hints solltest du dir nochmal durchlesen. Du speicherst deinen Text in _myHint und speicherst dann _myHint in GlobalHint (überflüssig - beides sind nur Variablen, keine Befehle). Dann machst du GlobalHint public. Nur das Publizieren alleine führt aber noch nicht den hint auf den anderen Clients aus. Es sieht ihn nur deswegen jeder, weil das Skript ja eh auf allen Clients ausgeführt wird.

    --------------------------------------------------------------------
    Gruppe Adler, eine Arma3 TvT- und Coop-Gemeinschaft
    www.gruppe-adler.de
    --------------------------------------------------------------------

  • Ein Dialog wird auf dem Clienten ausgeführt. Deinen Code brauchst du garnicht verteilen.


    1. Fahrzeuge spawn und dies wird veteilt
    2. SpawnGroup genaus so
    3. BIS_fnc_Taskpatrol stellt den WP für die Gruppen, kann auch bei dir bleiben
    4. BIS_FNC_TASKSTATE ist dafür gemacht wurden, damit es eben nicht noch zusätzlich verteilt werden muss
    5. deine Hints würden lokal wirken und könnten mit remoteExec verteilt werden


    Ich habe mal bissel was geändert. Bitte testen und Ergebnis posten

  • Tach zusammen,


    also KKs Blog kannte ich noch nicht, vielen Dank für den Link. Ich habe mir den Artikel ArmA Scripting Tutorials: Locality durch gelesen. Ja, dass mit den Lokalitäten in Arma war mir offensichtlich nicht richtig klar. Irgendwie haben meinen Missionen immer funktioniert, allerdings die Idee mit den Dialogen ist bei mir relativ neu, daher auch diese Komplikationen.


    Den neuen Code von Drunken Officer werde ich heute Abend mal testen.

  • Tach zusammen,


    @Drunken Officer dein Code funktioniert einwandfrei, vielen Dank. Mit der publicVariable wird auch das erstellte Fahrzeug an den Clients weiter gegeben und die Clients erkennen es.


    Damit hat sich meine Fragestellung soweit erledigt.
    In meine zukünftige Skripte werde ich mehr auf die Arma Lokalitäten achten.