Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 10.03.2013, 09:14   #1 (permalink)
Newbie
 
Registriert seit: 10.03.2013
Beiträge: 19
Standard Einheiten AUF Gebäuden platzieren

Hallo,
ich hoffe dieser Post ist in der richtigen Kategorie, da es ja bei Usermade Missions anscheinend nur um fertige Missionen geht.

Meine Frage ist ob es ein (einfaches) Skript gibt welches mir erlaubt Einheiten bei ihrer Initialisierung auf ein Gebäude zu verschieben.

Mir ist bewusst dass man mit 'Elevation' die Höhe angeben kann, allerdings funktioniert es auf diese Weise nur mit viel Ausprobieren, da die Einheiten manchmal im Gebäude hängen oder aber mehrere Meter fallen.

MfG,
DerFlamer
DerFlamer ist offline   Mit Zitat antworten
Alt 10.03.2013, 10:19   #2 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

Naja, eine "einfache" rundum-glücklich Lösung wird es dazu wohl nicht geben, aber folgender Ansatz kann weiterhelfen:

Einheit neben dem gewünschten Gebäude platzieren. In die init- Zeile der Einheit folgender code:
Code:
nul= this execVM "scriptname.sqf"
Das Script dazu:
Code:
_soldat= _this;
_haus= nearestObject [position _soldat, "Building"];
_hausMass= boundingBox _haus;
_hoehe= ((_hausMass select 1) select 2);
_soldat setPos (_haus modeltoworld [0,0,_hoehe]);
Der Soldat wird etwa in der Mitte des Dachs platziert.

Soll der Soldat aber nicht in der Mitte des Dachs stehen, sondern an einem der Dachränder oder Ecken, braucht es die Mitgabe von mehr Parameter an das Script um den Befehl "boundingBox" entsprechend auszuwerten.
Asso-Loki ist offline   Mit Zitat antworten
Alt 10.03.2013, 10:47   #3 (permalink)
Newbie
 
Registriert seit: 10.03.2013
Beiträge: 19
Standard

Hallo loki,

danke erstmal für deinen Code
Ich habe leider (sehr) wenig Ahnung vom Skripten in Arma, da ich mich erst seit einigen Tagen damit beschäftige.

Zum Verständnis:

Code:
_soldat= _this;
_haus= nearestObject [position _soldat, "Building"];
oder (?)
Code:
_haus= nearestObject [position _this, "Building"];
Erklärt sich von selbst.

Code:
_hausMass= boundingBox _haus;
_hoehe= ((_hausMass select 1) select 2);
Was genau liefert "boundingBox" für Werte? Eine Variable mit Höhe, Breite und Länge? Naja, kann mir ja erstmal egal sein solange es funktioniert

Code:
_soldat setPos (_haus modeltoworld [0,0,_hoehe]);
Wenn ich das richtig verstehe, wird hier die Entfernung vom Boden der Mitte des Hauses aus das Objekt platziert. - Könnte man nicht einfach von der Startposition des Objektes aus die Höhe verändern?

MfG,
DerFlamer
DerFlamer ist offline   Mit Zitat antworten
Alt 10.03.2013, 10:51   #4 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 27
Beiträge: 1.703
Standard

Guckst du Wiki http://community.bistudio.com/wiki/boundingBox
Die beiden Links hier am besten speichern, hilft meistens weiter:
http://community.bistudio.com/wiki/C...Commands_ArmA2 (Die funktionieren auch in ArmA 3) und http://community.bistudio.com/wiki/C..._Commands_List
JoeJoe87577 ist offline   Mit Zitat antworten
Alt 10.03.2013, 10:54   #5 (permalink)
Newbie
 
Registriert seit: 10.03.2013
Beiträge: 19
Standard

Würde das funktionieren?

Code:
_hausMass= boundingBox nearestObject [position _this, "Building"];
_hoehe= ((_hausMass select 1) select 2);
this setPos[getPos this select 0,getPos this select 1,(getPos this select 2)+_hoehe];
Quelle:
Dinge schweben lassen mit "this setpos" / Funktioniert "this setunitpos" nicht mehr? - Forum des German Gamers Club e.V.

Geändert von DerFlamer (10.03.2013 um 11:09 Uhr).
DerFlamer ist offline   Mit Zitat antworten
Alt 10.03.2013, 11:04   #6 (permalink)
Newbie
 
Registriert seit: 10.03.2013
Beiträge: 19
Standard

Hallo Joe,

ein Ja hätte mir auch gereicht
Ich kannte die Seite schon habe aber nicht nachgeguckt weil es mir wie schon gesagt nicht so wichtig ist (solange es funktioniert)

Da ich es jetzt allerdings verstehe könnte ich mir ein paar Skripte machen die jeweils eine Position auf dem Dach eines Gebäudes abdecken, wobei ich damit sehr eingeschränkt wäre.

Ich teste jetzt mal meinen zusammengebastelten Code.

MfG,
DerFlamer
DerFlamer ist offline   Mit Zitat antworten
Alt 10.03.2013, 11:19   #7 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 27
Beiträge: 1.703
Standard

War auch nicht böse gemeint, nur als Info.
Aber ein kleiner Denkanstoß, die boundingBox gibt dir doch max und min Werte zurücke, mach dir doch ein Script, dass zwischen diesen max und min werten zufällig auswählt und dann da Einheiten plaziert.
JoeJoe87577 ist offline   Mit Zitat antworten
Alt 10.03.2013, 12:05   #8 (permalink)
Newbie
 
Registriert seit: 10.03.2013
Beiträge: 19
Standard

Ich hab's auch nicht böse verstanden

Gute Idee, aber im Moment möchte ich dass sie genau da stehen wo ich sie haben will, was allerdings nicht wirklich funktioniert.

Ich habe im Missionsverzeichnis (C:\Users\NAME\Documents\Arma 3 Alpha\missions\MISSION) ein Skript mit dem Namen "PlaceOnTop.sqf" erstellt.

Ich habe es einmal mit diesem Code
Code:
_hausMass= boundingBox nearestObject [position _this, "Building"];
_hoehe= ((_hausMass select 1) select 2);
this setPos[getPos this select 0,getPos this select 1,(getPos this select 2)+_hoehe];
und einmal mit diesem
Code:
_hausMass= boundingBox nearestObject [position _this, "Building"];
_hoehe= ((_hausMass select 1) select 2);
this setPos[getPos this select 0,getPos this select 1,(getPos this select 2)+_hoehe+1];
versucht. Im zweiten Code ist die Höhe inkrementiert worden.

In dem Initialization-Feld steht jetzt dieser Code
Code:
nul= this execVM "PlaceOnTop.sqf";
Allerdings scheint das Skript nicht zu funktionieren, der Soldat steht im Haus
DerFlamer ist offline   Mit Zitat antworten
Alt 10.03.2013, 14:23   #9 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

Das hast Du schön "rationalisiert".

Deine letzte Zeile hat einen Syntax- Fehler (Unterstrich beim _this vergessen) und einen kleinen Logik- Fehler (statt getpos _this select 2 + irgendetwas reicht schlicht _hoehe).

Und weil Du es so gerne "rationalisiert" magst halt so
Code:
_this setPos [getpos _this select 0, getpos _this select 1, ((boundingBox ( nearestObject [position _this, "Building"]) select 1) select 2)];
für das Script oder gleich so
Code:
this setPos [getpos this select 0, getpos this select 1,  ((boundingBox ( nearestObject [position this, "Building"]) select 1)  select 2)]
direkt in der Init- Zeile der Einheit (hierbei aber alle Unterstriche bei this weglassen).

Allerdings ist der Code so etwas "Fehleranfälliger". Zum einen muss man wieder im Editor die Einheit genau Positionieren. Da man sich aber in der 2-D- Ansicht des Editors nicht immer auf die vollständige Übereinstimmung der Gebäude- Icons mit dem tatsächlichen Objekt verlassen kann (zumindest in den bisherigen Teilen), kann das gerne mal mehrere Anläufe brauchen, bis die Einheit dort steht, wo man sie haben möchte.

In Missionen bei welchen viele Objekte initialisiert werden müssen, können zeitliche Verschiebungen bei der Abarbeitung auftreten. Das kann zur Folge haben dass eine Einheit z.B. zuerst vom Kollisionsmodell des Gebäudes leicht verschoben wird, bevor sein Initialisierungs- Code ausgeführt wurde und deshalb nicht exakt dort steht, wo man sie gerne hätte. Im schlimmsten Fall wird die Einheit nach ausserhalb des Gebäudes verschoben und steht dann auch nach Abarbeitung ihres Initialisierungs- Code ausserhalb des Gebäude, respektive fällt aus der vorgegeben Höhe auf den Boden und ist dann eventuell verletzt oder gar futsch.

Aufgrund meiner teilweisen echt bizarren Erfahrungen mit scripten in ArmA, bevorzuge ich eher möglichst stabile Lösungen mit etwas mehr Variablen- Einsatz und "aufwendigerem" Vorgehen (modelToWorld).

Trotzdem empfehle ich Dir erstmal die Variante welche Du gleich in die Init- Zeile der Einheit schreiben kannst. Das machst Du einmal, danach kopierst Du die Einheit beliebig oft und setzt sie zu den Gebäuden Deiner Wahl. Tauchen dabei "Überaschungen" auf, kannst Du Dich dann ja immer noch mit "aufwendigeren" Lösungsansätzen beschäftigen.
Asso-Loki ist offline   Mit Zitat antworten
Alt 10.03.2013, 15:20   #10 (permalink)
Newbie
 
Registriert seit: 10.03.2013
Beiträge: 19
Standard

Zitat:

Das hast Du schön "rationalisiert".

Dankeschön

Zitat:

Deine letzte Zeile hat einen Syntax- Fehler (Unterstrich beim _this vergessen)

Das ist dämlich

Zitat:

einen kleinen Logik- Fehler (statt getpos _this select 2 + irgendetwas reicht schlicht _hoehe).

Jap, absolut falsch den zu übernehmen

Zitat:

Und weil Du es so gerne "rationalisiert" magst halt so

Wie kommst du eigentlich dazu diesen Begriff zu nehmen? Ich hätte einfach "zusammenfassen" gesagt

Zitat:

Allerdings ist der Code so etwas "Fehleranfälliger". [...]
n Missionen bei welchen viele Objekte initialisiert werden müssen, können zeitliche Verschiebungen bei der Abarbeitung auftreten. Das kann zur Folge haben dass eine Einheit z.B. zuerst vom Kollisionsmodell des Gebäudes leicht verschoben wird, bevor sein Initialisierungs- Code ausgeführt wurde und deshalb nicht exakt dort steht, wo man sie gerne hätte.

Das war mir bewusst, das nehme ich aber (grade) für hohe (und seltene) Gebäude, die ich nicht kenne gerne in Kauf. Von einer Sorte Türme weiß ich inzwischen aber dass ich Einheiten 4,6m hoch setzen muss

Zitat:

Aufgrund meiner teilweisen echt bizarren Erfahrungen mit scripten in ArmA, bevorzuge ich eher möglichst stabile Lösungen mit etwas mehr Variablen- Einsatz und "aufwendigerem" Vorgehen (modelToWorld).

Das merke ich mir, danke!


Und nochmal zu dem "rationalisieren"/zusammenfassen:

Ich finde sowas wie
Code:
_soldat= _this;
nicht wirklich nötig.
Ich mag es nicht ganz ausführlich aber auch nicht in einer Zeile, ich ziehe die goldene Mitte vor

Nochmal vielen Dank!
DerFlamer ist offline   Mit Zitat antworten
Alt 10.03.2013, 22:56   #11 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

"Rationalisieren" fand ich auch nicht toll, aber weil mir nichts besseres in den Sinn gekommen ist - wie zusammenfassen - hab ich es halt in Anführungszeichen verwendet.

_Soldat= _this ist wirklich nicht unbedingt nötig. Ich konnte aber auch nicht wissen, was ich Dir zumuten kann , deshalb lieber deutlich und ausführlich, damit Du besser nachvollziehen kannst, was es bezweckt.

Geändert von Asso-Loki (10.03.2013 um 22:58 Uhr).
Asso-Loki ist offline   Mit Zitat antworten
Antwort

Stichworte
einheiten, elevation, gebäude, scripting


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Einheiten nach Tod/Zerstörung löschen Togo Editing & Scripting 15 27.11.2012 07:28
Einheiten in Gruppe löschen Brubaker Editing 6 26.05.2011 17:44
Heal/Repair Script / Einheiten in einem Radius zufällig generieren lassen Noobfire Editing & Scripting 8 06.08.2010 15:22
A2:OA - Einheiten IN Häusern und nicht AUF Häusern platzieren pestbeule Editing & Scripting 8 09.07.2010 17:43
Einheiten in verschiedene höhen platzieren Runord Editing & Scripting 6 07.07.2010 22:51


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