Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 07.12.2012, 14:27   #1 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard 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 15:31 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 07.12.2012, 15:45   #2 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

Zitat von Vienna Beitrag anzeigen

Die Häuser haben im Editor eine fixe ID, welche unter IDs im Editor angezeigt werden.

Erstelle einen Funk-Auslöser der folgende Routine aufruft:

Code:
temp = ObjektID spawn
 {
  hint format
   [
    "Objekt %1 Seehöhe: %2",
    _this,
    getPosASL (position player nearestObject _this) select 2
   ]
 }
Anstelle ObjektID setzt du die Nummer des Objkets ein und es wird dir die Seehöhe des Objekts angezeigt.

Auf diese Seehöhe kannst du dann mit dem Befehl Objekt setPosASL [x,y,Höhe]; für andere Objekte Bezug nehmen.
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 15:58 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 07.12.2012, 15:54   #3 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

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 15:57 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 07.12.2012, 15:58   #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

Verstaue die Waffen und Munition in einem beweglichen Objekt. Das sinkt ja immer bis auf einen festen Boden. Dem Objekt kannst du in der Mission.sqm das Aussehen einer Munikiste geben (so hoffe ich).
Vienna ist offline   Mit Zitat antworten
Alt 07.12.2012, 16:01   #5 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

Zitat von Vienna Beitrag anzeigen

Das sinkt ja immer bis auf einen festen Boden.

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 16:10 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 07.12.2012, 16:11   #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

Wenn es nicht anders geht, dann "hängt" halt eine Munikiste in der Luft. Besser als wegen so einem Bug Zeit zu verplempern.
Vienna ist offline   Mit Zitat antworten
Alt 07.12.2012, 16:22   #7 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

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 16:34 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 08.12.2012, 07:05   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.12.2012, 08:58   #9 (permalink)
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 77
Beiträge: 6.547
Standard

*deleted*

Xeno

Geändert von Xeno (08.12.2013 um 16:23 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 08.12.2012, 11:05   #10 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.12.2012, 12:31   #11 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

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 12:38 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 08.12.2012, 14:06   #12 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

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 14:21 Uhr).
Buliwyf ist offline   Mit Zitat antworten
Alt 08.12.2012, 14:33   #13 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rockhount
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

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 14:42 Uhr).
Rockhount ist offline   Mit Zitat antworten
Alt 09.12.2012, 10:01   #14 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Fein!
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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


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