12.07.2010, 12:34 | #1 (permalink) |
Registriert seit: 01.12.2006
Beiträge: 157
|
buildingpos auslesen
Gibt es eine Möglichkeit, dass man auslesen kann, wieviele Gebäudepositionen es in einem Gebäude gibt?
Ich möchte bei einem zufälligen Gebäude alle Positionen mit Soldaten besetzen. Das Gebäude ist bei Missionsbeginn jedesmal ein anderes (Wird druch ein HeliH mit Radius 1000 und dann nearest buildung HeliH festgelegt). |
12.07.2010, 14:12 | #4 (permalink) |
Registriert seit: 12.05.2009
Ort: FRA
Beiträge: 1.621
|
Naja Du sollts selber TESTEN wieviele Positionen die Gebäude haben
__________________
My Youtube Channel "Before you diagnose yourself with depression or low self esteem, first make sure you are not, in fact, just surrounded by assholes!" William Gibson |
12.07.2010, 16:18 | #5 (permalink) |
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
|
Code:
_building = _this select 0; _dude = _this select 1; _i = 0; while {(_building buildingPos _i) distance [0,0,0] > 1} do { _i = _i + 1; }; _pos = floor(random _i); if (_pos == _i) then { _pos = _i - 1; }; _dude setPos (_building buildingPos _pos); Aber sollte als Basis zur Lösung des Problems durchaus genügen. |
12.07.2010, 21:47 | #6 (permalink) |
Registriert seit: 01.12.2006
Beiträge: 157
|
Ich habe jetzt 2 Std lang probiert und habs nicht hinbekommen. Meine Soldaten spawnen zwar an den verschiedenen Positionen im Gebäude, sind aber immer in der gleichen Gruppe und verlassen deshalb ihre Positionen und formieren sich beim ersten erstellten Soldaten.
[sodat] join GrpNull hab ich schon probiert, geht aber nicht, da die soldaten scheinbar immer die gleichen Namen zugewiesen bekommen. Bitte TeRp, schrieb mir die Lösung etwas präzieser. Mein Script möchte ich hier lieber nicht posten, hehe. |
15.07.2010, 21:33 | #8 (permalink) |
Registriert seit: 01.12.2006
Beiträge: 157
|
Oh man, ich mach jetzt seit mehreren Abenden an dem Script herum. Mir sagt der Tipp von TeRp ehrlich gesagt nicht sehr viel. Ich hab es probiert und das Einzige was passiert ist, dass ein Sodat gespawnt wird und dieser immer wieder an eine neue Position im Gebäude gebeamt wird.
Ich möchte folgendes: Auf der Karte habe ich ein Helipad mit einem Radius von 1000. Jetzt soll ein Script überprüfen, welches Gebäude sich am nächsten zu dem Helipad befindet. Ferner soll das script prüfen, wieviele Gebäudepostitionen sich im Gebäude befinden und diese Positionen mit Soldaten besetzen. Ich hab mir auch schon mal das "Random-House-Position-and-Patrol-Script" angeschaut. Auch daraus bin ich nicht schlauer geworden. Bitte helft mir bei dem Script weiter. |
16.07.2010, 10:00 | #9 (permalink) |
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
|
Wenn du mein Scriptbeispiel mal Befehl für Befehl auseinander nimmst, wirst du ganz schnell auf die Lösung kommen.
Ich bin kein Freund dieser "Postet mir bitte ein komplettes Script"-Fragen, denn da ist der Lerneffekt Null und der nächste Thread mit dem nächsten Scriptwunsch folgt meist sogleich. Wie gesagt, nimm mein Script mal Befehl für Befehl (oder Absatz für Absatz) auseinander, was dort genau geschieht. Das kannst du ja mal hier posten und dann können wir von mir aus von dort an gemeinsam weiter machen, aber dir jetzt einfach ein Script vorkauen mach ich eher weniger. |
17.07.2010, 16:00 | #10 (permalink) |
Registriert seit: 01.12.2006
Beiträge: 157
|
Hallo TeRP,
es ist verständlich, dass du kein fertig Script vorgeben willst. Ich wünschte auch, dass ich von selber auf die Lösung kommen würde, da der Editor und das Scripten, bei Arma eigentlich mit das Tollste am Spiel ist. Leider bin ich ein Noob. Also hier mal meine Probleme: while {(_building buildingPos _i) distance [0,0,0] > 1} do { _i = _i + 1; }; Diese Zeile bedeutet, dass solange die Gebäudeposition _i immer um 1 addiert wird, solange die Gebäudeposition nicht mehr als 1m von 0,0,0 (also ganz links unten auf der Karte) entfernt ist. Warum macht man dies nicht mit der If THEN ELSE-Schleife? _pos = floor(random _i); if (_pos == _i) then { _pos = _i - 1; }; Diese beiden Zeilen sagen mir nichts. Den floor-Befehl hab ich noch nie verwendet. Und die zweite Zeile bedeutet, dass _pos (was immer das auch darstellt), wenn es die gleiche Größe wie _i hat, irgendwo etwas abgezogen wird?! |
17.07.2010, 16:27 | #11 (permalink) |
Registriert seit: 20.06.2009
Alter: 51
Beiträge: 158
|
Tach
vielleicht hilft ja das Module: Visual House Positions - Bohemia Interactive Forums
__________________
http://dessau-rosslau.square7.ch/ |
17.07.2010, 16:32 | #12 (permalink) |
Registriert seit: 12.06.2006
Beiträge: 1.252
|
Hier alle Befehle in A2/OA:
Category:Scripting Commands ArmA2 - Bohemia Interactive Community
__________________
PvPscene |
17.07.2010, 18:49 | #14 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Meinst du etwa so? Code:
While {true} do { If ((_building buildingPos _i) distance [0,0,0] > 1) then { _i = _i + 1}; }; Außerdem müsstest du dort noch eine Bedingung einbauen, dass die Schleife verlassen wird. Warum einfach, wenn es auch umständlich geht?
__________________
|
17.07.2010, 19:09 | #15 (permalink) |
warum sollte er denn die schleife doppeln?! er hat doch nur den code von terp kopiert und versucht zu interpretieren, was ihm ja auch gut gelungen ist.
das einzige was er noch benötigt ist der spawn eines soldaten an jeder pos, die er ja eigentlich schon hat... ich hab mich nu mal erbarmt. Code:
private ["_i","_building","_grp"]; if (!isServer) exitWith {}; _heliH = _this select 0; _building = nearestBuilding _heliH; _i = 0; while {(_building buildingPos _i) distance [0,0,0] > 1} do{ _i = _i + 1;}; _grp = createGroup (east); for [{_j=1}, {_j < _i}, {_j=_j+1}] do { _pos = _building buildingPos _j; _unit = _grp createUnit ["TK_Soldier_EP1", _pos, [], 0, "NONE"]; sleep 1; _unit disableAI "MOVE"; }; _grp allowFleeing 0; natürlich ungetestet und ohne gewähr. EDIT: hab aus interesse nun mal selbst probiert. funktioniert so. p.s.: disableai "move" zieht der ki die zähne und wenn man ihr die bewegung lässt laufen sie sofort los wenn sie einen gegner sehen... also aus dem haus raus.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ Geändert von Pfandgiraffe (17.07.2010 um 20:00 Uhr). |
|
18.07.2010, 23:36 | #17 (permalink) |
Registriert seit: 01.12.2006
Beiträge: 157
|
Sehr cool, vielen Dank.
Ich hatte erst gerade Zeit es auszuprobieren. Hat aber nicht ganz funktioniert. Die Soldaten werden immer auf dem Dach des Gebäudes gespawnt. Ich werd mal ein bischen rumprobieren. PS. Das Script verwirrt mich. Ich check das keinen Meter. Ne Erklärung wäre echt toll. Von mir aus auch ein ganzer Aufsatz, hehe. |
19.07.2010, 20:00 | #18 (permalink) |
Registriert seit: 01.12.2006
Beiträge: 157
|
Es geht, es geht.
Ich hab die eine Zeile folgendermaßen verändert: for [{_j=1}, {_j < _i}, {_j=_j+1}] do { _pos = _building buildingPos _j; _unit = _grp createUnit ["TK_Soldier_EP1", _pos, [], 0, "NONE"]; sleep 1; _unit disableAI "MOVE";_unit setPos (_building buildingPos _j)}; Zuvor standen die Soldaten immer auf den Dächern. Jetzt sind sie drin. Vielen Dank nochmals. Auch wenn ich nicht verstehe, wie dieses Script genau funktioniert. Ich werd mich damit nochmals ein bischen auseinandersetzten. |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|