Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move SelfActions from postInit to config #6791

Merged
merged 10 commits into from
Feb 24, 2019
24 changes: 24 additions & 0 deletions addons/interaction/CfgVehicles.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,30 @@ class CfgVehicles {
};
};

class Land_Camping_Light_off_F: ThingX {
class ACE_Actions {
class ACE_MainActions {
displayName = CSTRING(MainAction);
distance = 2;

// to make "Camping Lantern (Off)" be turned on we replace it with "Camping Lantern"
class GVAR(TurnOn) {
displayName = CSTRING(TurnOn);
icon = "\A3\Ui_f\data\IGUI\Cfg\VehicleToggles\LightsIconOn_ca.paa";
condition = QUOTE(alive _target);
statement = QUOTE(\
private _position = getPosATL _target;\
private _vectorDirAndUp = [ARR_2(vectorDir _target,vectorUp _target)];\
deleteVehicle _target;\
private _newLamp = 'Land_Camping_Light_F' createVehicle [ARR_3(0,0,0)];\
_newLamp setPosATL _position;\
_newLamp setVectorDirAndUp _vectorDirAndUp;\
);
};
};
};
};

class RoadCone_F: ThingX {
class ACE_Actions {
class ACE_MainActions {
Expand Down
18 changes: 0 additions & 18 deletions addons/interaction/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -135,21 +135,3 @@ GVAR(isOpeningDoor) = false;
}];
};
}] call CBA_fnc_addEventHandler;


// to make "Camping Lantern (Off)" be turned on we replace it with "Camping Lantern"
private _action = [
QGVAR(TurnOn),
localize LSTRING(TurnOn),
"\A3\Ui_f\data\IGUI\Cfg\VehicleToggles\LightsIconOn_ca.paa",
{
private _position = getPosATL _target;
private _vectorDirAndUp = [vectorDir _target, vectorUp _target];
deleteVehicle _target;
private _newLamp = "Land_Camping_Light_F" createVehicle [0,0,0];
_newLamp setPosATL _position;
_newLamp setVectorDirAndUp _vectorDirAndUp;
},
{alive _target}
] call EFUNC(interact_menu,createAction);
["Land_Camping_Light_off_F", 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass);
23 changes: 23 additions & 0 deletions addons/zeus/CfgVehicles.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,4 +324,27 @@ class CfgVehicles {
class ModuleArsenal_F: Module_F {
function=QFUNC(bi_moduleArsenal);
};

class Man;
class CAManBase: Man {
class ACE_SelfActions {
class GVAR(create) {
displayName = CSTRING(CreateZeus);
condition = QUOTE(call FUNC(canCreateModule));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"};
//Set GVAR(zeus) to null first to disable the action through the isNil check
statement = QUOTE(GVAR(zeus) = objNull; [ARR_2(QQGVAR(createZeus), ACE_player)] call CBA_fnc_serverEvent);
showDisabled = 1;
icon = "\A3\Ui_F_Curator\Data\Logos\arma3_curator_eye_32_ca.paa";
};
class GVAR(delete) {
displayName = CSTRING(DeleteZeus);
condition = QUOTE(!(isNil QQGVAR(zeus) || {isNull GVAR(zeus)}));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"};
statement = QUOTE(deleteVehicle GVAR(zeus); GVAR(zeus) = nil);
showDisabled = 1;
icon = "\A3\Ui_F_Curator\Data\Logos\arma3_curator_eye_32_ca.paa";
};
};
};
};
1 change: 1 addition & 0 deletions addons/zeus/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ PREP(bi_moduleCurator);
PREP(bi_moduleMine);
PREP(bi_moduleProjectile);
PREP(bi_moduleRemoteControl);
PREP(canCreateModule);
PREP(getModuleDestination);
PREP(handleZeusUnitAssigned);
PREP(moduleAddArsenal);
Expand Down
38 changes: 0 additions & 38 deletions addons/zeus/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -81,42 +81,4 @@ if (hasInterface) then {
GVAR(zeus) = _zeus;
[localize "str_a3_cfgvehicles_moduletasksetstate_f_arguments_state_values_created_0"] call EFUNC(common,displayTextStructured);
}] call CBA_fnc_addEventHandler;

[QEGVAR(interact_menu,newControllableObject), {
params ["_type"];
if (!(_type isKindOf "CAManBase")) exitWith {};
TRACE_1("Adding zeus actions",_type);

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);
[_type, 1, ["ACE_SelfActions"], _action] 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);
[_type, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToClass);
}] call CBA_fnc_addEventHandler;
};
25 changes: 25 additions & 0 deletions addons/zeus/functions/fnc_canCreateModule.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include "script_component.hpp"
/*
* Author: Dystopian
* Check whether local player is currently allowed to create a Zeus Module
*
* Arguments:
* None
*
* Return Value:
* Allowed to create module <BOOL>
*
* Example:
* call ace_zeus_fnc_canCreateModule
*
* Public: No
*/

isNil QQGVAR(zeus) && {
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};
}
}
105 changes: 76 additions & 29 deletions include/x/cba/addons/main/script_macros_common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -478,8 +478,8 @@ Group: General

// *************************************
// Internal Functions
#define DOUBLES(var1,var2) var1##_##var2
#define TRIPLES(var1,var2,var3) var1##_##var2##_##var3
#define DOUBLES(var1,var2) ##var1##_##var2
PabstMirror marked this conversation as resolved.
Show resolved Hide resolved
#define TRIPLES(var1,var2,var3) ##var1##_##var2##_##var3
#define QUOTE(var1) #var1

#ifdef MODULAR
Expand Down Expand Up @@ -733,29 +733,29 @@ Macro: ISNILS()
Author:
Sickboy
------------------------------------------- */
#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { VARIABLE = DEFAULT_VALUE }
#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { ##VARIABLE = ##DEFAULT_VALUE }
#define ISNILS2(var1,var2,var3,var4) ISNILS(TRIPLES(var1,var2,var3),var4)
#define ISNILS3(var1,var2,var3) ISNILS(DOUBLES(var1,var2),var3)
#define ISNIL(var1,var2) ISNILS2(PREFIX,COMPONENT,var1,var2)
#define ISNILMAIN(var1,var2) ISNILS3(PREFIX,var1,var2)

#define CREATELOGICS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]
#define CREATELOGICLOCALS(var1,var2) var1##_##var2 = "LOGIC" createVehicleLocal [0, 0, 0]
#define CREATELOGICGLOBALS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]; publicVariable QUOTE(DOUBLES(var1,var2))
#define CREATELOGICGLOBALTESTS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit [QUOTE(DOUBLES(ADDON,logic)), [0, 0, 0], [], 0, "NONE"]
#define CREATELOGICS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]
#define CREATELOGICLOCALS(var1,var2) ##var1##_##var2## = "LOGIC" createVehicleLocal [0, 0, 0]
#define CREATELOGICGLOBALS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]; publicVariable QUOTE(DOUBLES(var1,var2))
#define CREATELOGICGLOBALTESTS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit [QUOTE(DOUBLES(ADDON,logic)), [0, 0, 0], [], 0, "NONE"]

#define GETVARS(var1,var2,var3) (var1##_##var2 getVariable #var3)
#define GETVARS(var1,var2,var3) (##var1##_##var2 getVariable #var3)
#define GETVARMAINS(var1,var2) GETVARS(var1,MAINLOGIC,var2)

#ifndef PATHTO_SYS
#define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\var1\SUBPREFIX\var2\var3.sqf
#define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3.sqf
#endif
#ifndef PATHTOF_SYS
#define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\var1\SUBPREFIX\var2\var3
#define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3
#endif

#ifndef PATHTOF2_SYS
#define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\var1\SUBPREFIX\var2\var3
#define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\##var1\SUBPREFIX\##var2\##var3
#endif

#define PATHTO_R(var1) PATHTOF2_SYS(PREFIX,COMPONENT_C,var1)
Expand All @@ -775,15 +775,15 @@ Macro: ISNILS()

// This only works for binarized configs after recompiling the pbos
// TODO: Reduce amount of calls / code..
#define COMPILE_FILE2_CFG_SYS(var1) compile preProcessFileLineNumbers var1
#define COMPILE_FILE2_CFG_SYS(var1) compile preprocessFileLineNumbers var1
#define COMPILE_FILE2_SYS(var1) COMPILE_FILE2_CFG_SYS(var1)

#define COMPILE_FILE_SYS(var1,var2,var3) COMPILE_FILE2_SYS('PATHTO_SYS(var1,var2,var3)')
#define COMPILE_FILE_CFG_SYS(var1,var2,var3) COMPILE_FILE2_CFG_SYS('PATHTO_SYS(var1,var2,var3)')

#define SETVARS(var1,var2) var1##_##var2 setVariable
#define SETVARS(var1,var2) ##var1##_##var2 setVariable
#define SETVARMAINS(var1) SETVARS(var1,MAINLOGIC)
#define GVARMAINS(var1,var2) var1##_##var2
#define GVARMAINS(var1,var2) ##var1##_##var2##
#define CFGSETTINGSS(var1,var2) configFile >> "CfgSettings" >> #var1 >> #var2
//#define SETGVARS(var1,var2,var3) ##var1##_##var2##_##var3 =
//#define SETGVARMAINS(var1,var2) ##var1##_##var2 =
Expand All @@ -794,9 +794,9 @@ Macro: ISNILS()
// #define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = { ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)); if (isNil "_this") then { call ##var1##_##var2##_fnc_##var4 } else { _this call ##var1##_##var2##_fnc_##var4 } }

// Compile-Once, at Macro. As opposed to Compile-Once, on first use.
#define PREPMAIN_SYS(var1,var2,var3) var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS(var1,var2,var3) var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS2(var1,var2,var3,var4) var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4))
#define PREPMAIN_SYS(var1,var2,var3) ##var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS(var1,var2,var3) ##var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4))

#define LSTR(var1) TRIPLES(ADDON,STR,var1)

Expand Down Expand Up @@ -888,8 +888,41 @@ Macro: GVARMAIN()
#define GETVAR(var1) GETVARS(PREFIX,COMPONENT,var1)
#define SETVAR SETVARS(PREFIX,COMPONENT)
#define SETVARMAIN SETVARMAINS(PREFIX)
#define IFCOUNT(var1,var2,var3) if (count var1 > var2) then { var3 = var1 select var2 };
#define IFCOUNT(var1,var2,var3) if (count ##var1 > ##var2) then { ##var3 = ##var1 select ##var2 };

/* -------------------------------------------
Macro: PREP()

Description:
Defines a function.

Full file path:
'\MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\fnc_<FNC>.sqf'

Resulting function name:
'PREFIX_COMPONENT_<FNC>'

The PREP macro should be placed in a script run by a XEH preStart and XEH preInit event.

The PREP macro allows for CBA function caching, which drastically speeds up load times.
Beware though that function caching is enabled by default and as such to disable it, you need to
#define DISABLE_COMPILE_CACHE above your #include "script_components.hpp" include!

The function will be defined in ui and mission namespace. It can not be overwritten without
a mission restart.

Parameters:
FUNCTION NAME - Name of the function, unquoted <STRING>

Examples:
(begin example)
PREP(banana);
call FUNC(banana);
(end)

Author:
dixon13
------------------------------------------- */
//#define PREP(var1) PREP_SYS(PREFIX,COMPONENT_F,var1)

#ifdef DISABLE_COMPILE_CACHE
Expand All @@ -900,13 +933,6 @@ Macro: GVARMAIN()
#define PREPMAIN(var1) ['PATHTO_SYS(PREFIX,COMPONENT_F,DOUBLES(fnc,var1))', 'TRIPLES(PREFIX,fnc,var1)'] call SLX_XEH_COMPILE_NEW
#endif

#ifdef RECOMPILE
#undef RECOMPILE
#define RECOMPILE recompile = 1
#else
#define RECOMPILE recompile = 0
#endif

/* -------------------------------------------
Macro: PATHTO_FNC()

Expand All @@ -916,6 +942,7 @@ Macro: PATHTO_FNC()
Full file path in addons:
'\MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\fnc_<FNC>.sqf'
Define 'RECOMPILE' to enable recompiling.
Define 'SKIP_FUNCTION_HEADER' to skip adding function header.

Parameters:
FUNCTION NAME - Name of the function, unquoted <STRING>
Expand All @@ -936,8 +963,22 @@ Macro: PATHTO_FNC()
Author:
dixon13, commy2
------------------------------------------- */
#ifdef RECOMPILE
#undef RECOMPILE
#define RECOMPILE recompile = 1
#else
#define RECOMPILE recompile = 0
#endif
// Set function header type: -1 - no header; 0 - default header; 1 - system header.
#ifdef SKIP_FUNCTION_HEADER
#define CFGFUNCTION_HEADER headerType = -1
#else
#define CFGFUNCTION_HEADER headerType = 0
#endif

#define PATHTO_FNC(func) class func {\
file = QPATHTOF(DOUBLES(fnc,func).sqf);\
CFGFUNCTION_HEADER;\
RECOMPILE;\
}

Expand Down Expand Up @@ -1086,6 +1127,7 @@ Macros: IS_x()
/* -------------------------------------------
Macro: SCRIPT()
Sets name of script (relies on PREFIX and COMPONENT values being #defined).
Define 'SKIP_SCRIPT_NAME' to skip adding scriptName.

Parameters:
NAME - Name of script [Indentifier]
Expand All @@ -1098,8 +1140,11 @@ Macro: SCRIPT()
Author:
Spooner
------------------------------------------- */
#define SCRIPT(NAME) \
scriptName 'PREFIX\COMPONENT\NAME'
#ifndef SKIP_SCRIPT_NAME
#define SCRIPT(NAME) scriptName 'PREFIX\COMPONENT\NAME'
#else
#define SCRIPT(NAME) /* nope */
#endif

/* -------------------------------------------
Macros: EXPLODE_n()
Expand Down Expand Up @@ -1707,7 +1752,8 @@ Macro: IS_ADMIN
Author:
commy2
------------------------------------------- */
#define IS_ADMIN serverCommandAvailable "#kick"
#define IS_ADMIN_SYS(x) x##kick
#define IS_ADMIN serverCommandAvailable 'IS_ADMIN_SYS(#)'

/* -------------------------------------------
Macro: IS_ADMIN_LOGGED
Expand All @@ -1727,7 +1773,8 @@ Macro: IS_ADMIN_LOGGED
Author:
commy2
------------------------------------------- */
#define IS_ADMIN_LOGGED serverCommandAvailable "#shutdown"
#define IS_ADMIN_LOGGED_SYS(x) x##shutdown
#define IS_ADMIN_LOGGED serverCommandAvailable 'IS_ADMIN_LOGGED_SYS(#)'

/* -------------------------------------------
Macro: FILE_EXISTS
Expand Down