Einzelnen Beitrag anzeigen
Alt 01.01.2013, 10:53   #14 (permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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
  }
Angehängte Dateien
Dateityp: zip Objekte_save_del_load2-utes.zip (3,1 KB, 44x aufgerufen)
Vienna ist offline