Wie aus Tajins Post ersichtlich, sind Fahrzeuge oft schon unbrauchbar bevor sie zerstört wurden. Ein Auto kann z.B. durch einen zerschossenen Reifen bereits unbrauchbar sein. Wobei die Beschädigung unter 5% liegt.
Folgend ein Skirpt welches bereits nicht mehr brauchbare Fahrzeuge erneuert. canFire wurde dabei nicht berücksichtigt, weil hier bei einem unbesetzten Fahrzeug false angezeigt wird.
Beim Skript-Aufruf ist auch einstellbar ob das alte Fahrzeug gelöscht werden soll und wie oft ein Respawn möglich ist.
Skript
Fahrzeug_Respawn_2.sqf
Code:
// Fahrzeug-Respawn wenn Fahrzeug zerstört oder unlenkbar. [Vienna 12.03.2013]
// Die neuen Fahrzeuge werden an der ursprünglichen Position erstellt.
// Einmaliger Aufruf. Läuft beim Server.
//
// Parameter: FahrzeugObjekt
// Zeit in Sekunden bis zum Respawn
// unbrauchbares Fahrzeug löschen (true/false)
// maximale Anzahl der neu zu erstelltenden Fahrzeuge
//
// Aufrufbeispiel in der Initialisierungszeile des Fahrzeuges:
// temp = [this, 120, true, 5] execVM "Fahrzeug_Respawn_2.sqf";
private ["_vehicle","_respawnZeit","_entfernen","_respawnAnzahl","_type","_pos","_dir","_respawn"];
//Parameter übernehmen
_vehicle = _this select 0;
_respawnZeit = _this select 1;
_entfernen = _this select 2;
_respawnAnzahl = _this select 3;
//Fahrzeugtype sowie Position und Ausrichtung vom Aufstellungsort speichern.
_type = typeOf _vehicle;
_pos = getPos _vehicle;
_dir = getDir _vehicle;
//Schleife bis maximale Anzahl erreicht. Letztes Fahrzeug wird, wenn gewollt, noch gelöscht.
_respawn = 0;
while {isServer and _respawn <= _respawnAnzahl} do
{
waitUntil {!canMove _vehicle or fuel _vehicle == 0}; //warten bis Fahrzeug zerstört oder unlenkbar
waitUntil {{alive _x} count crew _vehicle == 0}; //warten bis keine Crew im Fahrzeug (Tote werden nicht gezählt)
_vehicle lock true; //Fahrzeug sperren (kein Einsteigen möglich)
sleep 5; //Pause damit Tote nicht zu schnell verschwinden
{if(!alive _x)then{_x setPos [0,0];deleteVehicle _x}}forEach crew _vehicle; // Tote Crew löschen
sleep (_respawnZeit - 5); //warten bis Respawnzeit um
if (_entfernen) then {deleteVehicle _vehicle}; //Fahrzeug löschen, wenn gewollt.
if (_respawn < _respawnAnzahl) then //neues Fahrzeug erstellen
{
_vehicle = _type createVehicle _pos;
_vehicle setDir _dir;
_respawn = _respawn + 1;
sleep 1
}
}