HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Wie genau funktioniert "createUnit" ? (https://hx3.de/editing-scripting-167/genau-funktioniert-createunit-16938/)

Hath Kull 16.06.2009 20:18

Wie genau funktioniert "createUnit" ?
 
Hi!
Ich weiß, ich stelle in letzter Zeit ne Menge blöder Fragen, aber statt mich dafür zu entschuldigen, kommt hier die nächste: ääh siehe Threadtitel!

Ich versuche für eine CutScene einen Hubschrauber zu erstellen, der in der Luft steht um den dann die Kamera dann ein bisschen kreisen kann usw... Ich will praktisch genau das, was man bekommt, wenn man im Editor per Mausklick einen bemannten Heli erstellt, der "Fliegend" in der Speziell-Zeile stehen hat. Nicht mehr und nicht weniger.

Ich habs so probiert:
Code:

GrpOne = CreategroupWEST
"Av8b" createUnit [4210,3690,1, GrpOne, "_cut01_heli01 = this", 1, "Corporal", "FLY"]

aber irgendwas kann da nicht stimmen, denn es wird gar nichts erstellt. Ich habe tausendmal versucht, die "CreateUnit"-Zeile abzuändern, habe Stunden damit zugebracht. Nix! Mit "CreateVehicle" ist es kein Problem, aber dann ist das Ding ja leer und kann nicht fliegen! Es ist zum ausrasten!

ps: Jaja ich weiß dass der AV8B kein Hubschrauber ist!

HeliJunkie 16.06.2009 20:57

Zitat:

Zitat von Hath Kull (Beitrag 245273)
Ich habs so probiert:
Code:

GrpOne = CreategroupWEST
"Av8b" createUnit [4210,3690,1, GrpOne, "_cut01_heli01 = this", 1, "Corporal", "FLY"]


Ich kann es gerade nicht "live" testen, aber ich sehe so schon 3 Fehler:
1. Es fehlt ein Leerzeichn hinter CreateGroup
2. Die Positionsangaben müssen als Array übergeben werden.
3. Der letzte Parameter ist für diese Version des Befehls zu viel.

Probiere es doch mal so:
Code:

GrpOne = Creategroup WEST
"Av8b" createUnit [[4210,3690,1], GrpOne, "_cut01_heli01 = this;", 1, "Corporal]

Wobei die Positions-Höhe (orange markiert) mit 1m für eine AV8B nicht wirklich hoch ist.... ;-)
Allerdings fliegt der jetz nicht...
Wenns in der Luft sein soll... müsste es so ähnlich aussehen:
Code:

GrpOne = Creategroup WEST
Plane = GrpOne createUnit ["Av8b",[4210,3690,100], [],0,"FLY"];

Und hier noch die zwei links zu den Befehlssyntax aus dem WIKI:
createUnit - Bohemia Interactive Community
createUnit array - Bohemia Interactive Community

Hath Kull 16.06.2009 21:13

Oh mann, das fehlende Leerzeichen bei der "Creategroup WEST" ist echt hart! :D
Mit der Höhe von 1m hast du natürlich recht :), aber ich dachte durch das "FLY" kriegen Einheiten sowieso einen Standardwert von 50 zugewiesen... Abgesehen davon sind ja nicht solche Kleinigkeiten mein Problem, sondern dass der Heli (jetzt ein MH60S) gar nicht erzeugt wird.

Ich habe deine beiden Codebeispiele 1:1 in mein Script kopiert (Beim Ersten natürlich hinter das Corporal noch ein " gesetzt und beim Zweiten "plane" durch mein "_cut01_heli01" ersetzt) und nach wie vor: es wird gar nichts erzeugt!

Ich hatte schon immer Probleme mit diesem blöden createUnit. Bei Flashpoint hatte ich es irgendwann hingekriegt und jetzt bei ArmA2 bin ich natürlich total aus der Materie raus nach all der Zeit...

Mr-Murray 16.06.2009 23:46

Code:

GrpOne = Creategroup WEST
Plane = GrpOne createUnit ["Av8b",[4210,3690,100], [],0,"FLY"];

PERFEKT HeliJunkie!
Danke auch für das 3D-Addon!!!

@Hath, ein bissl Fummelei und du bist wieder drin ;)
Ohne Friemelei macht doch das Ganze nur halb so viel Spaß!

Hath Kull 17.06.2009 00:08

Woran kann es liegen, dass mit genau diesem Code bei mir NICHTS erstellt wird? Bin mit meinem Latein am Ende...
Gibts vielleicht eine andere Möglichkeit einen besetzten Heli zu spawnen?

HeliJunkie 17.06.2009 08:14

Zitat:

Zitat von Mr-Murray (Beitrag 245363)
Code:

GrpOne = Creategroup WEST;
Plane = GrpOne createUnit ["Av8b",[4210,3690,100], [],0,"FLY"];

PERFEKT HeliJunkie!

Naja... aber nur fast.... :rolleyes:
hinter der ersten Zeile fehlte noch das ";"

@Hath Kull:
Warum bist du dir denn so sicher, das es nicht funktioniert?
Woher hast du denn die Koordinaten?
Nicht, das du das Flugzeug (oder den Heli) nicht siehst, weil der 4km von dir weg spawnt ????

Um "das Vehicle" mal über dir zu spawnen versuch doch mal folgendes:
Code:

GrpOne = Creategroup WEST;
Plane = GrpOne createUnit ["Av8b",[(getpos player) select 0,(getpos player) select 1,100], [],0,"FLY"];

(P.S.: Kann ich nicht live testen, daher ohne Gewääähr! ;))


Aber pass auf das dir das Ding nicht auf den Kopf fällt! Soweit ich mich erinnere, spawnen die ohne Besatzung! Die müsstest du noch mit extra Befehlen zuweisen.

Lester 17.06.2009 09:27

Das Vehicle mit CreateUnit zu erstellen ist doch nicht euer Ernst, oder ?

Der Befehl ist für "schlaue Objekte" (Einheiten) reserviert, während CreateVehicle für "tote Objekte" gedacht ist.

(Und ja, Logiken sind de facto auch Einheiten und sollten somit in ArmA2 auch mit Createunit erzeugt werden, es mit CreateVehicleLocal zu machen ist nur ein dirty Hack zumal die dann untypischerweise beim Spieler lokal sind.)

Hath Kull 17.06.2009 11:32

@HeliJunkie:

Dass der Heli nicht spawnt weiß ich, weil ich im Skript danach die Kamera auf den (nicht gespawnten) Heli fokussieren lasse (ja die Namen in der Spawnzeile und in der CamPrepareTarget-Zeile stimmen überein). Die Koordinaten hab ich mir vorher mit "camera.sqs" rausgesucht, sie befinden sich direkt neben dem Spieler. Lasse ich den Heli (leer) mit "CreateVehicle" spawnen, steht er genau wo er stehen soll. ich brauch ihn aber fliegend mit laufendem Rotor!

EDIT: Lester hat tatsächlich recht! Man kann mit "CreateUnit" keine Fahrzeuge spawnen! Mit einem Soldaten funktionierts! Das behebt aber mein Problem nicht, dass ich einen fliegenden Heli brauche. Ich habs so versucht:
Code:

HELI = "MH60S" createVehicle [4215,3690,100];
GrpOne = Creategroup WEST;
PILOT = GrpOne createUnit ["USMC_Soldier_SL",[(getpos player) select 0,(getpos player) select 1,100], [],0,"FLY"]];
PILOT moveindriver HELI;
PILOT flyinheight 20;
//und zur Sicherheit noch dazu:
HELI flyinheight 20;

Der Heli entsteht, der Pilot sitzt drin. Das war's. Kein Rotor an, kein Zentimeter Flughöhe...

@Lester:
Ich brauche aber eine "schlaue" Version vom Heli. Willst du sagen es ist nicht möglich per Skript einen von KI besetzten fliegenden Helikopter zu spawnen?

Lester 17.06.2009 12:45

Ein gescheites mittel kenn ich dazu auch nicht, ich hab damit aber auch noch nicht genauer mit rumgespielt.

Ich denke mal es hängt damit zusammen das die KI's einige Zeit brauchen bis sie "schlau" da sind.
Ähnliches gibt es ja auch bei Fahrzeugen wo die Actions etwas brauchen bis sie zur Verfügung stehen.

Ich würde versuchen entweder den Heli irgendwo weit entfernt auf dem Boden zu erzeugen, starten lassen und dann (wenn er abhebt, also die KI aktiv sein muß) zum Einsatzgebiet fliegen bzw. vielleicht sogar dort in die Luft hinbeamen.
Ich hab aber keinen Schimmer wie die aktuelle KI dann damit klarkommt, bei OFP hatte ich mit einem Flugzeugtest ganz gute Erfolge erzielen können.
Da hab ich eine bereits existierende KI im Missionsverlauf in eine Cessna gesetzt und das in die Luft gebeamt und mit velocity "angeschoben" die kam damit gut zurecht.

Hath Kull 17.06.2009 13:04

Hm, dieses "erst auf dem Boden erzeugen, starten lassen..." ist für mich keine Lösung, weil ich den Heli sehr abrupt brauche.
SP-Mission. Spieler ist ein Bauer. Wird durch auslösendes Ereignis an Verangenheit erinnert (wo er Helikopterschütze war).
Kamera Black Out;
Kamerafokus auf entfernten Ort;
fliegenden Heli erzeugen;
Kamera Black In (SchwarzWeiß);
kleine Kamerafahrt um den Heli, dessen Schütze auf ein imaginäres Ziel feuert;
Kamera Black Out;
Heli löschen;
zurück zum Spiel...

Das muss alles recht schnell gehen. Soll insgesamt nur ca.5-7sec in Anspruch nehmen. Weil der Spieler volle Bewegungsfreiheit hat, kann ich nicht schon Minuten vorher irgendwo nen Heli auf den Boden stellen.
Das muss doch irgendwie zu machen sein. Meine Güte ich dachte die Engine hat sich seit Flashpoint irgendwie weiterentwickelt (außer mit Bloom & MotionBlur)!

deralky 17.06.2009 13:09

geht schon einfach irgendwo in die entlegenste Ecke und wenn du ihn benötigst per setpostion an den gewünschten Ort "beamen" per velocity noch ein wenig speed geben

Hath Kull 17.06.2009 13:17

DANKE!! Auf die einfachsten und besten Lösungen kommt man eben meist nicht selbst! :) Muss aber halt wirklich ne entlegene Ecke sein, damit der Spieler den Rotorsound nicht hört (kann man da irgendwie per script die Lautstärke auf 0 drehen und später wieder hoch?) ... außerdem darf das Fuel dem Heli nicht ausgehen, während er auf seinen Einsatz "wartet", aber das is ja alles hinzukriegen! Mensch alky du bist mein Retter.

...trotzdem blöd, dass man zu solchen "unsauberen" Mitteln greifen muss, weil es mit der BIS-Engine scheinbar nicht anders möglich ist.

deralky 17.06.2009 13:24

naja das gleiche hatte Lester gesagt nur vielleicht nicht ganz so verständlich für ein unerfahrenden Missionbastler also gehört der dank ihm

Ich weiß nicht ob das möglich ist aber las den Heli doch einfach später starten heißt du lässt ihn also 20-30sec bevor er benötigt wird starten

Hath Kull 17.06.2009 13:29

Hast recht! Hatte ich ganz übersehen. Oder vielleicht war ich an der Stelle auch noch nicht so offen für "Alternativlösungen" und hab es willentlich übersehen. :o) Also ein genausogroßes Stück DANK an Lester!!

Ganz unerfahren bin ich eigentlich nicht. Naja zumindest hab ich in Flashpoint sehr ausgereifte Sachen gemacht, aber das ist ne Weile her und ich bin immer noch dabei die Basics wiederzuentdecken...

HeliJunkie 17.06.2009 15:27

OK...
... der Einwand von Leser war verdammt gut! :confused:
Hätte man auch von selbst drauf kommen können (oder besser müssen).

Mr-Murray 17.06.2009 20:07

Ups *Asche auf mein Haupt*
Natürlich mit CreateVehicle !!! Erst gucken, dann kommentieren und loben!

In meinem AirVehicleCreate-Example habe ich das natürlich auch so gemacht und wie Lester auch
schon erwähnte die Kiste mit setVeloCity angeschoben. Lief in ArmA wunderbar, hab´s nur
in A2 noch nicht getestet und würde es für A2 eh komplett neu aufsetzen und natürlich als Funktion.


Viele Grüße

Mr-Murray

HeliJunkie 17.06.2009 20:35

Hab das ganze mal im BI3DE nachgestellt, und mir dann den Code der misson.sqf angeschaut....
Hier ist der Originalausschnitt:
Code:

_group_0 = createGroup _center_0;
 
_vehicle_0 = objNull;
if (true) then
{
  _this = createVehicle ["MH60S", [3519.1914, 3616.2317], [], 0, "FLY"];
  _vehicle_0 = _this;
  _this setVehicleVarName "HeliUH60";
  HeliUH60 = _this;
};
_unit_1 = objNull;
if (true) then
{
  _this = _group_0 createUnit ["CDF_Soldier_Pilot", [3567.2214, 3608.0342, 0], [], 0, "CAN_COLLIDE"];
  _unit_1 = _this;
  _this setVehicleVarName "HeliPilot";
  HeliPilot = _this;
  _this setUnitAbility 0.60000002;
  _this moveInDriver _vehicle_0;
  if (true) then {_group_0 selectLeader _this;};
};

Etwas vereinfacht würde ich sagen:
Code:

NewGroup = CreateGroup West;
HeliUH60 = createVehicle ["MH60S", [3519.1914, 3616.2317], [], 0, "FLY"];
HeliPilot = NewGroup createUnit ["CDF_Soldier_Pilot", [3567.2214, 3608.0342, 0], [], 0, "CAN_COLLIDE"];
HeliPilot moveInDriver HeliUH60;

Die Positionsdaten müssen natürlich auf eure Bedürfnisse angepasst werden....

Hoffe das funktioniert....

Gruß
HeliJunkie

Mr-Murray 17.06.2009 20:45

Schaut doch schon besser aus ;)

Duke49th 18.06.2009 02:32

Hab ja nu wirklich keine AHnung von dem Kram und verzweifel regelmässig selber an derart klerinen Dingen(darum habsch auch glei hier nachgeguckt :D), aber ich meine da mal aus einer Evo geklaut zu haben und da war folgendes noch mit zwischen den Zeilen:

Code:

?!(EngineOn _jeep) : _jeep engineOn true
(Habs jetzt direkt aus der Biki kopiert, aber es geht ja nur ums Prinzip)

Also irgendwas mit dem "EngineOn" Befehl halt. Guck mal wie das in ArmA 1 in einer Evo gelöst wird. Hatte mir damals auch geholfen.

Hath Kull 18.06.2009 12:17

@HeliJunkie:
Ich bin begeistert! Was du unter "etwas vereinfacht" da hingescriptet hast ist genau perfekt! Kein vorher erstellen der Einheit, kein <setpos>... Funktioniert 1A! Das "engineON" ist noch nicht mal nötig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.

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