30.01.2009, 04:19 | #1 (permalink) |
Registriert seit: 23.10.2008
Beiträge: 120
|
Granadiere/MGs/usw. sollen Ihre Muni bekommen
Hallo,
wenn eine Gruppe vor einem Objekt steht, sollen die jeweiligen Einheite Ihre Munition bekommen, aber unabhängig von der Maximalen anzahl (unabhängig von setVehicleAmmo 1). Ein Granadier soll z.B. immer 8 Magazine erhalten, egal wie viel Munition sie bei sich tragen also nicht einfach Munition voll, sondern plus 8! Ich hab an einem Auslöser gedacht. Wenn die Soldaten da rein gehen, sollen sie ihre Munition, die sie brauchen erhalten. Logisch: Ein Sniper kann mit der Munition von einem Granadier nichts anfangen. Das hab ich schon heraus gefunden:
Doch leider erhalten dann ja alle (auch z.B. die Sniper) Ak-Munition, wenn sich einer in der Gruppe/im Auslöser befindet. Es interessiert mich das so zu lösen, da ich gerne wissen möchte wie man mit diesem "_x" genauer arbeiten kann bzw. eingrenzen kann.
__________________
Besser verrückt, als normal und langweilig zu sein. Wer den allen gesellschaftlichen Normen und Regeln folgen will, wird zwangsläufig irgendwann am Fenster stehen und sich aufregen, weil jemand auf der Straße ein Taschentuch nicht aufheben möchte. Man wird zu jemanden, den man schon als Kind gehasst hat. Dann bin ich lieber verrückt und glücklich, durchgeknallt, aber interessant -> einzigartig! |
30.01.2009, 10:45 | #2 (permalink) |
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
|
Das hier wäre eine Lösung (triggerliste ersetzen durch die Liste des Triggers, wie auch immer), ach ja, nicht getestet:
Code:
_addMags = { private ["_unit","_magtype","_how_many"]; _unit = _this select 0; _magtype = _this select 1; _how_many = _this select 2; for "_i" from 1 to _how_many do { _unit addMagazine [_magtype]; }; }; { if (_x isKindOf "Man") then { switch (typeOf _x) do { case "SoldierEG": { [_x,"30Rnd_545x39_AK",8] call _addMags; [_x,"1Rnd_HE_GP25 ",8] call _addMags; }; case "SoldierESniper": { [_x,"10Rnd_762x54_SVD",8] call _addMags; }; // default immer acht AK Magazine default { [_x,"30Rnd_545x39_AK",8] call _addMags; }; }; sleep 0.01; }; } forEach triggerliste; Abfragen mit: if (typeOf Einheit== "SoldierEG") then {} gehen auch, oder if (typeOf Einheit in ["SoldierEG","SoldierEB"]) then {}. Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels. Geändert von Xeno (30.01.2009 um 10:48 Uhr). |
31.01.2009, 02:41 | #3 (permalink) |
Registriert seit: 23.10.2008
Beiträge: 120
|
Na super, jetzt hast du es geschafft: Ich hab jetzt mehr Fragen an dich!
(Scherz) Danke, dass du dir die Mühe gemacht hast. Du kannst das ja ganz gut. Ich würde das auch gerne können, doch da ich schon bisschen Zeit bebraucht habe das zu verstehen, merke ich, dass ich ein blutiger Anfänger bin. wie meinst du das jetzt? Ich hab das jetzt so verstanden, dass der Auslöser den Namen Triggerliste haben muss. Oder tap ich da im Dunkeln? Ich hab das jetzt jedenfalls so gemacht und
Sleep 0.01 Error Allgemeiner Fehler im Ausdruck Ich hab bis her immer ~0.1 benutzt, weil ich auch gar nicht so richtig den unterschied verstehe: ~30 bedeutet, dass er 30 Sekunden runter zählt bis er weiter machen kann, doch bei sleep 30 muss er doch auch 30 Sekunden warten, also muss er doch auch die Zeit zählen. Wie soll man das schlafen verstehen? Wenn das ok für dich, dann kannst du auf folgendes auch antworten. Muss aber nicht sein - möchte nicht zu viel verlangen von dir/Vom Forum erwarte ich das natürlich auch nicht. Bin aber total neugierig wie das aufgebaut ist und funkioniert. Hier oben legst du also fest, wo was eingesetzt wird Code:
_addMags = { private ["_unit","_magtype","_how_many"]; _unit = _this select 0; _magtype = _this select 1; _how_many = _this select 2; for "_i" from 1 to _how_many do { _unit addMagazine [_magtype]; }; }; Code:
[_x,"30Rnd_545x39_AK",8] call _addMags; Code:
[hier 0,hier 1,hier 2] exec "Dateiname.sqs" Code:
[_x,"30Rnd_545x39_AK",8] call _addMags; Doch ich verstehe nicht was das hier genau bedeutet: Code:
for "_i" from 1 to _how_many do { _unit addMagazine [_magtype]; Soll er etwa acht mal das gleiche machen? Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Einheit addMagazine "30Rnd_545x39_AK" Was passiert da genau mit dem "_i" for "_i" from 1 to _how_many also in meinem Falle: for "_i" from 1 to 8 Hast du eine Ausbildung/ein Studium gemacht oder warum kannst du das so gut??? Egal ob da ein Fehler drin steckt oder nicht, nur das Prinzip verstehen ist ja schon eine tolle Sache und die eigentliche Kunst.
__________________
Besser verrückt, als normal und langweilig zu sein. Wer den allen gesellschaftlichen Normen und Regeln folgen will, wird zwangsläufig irgendwann am Fenster stehen und sich aufregen, weil jemand auf der Straße ein Taschentuch nicht aufheben möchte. Man wird zu jemanden, den man schon als Kind gehasst hat. Dann bin ich lieber verrückt und glücklich, durchgeknallt, aber interessant -> einzigartig! |
31.01.2009, 11:35 | #4 (permalink) |
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
|
Wenn Du dem Auslöser den Namen Triggerliste gibst, dann musst Du nach dem forEach noch list hinzufügen, also } forEach list Triggerliste. Du kannst aber als Parameter für den Aufruf des Scriptes auch z.B. die thislist des Triggers übergeben. Da es sich um ein sqf Script handelt und nicht um sqs ist der Aufruf mit exec falsch. Bitte execVM benutzen, z.B. handle = [] execVM "meinscript.sqf". ~x = sqs sleep x; = sqf Das Script wartet/schläft x Sekunden, bis es weitermacht. Das ist eine Funktion innerhalb des Scripts (salopp ausgedrückt ein kleines Unterprogramm), in diesem Falle eine private Funktion die nur innerhalb des Scriptes eingesetzt werden kann (auch noch woanders, wenn man z.B. das Script zu einem Array hinzufügt). Mit call ruft man eine Funktion auf. Eine Funktion kann auch einen Wert zurückliefern, muss aber nicht (also sie liefert immer etwas zurück, nur werten wir das in diesem Falle nicht aus). Die Parameterübergabe erfolgt analog der eines Scriptaufrufes. Genau. Einfacher als das acht mal hinzuschreiben und flexibler, da ja in der Funktion die Einheit, der Magazintyp und die Anzahl der Magazine frei wählbar durch die Parameterübergabe ist. Mit der Variable _i passiert in dieser for Schleife nichts. Der Befehl erfordert aber eine Variable. Die Variable gibt innerhalb der for Schleife den momentanen Zyklusstand der Schleife zurück (und ist natürlich wie jede andere Variable auch ganz normal verwendbar innerhalb der Schleife). Ich habe an der staatlichen Universität zu Paraiso promoviert Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels. |
01.02.2009, 00:51 | #5 (permalink) |
Registriert seit: 23.10.2008
Beiträge: 120
|
Super - danke
Leider kommt jetzt ein anderer Fehler, doch ich hab den Fehler gefunden und beseitigt. Da muss die Eckige Klammer weg: Code:
for "_i" from 1 to _how_many do { _unit addMagazine [_magtype]; Code:
[_x,"30Rnd_545x39_AK",8] call _addMags; [_x,"1Rnd_HE_GP25",8] call _addMags; Noch mal für alle den Skript von Xeno fehlerfrei: Code:
_addMags = { private ["_unit","_magtype","_how_many"]; _unit = _this select 0; _magtype = _this select 1; _how_many = _this select 2; for "_i" from 1 to _how_many do { _unit addMagazine _magtype; }; }; { if (_x isKindOf "Man") then { switch (typeOf _x) do { case "SoldierEG": { [_x,"30Rnd_545x39_AK",8] call _addMags; [_x,"1Rnd_HE_GP25",8] call _addMags; }; case "SoldierESniper": { [_x,"10Rnd_762x54_SVD",8] call _addMags; }; // default immer acht AK Magazine default { [_x,"30Rnd_545x39_AK",8] call _addMags; }; }; sleep 0.01; }; } forEach list triggerliste;
Und so einfach kann man dann den Skripte erweitern, wenn noch andere Soldaten ihre Munition erhalten sollen: Code:
case "SoldierEG": { [_x,"30Rnd_545x39_AK",8] call _addMags; [_x,"1Rnd_HE_GP25",8] call _addMags; }; case "SoldierESniper": { [_x,"10Rnd_762x54_SVD",8] call _addMags; }; // default immer acht AK Magazine default { [_x,"30Rnd_545x39_AK",8] call _addMags; }; Einfach wie eine Vorlage drei Zeilen kopieren und die nötigen Sachen überschreiben: case "SoldierEG": { [_x,"30Rnd_545x39_AK",8] call _addMags; [_x,"1Rnd_HE_GP25",8] call _addMags; }; case "SoldierESniper": { [_x,"10Rnd_762x54_SVD",8] call _addMags; }; case "KlassenName": { [_x,"MagazinName",Anzahl der Magazine] call _addMags; }; // default immer acht AK Magazine default { [_x,"30Rnd_545x39_AK",8] call _addMags; }; ---------------------------------------------------------------------------------------------------------------------------------- Ich hab viel Zeit innerhalb weniger Monate investiert und ich muss zugeben, dass das was man selber sich bei bringt, niemals vergessen wird. Doch leider schleift man erlernte Fehler mit und eine kleine banale Unwissenheiten, die innerhalb Sekunden gelöst werden kann, raubt Wochen und lässt Richtiges falsch aussehen. Wenn jemand ein anderen was bei bringt, ist das besser, effizienter, schneller und ... Deshalb, mein Anliegen: Sollte jemand in Hamburg wohnen, der so etwas kann, dann würde ich ihn auf ein Kaffee oder zum Essen einladen und mich freuen, wenn mir jemand ein paar Sachen erklären könnte. Über Skype und MSN kann man auch gerne sich unterhalten. Nur der Kaffee wird dann immer kalt sein bis er in einer anderen Stadt ankommt. Doch ich kann mich auch anders dankbar zeigen. Wer gerne möchte, kann sich ja melden bei mir.
__________________
Besser verrückt, als normal und langweilig zu sein. Wer den allen gesellschaftlichen Normen und Regeln folgen will, wird zwangsläufig irgendwann am Fenster stehen und sich aufregen, weil jemand auf der Straße ein Taschentuch nicht aufheben möchte. Man wird zu jemanden, den man schon als Kind gehasst hat. Dann bin ich lieber verrückt und glücklich, durchgeknallt, aber interessant -> einzigartig! |
01.02.2009, 01:10 | #6 (permalink) |
Registriert seit: 23.10.2008
Beiträge: 120
|
Ich würde jetzt gern das hier so umsetzten, damit ich praktisch schon im Editor den Namen Auslöser reinschreiben kann:
Code:
Muni1 = [triggerliste1] execVM "meinscript.sqf" Code:
_MuniTrigger = _this select 0 _addMags = { private ["_unit","_magtype","_how_many"]; _unit = _this select 0; _magtype = _this select 1; _how_many = _this select 2; for "_i" from 1 to _how_many do { _unit addMagazine _magtype; }; }; { if (_x isKindOf "Man") then { switch (typeOf _x) do { case "SoldierEG": { [_x,"30Rnd_545x39_AK",8] call _addMags; [_x,"1Rnd_HE_GP25",8] call _addMags; }; case "SoldierESniper": { [_x,"10Rnd_762x54_SVD",8] call _addMags; }; // default immer acht AK Magazine default { [_x,"30Rnd_545x39_AK",8] call _addMags; }; }; sleep 0.01; }; } forEach list _MuniTrigger;
__________________
Besser verrückt, als normal und langweilig zu sein. Wer den allen gesellschaftlichen Normen und Regeln folgen will, wird zwangsläufig irgendwann am Fenster stehen und sich aufregen, weil jemand auf der Straße ein Taschentuch nicht aufheben möchte. Man wird zu jemanden, den man schon als Kind gehasst hat. Dann bin ich lieber verrückt und glücklich, durchgeknallt, aber interessant -> einzigartig! |
Stichworte |
abfrage eingrenzen, abfrage mit _x |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
MGs in ArmA | Guipas | Mods & Addons | 22 | 08.12.2006 18:17 |
Muni LKW nutzen | SvenPatrick | Technische Fragen & Probleme | 1 | 07.12.2006 17:51 |
Muni/Waffenkisten | Radar O´Reilly | Editing | 1 | 06.12.2006 17:30 |
OFP-Resistance: Wo zu bekommen? | Garry | Hilfe | 12 | 22.05.2005 14:07 |
Sollen Lehrer durch ihre Schüler benotet werden? | Kompost | Diskussionsplattform | 9 | 05.02.2004 16:48 |