Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 10.04.2014, 08:13   #1 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard 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).
JSR ist offline  
Alt 10.04.2014, 11:44   #2 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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 ;
Vienna ist offline  
Alt 10.04.2014, 13:22   #3 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard

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 ;
JSR ist offline  
Alt 10.04.2014, 17:35   #4 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Zitat von JSR Beitrag anzeigen


In der Bedingung von While wird solange abgefragt, bis aus null eins wird, ...

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.
Vienna ist offline  
Alt 11.04.2014, 11:03   #5 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard

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).
JSR ist offline  
Alt 11.04.2014, 11:42   #6 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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;
count SBomber - 1 ist notwendig, weil der Index von Arrays mit 0 beginnt.
Vienna ist offline  
Alt 11.04.2014, 11:43   #7 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard

Okay verstehe! Dann ist Random und Floor aber doch gar nicht mehr nötig, oder?


PS: Ach doch klar, sonst wird immer der gleiche abgewählt.

Geändert von JSR (11.04.2014 um 11:46 Uhr).
JSR ist offline  
Alt 11.04.2014, 11:50   #8 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline  
Alt 11.04.2014, 12:03   #9 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard

Code:
while {count SBomber < 1}
Hier wird die Schleife ausgeführt, solange bis die Anzahl der SBomber Variable unter 1 ist.



SBomber =
Code:
SBomber select (floor ( random (count SBomber -1)));
Das mit Floor und Random habe ich verstanden. Der Wert von Random wird gerundet und somit ein Wert aus dem Array abgezogen.

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).
JSR ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ä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


Kontakt - HX3.de - Archiv - Nach oben

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