HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   KI nachRespawn im Fahrzeug (https://hx3.de/editing-scripting-167/ki-nachrespawn-fahrzeug-21077/)

jackpot 29.10.2011 14:30

KI nachRespawn im Fahrzeug
 
Hi Leute!

Ich habe mich dumm gegooglet auf der Suche nach einer Antwort für mein Problem.
Ich erstelle gerade eine neue MP-Map und wollte feindliche Einheiten erstellen. Ich habe einen BMP-3 plaziert, inklusive Crew. Wenn der Panzer zerstört wird, soll die Crew respawnen und in den bereits gerespawnten Panzer einsteigen.
Der Panzer und die Crew respawnen einwandfrei, habe schon ein Skript dafür, jedoch funktioniert das mit der Crew nicht, sie will einfach nicht einsteigen. :(
Ich finde es schade, denn das nervt mich gewaltig !!


Ich bitte euch mir zu helfen, leibe Community!!


mfg jackpot

AHTNTEPPOP 29.10.2011 21:07

Ich hab's mal ins richtige Forum verschoben.:)

Vienna 30.10.2011 00:38

Wo ist dein Skript?

jackpot 31.10.2011 15:12

Das Script für den Fahrzeug-Respawn war ein vorgefertigtes, welches ich mir downgeloadet habe. Es heißt "respawn_vehicle.sqs" und ist im Missionsordner drin. :)
Den Einheiten-Respawn habe ich per "Respawn_East"-Markierung gemacht.
Dann habe ich deine Idee, Vienna, aufgegriffen, und die Einheiten steigen mittlerweile auch in die Fahrzeuge ein. Manchmal gibt es Probleme, sodass sie nicht gleich einsteigen wollen.
(Ich habe einen Auslöser erstellt mit einem moveIn-Befehl bei Deak.: [pl2 (Soldatenname) moveInDriver Fz4 (Fahrzeugname)].
Bei den Einheiten dann z.B. "this moveInDriver Fz4")

Und witzigerweise spawnen statt nur einem manchmal zwei Fahrzeuge. Das ist aber bei den BLUFOR Einheiten anders, da spawnt ganz normal nur ein Fahrzeug.

Am besten wäre es sowieso, wenn man gleich besetzte Fahrzeuge spawnen könnte, ich habe aber auch dafür noch keine Lösung gefunden. :(


mfg jackpot

Vienna 01.11.2011 08:56

Kopiere den Inhalt des Skripts hier rein.

Schreibe am Anfang der Zeilen [code] und am Ende [/code...] ohne die 3 Punkte.

Wen beim Respawn zwei Fahrzeug erstellt werden, dann liegt das vermutlich daran, dass in MP das Respawnskript bei zwei Spielern aufgerufen wird.

jackpot 02.11.2011 15:39

Jo, hier mein Skript:

Code:

? !(local server) : exit


_vehicle = vehicle _this
_startpos = getpos _vehicle
_direction = getdir _vehicle
_typ = typeOf _this


#loop
~10
? (getdammage _vehicle > 0.98) : goto "checkdamage"
? !(canMove _vehicle) : goto "checkmove"
? (fuel _vehicle == 0) : goto "checkfuel"
goto "loop"


#checkdamage
~10
? (getdammage _vehicle > 0.98) : goto "destruct"
goto "loop"


#checkmove
~10
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (canMove _vehicle) : goto "loop"
goto "destruct"


#checkfuel
~10
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (fuel _vehicle > 0) : goto "loop"
goto "destruct"


#destruct
? (getdammage _vehicle < 1) : _vehicle setdammage 1
~30
deletevehicle _vehicle
goto "createnew"


#createnew
~10
_new = _typ createVehicle [_startpos select 0, _startpos select 1,0]
_new setdir _direction
_new exec "respawn_vehicle.sqs"

exit


Vienna 02.11.2011 21:40

Liste der Anhänge anzeigen (Anzahl: 1)
Dein Skript ist veraltet und enthält nicht den Respawn der Besatzung. Nimm das folgende Skript.

Es enthält einen Wegpunkt der das Fahrzeug vom Respawnort zu einem Zielort fahren lässt. Für den den Zielort musst du eine Position angeben. Hier im Beispiel mit einem Marker Namens "ZielOrt". Du kannst für jedes Fahrzeug einen anderen Ort nehmen.

Der Aufruf erfolgt in der Initzeile der Fahrzeuge. Hier im Beispiel:

temp = [this, markerPos "ZielOrt", 15, 3] execVM "FahrzeugRespawnenMitWegpunkt.sqf";

Die 15 steht für die Respawnzeit und die 3 für die Anzahl der Respawns.

Die Zeilen mit // sind Kommentare, welche das Skript erklären.

Im Anhang auch ein Beispiel mit dem Skript.


Skript FahrzeugRespawnenMitWegpunkt.sqf
Code:

//Respawn eines Fahrzeuges mit Besatzung und Einsatzziel. [Vienna 02.11.2011]
//Ausführung erfolgt beim Server.
//Das Skript wird in der Initzeile eines Fahrzeuges mit Besatzung gestartet.
//
//Aufruf: [<Fahrzeug>,<Position des Einsatzortes>,<Respawnzeit>,<Respawnanzahl>] execVM "FahrzeugRespawnenMitWegpunkt.sqf";
//
//Beispiel für Aufruf in der Initzeile des Fahrzeuges (für den Zielort wird ein Marker Namens "ZielOrt" angenommen):
// temp = [this, markerPos "ZielOrt",15,3] execVM "FahrzeugRespawnenMitWegpunkt.sqf";

if (!isServer) exitWith {}; // Programm nicht ausführen, wenn nicht Server/Host.

//Lokale Variable
Private ["_clearAllWP","_Vehikel","_RespZeit","_ZielPos","_Respawns","_StartPos","_Richtung","_Driver","_Gunner","_Comman","_Gruppe","_i","_temp"];

//Parameter:
 _Vehikel = _this select 0; //Fahrzeug
 _ZielPos = _this select 1; //Position des Einsatzortes
 _RespZeit = _this select 2; //Respawnzeit
 _Respawns = _this select 3; //Anzahl der Respawns

//Position des Respawnortes
 _StartPos = position _Vehikel;
//Ausrichtung des Fahrzeuges
 _Richtung = getDir _Vehikel;
//Besatzung auslesen
 if (! isNull driver  _Vehikel) then {_Driver = driver _Vehikel; _Gruppe = group _Driver};
 if (! isNull gunner  _Vehikel) then {_Gunner = driver _Vehikel; _Gruppe = group _Gunner};
 if (! isNull commander _Vehikel) then {_Comman = driver _Vehikel; _Gruppe = group _Comman};
//Keine Besatzung vorhanden? Dann exit!
 if (isNil "_Gruppe") exitWith {sleep 1; player GroupChat "Keine Besatzung im Fahrzeug!"};

//Kampfverhalten der Gruppe:
 //Verhalten: sorglos/deckungslos --> "CARELESS","SAFE","AWARE","COMBAT","STEALTH" <-- vorsichtig/Ausnützung jeder Deckung       
 _Gruppe setBehaviour "AWARE";
 //SpeedMode: "LIMITED"(half speed),"NORMAL"(full speed, maintain formation),"FULL"(do not wait for any other units in formation)
 _Gruppe setSpeedMode "NORMAL"; 
 //CombatMode: "BLUE"(Never fire),"GREEN"(Hold fire-defend only),"WHITE"(Hold fire,engage at will),"YELLOW"(Fire at will),"RED"(Fire at will,engage at will),
 _Gruppe setCombatMode "WHITE";
 //Formation: "COLUMN","STAG COLUMN","WEDGE","ECH LEFT","ECH RIGHT","VEE","LINE","FILE","DIAMOND"
 _Gruppe setFormation "LINE";
 //Fluchtverhalten: 0 = 0%, 1 = 100%
  _Gruppe allowFleeing 0.5;   

//Schleife für die Anzahl der Respawns
for "_i" from 0 to _Respawns do
 {
  //Wegpunkt zum Einsatzort erstellen
  _temp = _Gruppe addWaypoint [_ZielPos,0];
  [_Gruppe, 0] SetWaypointType "MOVE";
  _Gruppe setCurrentWaypoint [_Gruppe, 1];
  if (_i < _Respawns) then
  {
    //Warten bis Fahrzeug zerstört oder ohne Besatzung
    waitUntil {count Crew _Vehikel == 0 or damage _Vehikel > 0.8};
    //Wegpunkt löschen
    deleteWaypoint[_Gruppe,1];
    //neues Fahrzeug erstellen
    sleep _RespZeit;
    _Vehikel = createVehicle [typeOf _Vehikel, _StartPos, [], 0, "FORM"];
    _Vehikel setDir _Richtung;
    if (! isNil "_Driver") then
    {
      _Driver = _Gruppe createUnit [typeOf _Driver, [0,0], [], 0, "FORM"];
      _Driver moveInDriver _Vehikel
    };
    if (! isNil "_Gunner") then
    {
      _Gunner = _Gruppe createUnit [typeOf _Gunner, [0,0], [], 0, "FORM"];
      _Gunner moveInGunner _Vehikel
    };
    if (! isNil "_Comman") then
    {
      _Comman = _Gruppe createUnit [typeOf _Comman, [0,0], [], 0, "FORM"];
      _Comman moveInCommander _Vehikel
    }
  }
 }


jackpot 03.11.2011 17:48

Danke schon mal, Vienna, für die Hilfe!
Ich hätte aber noch eine Frage.
Das Script ist jetzt dafür ausgelegt, dass die Fahrzeuge nach dem Respawn zu einem Wegpunkt vorrücken, richtig?
Ich brauche diese Funktion aber eigentlich nicht. Ich will nur, dass das Fahrzeug samt Besatzung an dem Punkt respawnt, wo ich das Fahrzeug im Editor platziert habe. Wenn ich es leer platziere, soll es leer respawnen. Wenn ich es mit Besatzung platziere, soll die Besatzung nach dem Respawn schon im Fahrzeug sitzen. Ist das darin schon eingebaut oder wäre das wieder etwas anderes?
Ist das überhaupt machbar?
Ich kenne mich nicht so gut damit aus, als das ich das dort herauslesen könnte, geschweige denn, so ein Script selbst zu schreiben. :nixweiss:

Daher könnte das ein bisschen komplizierter werden. :D


Aber danke für die Hilfe!

mfg jackpot

Vienna 03.11.2011 19:57

Liste der Anhänge anzeigen (Anzahl: 1)
Obiges Skript ist nur möglich mit Besatzung (die auch respawnt) und Angabe einer Zielortposition, wohin das Fahrzeug dann fährt.


Im neuen Skript ist die Zielortposition jetzt der letzte Parameter und kann entfallen. Dann bleibt das Fahrzeug am Erstellungsort (dort wo es im Editor abgestellt wurde).

Neuer Eintrag in die Initialisierungszeile.
Aufruf mit Fahrt zum Einsatzort (beachte die neue Reihung der Parameter):
temp = [this, 15, 3, markerPos "ZielOrt"] execVM "FahrzeugRespawn_KI_WP.sqf";
Aufruf ohne die Fahrt:
temp = [this, 15, 3] execVM "FahrzeugRespawn_KI_WP.sqf";

Die 15 steht für die Respawnzeit und die 3 für die Anzahl der Respawns.

Wird das Fahrzeug ohne Besatzung aufgestellt, dann respawnt es auch ohne Besatzung.

Beachte, dass du im Skript das Kampf-Verhalten der Besatzung ändern kannst.

Hier das Skript. Es hat einen anderen Namen und eine andere Parameter Reihung:

Skript FahrzeugRespawn_KI_WP.sqf
Code:

//Respawn eines Fahrzeuges. Ausführung erfolgt beim Server. [Vienna 03.11.2011]
//
//  Respawn wahlweise mit vorhanden gewesenere Besatzung und dann mit oder ohne Fahrt zum Einsatzziel.
// 
//Das Skript wird in der Initzeile eines Fahrzeuges mit Besatzung gestartet.
//
//Aufruf: [<Fahrzeug>,<Respawnzeit>,<Respawnanzahl>,<Position des Einsatzortes>] execVM "FahrzeugRespawn_KI_WP.sqf";
//
//Beispiel für Aufruf in der Initzeile des Fahrzeuges (für den Zielort wird ein Marker Namens "ZielOrt" angenommen):
// temp = [this, 15, 3, markerPos "ZielOrt"] execVM "FahrzeugRespawn_KI_WP.sqf";
//  Ist ein Fahrer im Fahrzeug, dann Fährt das Fahrzeug zum Einsatzziel.
//  Wird der Zielort weggelassen, dann bleibt das Fahrzeug vor Ort stehen.
//  Ist kein Fahrer im Fahrzeug, dann bleibt es natürlich auch stehen und Respawnt ohne Besatzung.


if (!isServer) exitWith {}; // Programm nicht ausführen, wenn nicht Server/Host.

//Lokale Variable
Private ["_clearAllWP","_Vehikel","_RespZeit","_ZielPos","_Respawns","_StartPos","_Richtung","_Driver","_Gunner","_Comman","_Gruppe","_i","_temp"];

//Parameter:
 _Vehikel = _this select 0; //Fahrzeug
 _RespZeit = _this select 1; //Respawnzeit
 _Respawns = _this select 2; //Anzahl der Respawns
 _ZielPos = _this select 3; //Position des Einsatzortes

//Position des Respawnortes
 _StartPos = position _Vehikel;
//Ausrichtung des Fahrzeuges
 _Richtung = getDir _Vehikel;
 
//Besatzung auslesen
 if (! isNull driver _Vehikel) then {_Driver = driver _Vehikel; _Gruppe = group _Driver};
 if (! isNull gunner _Vehikel) then {_Gunner = driver _Vehikel; _Gruppe = group _Gunner};
 if (! isNull commander _Vehikel) then {_Comman = driver _Vehikel; _Gruppe = group _Comman};

//Wenn Besatzung vorhanden, dann Guppe ein Verhalten zuweisen.
 if (! isNil "_Gruppe") then
  {
  //Kampfverhalten der Gruppe:
  //Verhalten: sorglos/deckungslos --> "CARELESS","SAFE","AWARE","COMBAT","STEALTH" <-- vorsichtig/Ausnützung jeder Deckung       
  _Gruppe setBehaviour "AWARE";
  //SpeedMode: "LIMITED"(half speed),"NORMAL"(full speed, maintain formation),"FULL"(do not wait for any other units in formation)
  _Gruppe setSpeedMode "NORMAL";
  //CombatMode: "BLUE"(Never fire),"GREEN"(Hold fire-defend only),"WHITE"(Hold fire,engage at will),"YELLOW"(Fire at will),"RED"(Fire at will,engage at will),
  _Gruppe setCombatMode "WHITE";
  //Formation: "COLUMN","STAG COLUMN","WEDGE","ECH LEFT","ECH RIGHT","VEE","LINE","FILE","DIAMOND"
  _Gruppe setFormation "LINE";
  //Fluchtverhalten: 0 = 0%, 1 = 100%
  _Gruppe allowFleeing 0.5 
  };

//Schleife für die Anzahl der Respawns
for "_i" from 0 to _Respawns do
 {
 //Einsatzort bzw. Besatzung vorhanden? Dann Wegpunkt erstellen.
 if (! isNil "_ZielPos" and ! isNil "_Gruppe") then
  {
  //Wegpunkt zum Einsatzort erstellen
  _temp = _Gruppe addWaypoint [_ZielPos,0];
  [_Gruppe, 0] SetWaypointType "MOVE";
  _Gruppe setCurrentWaypoint [_Gruppe, 1]
  };
 if (_i < _Respawns) then
  {
  //Waren mit oder ohne Besatzung
  if (! isNil "_Gruppe") then {waitUntil {count Crew _Vehikel == 0 or damage _Vehikel > 0.8}} //Warten bis Fahrzeug zerstört oder ohne Besatzung.
  else {waitUntil {damage _Vehikel > 0.8}}; //nur warten bis Fahrzeug zerstört.
  //Wegpunkt löschen falls vorhanden
  if (! isNil "_ZielPos" and ! isNil "_Gruppe") then {deleteWaypoint[_Gruppe,1]};
  //neues Fahrzeug nach Ablauf der Respawnzeit erstellen
  sleep _RespZeit;
  _Vehikel = createVehicle [typeOf _Vehikel, _StartPos, [], 0, "FORM"];
  _Vehikel setDir _Richtung;
  //Besatzung erstellen, falls eine beim Spielstart vorhanden
  if (! isNil "_Driver") then
  {
  _Driver = _Gruppe createUnit [typeOf _Driver, [0,0], [], 0, "FORM"];
  _Driver moveInDriver _Vehikel
  };
  if (! isNil "_Gunner") then
  {
  _Gunner = _Gruppe createUnit [typeOf _Gunner, [0,0], [], 0, "FORM"];
  _Gunner moveInGunner _Vehikel
  };
  if (! isNil "_Comman") then
  {
  _Comman = _Gruppe createUnit [typeOf _Comman, [0,0], [], 0, "FORM"];
  _Comman moveInCommander _Vehikel
  }
  }
 }

Auch die Beispielmission hat einen anderen Namen!

jackpot 04.11.2011 16:25

Danke für die Antwort.
Ich werde es mal ausprobieren. :)

Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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