Dem wird in der folgenden Version entsprochen.
Über einen neu hinzugekommenen Parameter (auf Platz 2) ist einzustellen, ob die Objekte vor dem Löschen gem. den Parametern 3-5 neu eingelesen werden. Siehe auch Beispiel im Anhang.
Code:
/* Objektgruppen entfernen und wiederherstellen [Version 2 Vienna 01.01.2013]
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.
Ist der 2. Parameter auf true, dann werden bei jedem Löschen die Objekte im
Radiusbereich neu eingelesen. Dabei können auch Parameter 3-5 geändert werden.
Parameter:
"NameObjektGruppe", (der 1. Parameter bezeichnet den Namen der Gruppe und darf nicht doppelt vorkommen)
true/false, (true = neues Einlesen der Objekte gemäß der folgenden Parameter.
[Array mit ClassNamen],
Radius für den Bereich der Objekte,
Position Mittelpunkt des Radius
Aufrufbeispiel über Auslöser:
temp =["Objekte1",true,["Car","Tank"],triggerArea Trigger1 select 0,position Trigger1] execVM "Objekte_entfernen_herstellen2.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.
*/
private ["_globaleVariable_IDs","_globaleVariable_Daten","_globaleVariable_Schalter","_neueObjekte","_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";
_neueObjekte = _this select 1;
//eigene globale Variabel für jede Gruppe nach dem Namen im 1. Parameter erstellen
if (isNil _globaleVariable_Schalter) then
{
//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;
//für 1. Sichern der Objekte-Namen(IDs) jedenfalls auf true stellen
_neueObjekte = true
};
//Auslesen der "Schalterstellung" in Variable _entfernen
_code = format ["_entfernen = %1",_globaleVariable_Schalter];
call compile _code;
//Auslesen der Objekte-Namen(IDs) gemäß der Klassen im Radiusbereich
if (_entfernen and _neueObjekte) then //1. Sichern sowie weiteres sichern wenn 2. Parameter = true
{
_Klassen = _this select 2;
_radius = _this select 3;
_position = _this select 4;
//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
}
else //Laden der Objekte-Namen(IDs) gemäß der 1. Sicherung wenn 2. Parameter = false
{
//Namen(IDs) aus globaler Variabler gemäß _globaleVariable_Ids übernehmen
_code = format ["_IDs = %1",_globaleVariable_IDs];
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
wenn nur die erstmaligen Objekte gesichert werden*/
if (not _neueObjekte) then
{
_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
}