From 7c903d10219bfb78f26747d4e7f45da367188852 Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Thu, 8 Feb 2024 11:48:41 -0800 Subject: [PATCH 1/6] add some built in flags as options --- defines/VehicleFlags.hpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/defines/VehicleFlags.hpp b/defines/VehicleFlags.hpp index fce9606..2e13fb2 100644 --- a/defines/VehicleFlags.hpp +++ b/defines/VehicleFlags.hpp @@ -125,5 +125,40 @@ class VehicleFlags { texture = "textures\flags_misc\flag_redcross_co.paa"; }; }; + + class BuiltIn { + actionID = "flag_builtin"; + actionTitle = "Built-In"; + class BlueFlag { + actionID = "flag_builtin_blue"; + actionTitle = "Blue Flag"; + texture = "\A3\Data_F\Flags\flag_blue_CO.paa"; + }; + class GreenFlag { + actionID = "flag_builtin_green"; + actionTitle = "Green Flag"; + texture = "\A3\Data_F\Flags\flag_green_CO.paa"; + }; + class RedFlag { + actionID = "flag_builtin_red"; + actionTitle = "Red Flag"; + texture = "\A3\Data_F\Flags\flag_red_CO.paa"; + }; + class WhiteFlag { + actionID = "flag_builtin_white"; + actionTitle = "White Flag"; + texture = "\A3\Data_F\Flags\flag_white_CO.paa"; + }; + class NATOFlag { + actionID = "flag_builtin_nato"; + actionTitle = "NATO Flag"; + texture = "\A3\Data_F\Flags\flag_NATO_CO.paa"; + }; + class UNFlag { + actionID = "flag_builtin_un"; + actionTitle = "UN Flag"; + texture = "\A3\Data_F\Flags\Flag_uno_CO.paa"; + }; + }; }; }; \ No newline at end of file -- 2.37.3.windows.1 From 3217ec487d54f18f0a5c3b209557473ba1914437 Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Thu, 8 Feb 2024 11:50:07 -0800 Subject: [PATCH 2/6] simplify resupply actions addition --- .../reinsert/client/fn_addAceSelfActions.sqf | 118 +++++++++--------- .../client/fn_addCheckQueueSelfAction.sqf | 48 ++++--- framework/reinsert/client/fn_initClient.sqf | 26 ++-- .../fn_addArsenalObjectSpawnBoxActions.sqf | 4 +- 4 files changed, 89 insertions(+), 107 deletions(-) diff --git a/framework/reinsert/client/fn_addAceSelfActions.sqf b/framework/reinsert/client/fn_addAceSelfActions.sqf index a6f66de..5d19ba5 100644 --- a/framework/reinsert/client/fn_addAceSelfActions.sqf +++ b/framework/reinsert/client/fn_addAceSelfActions.sqf @@ -1,69 +1,65 @@ #include "..\script_component.hpp" -params ["_type"]; // string of the object's classname -if (!(_type isKindOf "CAManBase")) exitWith {}; +params [ + ["_types", [], [[]]], // classnames to assign these action to + ["_useInheritance", false, [false]] +]; -if ( - (localNamespace getVariable [QGVAR(fileForReinsertClassesAdded), []]) - find _type != -1 -) exitWith {}; +{ // forEach _types + private _classToAddActionsTo = _x; -private _fileForReinsertAction = [ - QGVAR(fileReinsertRequestAction), - "File Re-insert Request", - "\A3\ui_f\data\igui\cfg\simpleTasks\types\takeoff_ca.paa", - { // statement - params ["_target", "_player", "_params"]; - // find nearest base or location - private _base = [_player] call EFUNC(common,getNearestBase); - private _baseName = [_base] call EFUNC(common,getNameOfBase); - // send event to server - [QGVAR(fileReinsertRequest), [_player, _base]] call CBA_fnc_serverEvent; - // notify player their request was filed - [["Re-insert Request Filed"], [format["Location: %1", _baseName]]] call CBA_fnc_notify; - }, - { // condition - params ["_target", "_player", "_params"]; - // find nearest base or location - private _base = [_player] call EFUNC(common,getNearestBase); - private _baseDistance = _player distance _base; + private _fileForReinsertAction = [ + QGVAR(fileReinsertRequestAction), + "File Re-insert Request", + "\A3\ui_f\data\igui\cfg\simpleTasks\types\takeoff_ca.paa", + { // statement + params ["_target", "_player", "_params"]; + // find nearest base or location + private _base = [_player] call EFUNC(common,getNearestBase); + private _baseName = [_base] call EFUNC(common,getNameOfBase); + // send event to server + [QGVAR(fileReinsertRequest), [_player, _base]] call CBA_fnc_serverEvent; + // notify player their request was filed + [["Re-insert Request Filed"], [format["Location: %1", _baseName]]] call CBA_fnc_notify; + }, + { // condition + params ["_target", "_player", "_params"]; + // find nearest base or location + private _base = [_player] call EFUNC(common,getNearestBase); + private _baseDistance = _player distance _base; - private _maxRangeToReady = missionNamespace getVariable [QGVAR(setting_maxRangeToReady), 400]; - private _existingQueue = missionNamespace getVariable [QGVAR(reinsertionQueue), []]; + private _maxRangeToReady = [QGVAR(setting_maxRangeToReady)] call CBA_settings_fnc_get; + private _existingQueue = missionNamespace getVariable [QGVAR(reinsertionQueue), []]; - // check if module is enabled, player is near a base, and player is not already in the queue - // (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes - missionNamespace getVariable ["milsim_reinsert_setting_reinsertion_enabled", true] && - (_baseDistance < _maxRangeToReady) && - not (_player in (_existingQueue apply {_x#0})) - } -] call ace_interact_menu_fnc_createAction; -[_type, 1, ["ACE_SelfActions"], _fileForReinsertAction, true] call ace_interact_menu_fnc_addActionToClass; + // check if module is enabled, player is near a base, and player is not already in the queue + // (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes + [QGVAR(setting_enabled)] call CBA_settings_fnc_get && + (_baseDistance < _maxRangeToReady) && + not (_player in (_existingQueue apply {_x#0})) + } + ] call ace_interact_menu_fnc_createAction; + [_classToAddActionsTo, 1, ["ACE_SelfActions"], _fileForReinsertAction, _useInheritance] call ace_interact_menu_fnc_addActionToClass; -private _removeFileForReinsertAction = [ - QGVAR(removeReinsertRequestAction), - "Remove Re-insert Request", - "\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa", - { // statement - params ["_target", "_player", "_params"]; - // send event to server - [QGVAR(removeReinsertRequest), [_player]] call CBA_fnc_serverEvent; - // notify player their request was rescinded - "Re-insert Request Rescinded" call CBA_fnc_notify; - }, - { // condition - params ["_target", "_player", "_params"]; - private _existingQueue = missionNamespace getVariable [QGVAR(reinsertionQueue), []]; - - // check if module is enabled, player is in the queue - // (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes - missionNamespace getVariable ["milsim_reinsert_setting_reinsertion_enabled", true] && - (_player in (_existingQueue apply {_x#0})) - } -] call ace_interact_menu_fnc_createAction; -[_type, 1, ["ACE_SelfActions"], _removeFileForReinsertAction, true] call ace_interact_menu_fnc_addActionToClass; - -private _classesActionsAddedTo = (localNamespace getVariable [QGVAR(fileForReinsertClassesAdded), []]); -_classesActionsAddedTo pushBackUnique _type; -localNamespace setVariable [QGVAR(fileForReinsertClassesAdded), _classesActionsAddedTo]; + private _removeFileForReinsertAction = [ + QGVAR(removeReinsertRequestAction), + "Remove Re-insert Request", + "\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa", + { // statement + params ["_target", "_player", "_params"]; + // send event to server + [QGVAR(removeReinsertRequest), [_player]] call CBA_fnc_serverEvent; + // notify player their request was rescinded + "Re-insert Request Rescinded" call CBA_fnc_notify; + }, + { // condition + params ["_target", "_player", "_params"]; + private _existingQueue = missionNamespace getVariable [QGVAR(reinsertionQueue), []]; + // check if module is enabled, player is in the queue + // (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes + [QGVAR(setting_enabled)] call CBA_settings_fnc_get && + (_player in (_existingQueue apply {_x#0})) + } + ] call ace_interact_menu_fnc_createAction; + [_classToAddActionsTo, 1, ["ACE_SelfActions"], _removeFileForReinsertAction, _useInheritance] call ace_interact_menu_fnc_addActionToClass; +} forEach _types; \ No newline at end of file diff --git a/framework/reinsert/client/fn_addCheckQueueSelfAction.sqf b/framework/reinsert/client/fn_addCheckQueueSelfAction.sqf index 341e09f..819a01a 100644 --- a/framework/reinsert/client/fn_addCheckQueueSelfAction.sqf +++ b/framework/reinsert/client/fn_addCheckQueueSelfAction.sqf @@ -1,30 +1,28 @@ #include "..\script_component.hpp" -params ["_type"]; // string of the object's classname -if (!(_type isKindOf "CAManBase")) exitWith {}; +params [ + ["_types", [], [[]]], // classnames to assign these action to + ["_useInheritance", false, [false]] +]; -if ( - (localNamespace getVariable [QGVAR(checkReinsertQueueClassesAdded), []]) - find _type != -1 -) exitWith {}; +{ // forEach _types + private _classToAddActionsTo = _x; -private _checkReinsertQueueAction = [ - QGVAR(checkReinsertQueue), - "[PILOT] Check Re-insert Queue", - "\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa", - { - params ["_target", "_player", "_params"]; - // request notification from the server - call FUNC(requestShowQueue); - // reset last check time - localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime]; - }, - { - missionNamespace getVariable [QGVAR(setting_enabled), true] - } // always allow -] call ace_interact_menu_fnc_createAction; -[_type, 1, ["ACE_SelfActions"], _checkReinsertQueueAction, true] call ace_interact_menu_fnc_addActionToClass; + private _checkReinsertQueueAction = [ + QGVAR(checkReinsertQueue), + "[PILOT] Check Re-insert Queue", + "\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa", + { + params ["_target", "_player", "_params"]; + // request notification from the server + call FUNC(requestShowQueue); + // reset last check time + localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime]; + }, + { + GVAR(setting_enabled); + } // condition + ] call ace_interact_menu_fnc_createAction; + [_classToAddActionsTo, 1, ["ACE_SelfActions"], _checkReinsertQueueAction, _useInheritance] call ace_interact_menu_fnc_addActionToClass; -private _classesActionsAddedTo = (localNamespace getVariable [QGVAR(checkReinsertQueueClassesAdded), []]); -_classesActionsAddedTo pushBackUnique _type; -localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), _classesActionsAddedTo]; \ No newline at end of file +} forEach _types; \ No newline at end of file diff --git a/framework/reinsert/client/fn_initClient.sqf b/framework/reinsert/client/fn_initClient.sqf index f262ffe..df78cd0 100644 --- a/framework/reinsert/client/fn_initClient.sqf +++ b/framework/reinsert/client/fn_initClient.sqf @@ -5,26 +5,16 @@ if (!hasInterface) exitWith {}; // ACE SELF-INTERACTIONS FOR FILING AND RESCINDING REINSERT REQUESTS NEAR BASE - ALL PLAYERS localNamespace setVariable [QGVAR(fileForReinsertClassesAdded), []]; // add actions to current class -[typeOf player] call FUNC(addAceSelfActions); -// add actions to future classes -["ace_interact_menu_newControllableObject", { - _this call FUNC(addAceSelfActions); -}] call CBA_fnc_addEventHandler; +[["CAManBase"], true] call FUNC(addAceSelfActions); ///////////////////////////////////////////////////// // PILOTS ONLY // ACE SELF-INTERACTIONS FOR CHECKING REINSERT QUEUE - ONLY FOR PILOTS -if ((typeOf player) in ["B_Helipilot_F", "B_helicrew_F"]) then { - localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []]; - localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime]; +localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []]; +localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime]; - // add actions to current class - [typeOf player] call FUNC(addCheckQueueSelfAction); - // add actions to future classes - ["ace_interact_menu_newControllableObject", { - _this call FUNC(addCheckQueueSelfAction); - }] call CBA_fnc_addEventHandler; -}; +// add actions to pilot classes, and don't apply to child classes +[["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction); ///////////////////////////////////////////////////// @@ -33,13 +23,13 @@ if ((typeOf player) in ["B_Helipilot_F", "B_helicrew_F"]) then { [{ // if module not enabled and pilot forced check not enabled, exit if (not ( - missionNamespace getVariable [QGVAR(setting_enabled), true] && - missionNamespace getVariable [QGVAR(setting_pilotForcedCheckEnabled), true] + [QGVAR(setting_enabled)] call CBA_settings_fnc_get and + [QGVAR(setting_pilotForcedCheckEnabled)] call CBA_settings_fnc_get )) exitWith {}; // if last check was less than X minutes ago, skip private _lastCheck = localNamespace getVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime]; - private _requiredCheckInterval = missionNamespace getVariable [QGVAR(setting_pilotForcedCheckInterval), 60*20]; + private _requiredCheckInterval = [QGVAR(setting_pilotForcedCheckInterval)] call CBA_settings_fnc_get; if ( diag_tickTime - _lastCheck < _requiredCheckInterval diff --git a/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf b/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf index 74977f9..247377c 100644 --- a/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf +++ b/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf @@ -35,9 +35,7 @@ private _supplyCrateTypesCfgs = _supplyCratesCfg call BIS_fnc_returnChildren; private _cfg = _x; private _supplyCrateDisplayName = (_cfg >> "displayName") call BIS_fnc_getCfgData; - - - + // add action to spawn supply crate private _actionID = _arsenalBox addAction [format ["Spawn %1", _supplyCrateDisplayName], { params ["_target", "_caller", "_actionId", "_arguments"]; _arguments params ["_supplyCrateCfg"]; -- 2.37.3.windows.1 From 7268d8fd50b916318602024fad4b3822043fe9cc Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Thu, 8 Feb 2024 12:01:51 -0800 Subject: [PATCH 3/6] change vehicle flag actions to use class inheritance instead of object --- .../vehicleFlags/functions/fn_initClient.sqf | 164 +++++++++--------- 1 file changed, 78 insertions(+), 86 deletions(-) diff --git a/framework/vehicleFlags/functions/fn_initClient.sqf b/framework/vehicleFlags/functions/fn_initClient.sqf index 7ebe0fd..bdc2ae6 100644 --- a/framework/vehicleFlags/functions/fn_initClient.sqf +++ b/framework/vehicleFlags/functions/fn_initClient.sqf @@ -16,94 +16,86 @@ private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_ private _parentClass = _x; //////////////////////////////////////////////////////////////////////// - // add CBA class event handler to add actions to vehicles after they are initialized - // all classes that inherit from the base classes will also have this applied - // an exclusion function is present for manually excluding specific classes + // create the root action //////////////////////////////////////////////////////////////////////// - [_parentClass, "InitPost", { - - - - //////////////////////////////////////////////////////////////////////// - // create the root action - //////////////////////////////////////////////////////////////////////// - private _rootActionID = "SetVehicleFlag"; - private _flagRootAction = [ - _rootActionID, // id - "Set Vehicle Flag", // displayed title - "\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon - {true}, // statement - { - params ["_target", "_player", "_params"]; - // _params params ["_parentActionID", "_flagCategories"]; - - // check if vehicle is excluded - private _excluded = [typeOf _target] call FUNC(isClassExcluded); - if (_excluded || !alive _target) exitWith {false}; - - true; - }, // condition - { - //////////////////////////////////////////////////////////////////////// - // create the flag category actions (with nested flag actions) - //////////////////////////////////////////////////////////////////////// - params ["_target", "_player", "_params"]; - _params params ["_rootActionID"]; - - private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg); - if (isNull _vehicleFlagsCfg) exitWith {[]}; - private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_returnChildren; - - // return category child actions with individual flag actions nested as children - [_rootActionID, _flagCategoryCfgs] call FUNC(getActionsFlagCategories); - - }, // child code - [_rootActionID], // params - nil, // position - 4, // distance - [false, false, false, false, false], // other params - nil // modifier function code - ] call ace_interact_menu_fnc_createAction; - - //////////////////////////////////////////////////////////////////////// - // add root action to add flags - //////////////////////////////////////////////////////////////////////// - [ - (_this select 0), // object - 0, // action 0 or self-action 1 - ["ACE_MainActions"], // parent - _flagRootAction // action - ] call ace_interact_menu_fnc_addActionToObject; - - //////////////////////////////////////////////////////////////////////// - // add action to remove flag under the root action - //////////////////////////////////////////////////////////////////////// - // create action - private _removeFlagAction = [ - _rootActionID + "_removeflag", // id - "Remove Flag", // displayed title - "\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon - { - params ["_target", "_player", "_params"]; - _target forceFlagTexture ""; - }, // statement - { - params ["_target", "_player", "_params"]; - alive _target && getForcedFlagTexture _target != ""; - }, // condition - nil // child code - ] call ace_interact_menu_fnc_createAction; - - // add the action to the vehicle - // in this class event handler, this#0 will be the vehicle - [ - (_this select 0), // object - 0, // action 0 or self-action 1 - ["ACE_MainActions", _rootActionID], // parent - _removeFlagAction // action - ] call ace_interact_menu_fnc_addActionToObject; + private _rootActionID = QGVAR(SetVehicleFlagAction); + private _flagRootAction = [ + _rootActionID, // id + "Set Vehicle Flag", // displayed title + "\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon + {true}, // statement + { + params ["_target", "_player", "_params"]; + // _params params ["_parentActionID", "_flagCategories"]; - }, true, [], true] call CBA_fnc_addClassEventHandler; + // check if vehicle is excluded + private _excluded = [typeOf _target] call FUNC(isClassExcluded); + if (_excluded || !alive _target) exitWith {false}; + + true; + }, // condition + { + //////////////////////////////////////////////////////////////////////// + // create the flag category actions (with nested flag actions) + //////////////////////////////////////////////////////////////////////// + params ["_target", "_player", "_params"]; + _params params ["_rootActionID"]; + + private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg); + if (isNull _vehicleFlagsCfg) exitWith {[]}; + private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_returnChildren; + + // return category child actions with individual flag actions nested as children + [_rootActionID, _flagCategoryCfgs] call FUNC(getActionsFlagCategories); + + }, // child code + [_rootActionID], // params + nil, // position + 4, // distance + [false, false, false, false, false], // other params + nil // modifier function code + ] call ace_interact_menu_fnc_createAction; + + //////////////////////////////////////////////////////////////////////// + // add root action to add flags + //////////////////////////////////////////////////////////////////////// + [ + _parentClass, // parent classname + 0, // action 0 or self-action 1 + ["ACE_MainActions"], // parent + _flagRootAction, // action + true // apply to child classes + ] call ace_interact_menu_fnc_addActionToClass; + + //////////////////////////////////////////////////////////////////////// + // add action to remove flag under the root action + //////////////////////////////////////////////////////////////////////// + // create action + private _removeFlagAction = [ + _rootActionID + "_removeflag", // id + "Remove Flag", // displayed title + "\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon + { + params ["_target", "_player", "_params"]; + _target forceFlagTexture ""; + }, // statement + { + params ["_target", "_player", "_params"]; + alive _target && getForcedFlagTexture _target != ""; + }, // condition + nil // child code + ] call ace_interact_menu_fnc_createAction; + + // add the action to the vehicle + // in this class event handler, this#0 will be the vehicle + [ + _parentClass, // parent classname + 0, // action 0 or self-action 1 + ["ACE_MainActions", _rootActionID], // parent + _removeFlagAction, // action + true // apply to child classes + ] call ace_interact_menu_fnc_addActionToClass; + } forEach _baseClassesToApplyActionsFor; nil; \ No newline at end of file -- 2.37.3.windows.1 From fba423e38daaca9976d32c12dd059aec8669f718 Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Thu, 8 Feb 2024 12:47:51 -0800 Subject: [PATCH 4/6] update mapcopy module with CBA events --- README.md | 2 +- framework/CfgFunctions.hpp | 23 ++++----- framework/init/functions/fn_initClient.sqf | 1 + framework/map/fn_copyMapFromPlayer.sqf | 5 -- framework/map/fn_getPlayerMapMarkers.sqf | 16 ------- framework/map/fn_initMapCopy.sqf | 17 ------- framework/map/fn_loadMapMarkers.sqf | 10 ---- .../mapcopy/functions/fn_addCBASettings.sqf | 24 ++++++++++ .../mapcopy/functions/fn_getMapMarkers.sqf | 15 ++++++ framework/mapcopy/functions/fn_initClient.sqf | 48 +++++++++++++++++++ .../mapcopy/functions/fn_loadMapMarkers.sqf | 8 ++++ .../functions}/fn_mapMarkerToString.sqf | 0 .../functions}/fn_stringToMapMarker.sqf | 0 framework/mapcopy/script_component.hpp | 3 ++ 14 files changed, 112 insertions(+), 60 deletions(-) delete mode 100644 framework/map/fn_copyMapFromPlayer.sqf delete mode 100644 framework/map/fn_getPlayerMapMarkers.sqf delete mode 100644 framework/map/fn_initMapCopy.sqf delete mode 100644 framework/map/fn_loadMapMarkers.sqf create mode 100644 framework/mapcopy/functions/fn_addCBASettings.sqf create mode 100644 framework/mapcopy/functions/fn_getMapMarkers.sqf create mode 100644 framework/mapcopy/functions/fn_initClient.sqf create mode 100644 framework/mapcopy/functions/fn_loadMapMarkers.sqf rename framework/{map => mapcopy/functions}/fn_mapMarkerToString.sqf (100%) rename framework/{map => mapcopy/functions}/fn_stringToMapMarker.sqf (100%) create mode 100644 framework/mapcopy/script_component.hpp diff --git a/README.md b/README.md index 8587393..b3279a5 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ This directory contains a number of hpp files used to define constants throughou - A subcomponent of `fbcb2_main`. Used to gather, display, and manage diary records as intel for assets near known bases. - `init`: - Contains core initialization functions. Both server and client inits across all modules are managed here. -- `map`: +- `mapcopy`: - Gives players the ability to copy each other's maps. - `performance`: - Contains functionality for monitoring and logging performance data. diff --git a/framework/CfgFunctions.hpp b/framework/CfgFunctions.hpp index d9e5f96..997f002 100644 --- a/framework/CfgFunctions.hpp +++ b/framework/CfgFunctions.hpp @@ -20,16 +20,6 @@ class CfgFunctions { class flakInitVehicle {}; class flakEH {}; }; - - class map { - file = "framework\map"; - class initMapCopy { postInit = 1; }; - class copyMapFromPlayer {}; //needs refactor - class getPlayerMapMarkers {}; //needs refactor - class loadMapMarkers {}; //needs refactor - class mapMarkerToString {}; //needs refactor - class stringToMapMarker {}; //needs refactor - }; }; class DOUBLES(PREFIX,client) { @@ -42,7 +32,6 @@ class CfgFunctions { }; }; - class DOUBLES(PREFIX,common) { class functions { file = "framework\common\functions"; @@ -101,6 +90,18 @@ class CfgFunctions { }; }; + class DOUBLES(PREFIX,mapcopy) { + class functions { + file = "framework\mapcopy\functions"; + class addCBASettings {preInit=1;}; + class initClient {}; + class getMapMarkers {}; + class loadMapMarkers {}; + class mapMarkerToString {}; + class stringToMapMarker {}; + }; + }; + class DOUBLES(PREFIX,performance) { class functions { file = "framework\performance\functions"; diff --git a/framework/init/functions/fn_initClient.sqf b/framework/init/functions/fn_initClient.sqf index a7d106a..14259f6 100644 --- a/framework/init/functions/fn_initClient.sqf +++ b/framework/init/functions/fn_initClient.sqf @@ -16,6 +16,7 @@ waitUntil {!isNil QGVARMAIN(complete)}; // initialize other modules +call EFUNC(mapcopy,initClient); call EFUNC(reinsert,initClient); call EFUNC(resupply,initClient); call EFUNC(triageIcons,initClient); diff --git a/framework/map/fn_copyMapFromPlayer.sqf b/framework/map/fn_copyMapFromPlayer.sqf deleted file mode 100644 index 16d988e..0000000 --- a/framework/map/fn_copyMapFromPlayer.sqf +++ /dev/null @@ -1,5 +0,0 @@ -params ["_sourcePlayer","_destinationPlayer"]; - -hint format["Copying map markers from %1", name _sourcePlayer]; - -[_destinationPlayer] remoteExecCall ["milsim_fnc_getPlayerMapMarkers",_sourcePlayer]; diff --git a/framework/map/fn_getPlayerMapMarkers.sqf b/framework/map/fn_getPlayerMapMarkers.sqf deleted file mode 100644 index 299985c..0000000 --- a/framework/map/fn_getPlayerMapMarkers.sqf +++ /dev/null @@ -1,16 +0,0 @@ -params ["_destinationPlayer"]; - -_markerData = []; - -hint format["Your map is being copied by %1", name _destinationPlayer]; - -{ - _marker = toArray _x; - _marker resize 15; - if ( toString _marker == "_USER_DEFINED #" ) then { - _marker = _x call milsim_fnc_mapMarkerToString; - _markerData pushBack _marker; - }; -} forEach allMapMarkers; - -[_markerData] remoteExecCall ["milsim_fnc_loadMapMarkers",_destinationPlayer]; diff --git a/framework/map/fn_initMapCopy.sqf b/framework/map/fn_initMapCopy.sqf deleted file mode 100644 index 7e60c51..0000000 --- a/framework/map/fn_initMapCopy.sqf +++ /dev/null @@ -1,17 +0,0 @@ -_map_copy_condition = -{ - ('ItemMap' in (assignedItems _player)) && ('ItemMap' in (assignedItems _target)) && ([_player, _target, []] call ace_common_fnc_canInteractWith) -}; - -_map_copy_action = -[ - "MilSimCopyMap", - "Copy Map", - "\a3\ui_f\data\igui\cfg\actions\talk_ca.paa", - { - [_target,_player] call milsim_fnc_copyMapFromPlayer - }, - _map_copy_condition -] call ace_interact_menu_fnc_createAction; - -["Man", 0, ["ACE_MainActions"], _map_copy_action, true] call ace_interact_menu_fnc_addActionToClass; \ No newline at end of file diff --git a/framework/map/fn_loadMapMarkers.sqf b/framework/map/fn_loadMapMarkers.sqf deleted file mode 100644 index d01989b..0000000 --- a/framework/map/fn_loadMapMarkers.sqf +++ /dev/null @@ -1,10 +0,0 @@ -params ["_markerList"]; - -if ('ItemMap' in (assignedItems player)) then { - { - _x call milsim_fnc_stringToMapMarker; - } foreach _markerList; - hint format["Map copied!"]; -} else { - hint format["You need a map to copy onto!"]; -}; diff --git a/framework/mapcopy/functions/fn_addCBASettings.sqf b/framework/mapcopy/functions/fn_addCBASettings.sqf new file mode 100644 index 0000000..6e299a3 --- /dev/null +++ b/framework/mapcopy/functions/fn_addCBASettings.sqf @@ -0,0 +1,24 @@ +#include "..\script_component.hpp" + +[ + QGVAR(setting_enable), + "CHECKBOX", + "Allow Map Copying", + [QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)], + true, // default value + true, // is global + { + params ["_value"]; + [ + QGVAR(setting_enable), + _value + ] call EFUNC(common,logSettingChanged); + } +] call CBA_fnc_addSetting; + +[ + LEVEL_INFO, + QUOTE(COMPONENT), + "CREATED SETTINGS", + [] +] call EFUNC(common,log); \ No newline at end of file diff --git a/framework/mapcopy/functions/fn_getMapMarkers.sqf b/framework/mapcopy/functions/fn_getMapMarkers.sqf new file mode 100644 index 0000000..2764dd4 --- /dev/null +++ b/framework/mapcopy/functions/fn_getMapMarkers.sqf @@ -0,0 +1,15 @@ +#include "..\script_component.hpp" +// serializes markers on local machine and returns them as array + +_markerData = []; + +{ + _marker = toArray _x; + _marker resize 15; + if ( toString _marker == "_USER_DEFINED #" ) then { + _marker = _x call FUNC(mapMarkerToString); + _markerData pushBack _marker; + }; +} forEach allMapMarkers; + +_markerData; \ No newline at end of file diff --git a/framework/mapcopy/functions/fn_initClient.sqf b/framework/mapcopy/functions/fn_initClient.sqf new file mode 100644 index 0000000..c7eaa22 --- /dev/null +++ b/framework/mapcopy/functions/fn_initClient.sqf @@ -0,0 +1,48 @@ +#include "..\script_component.hpp" + +//////////////////////////////////////////////////////////////////// +// Create action to copy map markers on all inheritors of CAManBase +//////////////////////////////////////////////////////////////////// +private _mapCopyAction = +[ + QGVAR(actionID), + "Copy Map", + "\a3\ui_f\data\igui\cfg\actions\talk_ca.paa", + { + params ["_target", "_player", "_params"]; + format["Copying map markers from %1", name _target] call CBA_fnc_notify; + [QGVAR(mapCopyRequest), _this, _target] call CBA_fnc_targetEvent; + }, + { + params ["_target", "_player", "_params"]; + [QGVAR(setting_enable)] call CBA_settings_fnc_get && { + ('ItemMap' in (assignedItems _player)) && + ('ItemMap' in (assignedItems _target)) && + ([_player, _target, []] call ace_common_fnc_canInteractWith) + }; + } +] call ace_interact_menu_fnc_createAction; +["CAManBase", 0, ["ACE_MainActions"], _mapCopyAction, true] call ace_interact_menu_fnc_addActionToClass; + +//////////////////////////////////////////////////////////////////// +// Create CBA event to receive requests +//////////////////////////////////////////////////////////////////// +[QGVAR(mapCopyRequest), { + params ["_me", "_requester", "_params"]; + format["Your map is being copied by %1", name _requester] call CBA_fnc_notify; + private _myMarkers = _this call FUNC(getMapMarkers); + [QGVAR(mapCopyResponse), [_me, _myMarkers], _requester] call CBA_fnc_targetEvent; +}] call CBA_fnc_addEventHandler; + +//////////////////////////////////////////////////////////////////// +// Create CBA event to receive responses +//////////////////////////////////////////////////////////////////// +[QGVAR(mapCopyResponse), { + params [["_responder", objNull, [objNull]], ["_markerList", [], [[]]]]; + if ('ItemMap' in (assignedItems player)) then { + [_markerList] call FUNC(loadMapMarkers); + format["Copied %1 markers from %2", count _markerList, name _responder] call CBA_fnc_notify; + } else { + format["You need a map to copy onto!"] call CBA_fnc_notify; + }; +}] call CBA_fnc_addEventHandler; \ No newline at end of file diff --git a/framework/mapcopy/functions/fn_loadMapMarkers.sqf b/framework/mapcopy/functions/fn_loadMapMarkers.sqf new file mode 100644 index 0000000..804bc82 --- /dev/null +++ b/framework/mapcopy/functions/fn_loadMapMarkers.sqf @@ -0,0 +1,8 @@ +#include "..\script_component.hpp" +// accepts an array of serialized markers and adds them to local map + +params [["_markerList", [], [[]]]]; + +{ + _x call FUNC(stringToMapMarker); +} foreach _markerList; \ No newline at end of file diff --git a/framework/map/fn_mapMarkerToString.sqf b/framework/mapcopy/functions/fn_mapMarkerToString.sqf similarity index 100% rename from framework/map/fn_mapMarkerToString.sqf rename to framework/mapcopy/functions/fn_mapMarkerToString.sqf diff --git a/framework/map/fn_stringToMapMarker.sqf b/framework/mapcopy/functions/fn_stringToMapMarker.sqf similarity index 100% rename from framework/map/fn_stringToMapMarker.sqf rename to framework/mapcopy/functions/fn_stringToMapMarker.sqf diff --git a/framework/mapcopy/script_component.hpp b/framework/mapcopy/script_component.hpp new file mode 100644 index 0000000..1011914 --- /dev/null +++ b/framework/mapcopy/script_component.hpp @@ -0,0 +1,3 @@ +#define COMPONENT mapcopy +#define COMPONENT_BEAUTIFIED Map Copy +#include "../script_mod.hpp" \ No newline at end of file -- 2.37.3.windows.1 From 2db018103c0600b56e1228d9693609fc4fb7db5d Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Thu, 8 Feb 2024 15:04:22 -0800 Subject: [PATCH 5/6] move local diary mgmt to common module, clarify clientInit complete msg --- framework/CfgFunctions.hpp | 3 +-- .../functions}/fn_createOrUpdateDiaryRecord.sqf | 11 ++++++++++- framework/fbcb2_assets/functions/fn_initClient.sqf | 2 +- .../fbcb2_assets/functions/fn_updateAssetDiary.sqf | 2 +- .../fbcb2_main/functions/fn_addEnvironmentRecord.sqf | 2 +- .../fbcb2_main/functions/fn_addFrequenciesRecord.sqf | 4 ++-- .../functions/fn_addSignalColorsRecord.sqf | 2 +- framework/fbcb2_main/functions/fn_initClient.sqf | 8 +------- .../init/functions/fn_addRespawnChatHandler.sqf | 2 +- framework/init/functions/fn_initClient.sqf | 12 +++++++++++- framework/mapcopy/functions/fn_initClient.sqf | 11 ++++++++++- framework/reinsert/client/fn_initClient.sqf | 6 ++++-- framework/resupply/functions/fn_initClient.sqf | 2 +- framework/triageIcons/functions/fn_initClient.sqf | 3 ++- framework/vehicleFlags/functions/fn_initClient.sqf | 9 +++++++++ 15 files changed, 56 insertions(+), 23 deletions(-) rename framework/{fbcb2_main/util => common/functions}/fn_createOrUpdateDiaryRecord.sqf (80%) diff --git a/framework/CfgFunctions.hpp b/framework/CfgFunctions.hpp index 997f002..01d02b0 100644 --- a/framework/CfgFunctions.hpp +++ b/framework/CfgFunctions.hpp @@ -12,7 +12,6 @@ class CfgFunctions { class addRespawnChatHandler { postInit = 1; }; }; }; - class PREFIX { class ambience { @@ -38,6 +37,7 @@ class CfgFunctions { class addCBASettings { preInit = 1; }; class logMissionInfo {}; class addPlayerInfoToArray {}; + class createOrUpdateDiaryRecord {}; class getApprovedAssetsCfg {}; class getBattalionCfg {}; class getNameOfBase {}; @@ -84,7 +84,6 @@ class CfgFunctions { }; class util { file = "framework\fbcb2_main\util"; - class createOrUpdateDiaryRecord {}; class formatRadioElementForDiary {}; class generateElementFrequencyRecordText {}; }; diff --git a/framework/fbcb2_main/util/fn_createOrUpdateDiaryRecord.sqf b/framework/common/functions/fn_createOrUpdateDiaryRecord.sqf similarity index 80% rename from framework/fbcb2_main/util/fn_createOrUpdateDiaryRecord.sqf rename to framework/common/functions/fn_createOrUpdateDiaryRecord.sqf index 7f04abb..2b790d9 100644 --- a/framework/fbcb2_main/util/fn_createOrUpdateDiaryRecord.sqf +++ b/framework/common/functions/fn_createOrUpdateDiaryRecord.sqf @@ -3,12 +3,21 @@ if (!hasInterface) exitWith {}; params [ - ["_subjectID", GVAR(subjectStatusID), [""]], + ["_subjectID", "", [""]], ["_recordTitle", "", [""]], ["_recordText", "", [""]], ["_recordIcon", "", [""]] ]; +// Check if all parameters are provided +if ( + count _subjectID isEqualTo 0 || + count _recordTitle isEqualTo 0 || + count _recordText isEqualTo 0 +) exitWith { + [LEVEL_ERROR, QUOTE(COMPONENT), "Not all parameters provided"] call EFUNC(common,log); +}; + // Check if already created private _subjectRecords = GVAR(diaryRecords) getOrDefault [_subjectID, createHashMap, true]; private _existingRecord = _subjectRecords getOrDefault [_recordTitle, diaryRecordNull, true]; diff --git a/framework/fbcb2_assets/functions/fn_initClient.sqf b/framework/fbcb2_assets/functions/fn_initClient.sqf index 62dfbf3..c18b012 100644 --- a/framework/fbcb2_assets/functions/fn_initClient.sqf +++ b/framework/fbcb2_assets/functions/fn_initClient.sqf @@ -21,7 +21,7 @@ call FUNC(updateAssetDiary); [ LEVEL_DEBUG, QUOTE(COMPONENT), - "postInit complete", + "initClient complete", [] ] call EFUNC(common,log); diff --git a/framework/fbcb2_assets/functions/fn_updateAssetDiary.sqf b/framework/fbcb2_assets/functions/fn_updateAssetDiary.sqf index 72e516d..d2669d5 100644 --- a/framework/fbcb2_assets/functions/fn_updateAssetDiary.sqf +++ b/framework/fbcb2_assets/functions/fn_updateAssetDiary.sqf @@ -241,7 +241,7 @@ private _randomColors = [ ], _recordText joinString "
", _icon - ] call EFUNC(fbcb2_main,createOrUpdateDiaryRecord); + ] call EFUNC(common,createOrUpdateDiaryRecord); // "\A3\ui_f\data\igui\cfg\simpleTasks\types\car_ca.paa" } forEach _distinctVehiclesClassNames; diff --git a/framework/fbcb2_main/functions/fn_addEnvironmentRecord.sqf b/framework/fbcb2_main/functions/fn_addEnvironmentRecord.sqf index 3cc7dda..8aff10b 100644 --- a/framework/fbcb2_main/functions/fn_addEnvironmentRecord.sqf +++ b/framework/fbcb2_main/functions/fn_addEnvironmentRecord.sqf @@ -109,4 +109,4 @@ _text = _text joinString "
"; GVAR(subjectIntelID), _recordTitle, _text -] call FUNC(createOrUpdateDiaryRecord); \ No newline at end of file +] call EFUNC(common,createOrUpdateDiaryRecord); \ No newline at end of file diff --git a/framework/fbcb2_main/functions/fn_addFrequenciesRecord.sqf b/framework/fbcb2_main/functions/fn_addFrequenciesRecord.sqf index 9f5cccb..ae10cf0 100644 --- a/framework/fbcb2_main/functions/fn_addFrequenciesRecord.sqf +++ b/framework/fbcb2_main/functions/fn_addFrequenciesRecord.sqf @@ -62,7 +62,7 @@ reverse _battalionElementCfgs; GVAR(subjectFrequenciesID), _diaryTitleText#0, _diaryTitleText#1 - ] call FUNC(createOrUpdateDiaryRecord); + ] call EFUNC(common,createOrUpdateDiaryRecord); } forEach _battalionElementCfgs; // add the battalion command to the top of the list @@ -72,6 +72,6 @@ private _diaryTitleText = [_battalionInfoCfg >> "Command", false] call FUNC(gene GVAR(subjectFrequenciesID), _diaryTitleText#0, _diaryTitleText#1 -] call FUNC(createOrUpdateDiaryRecord); +] call EFUNC(common,createOrUpdateDiaryRecord); true; \ No newline at end of file diff --git a/framework/fbcb2_main/functions/fn_addSignalColorsRecord.sqf b/framework/fbcb2_main/functions/fn_addSignalColorsRecord.sqf index 078c72f..ae712de 100644 --- a/framework/fbcb2_main/functions/fn_addSignalColorsRecord.sqf +++ b/framework/fbcb2_main/functions/fn_addSignalColorsRecord.sqf @@ -56,4 +56,4 @@ _text = _text joinString "

"; GVAR(subjectIntelID), _recordTitle, _text -] call FUNC(createOrUpdateDiaryRecord); \ No newline at end of file +] call EFUNC(common,createOrUpdateDiaryRecord); \ No newline at end of file diff --git a/framework/fbcb2_main/functions/fn_initClient.sqf b/framework/fbcb2_main/functions/fn_initClient.sqf index b2f717b..e0cc5cb 100644 --- a/framework/fbcb2_main/functions/fn_initClient.sqf +++ b/framework/fbcb2_main/functions/fn_initClient.sqf @@ -25,12 +25,6 @@ player createDiarySubject[GVAR(subjectAssetsFixedWingID), "FBCB2 Planes"]; player createDiarySubject[GVAR(subjectAssetsRotaryID), "FBCB2 Helicopters"]; player createDiarySubject[GVAR(subjectAssetsGroundID), "FBCB2 Ground"]; -// store records in format: -// [subject, [ -// [title, diaryRecord] -// ]] -GVAR(diaryRecords) = createHashMap; - // run main inits [] call FUNC(addFrequenciesRecord); [] call FUNC(addSignalColorsRecord); @@ -47,7 +41,7 @@ GVAR(diaryRecords) = createHashMap; [ LEVEL_DEBUG, QUOTE(COMPONENT), - "postInit complete", + "initClient complete", [] ] call EFUNC(common,log); diff --git a/framework/init/functions/fn_addRespawnChatHandler.sqf b/framework/init/functions/fn_addRespawnChatHandler.sqf index b2d0007..6e4c22f 100644 --- a/framework/init/functions/fn_addRespawnChatHandler.sqf +++ b/framework/init/functions/fn_addRespawnChatHandler.sqf @@ -24,7 +24,7 @@ [ LEVEL_INFO, QUOTE(COMPONENT), - "Respawn chat handler registered", + "respawn chat handler registered", [player] call EFUNC(common,addPlayerInfoToArray) ] call EFUNC(common,log); diff --git a/framework/init/functions/fn_initClient.sqf b/framework/init/functions/fn_initClient.sqf index 14259f6..39fc06e 100644 --- a/framework/init/functions/fn_initClient.sqf +++ b/framework/init/functions/fn_initClient.sqf @@ -14,9 +14,17 @@ waitUntil {!isNil QGVARMAIN(complete)}; ["InitializePlayer", [player, true]] call BIS_fnc_dynamicGroups; +// Initialize a holder for managing local diary records +// store records in format: +// [subject, [ +// [title, diaryRecord] +// ]] +EGVAR(common,diaryRecords) = createHashMap; + // initialize other modules call EFUNC(mapcopy,initClient); +call EFUNC(rasptools,initClient); call EFUNC(reinsert,initClient); call EFUNC(resupply,initClient); call EFUNC(triageIcons,initClient); @@ -28,8 +36,10 @@ call EFUNC(fbcb2_assets,initClient); [ LEVEL_DEBUG, QUOTE(COMPONENT), - "postInit complete", + "initClient complete", [] ] call EFUNC(common,log); +localNamespace setVariable [QGVAR(complete), true]; + nil; \ No newline at end of file diff --git a/framework/mapcopy/functions/fn_initClient.sqf b/framework/mapcopy/functions/fn_initClient.sqf index c7eaa22..3287103 100644 --- a/framework/mapcopy/functions/fn_initClient.sqf +++ b/framework/mapcopy/functions/fn_initClient.sqf @@ -45,4 +45,13 @@ private _mapCopyAction = } else { format["You need a map to copy onto!"] call CBA_fnc_notify; }; -}] call CBA_fnc_addEventHandler; \ No newline at end of file +}] call CBA_fnc_addEventHandler; + +[ + LEVEL_DEBUG, + QUOTE(COMPONENT), + "initClient complete", + [] +] call EFUNC(common,log); + +localNamespace setVariable [QGVAR(complete), true]; \ No newline at end of file diff --git a/framework/reinsert/client/fn_initClient.sqf b/framework/reinsert/client/fn_initClient.sqf index df78cd0..e770796 100644 --- a/framework/reinsert/client/fn_initClient.sqf +++ b/framework/reinsert/client/fn_initClient.sqf @@ -47,6 +47,8 @@ if ((typeOf player) in ["B_Helipilot_F", "B_helicrew_F"]) then { [ LEVEL_DEBUG, QUOTE(COMPONENT), - "postInit complete", + "initClient complete", [] -] call EFUNC(common,log); \ No newline at end of file +] call EFUNC(common,log); + +localNamespace setVariable [QGVAR(complete), true]; \ No newline at end of file diff --git a/framework/resupply/functions/fn_initClient.sqf b/framework/resupply/functions/fn_initClient.sqf index b5601fd..1def6f7 100644 --- a/framework/resupply/functions/fn_initClient.sqf +++ b/framework/resupply/functions/fn_initClient.sqf @@ -7,7 +7,7 @@ call FUNC(addArsenalObjectSpawnBoxActions); [ LEVEL_DEBUG, QUOTE(COMPONENT), - "postInit complete", + "initClient complete", [] ] call EFUNC(common,log); diff --git a/framework/triageIcons/functions/fn_initClient.sqf b/framework/triageIcons/functions/fn_initClient.sqf index 79b48ec..7b22f9d 100644 --- a/framework/triageIcons/functions/fn_initClient.sqf +++ b/framework/triageIcons/functions/fn_initClient.sqf @@ -6,7 +6,8 @@ GVAR(drawTargets) = []; [ LEVEL_DEBUG, QUOTE(COMPONENT), - "postInit complete", + "initClient complete", [] ] call EFUNC(common,log); + localNamespace setVariable [QGVAR(complete), true]; \ No newline at end of file diff --git a/framework/vehicleFlags/functions/fn_initClient.sqf b/framework/vehicleFlags/functions/fn_initClient.sqf index bdc2ae6..dd2dbcc 100644 --- a/framework/vehicleFlags/functions/fn_initClient.sqf +++ b/framework/vehicleFlags/functions/fn_initClient.sqf @@ -98,4 +98,13 @@ private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_ } forEach _baseClassesToApplyActionsFor; +[ + LEVEL_DEBUG, + QUOTE(COMPONENT), + "initClient complete", + [] +] call EFUNC(common,log); + +localNamespace setVariable [QGVAR(complete), true]; + nil; \ No newline at end of file -- 2.37.3.windows.1 From 442cb0b0b2885cb896aa94d5edecfa873151e8fd Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Thu, 8 Feb 2024 15:16:46 -0800 Subject: [PATCH 6/6] bugfixing --- framework/init/functions/fn_initClient.sqf | 1 - .../fn_addArsenalObjectSpawnBoxActions.sqf | 5 ++++- .../vehicleFlags/functions/fn_initClient.sqf | 4 ++-- .../functions/fn_isClassExcluded.sqf | 19 ++++++++++++++----- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/framework/init/functions/fn_initClient.sqf b/framework/init/functions/fn_initClient.sqf index 39fc06e..e45f73e 100644 --- a/framework/init/functions/fn_initClient.sqf +++ b/framework/init/functions/fn_initClient.sqf @@ -24,7 +24,6 @@ EGVAR(common,diaryRecords) = createHashMap; // initialize other modules call EFUNC(mapcopy,initClient); -call EFUNC(rasptools,initClient); call EFUNC(reinsert,initClient); call EFUNC(resupply,initClient); call EFUNC(triageIcons,initClient); diff --git a/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf b/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf index 247377c..b1f8f65 100644 --- a/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf +++ b/framework/resupply/functions/fn_addArsenalObjectSpawnBoxActions.sqf @@ -44,13 +44,16 @@ private _supplyCrateTypesCfgs = _supplyCratesCfg call BIS_fnc_returnChildren; configName _supplyCrateCfg, getPos _target ] call FUNC(createBox); + // log action use in server RPT + private _supplyCrateDisplayName = (_supplyCrateCfg >> "displayName") call BIS_fnc_getCfgData; [ LEVEL_INFO, QUOTE(COMPONENT), "Supply crate spawned", [player, [ - ["supplyCrateType", _supplyCrateDisplayName], + ["supplyCrateDisplayName", _supplyCrateDisplayName], + ["supplyCrateCfgName", configName _supplyCrateCfg], ["position", getPos _target] ]] call EFUNC(common,addPlayerInfoToArray) ] remoteExec [QEFUNC(common,log), 2]; diff --git a/framework/vehicleFlags/functions/fn_initClient.sqf b/framework/vehicleFlags/functions/fn_initClient.sqf index dd2dbcc..b0d9537 100644 --- a/framework/vehicleFlags/functions/fn_initClient.sqf +++ b/framework/vehicleFlags/functions/fn_initClient.sqf @@ -1,7 +1,7 @@ -if (!hasInterface) exitWith {}; - #include "..\script_component.hpp" +if (!hasInterface) exitWith {}; + private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg); if (!isClass _vehicleFlagsCfg) exitWith { diff --git a/framework/vehicleFlags/functions/fn_isClassExcluded.sqf b/framework/vehicleFlags/functions/fn_isClassExcluded.sqf index 223d6ae..8c3977e 100644 --- a/framework/vehicleFlags/functions/fn_isClassExcluded.sqf +++ b/framework/vehicleFlags/functions/fn_isClassExcluded.sqf @@ -6,21 +6,30 @@ Parameter(s): 0: STRING - Classname of the vehicle to check */ - +#include "..\script_component.hpp" if (!hasInterface) exitWith {}; params [["_className", "", [""]]]; if (_className == "") exitWith {false}; -private _vehicleFlagsCfg = call milsim_vehicleFlags_fnc_getVehicleFlagsCfg; +private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg); private _excludedVehiclesClass = (_vehicleFlagsCfg >> "ExcludedVehicles"); private _exclusionGroups = configProperties [_vehicleFlagsCfg >> "ExcludedVehicles"]; +private _isExcluded = false; { - // Check if the class doesn't have a flag proxy + // Check if the class is directly excluded private _excludedClasses = _x call BIS_fnc_getCfgDataArray; - if (_className in _excludedClasses) exitWith {true}; + if (_className in _excludedClasses) exitWith { + _isExcluded = true; + }; + { + if (_className isKindOf _x) exitWith { + _isExcluded = true; + }; + } forEach _excludedClasses; + if (_isExcluded) exitWith {}; } forEach _exclusionGroups; -false; +_isExcluded; -- 2.37.3.windows.1