Task im Multiplayer auf allen Clienten erledigen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Task im Multiplayer auf allen Clienten erledigen

    Hi,

    Ich habe eigentlich nur eine kleine Frage. ^^

    In meiner Mission soll man bei einer der Aufgaben ein Dokument finden und mitnehmen. Wenn man auf das Dokument schaut bekommt man die Option dieses zu nehmen. Tut man dies wird über den "addAction" Befehl ein Script ausgeführt, welches dann das Dokument löscht.
    Ein Auslöser mit der Bedingung, dass das Dokument "tot" ist, wird ausgelöst. Die Aufgabe wird abgehakt und eine Benachrichtigung wird angezeigt.

    Meine Frage wäre, würde das auch so im MP funktionieren?

    Das Dokument (d1):

    Quellcode

    1. this addAction ["Dokumente und Datenträger nehmen", "dokumente.sqf"];


    Das Script:

    Quellcode: dokumente.sqf

    1. if (hasInterface) then {
    2. deleteVehicle d1;
    3. };

    Der Auslöser, der die Aufgabe als erledigt abhakt und eine Benachrichtigung anzeigt:

    Bedingung:
    (!alive d1)

    Bei Aktivierung:
    task2 setTaskState "Succeeded"; null = [] spawn { sleep 2; ["TaskSucceeded",["","Hauptziel: Dokumente sichern"]] call BIS_fnc_showNotification; };


    Außerdem habe ich einen zweiten Auslöser erstellt der die selbe Bedingung hat, aber eine neue Aufgabe hinzufügt:

    Bedingung:
    (!alive d1)

    Bei Aktivierung:
    task3 = player createSimpleTask ["OBJ_3"]; task3 setSimpleTaskDescription ["Die Dokumente geben uns Aufschluss über die mögliche <marker name=""hostage"">Position</marker> einer Geisel. Nachdem sie mit dem Lager fertig sind, wird sie ein Helikopter dort hinfliegen. Die Landezone ist wahrscheinlich heiß, rechnet mit Beschuss!<br/><br/>Irgendwo auf dem Hof ist sehr wahrscheinlich die Geisel versteckt. Wenn die Geisel befreit wurde, bringt sie in den Helikopter!","Hauptziel: Geisel befreien","Geisel befreien"]; task3 setSimpleTaskDestination (getMarkerPos "hostage"); task3 setTaskState "Created"; null = [] spawn { sleep 2; ["TaskCreated",["","Hauptziel: Geisel befreien"]] call BIS_fnc_showNotification; }; hint "Neue Aufgabe hinzugefügt!"; "hostage" setMarkerType "hd_warning"; "hostage" setMarkerColor "ColorRed";


    Nach meinem Verständnis wird alles was in Auslösern enthalten ist auch Global ausgeführt. Auch die aufgerufenen Scripte und ausgeführten Befehle?


    MfG JeckZeRippa
  • Danke für deine Antwort!

    Das kannte ich noch nicht, schaue es mir mal an, ggf. schreibe ich dass dann so um, trotzdem würde es mich interessieren ob das so funktionieren würde wie ich es oben beschrieben habe.

    "Tasks are purely local. It means that if task is created using the script command createSimpleTask it is created only on the machine where it was called."

    Also auch wenn der Befehl über einen Auslöser ausgeführt wird?

    MfG JeckZeRippa
  • JeckZeRippa schrieb:

    Also auch wenn der Befehl über einen Auslöser ausgeführt wird?
    Jap, denn auch Auslöser sind letztenendes nur "lokal", auch wenn ein Trigger, einmal ausgleöst, auf allen Clients feuert. Aber das hat keinen Einfluss auf die Lokalität des ausgeführten Codes.
    Wenn du also über einen Trigger einen Task hinzufügst, dann haben den zwar nachher alle Clients (und zwar wirklich alle und nicht eine betsimmte Seite, es sei denn du hast das im Script berücksichtigt), aber nicht weil der command auf einmal global geworden ist, sondern weil dann auf jedem Client lokal der Befehl ausgeführt wurde...

    Wenn du also deine entsprechenden Actions und Tasks alle über Trigger hinzufügst, entfernst und den Status der Tasks änderst, dann hast du letzten Endes das gewünschte Resultat ;)

    Wenn du allerdings eines von beidem ohne Trigger hinzufügst, bzw änderst, dann musst du halt schauen, dass das entsprechende Script auf den jeweiligen Clients ausgeführt wird.

    MFG Raven
    Entwickler von SQDev
    Co-Entwickler von OurAltis

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Raven ()

  • Danke für die Antwort!

    Interessant, also ist es letztendlich besser, die im Framework verwendeten Funktionen zu nutzen:

    1Auslöser:

    Bei Aktivierung:

    _task2 = ["task2", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;

    (Wo ist bei task2/_task2 der Unterschied also mit dem Unterstrich, im Briefing habe ich diesen Unterstrich nicht gesetzt, also "task2 =..." statt "_task2 =...)

    2Auslöser:


    Bei Aktivierung:


    [west,["task3"],["BESCHREIBUNG","Hauptziel: Geisel Befreien","hostage"],[0,0,0],1,2,true] call BIS_fnc_taskCreate




    PS: Und das Script würde aber soweit dann für alle ausgeführt werden?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von JeckZeRippa ()

  • Raven schrieb:

    Aber das hat keinen Einfluss auf die Lokalität des ausgeführten Codes.
    Trigger Führen Code Local zum Client aus und lösen auf jeden Client aus. das heißst da das neuen BIS_fnc_TaskFramework Global agiert hast du den Task hint für jeden spieler auf dem server mehrfach das heißst einfach ein isServer hinzufügen und die geschichte ist gegessen ;)
    SIGNATUR START
    Wer Rechtschreibfehler findet darf sie behalten
    ACE3 Core Developer
    CBA A3 Developer
    Developer of Dynasound, Enhance SoundScape, Immerse, Suppress and Align
    SIGNATUR ENDE
  • jokoho482 schrieb:

    Trigger Führen Code Local zum Client aus und lösen auf jeden Client aus. das heißst da das neuen BIS_fnc_TaskFramework Global agiert hast du den Task hint für jeden spieler auf dem server mehrfach das heißst einfach ein isServer hinzufügen und die geschichte ist gegessen
    Ah okay das neue Framework kenne ich noch gar nicht ^^
    Bzw ich hab damit noch nie gearbeitet...
    Entwickler von SQDev
    Co-Entwickler von OurAltis

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Raven ()

  • jokoho482 schrieb:

    Raven schrieb:

    Aber das hat keinen Einfluss auf die Lokalität des ausgeführten Codes.
    Trigger Führen Code Local zum Client aus und lösen auf jeden Client aus. das heißst da das neuen BIS_fnc_TaskFramework Global agiert hast du den Task hint für jeden spieler auf dem server mehrfach das heißst einfach ein isServer hinzufügen und die geschichte ist gegessen ;)
    Also. Wenn die Auslöser normal ausgelöst werden, werden diese auf alle Clienten ausgelöst, aber nicht vom Server.

    Und wenn "isServer" in der Bedingung steht, dann wird der Auslöser nur vom Server ausgelöst?

    Aber wo ist da der Unterschied? Also wenn alle Clienten die Information bekommen (Der Host ist doch auch ein Client?), dann sollte es doch eigentlich auch schon ausreichen? Oder was ist der Unterschied wenn nur der Server den Auslöser feuert? Bekommen dann auch alle Spieler die Information?

    Das verwirrt mich ein bisschen :whistling: