Zeus に配置したオブジェクトを出力できる Zeus Editor, Streamlined スクリプト

Arma 3 の無料ダウンロード コンテンツ Zeus 内で設置したオブジェクトを、コードにして出力する Zeus Editor, Streamlined スクリプト が BI フォーラム上で公開されました。

スクリプトでは、Zeus で設置した建物や小物、オブジェクトを設置したあとに操作をすると、オブジェクトの位置情報などをコードとして出力し、ミッション作成に役立ちます。

使いかた

エディタ内でプレイヤー ユニットを設置、そしてモジュールから Zeus にある“Game Master”モジュールに名前( ZE_Zeus)をつけて設置します。

次にミッションを保存して、保存したファイルに“init.sqf”を作成して、スクリプトを貼り付けします。

//NOTE: Make sure Zeus module is named ZE_Zeus


//Export function
ZE_ExportEntities = {

  ZE_ObjectsExport = [];
  _mode = toLower (_this select 0);

  //Register objects to export
  switch (_mode) do {
    case "all": {
      {
        _obj = _x;
        _class = typeOf _obj;
        _pos = getPosATL _obj;
        _vec = [vectorDir _obj, vectorUp _obj];
        _sim = simulationEnabled _obj;
        _grp = group _obj;
        _pack = [_class,_pos,_vec,_sim,_grp];
        ZE_ObjectsExport = ZE_ObjectsExport + [_pack];
      } forEach (curatorEditableObjects ZE_Zeus);
    };

    case "sel": {
      {
        _obj = _x;
        if (typeName _obj == typeName objNull) Then {
          _class = typeOf _obj;
          _pos = getPosATL _obj;
          _vec = [vectorDir _obj, vectorUp _obj];
          _sim = simulationEnabled _obj;
          _grp = group _obj;
          _pack = [_class,_pos,_vec,_sim,_grp];
          ZE_ObjectsExport = ZE_ObjectsExport + [_pack];
        };
      } forEach (curatorSelected select 0);
    };
  };

  //Compile
  _compiledTxt = "//Exported with ZE";

  {
    private ["_addTxt","_codeSpawn"];
    _objArr = _x;
    _class  = _objArr select 0;
    _pos  = _objArr select 1;
    _vec  = _objArr select 2;
    _sim  = _objArr select 3;
    _grp  = _objArr select 4;
    if (isNull _grp) Then {
      _codeSpawn = format ["
_object = createVehicle [""%1"", [0,0,0], [], 0, ""CAN_COLLIDE""];",_class];
    } else {
      _side = side _grp;
      _codeSpawn = format ["
_object = createGroup %2 createUnit [""%1"", [0,0,0], [], 0, ""NONE""];",_class,_side];
    };

    if (_sim) Then {
      _addTxt = _codeSpawn + format ["
_object setPosATL %2;
_object setVectorDirAndUp %3;
", _class, _pos, _vec];
    } else {
      _addTxt = _codeSpawn + format ["
_object enableSimulation %4;
_object setPosATL %2;
_object setVectorDirAndUp %3;
", _class, _pos, _vec, _sim];
    };


    _compiledTxt = _compiledTxt + _addTxt;
  } forEach ZE_ObjectsExport;

  copyToClipboard _compiledTxt;

};

//Enable editing function
ZE_AddCuratorObjects = {
  _nearObjs = (getPos curatorCamera) nearObjects 25;
  ZE_Zeus addCuratorEditableObjects [_nearObjs,false];
};

//Handle Object simulation
ZE_ObjectSimulation = {
  _mode = toLower (_this select 0);
  switch (_mode) do {
    case "enable": {
      {_x enableSimulation true} forEach (curatorSelected select 0);
    };
    case "disable": {
      {_x enableSimulation false} forEach (curatorSelected select 0);
    };
  };
};


//Key Stroke Handler
key_ctrl = 29;
key_shift = 42;
key_c = 46;
key_a = 30;
key_e = 18;
key_s = 31;

pressed_ctrl = false;
pressed_shift = false;
pressed_c = false;
pressed_a = false;
pressed_e = false;
pressed_s = false;

//Add Keystroke EH
ZE_AddKeyStrokeEH = {
  ZE_keyDownEHId = findDisplay 312 displayAddEventHandler ["KeyDown",{
    if (_this select 1 == key_ctrl) then {pressed_ctrl = true;};
    if (_this select 1 == key_shift) then {pressed_shift = true;};
    if (_this select 1 == key_c) then {pressed_c = true;};
    if (_this select 1 == key_a) then {pressed_a = true;};
    if (_this select 1 == key_e) then {pressed_e = true;};
    if (_this select 1 == key_s) then {pressed_s = true;};
  }];
  ZE_keyUpEHId = findDisplay 312 displayAddEventHandler ["KeyUp",{
    if (_this select 1 == key_ctrl) then {pressed_ctrl = false;};
    if (_this select 1 == key_shift) then {pressed_shift = false;};
    if (_this select 1 == key_c) then {pressed_c = false;};
    if (_this select 1 == key_a) then {pressed_a = false;};
    if (_this select 1 == key_e) then {pressed_e = false;};
    if (_this select 1 == key_s) then {pressed_s = false;};
  }];

  ["ZE_KeyStroke", "onEachFrame", {
    if (pressed_ctrl && pressed_a) ExitWith {
      ["ALL"] call ZE_ExportEntities;
      hint "";
      ["CuratorAddAddons",["ZEUS objects copied to clipboard."]] calL BIS_fnc_showNotification;
      pressed_a = false;
    };
    if (pressed_ctrl && pressed_c) ExitWith {
      ["SEL"] call ZE_ExportEntities;
      ["CuratorAddAddons",["SELETED objects copied to clipboard."]] calL BIS_fnc_showNotification;
      pressed_c = false;
    };
    if (pressed_ctrl && pressed_shift && pressed_e) ExitWith {
      [] call ZE_AddCuratorObjects;
      ["CuratorAddAddons",["Nearby objects ENABLED for Zeus."]] calL BIS_fnc_showNotification;
      pressed_e = false;
    };
    if (pressed_ctrl && pressed_shift && pressed_s) ExitWith {
      ["DISABLE"] call ZE_ObjectSimulation;
      ["CuratorAddAddons",["DISABLED simulation for selected objects."]] calL BIS_fnc_showNotification;
      pressed_s = false;
    };
    if (pressed_ctrl && pressed_s) ExitWith {
      ["ENABLE"] call ZE_ObjectSimulation;
      ["CuratorAddAddons",["ENABLED simulation for selected objects."]] calL BIS_fnc_showNotification;
      pressed_s = false;
    };
  }] call BIS_fnc_addStackedEventHandler;

};

//Remove Keystroke EH
ZE_RemoveKeyStrokeEH = {
  findDisplay 312 displayRemoveEventHandler ["KeyDown",ZE_keyDownEHId];
  findDisplay 312 displayRemoveEventHandler ["KeyUp",ZE_keyUpEHId];

  ["ZE_KeyStroke", "onEachFrame"] call BIS_fnc_removeStackedEventHandler;
};



//Handle enable/disable of EH on Zeus start/end
[] spawn {
  while {true} do {
    waitUntil {sleep 0.1; !(isNull findDisplay 312)};
    [] spawn ZE_AddKeyStrokeEH;
    waitUntil {sleep 0.1; isNull findDisplay 312};
    [] spawn ZE_RemoveKeyStrokeEH;
  };
};
ゲーム内に戻り、Zeus に入ってからオブジェクトを設置します。

次のショートカット キーで出力が可能です。

  • Ctrl + C
  • 選択されているオブジェクトを出力。ドラッグで選択された複数のオブジェクトも可。
  • Ctrl + A
  • Zeus で編集可能なオブジェクトを出力
  • Ctrl + Shift + E
  • Zeus で近くに編集可能なオブジェクトを作成
  • Ctrl + SCtrl + Shift + S
  • 選択したオブジェクトを計算するかどうかのトグル
出力されたコードはクリップ ボードに保存されています。

クレジット

ted_hou

[RELEASE] Zeus Editor, Streamlined (ZES) [v0.2] - BI forum

0 コメント:

コメントを投稿