20.04.2012, 20:07 | #1 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Frage zu "addaction"
Wie kann ich alle "addaction"-Einträge entfernen sobald eins meiner erstellten gewählt wurde? Und gibt es eine Abfrage ob ein ganz bestimmtes Magazin vorhanden ist? Ich hab nur Code:
someAmmo player hier mein script: Code:
// Auslöser: _act_id_PzFst_Schiessen = player addAction ["Wählen Sie eine Übung", "scripts\Ziele_PzFst.sqf"]; player removeAction _act_id_PzFst_Schiessen; //private ["_act_id_000", "_act_id_100", "_act_id_200", "_act_id_300", "_act_id_400"]; if (true) then { if (player hasWeapon "BwMod_PzF" && someAmmo player) then { _act_id_000 = player addaction ["Panzer in Querfahrt" , "scripts\Quer.sqf"]; _act_id_100 = player addaction ["Ziel auf 100m", "scripts\100.sqf"]; _act_id_200 = player addaction ["Ziel auf 200m", "Scripts\200.sqf"]; _act_id_300 = player addaction ["Ziel auf 300m", "scripts\300.sqf"]; _act_id_400 = player addaction ["Ziel auf 400m", "scripts\400.sqf"]; } else { }; sleep1; }; |
20.04.2012, 22:41 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Du kommst hier mit einem Skript aus. Man kann bei addAction auch Daten dem Skript übergeben.
In der Beispielmission ist auch ein Menüsystem enthalten. Sieh dir das einmal an:Unterstützungen durch Helikopter und Flugzeuge |
21.04.2012, 09:29 | #4 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Code:
//Menüsystem für Aktionen-Aufruf [Vienna 10.09.2011] // // Hauptmenü-Aktion setzen : call {[0,0,0,[1]] execVM "HQ-Aktionen.sqf"}; // Entfernen der Menü-Aktion: call {[0,0,0,[0]] execVM "HQ-Aktionen.sqf"}; // // Aufruf für den Mehrspielermodus über einen Mehrfach(!!!)-Auslöser: // Aktivierung: Keine Mehrfach // Bedingung: alive player (für einen bestimmten Spieler: alive player AND player == SoldatXY) // Bei Akt.: call {[0,0,0,[1]] execVM "HQ-Aktionen.sqf"} // Bei Deak.: call {[0,0,0,[0]] execVM "HQ-Aktionen.sqf"} // // Am Beginn der anderen aufgerufenen Skripts einfügen: [0,0,0,[1]] execVM "HQ-Aktionen.sqf"; // Das bewirkt, dass wieder nur allein die HQ-Hauptmenü-Aktion angezeigt wird. // // Bei einer Erweiterung des Menüsystems ist in den //Untermenü-Aktionen 2222222 // im Übergabe-Array --> [4], der Index für die Listen-Arrays zu setzen. // In den jeweiligen Listen bestimmt // der negative Wert --> -2, die Reihung bei der Menü-Auflistung im Spiel. //globale Variable beim ersten Aufruf für die Speicherung der Aktionen-IDs. if (isNil "Vienna_HQ_IDs") then {Vienna_HQ_IDs = []}; //Lokale Variable Private ["_index","_aID","_i"]; //Parameter aus der aufrufenden Aktion _index = (_this select 3)select 0; //Pistole zuweisen. Wegen besserer Menüauflistung. if (count Vienna_HQ_IDs == 0) then { for "_i" from 1 to 4 do {player addMagazine "7Rnd_45ACP_1911"}; player addWeapon "Colt1911" }; //Aktuelle HQ-Aktionen entfernen {player removeAction _x} forEach Vienna_HQ_IDs; Vienna_HQ_IDs = []; //Skript verlassen wenn Spieler tot if (!alive player) exitWith {}; //Hauptmenü-Aktion 1111111111111111111111111111111111111111111111111111111111111 if (_index == 1) then { _aID = player addAction [ "---> HQ-Anrufen", "HQ-Aktionen.sqf", [2], -1, false,false,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID] } else //Aktion für "Retour" in die Hauptmenü-Aktion { _aID = player addAction [ "---> HQ-Anruf beenden", "HQ-Aktionen.sqf", [1], -1, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID] }; //Untermenü-Aktionen 22222222222222222222222222222222222222222222222222222222222 if (_index == 2) then { //Untermenü Heli Abholen 2-1 2-1 2-1 _aID = player addAction [ "---> Auswahl Heli Transporte", "HQ-Aktionen.sqf", [3], -2, true,false,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Untermenü Airstrike 2-2 2-2 2-2 _aID = player addAction [ "---> Auswahl Flugzeugangriffe", "HQ-Aktionen.sqf", [4], -3, true,false,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Untermenü Airstrike 2-3 2-3 2-3 _aID = player addAction [ "---> Auswahl Heli-Laser-Angriffe", "HQ-Aktionen.sqf", [5], -4, true,false,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; }; //Liste--> für Heli Abholung 333333333333333333333333333333333333333333333333333 if (_index == 3) then { //Heli Abholung langsam 3-1 3-1 3-1 _aID = player addAction [ "*** Helitransport Fluggeschwindigkeit LANGSAM", "myHeli\myHeli.sqf", [2,80,1000,1], -2, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Heli Abholung normal 3-2 3-2 3-2 _aID = player addAction [ "*** Helitransport Fluggeschwindigkeit NORMAL", "myHeli\myHeli.sqf", [2,80,1000,2], -3, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Heli Abholung schnell 3-3 3-3 3-3 _aID = player addAction [ "*** Helitransport Fluggeschwindigkeit SCHNELL", "myHeli\myHeli.sqf", [2,80,1000,3], -4, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; }; //Liste--> für Flugzeugangriffe 444444444444444444444444444444444444444444444444 if (_index == 4) then { //Airstrike mit Bomben 4-1 4-1 4-1 _aID = player addAction [ "*** Luftangriff mit Bomben", "AirHQ\Airstrike.sqf", [2,1,20,500,90], -2, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Airstrike mit MG 4-2 4-2 4-2 _aID = player addAction [ "*** Luftangriff mit Maschinengewehr", "AirHQ\Airstrike.sqf", [0,2,2,500,90], -3, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; }; //Liste--> für Heli-Laser-Angriffe 555555555555555555555555555555555555555555555 if (_index == 5) then { //Heli Laserangriff langsam 5-1 5-1 5-1 _aID = player addAction ["*** Heliangriff anfordern LANGSAM", "myHeli_A\myHeli_A.sqf", [90,70,1000,1,100], -1, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Heli Laserangriff normal 5-2 5-2 5-2 _aID = player addAction ["*** Heliangriff anfordern NORMAL", "myHeli_A\myHeli_A.sqf", [90,70,2000,2,100], -2, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; //Heli Laserangriff schnell 5-3 5-3 5-3 _aID = player addAction ["*** Heliangriff anfordern SCHNELL", "myHeli_A\myHeli_A.sqf", [90,70,3000,3,100], -3, false,true,"" ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]; }; //////////////////////////////////////////////////////////////////////////////// |
21.04.2012, 18:39 | #5 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Um das besser zu verstehen eine Aktion in einer Zeile.
_aID = player addAction ["Aktions-Name","Skript.sqf",[1,3,2,4,5],-1,false,true,""]; [1,3,2,4,5] wären deine eigenen Parameter. Die kannst du im Skript so auslesen: _meineP = _this select 3; Die 1 z.B. holst du dir dann so raus: _meineP select 0 Die übrigen Parameter, welche die Aktion an das Skript übergibt, findest du hier: http://community.bistudio.com/wiki/addAction Damit kannst du z.B. die aufrufende Aktion vom Skript aus entfernen. Ich habe in meinen Beispiel alle Aktions-IDs im globalen Array Vienna_HQ_IDs gespeichert. Damit kann ich alle Aktionen im Skript auf diese Art löschen: {player removeAction _x} forEach Vienna_HQ_IDs; |
21.04.2012, 22:59 | #6 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Vielen Dank!
Deine Scripte sind echt eine super Vorlage zum Testen und Erlernen des Scripting.. zumal es auf Deutsch eine Erleichterung ist (auch wenn dieses Komlexe Sripting manchmal sehr schwer fällt) Trotzdem muss ich nochmal nerven, weil ich grad nicht weiter weiß... ich rufe im Hauptmenue mit dieser addaction ein Sript auf: Code:
//Liste--> Entfernung Ziel wählen 333333333333333333333333333333333333333333333333333 if (_index == 3) then { //Entfernung Ziel 100m 3-1 3-1 3-1 _aID = player addAction [ "Entfernung Ziel 100m", // "scripts\SPREE\Schiessen_PzFst\100.sqf", "scripts\SPREE\Schiessen_PzFst\Ziele.sqf", [1], -2, false,true,"" ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID]; //Entfernung Ziel 200m 3-2 3-2 3-2 _aID = player addAction [ "Entfernung Ziel 200m", // "scripts\SPREE\Schiessen_PzFst\200.sqf", "scripts\SPREE\Schiessen_PzFst\Ziele.sqf", [2], -3, false,true,"" ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID]; //Entfernung Ziel 300m 3-3 3-3 3-3 _aID = player addAction [ "Entfernung Ziel 300m", // "scripts\SPREE\Schiessen_PzFst\300.sqf", "scripts\SPREE\Schiessen_PzFst\Ziele.sqf", [3], -4, false,true,"" ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID]; //Entfernung Ziel 400m 4-4 4-4 4-4 _aID = player addAction [ "Entfernung Ziel 400m", // "scripts\SPREE\Schiessen_PzFst\400.sqf", "scripts\SPREE\Schiessen_PzFst\Ziele.sqf", [4], -4, false,true,"" ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID]; }; das angesprochene Script: Code:
//Lokale Variable private ["_index","_vcl_pool", "_vcl"]; //Parameter aus der aufrufenden Aktion _index = (_this select 0); //HQ-Aktionsmenü schließen [1] execVM "scripts\SPREE\HQ-Aktionen.sqf"; _vcl_pool = ["2S6M_Tunguska" , "BMP3" , "BTR90" , "BTR90_HQ" , "T72_RU" , "T90" , "GAZ_vodnik" , "GAZ_Vodnik_HMG"]; _vcl = _vcl_pool select floor(random count _vcl_pool); if ( _index == 1) then { ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 100 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; target = _vcl createVehicle (position Ziel_100m); target addEventHandler ["Killed", {hint "Treffer!"}]; waituntil {(!alive target)}; sleep 5; hint "Stopfen!"; deleteVehicle target; }; if ( _index == 2) then { ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 200 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; target = _vcl createVehicle (position Ziel_200m); target addEventHandler ["Killed", {hint "Treffer!"}]; waituntil {(!alive target)}; sleep 5; hint "Stopfen!"; deleteVehicle target; }; if ( _index == 3) then { ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 300 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; target = _vcl createVehicle (position Ziel_300m); target addEventHandler ["Killed", {hint "Treffer!"}]; waituntil {(!alive target)}; sleep 5; hint "Stopfen!"; deleteVehicle target; }; if ( _index == 4) then { ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 400 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; target = _vcl createVehicle (position Ziel_400m); target addEventHandler ["Killed", {hint "Treffer!"}]; waituntil {(!alive target)}; sleep 5; hint "Stopfen!"; deleteVehicle target; }; ich kann zwar im Hauptmenü die einzelnen Aktionen wählen, jedoch werden sie nicht ausgeführt.. was mache ich falsch???! |
22.04.2012, 09:02 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Der Index wird falsch ausgelesen!
Zuerst musst du aus den vom addAction übergebenen Parametern dein Übergabe-Array auslesen: _this select 3 und dann aus deinem Array den 1. Wert mit: select 0. // 4. Parameter aus der aufrufenden Aktion = Array, daraus 1. Wert _index = (_this select 3)select 0; Ob das Skript sonst lauffähig ist habe ich nicht nachvollzogen. |
11.05.2012, 09:15 | #9 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Ich bräuchte mal wieder Hilfe.
Eigentlich will ich nicht damit nerven, aber nach langem testen/probieren vergeht mir langsam die Lust und ich bekomm es einfach nicht gebacken.
Kurz und knapp: Ich möchte wenn "index 9" gewählt wird ( vom addaction hauptmenü) dann per Zufall---> index 1 bis index 8 aktiviert wird (also random). hier ein scriptauszug in verkürzter form Code:
// statische Ziele 333333333333333333333333333333333333333333333333333333333333333333333 // Entfernung 100m 3-1 3-1 3-1 if ( _index == 1) then { }; // Entfernung 200m 3-2 3-2 3-2 if ( _index == 2) then { }; // Entfernung 300m 3-3 3-3 3-3 if ( _index == 3) then { }; // Entfernung 400m 3-4 3-4 3-4 if ( _index == 4) then { }; // Panzer in Querfahrt 444444444444444444444444444444444444444444444444444444444444444444444 // Entfernung 100m 4-1 4-1 4-1 if ( _index == 5) then { }, // Entfernung 200m 4-2 4-2 4-2 if ( _index == 6) then { }, // Entfernung 300m 4-3 4-3 4-3 if ( _index == 7) then { }, // Entfernung 400m 4-4 4-4 4-4 if ( _index == 8) then { }, // Zufall 555555555555555555555555555555555555555555555555555555555555555555555 //Zufall mit Hilfestellung 5-1 5-1 5-1 if ( _index == 9) then { }, |
11.05.2012, 11:52 | #10 (permalink) |
Hallo,
Frage zuerst nach _index == 9 und lasse damit, wenn true, einen neuen random index zwischen 1 und 8 generieren. Anschließend wird dein jetzt zufällig bestimmter _index ausgewählt. Benutze für die Auswahl aber den Befehl switch statt immer wieder if-then. Code:
_index = (_this select 3) select 0; _go_index = if (_index == 9) then {round (random 8)} else {_index}; switch (_go_index) do { case 0 : {// dein Code //}; case 1 : {}; ... case 8 : {}; }; Der Range geht hier von 0 bis 8! Nummeriere also am besten neu durch und fange bei Null an oder löse das Problem mathematisch. Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
11.05.2012, 12:34 | #12 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Neu durchnummerieren geht klar.
Aber geht das nicht einfacher? Weil im Prinzip müsste ich ja bei case 0 den code von index 0 bei case 1 von index 1 usw. eintragen... das ist ja dann irgendwie doppelt gemoppelt... kann man bei case nicht gleich auf die vorher definierten index (0-7 .. sind ja dann 8) verweisen? Code:
_index = (_this select 3) select 0; _index_8 = if (_index == 8) then {round (random 7)} else {_index}; switch (_index_8) do { case 0 : {Verweis auf index 0}; case 1 : {Verweis auf index 1};; ... case 7 : {Verweis auf index 7}; }; Geändert von spreewälder (11.05.2012 um 12:37 Uhr). |
11.05.2012, 14:47 | #13 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Lösung gefunden:
Code:
_index_8 = if (_index == 8) then {round (random 7)} else {_index}; switch (_index_8) do { case 0 : {[0,0,0,[0]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 1 : {[0,0,0,[1]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 2 : {[0,0,0,[2]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 3 : {[0,0,0,[3]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 4 : {[0,0,0,[4]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 5 : {[0,0,0,[5]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 6 : {[0,0,0,[6]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; case 7 : {[0,0,0,[7]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";}; Geändert von spreewälder (11.05.2012 um 15:14 Uhr). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Kleine Frage und Hoffnung auf Rat | Cpt. Crack Horse | Editing & Scripting | 6 | 20.03.2012 19:15 |
Anfänger hat Frage zu Map (Domination) | TylerDurden | Multiplayer | 3 | 30.06.2011 16:05 |
Frage zum BWMOD Leo 2A6 | GeneralX© | Mods & Addons | 1 | 26.03.2011 20:39 |
Frage: Squadleader und Join Request | ColdJackle | Technische Fragen & Probleme | 13 | 25.10.2010 15:33 |
Frage zur BWMod | Rabb_de | Mods & Addons | 1 | 10.08.2010 00:26 |