HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-187/)
-   -   Einheiten erstellen und automatisch zufällig löschen (https://hx3.de/editing-scripting-187/einheiten-erstellen-automatisch-zufaellig-loeschen-22305/)

Rubbermen 07.03.2013 09:45

Einheiten erstellen und automatisch zufällig löschen
 
Hiho, ich möchte via Script Einheiten an einem Marker (Name=start) Spawen lassen und dabei jeder Einheit die Chance geben sofort gelöscht zu werden, damit die Größe der Trupps zufällig ist.

Code:

Grp1 = Creategroup WEST;
_Teamleader="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "Grp1=this", 1, "Sergeant"];
_Unit2="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "", 1, "Corporal"];
_Unit3="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "", 1, "Corporal"];
_Unit4="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "", 1, "Corporal"];
_Unit5="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "", 1, "Corporal"];
_Unit6="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "", 1, "Corporal"];
_Unit7="B_Soldier_F" createUnit [getMarkerPos "start", Grp1, "", 1, "Corporal"];

wp1 = group Grp1 addWaypoint [getMarkerPos "moveTo",0];

Das funkt. soweit, nur besteht die Grp 100%ig aus 7 Mann, dass ist ein wenig langweilig.

Am besten wäre es ja wenn ich jeder Einheit einen "probaility of presence" Wert geben könnte, nur wie? Alternativ dachte ich mir, das man jeder Einheit zufällig löschen könnte...

JoeJoe87577 07.03.2013 09:56

Schau dir mal http://community.bistudio.com/wiki/random an.
Damit kannst du eine Random number erzeugen die z.B. im Bereich von 0 - 10 ist. Dann noch eine Abfrage welche Nummer das ist um die entsprechende Einheit zu löschen. Achte aber auf die Notes da steht was wichtiges drin wenn du im MP dein Script verwenden willst.

Asso-Loki 07.03.2013 10:18

z.B.: so
Code:

_min= 3; //Minimum der zu erstellenden Einheiten
_max= 7; //Maximum der zu erstellenden Einheiten
_pos= getMarkerPos "start"; // Spawnposition;
_wpPos= getmarkerPos "moveTo"; // Wegpunkt- Position
_anzahl= _min + (floor(random (_max - _min)));
_Grp1= createGroup WEST; // Mit Unterstrich = ein und dasselbe Script für beliebig viele Gruppen verwenden, ohne Unterstrich = eindeutiger Gruppen- Name mit der sich die Gruppe auch später ansprechen lässt
for [{_a= 0},{_a < _anzahl},{_a = _a + 1}] do
    {
    if (_a== 0) then
        {
        "B_Soldier_F" createUnit [_pos, _Grp1,"",1, "Sergeant"];
        }
        else
        {
        "B_Soldier_F" createUnit [_pos, _Grp1,"",1, "Corporal"];
        };
    };
wp1 = _Grp1 addWaypoint [_wpPos,0];


Rubbermen 07.03.2013 10:31

Das sieht ja schonmal sehr gut aus, leider spawnen da immer genau 2 Leutz. Wo ist der fehler ?

Es funktionirt doch .. komischer Weise darf ich die Formatierung so nicht übernehmen... :komisch:

bei mir geht es nur so:

Code:

_min= 3;
_max= 7;
_pos= getMarkerPos "start";
_wpPos= getmarkerPos "moveTo";
_anzahl= _min + (floor(random (_max - _min)));
_Grp1= createGroup WEST;
for [{_a= 0},{_a < _anzahl},{_a = _a + 1}] do{if (_a== 0) then{"B_Soldier_F" createUnit [_pos, _Grp1,"",1, "Sergeant"];} else {"B_Soldier_F" createUnit [_pos, _Grp1,"",1, "Corporal"];};};
wp1 = _Grp1 addWaypoint [_wpPos,0];

Nehmt ihr iwas anderes zum tippen als den "Editor" von Windows ?

JoeJoe87577 07.03.2013 11:52

Ich weiß nicht genau wie das Random in ArmA funktioniert, aber in C# wird eine Random Zahl nach der Systemzeit (genauer gesagt nach den Systemtiks) generiert.
Wenn in Arma jetzt die Missionszeit dafür genommen wird und du das Script am Init ausführst, dann wird natürlich immer dieselbe Zahl generiert.
Füge mal am Anfang des Scriptes einen Sleep 0.1 Befehl ein, damit sollte das Problem evtl behoben sein.

AHTNTEPPOP 07.03.2013 13:44

Zitat:

Zitat von Rubbermen (Beitrag 444108)
...Nehmt ihr iwas anderes zum tippen als den "Editor" von Windows ?

Notepad++ :daumen:

JoeJoe87577 07.03.2013 13:46

Und das da: Notepad++ syntax highlight by Nicolas & GossamerSolid updated - Tools - Armaholic

Asso-Loki 07.03.2013 14:13

Zitat:

Zitat von AHTNTEPPOP (Beitrag 444145)
Notepad++ :daumen:

Jepp!

Edit: Noch ne kleine Anmerkung zum Script- Beispiel:

Da die Random- Funktion bei ArmA eigentlich nie exakt den min oder max- Wert des angegebenen Zahlenwert ergibt (also z.B. bei random 7 nie 0 und nie 7), sondern nur einen Annäherung an diese Werte (ausgetestet mit zig 10'000- Durchläufen), werden im obigen Beispiel also maximal 6 Einheiten erstellt. Also einfach immer bei "_max= " den Wert um 1 höher setzen als tatsächlich gewollt.

Rubbermen 08.03.2013 10:25

Weiter gehts, warum geht damit nicht?

Code:

if (_x==5) then{for [{_a= 0},{_a < _anzahl},{_a = _a + 1}] do{if (_a== 0) then{"O_Soldier_F" createUnit [_pos, _Grp1,"",1, "Sergeant"];} else {"O_Soldier_F" createUnit [_pos, _Grp1,"",1, "Corporal"];};};};

Asso-Loki 08.03.2013 17:06

Ist ja wohl nur ein Ausschnitt aus einem Script. Bring das Ganze und schreib dazu was Du damit bezwecken willst und woran Du merkst dass es nicht funktioniert, dann kann Dir wohl auch geholfen werden.

Rubbermen 08.03.2013 17:43

Das ist das von dir geschriebene Script. xD Und den Fehler hab ich doch rot eingefärbt.

Code:

if (!isServer) exitWith {};

_min= 3;
_max= 7;
_anzahl= _min + (floor(random (_max - _min)));

_pos= getMarkerPos "patrol";
_wpPos= getmarkerPos "patrol-moveTo";
_Pat1= createGroup EAST;

_x= ceil (random 5);

if (_x==1) then{..};


if (_x==2) then{..};


if (_x==3) then{..};


if (_x==4) then{};


if (_x==5) then{for [{_a= 0},{_a < _anzahl},{_a = _a + 1}] do{if (_a== 0) then{"O_Soldier_F" createUnit [_pos, _Grp1,"",1, "Sergeant"];} else {"O_Soldier_F" createUnit [_pos, _Grp1,"",1, "Corporal"];};};};


JoeJoe87577 08.03.2013 18:33

Setzt mal Random auf 6 statt auf 5.

Asso-Loki 08.03.2013 19:29

Ach Mann, bin ja schon hilfsbereit, aber wenn ich Dir die Infos aus der Nase ziehen muss, verliere ich schnell die Lust. Auch jetzt schreibst Du nicht, was Dein Problem an der Sache ist. Aber ich rate mal... es werden keine Einheiten erstellt?

Wenn ja versuch mal die Variable welche Du der erstellten Gruppe zuteilst
Code:

_Pat1= createGroup EAST;
auch dort zu verwenden wo die Einheiten erstellt werden. Dort verwendest Du _Grp1, eine Variable die in diesem Script nicht existiert. Klappt es dann immer noch nicht, kann es daran liegen, dass im Editor keine Ost- Einheit existiert. Dann muss Du entweder dort eine Einheit setzen oder im Script mit
Code:

_seite= createCenter east
die Ost- Seite "initialisieren".

Edit: Oh, und mit dem "extra rot markierten Teil" hatte Dein Problem rein gar nichts zu tun. Das wäre gleich ersichtlich gewesen, wenn Du das ganze Script gepostet hättest ;-)

Edit 2: und das mit den "Platzhaltern" bei
Code:

if (_x==1) then {..};
solltest Du unterlassen. ".." kennt der Interpreter nicht und bricht das Script natürlich ab und schreibt eine entsprechende Fehlermeldung in die Datei ArmA3.rpt (die solltest Du Dir immer ansehen wenn etwas nicht funktioniert. Liegt bei W7 unter "Benutzer\Benutzername\appData\Local\Arma 3 Alpha"). Sorg dafür dass Du solche "Platzhalter" entweder mit
Code:

//if (_x==1) then {..};
als "Dokumentation kennzeichnest (wird vom Interpreter ignoriert) oder indem Du halt dort einen Kommentar vom Script ausgeben lässt, z.B.
Code:

if (_x==1) then {player sidechat "Option 1 ausgewählt";};

Rubbermen 08.03.2013 23:58

Das "_Grp1" war der Fehler! Danke dir :daumen:

Die ".." hatte ich nur als Platzhalter fürs Forum, den Rest merk ich mir gleich für die Zukunft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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