![]() |
#1 (permalink) |
![]() Registriert seit: 06.09.2011
Beiträge: 13
|
![]()
Hallo,
ich möchte gern als Bedingung das Werfen einer farbigen Rauchgranate. Der Spieler soll eine Rauchgranate werfen und erst dann soll das Script zum nächsten Punkt springen. Ich weiß nur nicht wie ich die Bedingung formulieren soll. Weiß jemand von euch da vielleicht einen Rat oder Tip?
__________________
www.79pzgren.de |
![]() |
![]() |
#2 (permalink) |
![]() ![]() ![]() Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
|
![]()
Viele Wege führen nach Rom... ich würde wohl den eventHandler FIRED nutzen, der sobald ausgelöst, eine Variable auf true setzt. Das Script würde dann mittles waitUntil auf die Variable warten...
![]() Hängt allerdings auch von den Rahmenbedingungen ab, die Du für Deine Mission setzt.. wenn der Spieler nämlich gleich zu Beginn eine Rauchgranate wirft, dann ist die Variable evtl schon wahr... Geändert von Buliwyf (10.10.2011 um 14:59 Uhr). |
![]() |
![]() |
#4 (permalink) |
![]() Registriert seit: 06.09.2011
Beiträge: 13
|
![]()
Danke für die Tipps. Bin bis jetzt leider noch nicht dazu gekommen an der Mission weiter zu arbeiten.
Heute abend werde ich mich mal an die Umsetzung machen. Ich werde wahrscheinlich einen Trigger benutzen damit der Spieler die Rauchgranate nicht zu früh benutzt bzw. das dass script erst dann anfängt zu laufen.
__________________
www.79pzgren.de |
![]() |
![]() |
#5 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Für die Trigger-Lösung gibst du dem Spieler beim Betreten des Trigger-Bereichs einen Aktionsmenü-Eintrag, mit dem er das Skript aufrufen kann.
Beim Skriptaufruf wird dann im Skript an der Spielerposition die Rauchgranate erzeugt. Auch entfernst du dort gleich den Menüeintrag (die Menüpunkt-Nummer wird dem Skript automatisch im _this Array übergeben addAction - Bohemia Interactive Community). |
![]() |
![]() |
#6 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]() Dieses Thema interessiert mich auch. Wie müsste der EventHandler "fired" aussehen, wenn ich mittels diesem abfragen will, ob eine Einheit z.B. eine grüne Rauchgranate "gefeuert" hat? Ich komme mit den ganzen ammoclasses, muzzleclasses und was es sonst noch so gibt nicht so recht klar. Ich denke es wird in diese Richtung gehen: Code:
this addEventHandler ["fired", ?,?,?] ![]() |
![]() |
![]() |
#7 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Für mein Beispiel mit dem Trigger brauchst du den EventHandler nicht. Da wird die Rauchgranate dann im Skript mit
"G_40mm_SmokeGreen" createVehicle <Position>; erstellt. Zum Eventhandler: Es gibt nur ein Fragezeichen. An dessen Stelle komm ein Programm-Code rein: player addEventHandler ["fired", {.....Programm-Code.....}] Nach dem Feuern steht dem Programm-Code in _this ein Array mit Übergabedaten zur Verfügung. Welche das sind siehe hier: ArmA 2: Event Handlers - Bohemia Interactive Community Zum Testen gib in die Initzeile einer Einheit folgendes ein: this addEventHandler ["fired", {player groupChat format["%1",_this] }] Wenn diese Einheit dann etwas abfeuert, wird dir das Array mit den Daten angezeigt. |
![]() |
![]() |
#8 (permalink) |
![]() ![]() Registriert seit: 01.06.2009
Beiträge: 103
|
![]() So kann es aussehen: Code:
vEHFired= player addEventHandler ["fired","if (_this select 5 == 'SmokeShellGreen') then {vgefeuert= true; player removeEventHandler ['fired', vEHFired];};"]; In diesem Beispiel überprüft der eventHandler ob der Spieler eine grüne Rauchgranate geworfen hat und wenn ja, setzt er eine (globale) Variable auf true und löscht den eventhandler wieder. Das Beispiel benutze ich in einer meiner Missionen, um einen Heli landen zu lassen, nachdem der Player mit der grünen Rauchgranate anzeigt, dass das Landegebiet Feind frei ist. Der Fired- Eventhandler liefert bei Auslösung ein Array mit 5 respektive 7 (seit Patch 1.54?) Werten zurück. 0= Einheit (Objekt) welche gefeuert hat 1= Waffe (String) die abgefeuert wurde 2= Muzzle (String) die zum Einsatz kam (wie erklärt man Muzzle? Als eine Art definierte "Feuermöglichkeiten" einer Waffe vielleicht) 3= Feuermodus (String) in welchem sich die Waffe beim abfeuern befunden hat 4= Munition (String) die abgefeuert wurde und die beiden Neuen 5= Magazin-Type (String) welche diese Munition enthält 6= Das abgefeuerte Projektil (Objekt) Diese Werte können im vom Eventhandeler ausgelösten Code oder Script mittels Code:
_this select Index-Nr. |
![]() |
![]() |
#9 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]() Hey Asso-Loki. Danke, das ist genau das, was ich auch in meiner Mission verbauen will. Und mittels dem "Wahrwerden" der globalen Variable kann man dann ja den Heli landen lassen, bzw. weitere Ereignisse auslösen. Du schreibst hier übrigens von "der Spieler". Deshalb sicherheitshalber noch die Folgefrage: Ist Dein Code multiplayertauglich (ich baue eine gehostete Coop-Mission für ca. 6 Spieler)? |
![]() |
![]() |
#10 (permalink) |
![]() Registriert seit: 19.09.2010
Beiträge: 35
|
![]()
Den Ansatz von Vienna würde ich aber eher verfolgen. Nicht, dass keiner mehr ne grüne Rauchgranate hat. Dann stehst du dumm da.
Wenn also eine Rauchgranate erzeugt wird, ist alles ![]() Du kannst auch trotzdem die Wurf-Animation abspielen lassen, so dass es zumindes so wirkt, als hätte der Trigger-Auslösende etwas geworfen. |
![]() |
![]() |
#11 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]() Ich denke soviel Verantwortung kann ich unserer 6-Mann Coop-Gruppe aufbürden. Die sollen gefälligst eine Rauchgranate für den Heli aufsparen (Befehl ist Befehl ![]() ![]() Bleibt also immer noch die Frage ob Asso-Loki's Code MP-tauglich ist. |
![]() |
![]() |
#12 (permalink) |
![]() ![]() Registriert seit: 01.06.2009
Beiträge: 103
|
![]() Ja das ist bestimmt MP tauglich (kann es aber nicht konkret überprüfen). Es kommt halt darauf an, wo und wie Du den Code verwenden willst. Natürlich lässt sich "Player" auch durch einen beliebigen korrekten Unit- Namen ersetzten (ausgelesen z.B. "leader group sowieso", oder selbst vergeben z.B. "S1"). Rufst Du den Code mit Player z.B. in einem Script auf, dass auf allen Clients läuft, so wird halt jeder Spieler diesen Event-Handler bekommen. Läuft das Script nur bei einem einzigen Client, so bekommt halt nur dieser eine Spieler den Event- Handler. Viennas Vorschlag ist aber schon bedenkenswert. Es geht bestimmt ordentlich auf den Sack, wenn man eine Mission nicht weiter spielen oder beenden kann, weil Keiner eine grüne Rauchgranate hat. Ich würde zumindest dafür Sorgen, dass irgendwo in der näheren Umgebung des geplanten Ereignisses eine Möglichkeit (Ammo- Kiste, Fahrzeug) vorhanden ist, um sich Notfalls eine grüne Rauchgranate zu besorgen. Edit: Oh, und Du solltest globale Variablen (im Beispiel "vgefeuert") nach deren Änderung mittels Code:
publicVariable "vgefeuert" Also mein Beispiel so ergänzen: Code:
vEHFired= player addEventHandler ["fired","if (_this select 5 == 'SmokeShellGreen') then {vgefeuert= true; publicVariable 'vgefeuert'; player removeEventHandler ['fired', vEHFired];};"]; Geändert von Asso-Loki (11.10.2011 um 20:14 Uhr). |
![]() |
![]() |
#13 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Zu beachten ist, dass der Programmteil des "Fired" EventHandlers auf allen Clients ausgeführt wird, wenn er bei einem der Clients aktiviert wird.
ArmA 2: Event Handlers - Bohemia Interactive Community <----- Siehe das Icon dort! Code:
Global Local Icons AL = Dieser Skriptsprache-Befehl muss lokal auf dem Client PC ausgeführt werden (der die Kontrolle über ein Objekt hat). Die Auswirkungen sind aus EL oder EG ersichtlich. AG = Dieser Skriptsprache-Befehl muss nicht lokal auf dem Client PC ausgeführt werden (der die Kontrolle über das Objekt hat, siehe Locality in Multiplayer). Die Auswirkung ist aus EL oder EG ersichtlich. EL = Die Auswirkungen dieses Skriptsprache-Befehl werden nicht übers Netzwerk übertragen, sondern bleiben lokal auf dem PC wo der Befehl ausgeführt wurde. EG = Die Auswirkungen dieses Skriptsprache-Befehls werden übers Netzwerk übertragen und passieren dann auf jedem Computer im Netzwerk. |
![]() |
![]() |
#14 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]()
Vielen Dank Vienna und Asso-Loki. Ich denke mit euren Informationen werde ich den EventHandler richtig einbauen können.
![]() P.S: Dass uns die Rauchgranaten ausgehen ist in meiner Mission eher unwahrscheinlich. Jeder (der sechs möglichen) Spieler hat von Beginn weg zwei Rauchgranaten im Gepäck und gebraucht wird nur eine Einzige ganz am Ende der Mission (es kommt auch nur dann ein Hubschrauber vor...). Frohes Bauen weiterhin und Grüsse aus der Schweiz. |
![]() |
![]() |
#15 (permalink) |
![]() Registriert seit: 19.09.2010
Beiträge: 35
|
![]() Ich sage immer: Expect the unexpected. Ich glaube, jeder kennt die Situation: Man findet nen RPG-Schützen mit 3 Raketen - was fliegt zuerst aus dem Inventar? Genau... Oder du fragst noch mit "hasweapon" ab, ob die Person im Triggerbereich auch noch ne grüne Rauchgranate hat. Wenn nicht, dann mit createvehicle eine erzeugen. |
![]() |
![]() |
#16 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Zu meinem oberen Beispiel muss ich berichtigen, dass der Code im Eventhandler nicht in {...} sondern in "....." stehen muss. Das sieht dann so aus:
this addEventHandler ["fired", "player groupChat format['%1',_this]"] Für Anführungszeichen im Code müssen dann die einfachen genommen werden! __________________________________________________ ___________________ Ich nehme an du brauchst den Heli für den Transport? Ich habe das Heli-Transportskript so umgeschrieben, dass ein Heli zu einer geworfenen grünen Rauchgranate zum Abholen fliegt. Im Heli muss der Anfordernde mit zwei Wegpunkten den Flug bestimmen. Für weitere Einstellungen im Skript nachlesen. Der Heli darf sooft angefordert werden wie man grüne Rauchgranaten hat. Jeder Spieler kann seinen eigenen Heli anfordern. Mitfliegen anderer Einheiten ist natürlich möglich. Jedenfalls siehst du im Beispiel im Anhang wie das mit dem EventHandler und der Rauchgranate funktioniert. |
![]() |
![]() |
#18 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]() Hmmm, habe noch nie gesehen, dass einfache Gänsefüsschen, statt die Doppelten verwendet werden müssen. Heisst das eventuell, dass beim Code von Asso-Loki... Code:
vEHFired= player addEventHandler ["fired","if (_this select 5 == 'SmokeShellGreen') then {vgefeuert= true; publicVariable 'vgefeuert'; player removeEventHandler ['fired', vEHFired];};"]; Solche Dinge machen mich immer etwas ratlos (und führen oft zu mehreren Tesläufen im Editor). |
![]() |
![]() |
#19 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Der Code ist mit Anführungszeichen abegrenzt. "...Code...."
Wenn im Code ein Teil vorhanden ist der ebenfalls in Anführungszeichen stehen muss, wie sollte dann das Programm wissen wo der gesamte Code endet? Darum z.B. bei einem Textteil: "......'Text'...... ". Es geht auch mit doppelten Anführungszeichen: "......""Text""...... ". Ich finde aber die Lösung mit den einfachen übersichtlicher. Seit einiger Zeit wird Code in geschweiften Klammern geschrieben. Dabei sind die normalen Anführungszeichen erlaubt. {......"Text"......}. Beim EventHandler ist noch die alte Schreibweise vorgegeben. |
![]() |
![]() |
#20 (permalink) |
![]() ![]() ![]() Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
|
![]()
@Vienna:
Du willst damit also sagen, dass Asso-Loki's Code mit den unterschiedlichen Anführungsstrichen korrekt ist, richtig? Ich frage nur deshalb nochmals nach, weil er ja auch solche Gebilde hier hat: ".........'...'........'...'........." Das heisst, hier treffen einfache Gänsefüsschen auch mehrfach aufeinander... ![]() Ich seh' schon: Irgendwann lasse ich mich zum Programmierer ausbilden, nur damit ich Arma2-Missionen (und später hoffentlich Arma3) bauen kann. Ich bin verdammt sicher, dass Vienna irgendwass in der Art ist... nämlich... behaupt ich mal... oder so... ![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
![]() |
||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Bedingung muss 10s gegeben sein...? | spaccy | Editing & Scripting | 14 | 19.02.2011 01:36 |
Einheiten aus den alternativen Schützenplätzen werfen! | GER_CJ-187 | Editing & Scripting | 7 | 17.11.2010 16:29 |
Anwesenheit (Bedingung) | BIB-ODIN | Editing & Scripting | 15 | 18.10.2010 22:41 |
Problem bei der bedingung anwesenheit | Moerderhoschi | Editing & Scripting | 49 | 03.09.2010 12:52 |
Name als Bedingung | GER_CJ-187 | Editing & Scripting | 0 | 05.06.2010 17:45 |