Für
Objekte zum Entfernen und Wiederherstellen habe ich einmal ein Beispiel erstellt. Dabei werden die Objekte nicht versetzt, sonder gänzlich gelöscht.
Aufgerufen wird das z.B. über einen Auslöser mit Namen
Trigger1 der einen bestimmten Radius aufweist in welchen die Objekte aufgestellt sind. Das sieht dann so aus:
Code:
temp =["Objekte1",["Car","Tank"],triggerArea Trigger1 select 0,position Trigger1] execVM "Objekte_entfernen_herstellen.sqf";
Aus Objekte sind Fahrzeuge und Tanks gewählt. Als Position wird die des Triggers genommen und für den Radius der des Triggers mit
triggerArea Trigger1 select 0.
Durch wiederholten Aufruf des Skripts werden die Objekte gelöscht und wieder hergestellt. Von den Objekten wird die Position, die Richtung, Beschädigung und Tankfüllung beibehalten. Durch unterschiedliche Objekte-Namen (1. Parameter) ist das Skript für beliebig viele Bereiche anwendbar.
Skript
Objekte_entfernen_herstellen.sqf
Code:
/* Objektgruppen entfernen und wiederherstellen [Vienna 30.12.2012]
Das Skript ist für beliebig viele Objekt-Gruppen verwendbar.
Die Objekt-Gruppen unterscheiden sich durch den Namen im 1. Parameter.
Die Objekte werden anhand der Klassen-Namen im Radiusbereich ermittelt.
Parameter: (der 1. Parameter bezeichnet den Namen der Gruppe und darf nicht doppelt vorkommen)
"NameObjektGruppe",
[Array mit ClassNamen],
Radius für den Bereich der Objekte,
Position Mittelpunkt des Radius
Aufrufbeispiel über Auslöser:
temp =["Objekte1",["Car","Tank"],triggerArea Trigger1 select 0,position Trigger1] execVM "Objekte_entfernen_herstellen.sqf";
Erster Aufruf des Skripts: die durch die Parameter bestimmten Objekte werden gelöscht.
Zweiter Aufruf des Skripts: die gelöschten Objekte werden im vorherigen Zustand wiedererstellt.
Dritter Aufruf des Skripts: gleich erster Aufruf. usw.
Nach dem ersten Aufruf ist nur noch der erste Parameter von Bedeutung, der die jeweilige Gruppe bezeichnet.
*/
private ["_globaleVariable_IDs","_globaleVariable_Daten","_globaleVariable_Schalter","_Klassen","_radius","_position","_code","_IDs","_daten","_entfernen"];
_globaleVariable_IDs = (_this select 0)+"_IDs";
_globaleVariable_Daten = (_this select 0)+"_Daten";
_globaleVariable_Schalter = (_this select 0)+"_Schalter";
//eigene globale Variabel für jede Gruppe nach dem Namen im 1. Parameter erstellen
if (isNil _globaleVariable_Schalter) then
{
_Klassen = _this select 1;
_radius = _this select 2;
_position = _this select 3;
//Initialisieren der globalen Variablen gemäß _globaleVariable_IDs
_code = format ["%1 = []",_globaleVariable_IDs];
call compile _code;
//Initialisieren der globalen Variablen gemäß _globaleVariable_Daten
_code = format ["%1 = []",_globaleVariable_Daten];
call compile _code;
//Initialisieren der globalen Variablen gemäß _globaleVariable_Schalter
_code = format ["%1 = true",_globaleVariable_Schalter];
call compile _code;
//1. sichern der Objekt-IDs (entspricht den Namen)
_IDs = nearestObjects [_position,_Klassen,_radius];
//Übertragen der Daten in die globale Variable gemäß _globaleVariable_IDs
_code = format ["%1 = _IDs",_globaleVariable_IDs];
call compile _code
};
//Auslesen der "Schalterstellung" in Variable _entfernen
_code = format ["_entfernen = %1",_globaleVariable_Schalter];
call compile _code;
//Entfernen oder Wiederherstellen je nach Schalterstellung (true/false)
if (_entfernen) then // Sichern und Entfernen der Gruppe
{
//IDs aus globaler Variabler gemäß _globaleVariable_IDs übernehmen
_code = format ["_IDs = %1",_globaleVariable_IDs];
call compile _code;
//Daten der Objekte sichern und Objekte löschen
_daten = [];
{
_daten = _daten +
[[
typeOf _x,
position _x select 0,
position _x select 1,
position _x select 2,
getDir _x,
getDammage _x,
fuel _x
]];
deleteVehicle _x
}forEach _IDs;
//Daten aus _daten in globale Variable gemäß _globaleVariable_Daten übertragen
_code = format ["%1 = _daten",_globaleVariable_Daten];
call compile _code;
//globale Variable gemäß _globaleVariable_Schalter auf false stellen
_code = format ["%1 = false",_globaleVariable_Schalter];
call compile _code
}
else //Wiederherstellen der Gruppe
{
//Daten aus globaler Variabler gemäß _globaleVariable_Daten übernehmen
_code = format ["_daten = %1",_globaleVariable_Daten];
call compile _code;
//Objekte der Gruppe aufstellen und Namen(IDs)der Objekte sichern
_IDs = [];
{
_objekt = (_x select 0) createVehicle [0,0];
_objekt setPos [_x select 1,
_x select 2,
_x select 3];
_objekt setDir (_x select 4);
_objekt setDammage (_x select 5);
_objekt setFuel (_x select 6);
_IDs = _IDs + [_objekt]
} forEach _daten;
//Daten aus _IDs in globale Variable gemäß _globaleVariable_IDs übertragen
_code = format ["%1 = _IDs",_globaleVariable_IDs];
call compile _code;
//globale Variable gemäß _globaleVariable_Schalter auf true stellen
_code = format ["%1 = true",_globaleVariable_Schalter];
call compile _code
}
Im Anhang eine Beispielmission für zwei Objekt-Gruppen.