10.04.2014, 08:13 | #1 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
Suicide Bomber
Moin!
Will ein suicide Bomber machen, der random vom Spiel ausgesucht wird. Angefangen mit: SBomber = nearestObjects [player, ["Civilian"], 200]; ///// SBomber = Suicide Bomber///// Er sucht im Raum von 200 Metern Zivilisten. Meine erste Frage und eig. auch der Kern: wie kann ich jetzt sagen, dass er einen von den rauspickt und als "Object" benennt, damit ich später im Waituntil (in einer Schleife) die Distance zum Player abchecken lassen kann? while {true} do { SBomber = nearestObjects [player, ["Civilian"], 200]; _dist = {_x distance Player} foreach SBomber; /// Hier fehlt der Punkt, wo er nicht mehr nach weiteren Zivilisten im 200 Meter Radius abfragt, sondern einen zufälligen Zivilisten auswählt und ihn eine Variable zuteilt. ///// if (true) then {SBomber commandMove (getPos player); waitUntil {SBomber = nearestObject [player, "Civilian"]; SBomber distance player < 10;};}; Bomb="R_OG9_HE" createVehicle position SBomber ; }; Geändert von JSR (10.04.2014 um 08:18 Uhr). |
10.04.2014, 11:44 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wenn du keinen Wert drauf legst welcher der Zivilisten von mehreren genommen wird:
Code:
SBomber = []; while {count SBomber == 0} do { sleep 1; SBomber = nearestObjects [player, ["Civilian"], 200] }; SBomber = SBomber select 0; waitUntil {sleep 0.5; SBomber distance player < 10}; "R_OG9_HE" createVehicle position SBomber ; |
10.04.2014, 13:22 | #3 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
Hey Vienna, wieder mal danke für die Antwort!
Ich probiere das Ganze zu verstehen: SBomber = []; /// Es wird ein "leerer" Array eingefügt, damit NearestOBjects funktioniert (in dem Fall) und den Zivilisten als Wert in die Klammern einfügen kann - richtig? In der Bedingung von While wird solange abgefragt, bis aus null eins wird, bzw. ein Zivilist ausgewählt ist. Dann SBomber = Sbomber select 0; weil es ja - logischerweise - der erste Wert in []; bzw im Array ist, richtig? Danach ist ja eig. alles ziemlich easy. Nochmals danke! Code:
SBomber = []; while {count SBomber == 0} do { sleep 1; SBomber = nearestObjects [player, ["Civilian"], 200] }; SBomber = SBomber select 0; waitUntil {sleep 0.5; SBomber distance player < 10}; "R_OG9_HE" createVehicle position SBomber ; |
10.04.2014, 17:35 | #4 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das ist keine logische Abfrage, sondern es wird gezählt wie viele Zivilisten im Bereich sind. Es können somit auch mehr als einer sein. Mit select 0 wird aber immer nur der erste in der Liste genommen. Man könnte als Bedingung auch count SBomber < 1 nehmen. |
11.04.2014, 11:03 | #5 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
Okay danke, habe es verstanden! Top.
PS: Kleine Erweiterung. Code:
SBomber = []; _r = random 10; _rf = floor _r; while {count SBomber == 0} do { sleep 1; SBomber = nearestObjects [player, ["Civilian"], 200] }; SBomber = SBomber select _rf; waitUntil {sleep 0.5; SBomber distance player < 10}; "R_OG9_HE" createVehicle position SBomber; Man achte auf die Variable _rf. Somit wird ein zufälliger Zivi genommen, der sich im Radius von 200 Metern befindet. Mit select 0 wird immer der nähste gewählt. Auch für Leute, die durch Google hier her stoßen! Geändert von JSR (11.04.2014 um 11:24 Uhr). |
11.04.2014, 11:42 | #6 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das würde nur dann funktionieren, wenn immer 11 oder mehr Zivilisten im Bereich wären.
So wird die Auswahl an die Anzahl der vorhandenen Zivilisten angepasst: Code:
SBomber = []; while {count SBomber < 1} do { sleep 1; SBomber = nearestObjects [player, ["Civilian"], 200] }; SBomber = SBomber select (floor(random(count SBomber - 1))); waitUntil {sleep 0.5; SBomber distance player < 10}; "R_OG9_HE" createVehicle position SBomber; |
11.04.2014, 11:50 | #8 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Falls du das schon kopiert hast, ich habe bei while das Zeichen von > auf < geändert!
floor ist notwendig für die Rundung für Arrays und random um einen Inhalt zufällig auszuwählen. Ohne random würde immer der letzte Zivilist von mehreren genommen. |
11.04.2014, 12:03 | #9 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
Code:
while {count SBomber < 1} SBomber = Code:
SBomber select (floor ( random (count SBomber -1))); Aber wenn ich 10 Zivilisten habe und der -1 Befehl kommt, bedeutet das, dass ein Zivilist genommen wird der in den Array SBomber[1]; gesteckt wird? PS: Script so verändert, dass er auf die Distance zum Westsoldier achtet und nicht mehr auf den Spieler fixiert ist: Code:
SBomber = []; while {count SBomber < 1} do { sleep 1; SBomber = nearestObjects [player, ["Civilian"], 200] }; SBomber = SBomber select (floor ( random (count SBomber -1))); waitUntil { sleep 1; ( {side _x == WEST && (_x distance SBomber) < 10} count allUnits) > 0}; "R_OG9_HE" createVehicle position SBomber; Bei nearestObjects kann man natürlich dann auch "Player" mit West tauschen oder einfach den Radius dementsprechend groß machen, so dass sowieso jede Einheit betroffen ist. Geändert von JSR (24.01.2016 um 16:28 Uhr). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
[Modsuche] Suicide Bombers and Random IED Mod | JSR | Mods & Addons | 1 | 07.12.2012 12:00 |
Airstrike | JSR | Editing & Scripting | 13 | 01.03.2012 18:03 |
[OA] Co 06 Suicide Commando | Anemia | Usermade Missions | 3 | 14.07.2010 20:10 |