07.12.2012, 15:27 | #1 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Entfernungsabfrage
Ich versuche gerade ein Phänomen bzw. ein Bug durch einen Script zu fixen. Es geht darum, dass die vordefinierten Positionen in den Häusern(buildingPos) oft ca. 0,1 bis 0,6 Meter über dem Dach/Boden liegen. Ich habe damit herum experimentiert, indem ich ein Objekt vorher fallen lies und abfragte, in welcher Höhe dieses Objekt zum erliegen kam. Jedoch liegt diese Höhe manchmal unter den Häusern selbst ("CAN_COLLIDE" wurde dafür bereits genutzt und trotzdem tritt es auf). Nun meine Frage: Gibt es eine Möglichkeit, mit der man die Distanz zwischen einer Position und den unmittelbar darunter stehenden Boden eines Hauses abfragen lassen kann?
Geändert von Rockhount (07.12.2012 um 16:31 Uhr). |
07.12.2012, 16:45 | #2 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Das ist zwar ziemlich umständlich erklärt, aber ich verstehe was du meinst. Deine Lösung ist nichts anderes als das, was ich schon versucht habe. Mit dem Unterschied, dass ich eine Teekanne nahm und keine KI. Mein Script muss dieses Prozedere mehrere tausend Mal durchlaufen und deswegen würde es viel zu viel Performance benötigen, wenn ich mehrere tausend KI's dafür nehmen würde. Außerdem darf die Schleife mit 1000 bis 10000 Durchläufen nicht länger wie ein paar Sekunden dafür benötigen. Mein Script scannt die Karte(Chernarus, Utes, ...) nach begehbaren Häusern. Danach wird eines der vordefinierten Positionen(buildingPos) zufällig ausgesucht, um am Boden an dieser Stelle Waffen und Magazine zu spawnen. Geändert von Rockhount (07.12.2012 um 16:58 Uhr). |
07.12.2012, 16:54 | #3 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Dann müsste ich per Hand für jede mögliche buildingPos eine Höhe in ein Array vordefinieren. Das ist aber viiiiiiiiiiiiiiel zu aufwendig, da es tausende gibt. Ich möchte auch mein Script dynamisch lassen und nichts vordefinieren müssen.
Geändert von Rockhount (07.12.2012 um 16:57 Uhr). |
07.12.2012, 17:01 | #5 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Leider funktioniert das nicht immer. Manchmal fällt es einfach durch das Haus durch. Deswegen würde ich ja lieber die direkte Distanz abfragen, anstatt etwas fallen zu lassen. Außerdem kann ich nur ein "WeaponHolder" nehmen, da die Waffen/Magazine klar auf dem Boden zu sehen sein müssen. Geändert von Rockhount (07.12.2012 um 17:10 Uhr). |
07.12.2012, 17:22 | #7 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Dann werde ich es wohl so fixen müssen, indem nur Positionen genommen werden, die nicht Höher (ATL) als 1-2Meter sind, da bei diesen Positionen der besagte Effekt kaum auftritt.
Geändert von Rockhount (07.12.2012 um 17:34 Uhr). |
08.12.2012, 08:05 | #8 (permalink) |
Du könntest ein unsichtbares HeliH spawnen. Dieses setzt du 0,1 Armameter unter dein zu platzierendes Objekt. Anschließend fragst du mit lineIntersets ob etwas dazwischen ist. Wenn nein, dann platziere das HeliH erneut 0,1 Armameter tiefer. usw... Der letzte Wert bevor es ein true gab ist deine gesuchte Höhe.
Ist aber auch irre aufwändig. Hab mit diesem Problem auch schon sso meine Erfahrungen gemacht. Ich habe es einmal so gelöst: Ich habe geprüft ob die BuildingPos höher als 1 Armameter liegt, wenn ja dann platziere Objekt pauschal -0,6 tiefer, sont -0,1. Damit bin ich ganz gut gefahren. Jedoch ist BuildingPos manchmal auch über die x oder y Achse verschoben und Waffenkisten hängen dann an der Außenwand im 1. Stock! Der DayZ Mod platziert Objekte wohl aus guten Grund nur im Erdgeschoss. (so war es zumindest im Mai als ich da das letztemal rengeschaut habe) Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
08.12.2012, 12:05 | #10 (permalink) |
DayZ ist doch bald alle gängigen Karten durch. Dann kannst du da ja deine Positionen her nehmen Rockhount.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
08.12.2012, 13:31 | #11 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Ich will ja diesen Script erstellen, weil es dynamisch sein soll. Wenn ich anfange die Dayz Daten oder irgendwelche hinterlegte Daten zu nehmen, dann brauch ich auch diesen Script nicht zu erstellen. Außerdem soll es für die neue Karte Tarviana sein und dafür gibt es, wie ich glaube, noch keine Daten von Dayz. Aber vielen Dank für den Lösungsweg!
Das Problem mit der Wand könnte man ja auch mit lineIntersects lösen, indem man das HeliH 0,7 Meter in den 4 Eckpunkten um die Waffenkiste herum platziert und das gleiche wieder abfragt. Ach, es wäre doch toll, wenn es ein Befehl geben würde, bei dem man nur angeben muss: Pos, XDir, YDir und man würde die Entfernung von der angegebenen Position bis zur Oberfläche des nächsten Objekts in diese Richtung zurückbekommen. Geändert von Rockhount (08.12.2012 um 13:38 Uhr). |
08.12.2012, 15:06 | #12 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
|
Für Taviana biste aber deutlich zu spät dran... die gibt es bereits als DayZ Version... Nogova2010 von Hotze ist ein Geheimtipp...
Achso.. und nochwas.. weil auch ich schon ein wenig an so einem Script gebastelt habe.. es scheint in der Engine ja irgendeine Möglichkeit zu geben, dass die Waffen immer auf dem Boden liegen. Wenn man nämlich als Spieler seine Waffe in einem Gebäude ablegt, liegt diese zu 99,9% immer optimal auf dem Fussboden. Schon seltsam... Desweiteren habe ich die Erfahrung gemacht, dass es beim Ausloten der Höhe manchmal im hunderstel, wenn nicht sogar im tausendstel Bereich zugeht. Nur ein klitzeklein wenig zu hoch oder zu niedrig platziert und das Objekt ist plötzlich um mehrere Meter in der Höhe nach oben oder unten verschwunden. Da bringt es auch nichts, inGame eine Waffe abzulegen, dann die Position des Weaponholders abzufragen und mit dieser Position dann per Script einen Weaponholder an genau dieser Position zu spawnen. Das Ding liegt anschliessend sonstwo, aber nicht auf der Position die man vorher ausgelesen hat. Besonders gut zu sehen in diesem riesigen Blechschuppen... DAS ist ArmA! Geändert von Buliwyf (08.12.2012 um 15:21 Uhr). |
08.12.2012, 15:33 | #13 (permalink) |
Registriert seit: 16.07.2010
Beiträge: 305
|
Also hiermit klappt es wunderbar:
Code:
... _i3 = 0; for [{_i2 = 0},{_i2 < 50},{_i2 = _i2 + 1}] do { if ((((_EveryHouse select _i) buildingPos _i2) select 0 == 0)) then { _i3 = _i2 - 1; _i2 = 51; }; }; if (_i3 > 0) then { _SpawnPosition = (_EveryHouse select _i) buildingPos (floor(random _i3)); if ((_oldPos distance _SpawnPosition) > _minDistance) then { _Weaponholder = "WeaponHolder" createVehicle [0,0,0]; _Weaponholder addWeaponCargoGlobal["MAAWS",10]; _Weaponholder setPos [_SpawnPosition select 0, _SpawnPosition select 1, (_SpawnPosition select 2) - .1]; _TempPos = getPosASL _Weaponholder; _Height = 0; for [{_i4 = 0},{_i4 < 31},{_i4 = _i4 + .01}] do { if (lineIntersects [_TempPos, [_TempPos select 0, _TempPos select 1, (_TempPos select 2) - _i4], _Weaponholder]) then { _Height = _i4 - .01; _i4 = 31; }; }; _Weaponholder setPos [_SpawnPosition select 0, _SpawnPosition select 1,(_SpawnPosition select 2) - _Height]; _oldPos = getPos _Weaponholder; Player setPos _SpawnPosition; sleep 10; }; }; ... Geändert von Rockhount (08.12.2012 um 15:42 Uhr). |
09.12.2012, 11:01 | #14 (permalink) |
Fein!
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|