Merge pull request 'misc-improvements' (#23) from misc-improvements into develop
Reviewed-on: https://17th-gs.iceberg-gaming.com:5443/hizumi/MissionTemplate/pulls/23
This commit was merged in pull request #23.
This commit is contained in:
@@ -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.
|
- A subcomponent of `fbcb2_main`. Used to gather, display, and manage diary records as intel for assets near known bases.
|
||||||
- `init`:
|
- `init`:
|
||||||
- Contains core initialization functions. Both server and client inits across all modules are managed here.
|
- 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.
|
- Gives players the ability to copy each other's maps.
|
||||||
- `performance`:
|
- `performance`:
|
||||||
- Contains functionality for monitoring and logging performance data.
|
- Contains functionality for monitoring and logging performance data.
|
||||||
|
|||||||
@@ -125,5 +125,40 @@ class VehicleFlags {
|
|||||||
texture = "textures\flags_misc\flag_redcross_co.paa";
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -13,23 +13,12 @@ class CfgFunctions {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class PREFIX {
|
class PREFIX {
|
||||||
class ambience {
|
class ambience {
|
||||||
file = "framework\ambience";
|
file = "framework\ambience";
|
||||||
class flakInitVehicle {};
|
class flakInitVehicle {};
|
||||||
class flakEH {};
|
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) {
|
class DOUBLES(PREFIX,client) {
|
||||||
@@ -42,13 +31,13 @@ class CfgFunctions {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class DOUBLES(PREFIX,common) {
|
class DOUBLES(PREFIX,common) {
|
||||||
class functions {
|
class functions {
|
||||||
file = "framework\common\functions";
|
file = "framework\common\functions";
|
||||||
class addCBASettings { preInit = 1; };
|
class addCBASettings { preInit = 1; };
|
||||||
class logMissionInfo {};
|
class logMissionInfo {};
|
||||||
class addPlayerInfoToArray {};
|
class addPlayerInfoToArray {};
|
||||||
|
class createOrUpdateDiaryRecord {};
|
||||||
class getApprovedAssetsCfg {};
|
class getApprovedAssetsCfg {};
|
||||||
class getBattalionCfg {};
|
class getBattalionCfg {};
|
||||||
class getNameOfBase {};
|
class getNameOfBase {};
|
||||||
@@ -95,12 +84,23 @@ class CfgFunctions {
|
|||||||
};
|
};
|
||||||
class util {
|
class util {
|
||||||
file = "framework\fbcb2_main\util";
|
file = "framework\fbcb2_main\util";
|
||||||
class createOrUpdateDiaryRecord {};
|
|
||||||
class formatRadioElementForDiary {};
|
class formatRadioElementForDiary {};
|
||||||
class generateElementFrequencyRecordText {};
|
class generateElementFrequencyRecordText {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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 DOUBLES(PREFIX,performance) {
|
||||||
class functions {
|
class functions {
|
||||||
file = "framework\performance\functions";
|
file = "framework\performance\functions";
|
||||||
|
|||||||
@@ -3,12 +3,21 @@
|
|||||||
if (!hasInterface) exitWith {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
params [
|
params [
|
||||||
["_subjectID", GVAR(subjectStatusID), [""]],
|
["_subjectID", "", [""]],
|
||||||
["_recordTitle", "", [""]],
|
["_recordTitle", "", [""]],
|
||||||
["_recordText", "", [""]],
|
["_recordText", "", [""]],
|
||||||
["_recordIcon", "", [""]]
|
["_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
|
// Check if already created
|
||||||
private _subjectRecords = GVAR(diaryRecords) getOrDefault [_subjectID, createHashMap, true];
|
private _subjectRecords = GVAR(diaryRecords) getOrDefault [_subjectID, createHashMap, true];
|
||||||
private _existingRecord = _subjectRecords getOrDefault [_recordTitle, diaryRecordNull, true];
|
private _existingRecord = _subjectRecords getOrDefault [_recordTitle, diaryRecordNull, true];
|
||||||
@@ -21,7 +21,7 @@ call FUNC(updateAssetDiary);
|
|||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"postInit complete",
|
"initClient complete",
|
||||||
[]
|
[]
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ private _randomColors = [
|
|||||||
],
|
],
|
||||||
_recordText joinString "<br/>",
|
_recordText joinString "<br/>",
|
||||||
_icon
|
_icon
|
||||||
] call EFUNC(fbcb2_main,createOrUpdateDiaryRecord);
|
] call EFUNC(common,createOrUpdateDiaryRecord);
|
||||||
|
|
||||||
// "\A3\ui_f\data\igui\cfg\simpleTasks\types\car_ca.paa"
|
// "\A3\ui_f\data\igui\cfg\simpleTasks\types\car_ca.paa"
|
||||||
} forEach _distinctVehiclesClassNames;
|
} forEach _distinctVehiclesClassNames;
|
||||||
|
|||||||
@@ -109,4 +109,4 @@ _text = _text joinString "<br/>";
|
|||||||
GVAR(subjectIntelID),
|
GVAR(subjectIntelID),
|
||||||
_recordTitle,
|
_recordTitle,
|
||||||
_text
|
_text
|
||||||
] call FUNC(createOrUpdateDiaryRecord);
|
] call EFUNC(common,createOrUpdateDiaryRecord);
|
||||||
@@ -62,7 +62,7 @@ reverse _battalionElementCfgs;
|
|||||||
GVAR(subjectFrequenciesID),
|
GVAR(subjectFrequenciesID),
|
||||||
_diaryTitleText#0,
|
_diaryTitleText#0,
|
||||||
_diaryTitleText#1
|
_diaryTitleText#1
|
||||||
] call FUNC(createOrUpdateDiaryRecord);
|
] call EFUNC(common,createOrUpdateDiaryRecord);
|
||||||
} forEach _battalionElementCfgs;
|
} forEach _battalionElementCfgs;
|
||||||
|
|
||||||
// add the battalion command to the top of the list
|
// add the battalion command to the top of the list
|
||||||
@@ -72,6 +72,6 @@ private _diaryTitleText = [_battalionInfoCfg >> "Command", false] call FUNC(gene
|
|||||||
GVAR(subjectFrequenciesID),
|
GVAR(subjectFrequenciesID),
|
||||||
_diaryTitleText#0,
|
_diaryTitleText#0,
|
||||||
_diaryTitleText#1
|
_diaryTitleText#1
|
||||||
] call FUNC(createOrUpdateDiaryRecord);
|
] call EFUNC(common,createOrUpdateDiaryRecord);
|
||||||
|
|
||||||
true;
|
true;
|
||||||
@@ -56,4 +56,4 @@ _text = _text joinString "<br/><br/>";
|
|||||||
GVAR(subjectIntelID),
|
GVAR(subjectIntelID),
|
||||||
_recordTitle,
|
_recordTitle,
|
||||||
_text
|
_text
|
||||||
] call FUNC(createOrUpdateDiaryRecord);
|
] call EFUNC(common,createOrUpdateDiaryRecord);
|
||||||
@@ -25,12 +25,6 @@ player createDiarySubject[GVAR(subjectAssetsFixedWingID), "FBCB2 Planes"];
|
|||||||
player createDiarySubject[GVAR(subjectAssetsRotaryID), "FBCB2 Helicopters"];
|
player createDiarySubject[GVAR(subjectAssetsRotaryID), "FBCB2 Helicopters"];
|
||||||
player createDiarySubject[GVAR(subjectAssetsGroundID), "FBCB2 Ground"];
|
player createDiarySubject[GVAR(subjectAssetsGroundID), "FBCB2 Ground"];
|
||||||
|
|
||||||
// store records in format:
|
|
||||||
// [subject, [
|
|
||||||
// [title, diaryRecord]
|
|
||||||
// ]]
|
|
||||||
GVAR(diaryRecords) = createHashMap;
|
|
||||||
|
|
||||||
// run main inits
|
// run main inits
|
||||||
[] call FUNC(addFrequenciesRecord);
|
[] call FUNC(addFrequenciesRecord);
|
||||||
[] call FUNC(addSignalColorsRecord);
|
[] call FUNC(addSignalColorsRecord);
|
||||||
@@ -47,7 +41,7 @@ GVAR(diaryRecords) = createHashMap;
|
|||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"postInit complete",
|
"initClient complete",
|
||||||
[]
|
[]
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
[
|
[
|
||||||
LEVEL_INFO,
|
LEVEL_INFO,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"Respawn chat handler registered",
|
"respawn chat handler registered",
|
||||||
[player] call EFUNC(common,addPlayerInfoToArray)
|
[player] call EFUNC(common,addPlayerInfoToArray)
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,16 @@ waitUntil {!isNil QGVARMAIN(complete)};
|
|||||||
|
|
||||||
["InitializePlayer", [player, true]] call BIS_fnc_dynamicGroups;
|
["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
|
// initialize other modules
|
||||||
|
call EFUNC(mapcopy,initClient);
|
||||||
call EFUNC(reinsert,initClient);
|
call EFUNC(reinsert,initClient);
|
||||||
call EFUNC(resupply,initClient);
|
call EFUNC(resupply,initClient);
|
||||||
call EFUNC(triageIcons,initClient);
|
call EFUNC(triageIcons,initClient);
|
||||||
@@ -28,7 +36,7 @@ call EFUNC(fbcb2_assets,initClient);
|
|||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"postInit complete",
|
"initClient complete",
|
||||||
[]
|
[]
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
params ["_sourcePlayer","_destinationPlayer"];
|
|
||||||
|
|
||||||
hint format["Copying map markers from %1", name _sourcePlayer];
|
|
||||||
|
|
||||||
[_destinationPlayer] remoteExecCall ["milsim_fnc_getPlayerMapMarkers",_sourcePlayer];
|
|
||||||
@@ -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];
|
|
||||||
@@ -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;
|
|
||||||
@@ -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!"];
|
|
||||||
};
|
|
||||||
24
framework/mapcopy/functions/fn_addCBASettings.sqf
Normal file
24
framework/mapcopy/functions/fn_addCBASettings.sqf
Normal file
@@ -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);
|
||||||
15
framework/mapcopy/functions/fn_getMapMarkers.sqf
Normal file
15
framework/mapcopy/functions/fn_getMapMarkers.sqf
Normal file
@@ -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;
|
||||||
57
framework/mapcopy/functions/fn_initClient.sqf
Normal file
57
framework/mapcopy/functions/fn_initClient.sqf
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#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;
|
||||||
|
|
||||||
|
[
|
||||||
|
LEVEL_DEBUG,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"initClient complete",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
localNamespace setVariable [QGVAR(complete), true];
|
||||||
8
framework/mapcopy/functions/fn_loadMapMarkers.sqf
Normal file
8
framework/mapcopy/functions/fn_loadMapMarkers.sqf
Normal file
@@ -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;
|
||||||
3
framework/mapcopy/script_component.hpp
Normal file
3
framework/mapcopy/script_component.hpp
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#define COMPONENT mapcopy
|
||||||
|
#define COMPONENT_BEAUTIFIED Map Copy
|
||||||
|
#include "../script_mod.hpp"
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
params ["_type"]; // string of the object's classname
|
params [
|
||||||
if (!(_type isKindOf "CAManBase")) exitWith {};
|
["_types", [], [[]]], // classnames to assign these action to
|
||||||
|
["_useInheritance", false, [false]]
|
||||||
|
];
|
||||||
|
|
||||||
if (
|
{ // forEach _types
|
||||||
(localNamespace getVariable [QGVAR(fileForReinsertClassesAdded), []])
|
private _classToAddActionsTo = _x;
|
||||||
find _type != -1
|
|
||||||
) exitWith {};
|
|
||||||
|
|
||||||
private _fileForReinsertAction = [
|
private _fileForReinsertAction = [
|
||||||
QGVAR(fileReinsertRequestAction),
|
QGVAR(fileReinsertRequestAction),
|
||||||
"File Re-insert Request",
|
"File Re-insert Request",
|
||||||
"\A3\ui_f\data\igui\cfg\simpleTasks\types\takeoff_ca.paa",
|
"\A3\ui_f\data\igui\cfg\simpleTasks\types\takeoff_ca.paa",
|
||||||
@@ -28,19 +28,19 @@ private _fileForReinsertAction = [
|
|||||||
private _base = [_player] call EFUNC(common,getNearestBase);
|
private _base = [_player] call EFUNC(common,getNearestBase);
|
||||||
private _baseDistance = _player distance _base;
|
private _baseDistance = _player distance _base;
|
||||||
|
|
||||||
private _maxRangeToReady = missionNamespace getVariable [QGVAR(setting_maxRangeToReady), 400];
|
private _maxRangeToReady = [QGVAR(setting_maxRangeToReady)] call CBA_settings_fnc_get;
|
||||||
private _existingQueue = missionNamespace getVariable [QGVAR(reinsertionQueue), []];
|
private _existingQueue = missionNamespace getVariable [QGVAR(reinsertionQueue), []];
|
||||||
|
|
||||||
// check if module is enabled, player is near a base, and player is not already in the queue
|
// 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
|
// (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes
|
||||||
missionNamespace getVariable ["milsim_reinsert_setting_reinsertion_enabled", true] &&
|
[QGVAR(setting_enabled)] call CBA_settings_fnc_get &&
|
||||||
(_baseDistance < _maxRangeToReady) &&
|
(_baseDistance < _maxRangeToReady) &&
|
||||||
not (_player in (_existingQueue apply {_x#0}))
|
not (_player in (_existingQueue apply {_x#0}))
|
||||||
}
|
}
|
||||||
] call ace_interact_menu_fnc_createAction;
|
] call ace_interact_menu_fnc_createAction;
|
||||||
[_type, 1, ["ACE_SelfActions"], _fileForReinsertAction, true] call ace_interact_menu_fnc_addActionToClass;
|
[_classToAddActionsTo, 1, ["ACE_SelfActions"], _fileForReinsertAction, _useInheritance] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
private _removeFileForReinsertAction = [
|
private _removeFileForReinsertAction = [
|
||||||
QGVAR(removeReinsertRequestAction),
|
QGVAR(removeReinsertRequestAction),
|
||||||
"Remove Re-insert Request",
|
"Remove Re-insert Request",
|
||||||
"\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa",
|
"\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa",
|
||||||
@@ -57,13 +57,9 @@ private _removeFileForReinsertAction = [
|
|||||||
|
|
||||||
// check if module is enabled, player is in the queue
|
// check if module is enabled, player is in the queue
|
||||||
// (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes
|
// (serverTime - GVAR(missionStartServerTime)) > 60*5 && // only allow after 15 minutes
|
||||||
missionNamespace getVariable ["milsim_reinsert_setting_reinsertion_enabled", true] &&
|
[QGVAR(setting_enabled)] call CBA_settings_fnc_get &&
|
||||||
(_player in (_existingQueue apply {_x#0}))
|
(_player in (_existingQueue apply {_x#0}))
|
||||||
}
|
}
|
||||||
] call ace_interact_menu_fnc_createAction;
|
] call ace_interact_menu_fnc_createAction;
|
||||||
[_type, 1, ["ACE_SelfActions"], _removeFileForReinsertAction, true] call ace_interact_menu_fnc_addActionToClass;
|
[_classToAddActionsTo, 1, ["ACE_SelfActions"], _removeFileForReinsertAction, _useInheritance] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
} forEach _types;
|
||||||
private _classesActionsAddedTo = (localNamespace getVariable [QGVAR(fileForReinsertClassesAdded), []]);
|
|
||||||
_classesActionsAddedTo pushBackUnique _type;
|
|
||||||
localNamespace setVariable [QGVAR(fileForReinsertClassesAdded), _classesActionsAddedTo];
|
|
||||||
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
params ["_type"]; // string of the object's classname
|
params [
|
||||||
if (!(_type isKindOf "CAManBase")) exitWith {};
|
["_types", [], [[]]], // classnames to assign these action to
|
||||||
|
["_useInheritance", false, [false]]
|
||||||
|
];
|
||||||
|
|
||||||
if (
|
{ // forEach _types
|
||||||
(localNamespace getVariable [QGVAR(checkReinsertQueueClassesAdded), []])
|
private _classToAddActionsTo = _x;
|
||||||
find _type != -1
|
|
||||||
) exitWith {};
|
|
||||||
|
|
||||||
private _checkReinsertQueueAction = [
|
private _checkReinsertQueueAction = [
|
||||||
QGVAR(checkReinsertQueue),
|
QGVAR(checkReinsertQueue),
|
||||||
"[PILOT] Check Re-insert Queue",
|
"[PILOT] Check Re-insert Queue",
|
||||||
"\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa",
|
"\A3\ui_f\data\igui\cfg\simpleTasks\types\land_ca.paa",
|
||||||
@@ -20,11 +20,9 @@ private _checkReinsertQueueAction = [
|
|||||||
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
missionNamespace getVariable [QGVAR(setting_enabled), true]
|
GVAR(setting_enabled);
|
||||||
} // always allow
|
} // condition
|
||||||
] call ace_interact_menu_fnc_createAction;
|
] call ace_interact_menu_fnc_createAction;
|
||||||
[_type, 1, ["ACE_SelfActions"], _checkReinsertQueueAction, true] call ace_interact_menu_fnc_addActionToClass;
|
[_classToAddActionsTo, 1, ["ACE_SelfActions"], _checkReinsertQueueAction, _useInheritance] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
private _classesActionsAddedTo = (localNamespace getVariable [QGVAR(checkReinsertQueueClassesAdded), []]);
|
} forEach _types;
|
||||||
_classesActionsAddedTo pushBackUnique _type;
|
|
||||||
localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), _classesActionsAddedTo];
|
|
||||||
@@ -5,26 +5,16 @@ if (!hasInterface) exitWith {};
|
|||||||
// ACE SELF-INTERACTIONS FOR FILING AND RESCINDING REINSERT REQUESTS NEAR BASE - ALL PLAYERS
|
// ACE SELF-INTERACTIONS FOR FILING AND RESCINDING REINSERT REQUESTS NEAR BASE - ALL PLAYERS
|
||||||
localNamespace setVariable [QGVAR(fileForReinsertClassesAdded), []];
|
localNamespace setVariable [QGVAR(fileForReinsertClassesAdded), []];
|
||||||
// add actions to current class
|
// add actions to current class
|
||||||
[typeOf player] call FUNC(addAceSelfActions);
|
[["CAManBase"], true] call FUNC(addAceSelfActions);
|
||||||
// add actions to future classes
|
|
||||||
["ace_interact_menu_newControllableObject", {
|
|
||||||
_this call FUNC(addAceSelfActions);
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
// PILOTS ONLY
|
// PILOTS ONLY
|
||||||
// ACE SELF-INTERACTIONS FOR CHECKING REINSERT QUEUE - ONLY FOR PILOTS
|
// 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(checkReinsertQueueClassesAdded), []];
|
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
||||||
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
|
||||||
|
|
||||||
// add actions to current class
|
// add actions to pilot classes, and don't apply to child classes
|
||||||
[typeOf player] call FUNC(addCheckQueueSelfAction);
|
[["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
||||||
// add actions to future classes
|
|
||||||
["ace_interact_menu_newControllableObject", {
|
|
||||||
_this call FUNC(addCheckQueueSelfAction);
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
};
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
@@ -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 module not enabled and pilot forced check not enabled, exit
|
||||||
if (not (
|
if (not (
|
||||||
missionNamespace getVariable [QGVAR(setting_enabled), true] &&
|
[QGVAR(setting_enabled)] call CBA_settings_fnc_get and
|
||||||
missionNamespace getVariable [QGVAR(setting_pilotForcedCheckEnabled), true]
|
[QGVAR(setting_pilotForcedCheckEnabled)] call CBA_settings_fnc_get
|
||||||
)) exitWith {};
|
)) exitWith {};
|
||||||
|
|
||||||
// if last check was less than X minutes ago, skip
|
// if last check was less than X minutes ago, skip
|
||||||
private _lastCheck = localNamespace getVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
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 (
|
if (
|
||||||
diag_tickTime - _lastCheck <
|
diag_tickTime - _lastCheck <
|
||||||
_requiredCheckInterval
|
_requiredCheckInterval
|
||||||
@@ -57,6 +47,8 @@ if ((typeOf player) in ["B_Helipilot_F", "B_helicrew_F"]) then {
|
|||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"postInit complete",
|
"initClient complete",
|
||||||
[]
|
[]
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
localNamespace setVariable [QGVAR(complete), true];
|
||||||
@@ -35,9 +35,7 @@ private _supplyCrateTypesCfgs = _supplyCratesCfg call BIS_fnc_returnChildren;
|
|||||||
private _cfg = _x;
|
private _cfg = _x;
|
||||||
private _supplyCrateDisplayName = (_cfg >> "displayName") call BIS_fnc_getCfgData;
|
private _supplyCrateDisplayName = (_cfg >> "displayName") call BIS_fnc_getCfgData;
|
||||||
|
|
||||||
|
// add action to spawn supply crate
|
||||||
|
|
||||||
|
|
||||||
private _actionID = _arsenalBox addAction [format ["<t color='#ffffff'>Spawn %1</t>", _supplyCrateDisplayName], {
|
private _actionID = _arsenalBox addAction [format ["<t color='#ffffff'>Spawn %1</t>", _supplyCrateDisplayName], {
|
||||||
params ["_target", "_caller", "_actionId", "_arguments"];
|
params ["_target", "_caller", "_actionId", "_arguments"];
|
||||||
_arguments params ["_supplyCrateCfg"];
|
_arguments params ["_supplyCrateCfg"];
|
||||||
@@ -46,13 +44,16 @@ private _supplyCrateTypesCfgs = _supplyCratesCfg call BIS_fnc_returnChildren;
|
|||||||
configName _supplyCrateCfg,
|
configName _supplyCrateCfg,
|
||||||
getPos _target
|
getPos _target
|
||||||
] call FUNC(createBox);
|
] call FUNC(createBox);
|
||||||
|
|
||||||
// log action use in server RPT
|
// log action use in server RPT
|
||||||
|
private _supplyCrateDisplayName = (_supplyCrateCfg >> "displayName") call BIS_fnc_getCfgData;
|
||||||
[
|
[
|
||||||
LEVEL_INFO,
|
LEVEL_INFO,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"Supply crate spawned",
|
"Supply crate spawned",
|
||||||
[player, [
|
[player, [
|
||||||
["supplyCrateType", _supplyCrateDisplayName],
|
["supplyCrateDisplayName", _supplyCrateDisplayName],
|
||||||
|
["supplyCrateCfgName", configName _supplyCrateCfg],
|
||||||
["position", getPos _target]
|
["position", getPos _target]
|
||||||
]] call EFUNC(common,addPlayerInfoToArray)
|
]] call EFUNC(common,addPlayerInfoToArray)
|
||||||
] remoteExec [QEFUNC(common,log), 2];
|
] remoteExec [QEFUNC(common,log), 2];
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ call FUNC(addArsenalObjectSpawnBoxActions);
|
|||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"postInit complete",
|
"initClient complete",
|
||||||
[]
|
[]
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ GVAR(drawTargets) = [];
|
|||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"postInit complete",
|
"initClient complete",
|
||||||
[]
|
[]
|
||||||
] call EFUNC(common,log);
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
localNamespace setVariable [QGVAR(complete), true];
|
localNamespace setVariable [QGVAR(complete), true];
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
if (!hasInterface) exitWith {};
|
|
||||||
|
|
||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
||||||
|
|
||||||
if (!isClass _vehicleFlagsCfg) exitWith {
|
if (!isClass _vehicleFlagsCfg) exitWith {
|
||||||
@@ -15,19 +15,10 @@ private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_
|
|||||||
{ // forEach _baseClassesToApplyActionsFor
|
{ // forEach _baseClassesToApplyActionsFor
|
||||||
private _parentClass = _x;
|
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
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
[_parentClass, "InitPost", {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// create the root action
|
// create the root action
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
private _rootActionID = "SetVehicleFlag";
|
private _rootActionID = QGVAR(SetVehicleFlagAction);
|
||||||
private _flagRootAction = [
|
private _flagRootAction = [
|
||||||
_rootActionID, // id
|
_rootActionID, // id
|
||||||
"Set Vehicle Flag", // displayed title
|
"Set Vehicle Flag", // displayed title
|
||||||
@@ -69,11 +60,12 @@ private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_
|
|||||||
// add root action to add flags
|
// add root action to add flags
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
[
|
[
|
||||||
(_this select 0), // object
|
_parentClass, // parent classname
|
||||||
0, // action 0 or self-action 1
|
0, // action 0 or self-action 1
|
||||||
["ACE_MainActions"], // parent
|
["ACE_MainActions"], // parent
|
||||||
_flagRootAction // action
|
_flagRootAction, // action
|
||||||
] call ace_interact_menu_fnc_addActionToObject;
|
true // apply to child classes
|
||||||
|
] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// add action to remove flag under the root action
|
// add action to remove flag under the root action
|
||||||
@@ -97,13 +89,22 @@ private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_
|
|||||||
// add the action to the vehicle
|
// add the action to the vehicle
|
||||||
// in this class event handler, this#0 will be the vehicle
|
// in this class event handler, this#0 will be the vehicle
|
||||||
[
|
[
|
||||||
(_this select 0), // object
|
_parentClass, // parent classname
|
||||||
0, // action 0 or self-action 1
|
0, // action 0 or self-action 1
|
||||||
["ACE_MainActions", _rootActionID], // parent
|
["ACE_MainActions", _rootActionID], // parent
|
||||||
_removeFlagAction // action
|
_removeFlagAction, // action
|
||||||
] call ace_interact_menu_fnc_addActionToObject;
|
true // apply to child classes
|
||||||
|
] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
}, true, [], true] call CBA_fnc_addClassEventHandler;
|
|
||||||
} forEach _baseClassesToApplyActionsFor;
|
} forEach _baseClassesToApplyActionsFor;
|
||||||
|
|
||||||
|
[
|
||||||
|
LEVEL_DEBUG,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"initClient complete",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
localNamespace setVariable [QGVAR(complete), true];
|
||||||
|
|
||||||
nil;
|
nil;
|
||||||
@@ -6,21 +6,30 @@
|
|||||||
Parameter(s):
|
Parameter(s):
|
||||||
0: STRING - Classname of the vehicle to check
|
0: STRING - Classname of the vehicle to check
|
||||||
*/
|
*/
|
||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
params [["_className", "", [""]]];
|
params [["_className", "", [""]]];
|
||||||
if (_className == "") exitWith {false};
|
if (_className == "") exitWith {false};
|
||||||
|
|
||||||
private _vehicleFlagsCfg = call milsim_vehicleFlags_fnc_getVehicleFlagsCfg;
|
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
||||||
private _excludedVehiclesClass = (_vehicleFlagsCfg >> "ExcludedVehicles");
|
private _excludedVehiclesClass = (_vehicleFlagsCfg >> "ExcludedVehicles");
|
||||||
private _exclusionGroups = configProperties [_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;
|
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;
|
} forEach _exclusionGroups;
|
||||||
|
|
||||||
false;
|
_isExcluded;
|
||||||
|
|||||||
Reference in New Issue
Block a user