HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Actionmenüeintrag für Jeden löschen (https://hx3.de/editing-scripting-167/actionmenueeintrag-fuer-loeschen-21874/)

killshot 21.09.2012 01:50

Actionmenüeintrag für Jeden löschen
 
Hey,

ich habe einem Objekt einen Actionmenüeintrag zugewiesen, der nach Aktivierung gelöscht wird. Allerdings handelt es sich bei meiner Mission um ein Multiplayerszenario und ich möchte, dass der Eintrag für jeden Spieler gelöscht wird und nicht nur für die ausführende "Person", so wie es momentan der Fall ist.

Konkret:

Über einen Laptop soll einer der Spieler die Einsatzbefehle einholen und dann soll dieser Eintrag für niemanden mehr aufrufbar sein.

Die Zusatzfrage, die sich mir stellt lautet

Wie kann ich die Aufgaben (Briefing.sqf), die der ausführenden Person nach Abruf des Actionmenüeintrages "Einsatzbefehl" gestellt werden, für jeden Spieler sichtbar machen?

Die erste Aufgabe ist für alle sichtbar - "Einsatzbefehle im Kommandobunker abholen" - allerdings aktualisieren sich diese nicht bei den anderen Spielern, sobald jemand den "Laptop bedient". Also jeder Spieler müsste quasi selber noch einmal die "Einsatzbefehle" vom "Laptop ziehen", damit die Aufgaben aktualisiert werden.

Ich habe keine Gruppen, sondern jeden Spieler extra für sich, allerdings ist es trotzdem ein Coop-Szenario. (Falls das überhaupt irgendeine Relevanz hat)

Ich habe leider keine Erfahrung mit MPMissionen.

Vielen Dank für Eure Hilfe

burns 21.09.2012 02:05

Zitat:

Zitat von killshot (Beitrag 429775)
Wie kann ich die Aufgaben (Briefing.sqf), die der ausführenden Person nach Abruf des Actionmenüeintrages "Einsatzbefehl" gestellt werden, für jeden Spieler sichtbar machen?

Das hatte ich mal so gelöst, daß die neue Aufgabe aus einem Trigger statt einem Script erstellt wird - die funktionierten nämlich mal - im Gegensatz zu scripten - ohne Zauberei bei jedem client.

Allerdings hats bei meiner neusten Mission wo´s ebenfalls so gelöst ist, unter 1.62 nicht wirklich funktioniert. Ich fürchte ja schon fast die Omnipotenz der Trigger wurde zerstört, habe aber bisher noch keine Energie gefunden dem weiter nachzugehen... (:cry:).

Also probiers mal mit dem Briefing ausm Trigger, mehr wie schiefgehen kanns nicht ;)

killshot 21.09.2012 02:08

Danke erstmal für die schnelle Antwort!

Also verstehe ich das richtig, ich soll die erste Aufgabe "Zum Bunker gehen" ganz normal in der Briefing.sqf starten und die neuen Aufgaben dann über Trigger laufen lassen?

Werde ich dann mal googlen, wie man sowas anstellt.


Grüße

burns 21.09.2012 02:14

Brauchst nicht googeln, ist im Grunde derselbe Text wie im Briefing, nur im Trigger:

http://i569.photobucket.com/albums/s...ps4c33c4b7.jpg


^^ ungefähr so, hab jetzt nix von mir gefunden wo ein neuer Task übern Trigger läuft, ausser dem Neuen wovon ich weiss das es nicht geht :confused:



PS: Der Trigger im Bild läuft über Anwesenheit von Blufor,
ginge aber auch über Activation: None und Condition: xyz123

killshot 21.09.2012 02:18

Danke, bedeutet das dann, dass ich durch den Actionmenüeintrag "Einsatzbefehl" ein Script starten muss, welches einen Trigger spawnen lässt bzw. einen bereits gesetzten Trigger auf true setzt, der dann wiederum die Aufgabe als erledigt erklärt?

Gruß


Edit: Denn das "obj1done=true" soll ja erst nach Abruf des Eintrages am Laptop ausgeführt werden.

burns 21.09.2012 02:26

Ich glaub wir reden aneinander vorbei, ist auch schon spät .. klinke mich lieber aus fürs Erste :wave:

killshot 21.09.2012 02:32

Ja ok gute Idee, dem schließe ich mich mal besser an :D

Könnte es sein, dass hier die Lösung für das Problem enthalten ist:

Taskmaster 2

Ich gucks mir Morgen mal an.

Danke nochmal und gute Nacht

killshot 21.09.2012 04:19

Ich habs doch noch nicht ins Bett geschafft ^^

Zumindest das Problem mit dem Löschen der Actionmenü-ID könnte behoben sein.

Die habe ich jetzt in einem 2x1m Auslöser (Trg1), mit mehrfachauslösung, der aber dann im Script gelöscht wird, sodass ja überhaupt keiner mehr Zugriff darauf bekommen kann.

Ich guck mir dann das Ergebnis morgen mal mit nem Kollegen auf nem Server an.

Aber das größere Problem, dass jeder Spieler quasi sein eigenes Briefing hat und nicht alle ein gemeinsames, besteht wohl leider immernoch.

Aber ich bin dann doch erstmal schlafen. Tschö

Vienna 21.09.2012 19:55

Vielleicht kannst du das Briefing mit einem Auslöser und nicht mit einer Aktion starten?

z.B. mit einem Einmal-Auslöser von 0.5m Radius über dem Laptop, den jeder auslösen kann.


Mit Aktion wäre dein Problem mit einer "Schaltvariablen", einem einzeiligen zusätzlichen Skript und einem Auslöser möglich.

Pfandgiraffe 21.09.2012 21:35

Schreib in das Script welches über den Actionbefehl gestartet wird einfach am Ende folgendes rein:
Code:


delete_stupid_action_entry = true;
publicVariable "delete_stupid_action_entry";

Und dann einen Auslöser auf die Map gehaun mit folgender Auslösebedingung:
Code:

!isNil "delete_stupid_action_entry";
...und in die Aktivierung dann...
Code:

deinObjektNamemitdemActionEntry removeAction deinActionVarNamewelcherandemActionEntryObjektangepapptis;

fertsch

killshot 22.09.2012 01:11

Das was du da zuletzt geschrieben hast leuchtet mir glaube ich ganz gut ein, psychobastard.

Das werd ich so umsetzen! Kann ich mir damit dann das

Code:

_obj = _this select 0;
_caller = _this select 1;
_id = _this select 2;
_obj removeAction _id;

im Script komplett sparen, ja oder?

Ich habe auch das andere Problem jetzt versucht per Auslöser zu lösen, wie es burns empfohlen hat. Leider hatte ich heute nicht die Gelegenheit es zu testen. Jetzt heute hoffentlich dann.

Danke nochmal an euch drei!

Vienna 22.09.2012 01:20

Psychobastards Version löscht zwar für alle die Aktion, startet aber nicht das Skript bei allen, weil die Aktion nur beim Aufrufenden lokal wirkt.

Darum sollte das so ablaufen:

--> Die Aktion startet ein Skript, welches nur die Schaltvariable publik sendet.
--> Die Schaltvariable löst den Auslöser bei allen aus,
--> der dann das Briefing startet und die Aktion löscht.

Pfandgiraffe 22.09.2012 03:38

Ich dachte dieser letzte Schritt wäre auch ohne extra Erklärung zu erahnen gewesen...

killshot 22.09.2012 05:24

Schon wieder spät geworden.

Also es sieht jetzt folgendermaßen bei mir aus:

Objekt Laptop mit Namen "Kommandostab"
Initzeile:

ID01 = this addAction ["Einsatzbefehl","Scripts\Stab\Bruecke_01.sqf"]; ID02...

Bruecke_01.sqf
delete_laptop_id01 = true;
publicVariable "delete_laptop_id01";

Auslöser "Trg1" - Achse A/B = 0; Auslösbar durch BLUEFOR; 1x
Bedingung: !isNil "delete_laptop_id01";
Bei Aktiv.: KommandoStab removeAction ID01; nul = execVM "Scripts\Stab\Einsatzbefehl_01.sqf";

Einsatzbefehl_01.sqf
Code:

// Variable "Stab" (Task1) auf true setzen
player setVariable ["Stab_active",true,false];

// Entferne Aufgabe "Gehe zu Kommandobunker"
player removeSimpleTask task1;

// Material für Task2 sichtbar machen
baumaterial1 hideobject false; 
baumaterial2 hideobject false;

sleep 3;
hint "Einsatzbefehl erhalten";
sleep 5;
hintSilent "";

// Löschen des Auslösers
deletevehicle trg1;

Habe ich das richtig verstanden?
Bisher funktioniert es jedenfalls genau so wie ich es haben möchte (also so wie es die ganze Zeit schon funktioniert hat xD)! Jetzt bin ich mal gespannt obs dann heute auch endlich im Multiplayer klappt! Auf jeden Fall kommt mir das Ganze jetzt schon strukturierter und aufgeräumter vor. Danke euch!

Pfandgiraffe 22.09.2012 05:40

Ja, so passt das.

Ich bin mir nur eben nicht sicher was passiert wenn ein JIP in die Mission connectet. Kann sein dass dieser dann wieder den Eintrag sieht. Das müsstest du dann noch ausprobieren.

Du solltest den Trigger auch nicht unbedingt löschen. Die PublicVar wird jedem neuen Spieler automatisch übertragen. Wenn jetzt ein neuer Spieler in die Mission kommt löst für ihn der Trigger erneut aus und er bekommt ebenfalls den aktuellen Missionsstatus mitgeteilt.

Das ist natürlich abhängig davon was in dem Script alles übermittelt wird. (erwünscht oder unerwünscht)



Grüße

killshot 23.09.2012 17:00

Ich hatte jetzt die Gelegenheit es zu testen und es klappt wunderbar.

Sobald irgendein Spieler den "Einsatzbefehl"-Entry ausgeführt hat, ist er für niemanden sonst mehr ausführbar und die neuen Aufgaben sind für jeden Spieler sichtbar.

Wenn ich neu joine und der "Einsatzbefehl" schon eingeholt wurde, werden mir die neuen Aufgaben ebenfalls angezeigt, weil ich den "Trg1"-Auslöser jetzt doch nicht löschen lasse (wie empfohlen).

Ich danke euch, ihr habt mir wieder mal super geholfen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119