From 32fc6bb4374e8df53809d403fb18bc5b50e3ce1a Mon Sep 17 00:00:00 2001 From: Dystopian Date: Sun, 11 Nov 2018 00:33:20 +0400 Subject: [PATCH] Add possibility to create zeus during mission (#6203) * Add possibility to create zeus during mission * Use LLSTRING * Allow deleting when setting is disabled * Delete canCreate function * Delete workaround for missed vehicles * Revert "Delete workaround for missed vehicles" This reverts commit e33102ee3c343a401d0e473370983c68e4363022. --- addons/zeus/XEH_postInit.sqf | 73 ++++++++++++++++++++++++++++++++ addons/zeus/XEH_preInit.sqf | 2 + addons/zeus/initSettings.sqf | 22 ++++++++++ addons/zeus/script_component.hpp | 5 +++ addons/zeus/stringtable.xml | 12 ++++++ 5 files changed, 114 insertions(+) create mode 100644 addons/zeus/initSettings.sqf diff --git a/addons/zeus/XEH_postInit.sqf b/addons/zeus/XEH_postInit.sqf index 63a62d5948..09faa5553f 100644 --- a/addons/zeus/XEH_postInit.sqf +++ b/addons/zeus/XEH_postInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +#define IDD_DISPLAY3DEN 313 + ["ace_settingsInitialized",{ // Only add an InitPost EH if setting is enabled (and apply retroactively) if (isServer && {GVAR(autoAddObjects)}) then { @@ -39,4 +41,75 @@ if (isServer) then { _x removeCuratorEditableObjects [_objects, true]; } forEach allCurators; }] call CBA_fnc_addEventHandler; + + [QGVAR(createZeus), { + params ["_ownerPlayer"]; + private _owner = ["#adminLogged", getPlayerUID _ownerPlayer] select isMultiplayer; + private _group = createGroup sideLogic; + private _zeus = _group createUnit ["ModuleCurator_F", [0,0,0], [], 0, "NONE"]; + missionNamespace setVariable [format [QGVAR(zeus_%1), _owner], _zeus]; + _zeus setVariable ["owner", _owner, true]; + _zeus setVariable ["Addons", 3, true]; + _zeus setCuratorCoef ["Place", 0]; + _zeus setCuratorCoef ["Delete", 0]; + _group deleteGroupWhenEmpty true; + if (!isMultiplayer && {!isNull findDisplay IDD_DISPLAY3DEN}) then { + // if loaded from editor (but not after restart), addons are not activated so we do it manually + private _addons = ('true' configClasses (configFile >> "CfgPatches")) apply {configName _x}; + activateAddons _addons; + removeAllCuratorAddons _zeus; + _zeus addCuratorAddons _addons; + }; + [QGVAR(zeusCreated), _zeus, _ownerPlayer] call CBA_fnc_targetEvent; + }] call CBA_fnc_addEventHandler; + + addMissionEventHandler ["HandleDisconnect", { + private _owner = _this select 2; + private _zeusVarName = format [QGVAR(zeus_%1), _owner]; + private _zeus = missionNamespace getVariable _zeusVarName; + if (!isNil "_zeus") then { + if (!isNull _zeus) then {deleteVehicle _zeus}; + missionNamespace setVariable [_zeusVarName, nil]; + }; + }]; +}; + +if (hasInterface) then { + [QGVAR(zeusCreated), { + params ["_zeus"]; + GVAR(zeus) = _zeus; + [localize "str_a3_cfgvehicles_moduletasksetstate_f_arguments_state_values_created_0"] call EFUNC(common,displayTextStructured); + }] call CBA_fnc_addEventHandler; + + private _action = [ + QGVAR(create), + LLSTRING(CreateZeus), + "\A3\Ui_F_Curator\Data\Logos\arma3_curator_eye_32_ca.paa", + { + GVAR(zeus) = objNull; // to disable menu while zeus is being created + [QGVAR(createZeus), ACE_player] call CBA_fnc_serverEvent; + }, + { + switch (GVAR(canCreateZeus)) do { + case CAN_CREATE_ADMIN: {isServer || {IS_ADMIN_LOGGED}}; + case CAN_CREATE_CONSOLE: {call BIS_fnc_isDebugConsoleAllowed}; + case CAN_CREATE_ALL: {true}; + default {false}; + } + && {isNil QGVAR(zeus)} + } + ] call EFUNC(interact_menu,createAction); + ["CAManBase", 1, ["ACE_SelfActions"], _action, true] call EFUNC(interact_menu,addActionToClass); + + _action = [ + QGVAR(delete), + LLSTRING(DeleteZeus), + "\A3\Ui_F_Curator\Data\Logos\arma3_curator_eye_32_ca.paa", + { + deleteVehicle GVAR(zeus); + GVAR(zeus) = nil; + }, + {!(isNil QGVAR(zeus) || {isNull GVAR(zeus)})} + ] call EFUNC(interact_menu,createAction); + ["CAManBase", 1, ["ACE_SelfActions"], _action, true] call EFUNC(interact_menu,addActionToClass); }; diff --git a/addons/zeus/XEH_preInit.sqf b/addons/zeus/XEH_preInit.sqf index a55f9c304e..909005e73e 100644 --- a/addons/zeus/XEH_preInit.sqf +++ b/addons/zeus/XEH_preInit.sqf @@ -12,4 +12,6 @@ if (isServer) then { GVAR(GlobalSkillAI) = [0.5,0.5,0.5,0.5,true,true]; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/zeus/initSettings.sqf b/addons/zeus/initSettings.sqf new file mode 100644 index 0000000000..1db3fe5205 --- /dev/null +++ b/addons/zeus/initSettings.sqf @@ -0,0 +1,22 @@ +[ + QGVAR(canCreateZeus), + "LIST", + format [LLSTRING(MenuSetting), LLSTRING(CreateZeus)], + format ["ACE %1", LLSTRING(DisplayName)], + [ + [ + CAN_CREATE_NONE, + CAN_CREATE_ADMIN, + CAN_CREATE_CONSOLE, + CAN_CREATE_ALL + ], + [ + localize "STR_A3_None", + localize "str_3den_attributes_enabledebugconsole_host_text", + localize "str_ui_debug_title", + localize "str_3den_attributes_enabledebugconsole_all_text" + ], + 0 + ], + true +] call CBA_settings_fnc_init; diff --git a/addons/zeus/script_component.hpp b/addons/zeus/script_component.hpp index edbc5b2954..957c7699d3 100644 --- a/addons/zeus/script_component.hpp +++ b/addons/zeus/script_component.hpp @@ -23,3 +23,8 @@ #define H_PART(num) (num * (SIZEY / 25)) #define X_PART(num) (W_PART(num) + (safeZoneX + (safeZoneW - SIZEX) / 2)) #define Y_PART(num) (H_PART(num) + (safeZoneY + (safeZoneH - SIZEY) / 2)) + +#define CAN_CREATE_NONE -1 +#define CAN_CREATE_ADMIN 0 +#define CAN_CREATE_CONSOLE 1 +#define CAN_CREATE_ALL 2 diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 22e45e304c..59ba4129fc 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1459,5 +1459,17 @@ 移除ACE軍火庫 Rimuovi l'arsenale ACE + + Create Zeus + Создать Зевса + + + Delete Zeus + Удалить Зевса + + + "%1" menu + Меню "%1" +