From b67888f4f1c22c2a093a1a0f8a5cf432e8cfee33 Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Fri, 2 Feb 2024 14:34:04 -0800 Subject: [PATCH] locally tested, adds more features. ready for dedi --- functions/CfgFunctions.hpp | 17 ++- .../assets/byBase/fn_updateAssetsByBase.sqf | 115 ++++++++++++++-- .../assets/fn_removeAssetDiaryRecords.sqf | 16 +++ .../fbcb2/assets/fn_removeMarkersOnMap.sqf | 13 -- .../fbcb2/assets/fn_showMarkersOnMap.sqf | 38 ------ .../fbcb2/assets/fn_updateAssetDiary.sqf | 71 +++++++++- .../assets/markers/fn_removeMarkersOnMap.sqf | 25 ++++ .../assets/markers/fn_showMarkersOnMap.sqf | 123 ++++++++++++++++++ functions/fbcb2/fn_initFBCB2.sqf | 10 +- .../fbcb2/fn_processFBCB2FixedWingAssets.sqf | 26 ---- .../fbcb2/fn_processFBCB2RotaryAssets.sqf | 26 ---- .../util/fn_createOrUpdateDiaryRecord.sqf | 4 +- functions/fbcb2/util/fn_removeDiaryRecord.sqf | 0 functions/init/fn_initServer.sqf | 2 +- .../reinsert/client/fn_addAceSelfActions.sqf | 6 +- functions/reinsert/fn_getBaseName.sqf | 8 -- functions/reinsert/server/fn_addToQueue.sqf | 4 +- .../reinsert/server/fn_globalShowQueue.sqf | 8 +- .../reinsert/server/fn_removeFromQueue.sqf | 6 +- .../fn_returnReinsertQueueNotification.sqf | 2 +- .../reinsert/server/fn_validateQueue.sqf | 10 +- functions/settings/fn_addCBASettings.sqf | 26 ++++ functions/util/fn_getNameOfBase.sqf | 17 +++ .../{reinsert => util}/fn_getNearestBase.sqf | 6 +- 24 files changed, 416 insertions(+), 163 deletions(-) create mode 100644 functions/fbcb2/assets/fn_removeAssetDiaryRecords.sqf delete mode 100644 functions/fbcb2/assets/fn_removeMarkersOnMap.sqf delete mode 100644 functions/fbcb2/assets/fn_showMarkersOnMap.sqf create mode 100644 functions/fbcb2/assets/markers/fn_removeMarkersOnMap.sqf create mode 100644 functions/fbcb2/assets/markers/fn_showMarkersOnMap.sqf delete mode 100644 functions/fbcb2/fn_processFBCB2FixedWingAssets.sqf delete mode 100644 functions/fbcb2/fn_processFBCB2RotaryAssets.sqf create mode 100644 functions/fbcb2/util/fn_removeDiaryRecord.sqf delete mode 100644 functions/reinsert/fn_getBaseName.sqf create mode 100644 functions/util/fn_getNameOfBase.sqf rename functions/{reinsert => util}/fn_getNearestBase.sqf (56%) diff --git a/functions/CfgFunctions.hpp b/functions/CfgFunctions.hpp index b4f2ab8..d8d6331 100644 --- a/functions/CfgFunctions.hpp +++ b/functions/CfgFunctions.hpp @@ -16,8 +16,6 @@ class milsim class fbcb2 { class initFBCB2 { postInit = 1; }; - class processFBCB2FixedWingAssets {}; - class processFBCB2RotaryAssets {}; class processFBCB2RadioFrequencies {}; class processFBCB2SmokeColors {}; class processFBCB2Environment {}; @@ -85,6 +83,8 @@ class milsim class padString {}; class recurseSubclasses {}; class getBattalionCfg {}; + class getNameOfBase {}; + class getNearestBase {}; }; }; @@ -92,12 +92,11 @@ class milsim_fbcb2_assets { class functions { file = "functions\fbcb2\assets"; class updateAssetDiary {}; + class removeAssetDiaryRecords {}; class getMagsForWeapon {}; class getWeaponry {}; class getInventory {}; class getVehicleData {}; - class showMarkersOnMap {}; - class removeMarkersOnMap {}; }; class assetsByBase { file = "functions\fbcb2\assets\byBase"; @@ -105,14 +104,14 @@ class milsim_fbcb2_assets { class getStartingAssetsByBase {}; class updateAssetsByBase {}; }; + class markers { + file = "functions\fbcb2\assets\markers"; + class showMarkersOnMap {}; + class removeMarkersOnMap {}; + } }; class milsim_reinsert { - class functions { - file = "functions\reinsert"; - class getBaseName {}; - class getNearestBase {}; - }; class server { file = "functions\reinsert\server"; class initServer { postInit = 1; }; diff --git a/functions/fbcb2/assets/byBase/fn_updateAssetsByBase.sqf b/functions/fbcb2/assets/byBase/fn_updateAssetsByBase.sqf index e34cdb7..da06aef 100644 --- a/functions/fbcb2/assets/byBase/fn_updateAssetsByBase.sqf +++ b/functions/fbcb2/assets/byBase/fn_updateAssetsByBase.sqf @@ -1,15 +1,106 @@ params [["_isInit", false, [false]]]; -{ // find approved assets at each base - private _base = _x; - private _baseAssets = _base getVariable ["milsim_fbcb2_assets_assetsAtThisBase", []]; - { - private _className = configName _x; - _a = _base nearEntities [_className, 750]; - _baseAssets append _a; - } forEach ((missionConfigFile >> "ApprovedAssets") call BIS_fnc_returnChildren); - _base setVariable ["milsim_fbcb2_assets_assetsAtThisBase", _baseAssets, true]; - if (_isInit) then { - _base setVariable ["milsim_fbcb2_assets_assetsStartedAtThisBase", _baseAssets, true]; + +// Get all approved assets on map, find the closest base +// Then determine if it's within range +// If it is, add it to the base's assets list +// This is to ensure bases with overlapping detection range don't have duplicate assets +private _allVehicles = vehicles; +private _allSaved = []; + +private _assetsAtThisBaseVar = "milsim_fbcb2_assets_assetsAtThisBase"; +private _assetsStartedAtThisBaseVar = "milsim_fbcb2_assets_assetsStartedAtThisBase"; +{ + private _className = configName _x; + private _callsign = getText(_x >> "callsign"); + private _found = _allVehicles select { typeOf _x == _className }; + { + private _asset = _x; + // avoid duplicates + if (_asset in _allSaved) then {continue}; + private _closestBase = [_asset] call milsim_fnc_getNearestBase; + if (isNull _closestBase) then { + // no base found + continue; + }; + if ( + _asset distance _closestBase > + milsim_fbcb2_assets_setting_detectionRangeFromBase + ) then { + // not within range + continue; + }; + + _asset setVariable ["milsim_fbcb2_assets_callsign", _callsign, true]; + + // add to base's assets list + private _baseAssets = _closestBase getVariable [_assetsAtThisBaseVar, []]; + _baseAssets pushBackUnique _asset; + // broadcast later so we're not spamming network + _closestBase setVariable [ + _assetsAtThisBaseVar, + _baseAssets + ]; + + // if this is the init, set the base's assets started at this base + if (_isInit) then { + // broadcast later so we're not spamming network + _closestBase setVariable [ + _assetsStartedAtThisBaseVar, + _baseAssets + ]; + }; + + _allSaved pushBack _asset; + } forEach _found; +} forEach ((missionConfigFile >> "ApprovedAssets") call BIS_fnc_returnChildren); + +// Add all ground vehicles (LandVehicle) +{ + private _asset = _x; + // avoid duplicates + if (_asset in _allSaved) then {continue}; + + private _closestBase = [_asset] call milsim_fnc_getNearestBase; + if (isNull _closestBase) then { + // no base found + continue; }; -} forEach milsim_baseObjects; \ No newline at end of file + + if ( + _asset distance _closestBase > + milsim_fbcb2_assets_setting_detectionRangeFromBase + ) then { + // not within range + continue; + }; + + // add to base's assets list + private _baseAssets = _closestBase getVariable [_assetsAtThisBaseVar, []]; + _baseAssets pushBackUnique _asset; + // broadcast later so we're not spamming network + _closestBase setVariable [ + _assetsAtThisBaseVar, + _baseAssets + ]; + + // if this is the init, set the base's assets started at this base + if (_isInit) then { + // broadcast later so we're not spamming network + _closestBase setVariable [ + _assetsStartedAtThisBaseVar, + _baseAssets + ]; + }; +} forEach (_allVehicles select { _x isKindOf "LandVehicle" }); + + +// make the asset lists public +{ + private _baseAssets = _x getVariable [_assetsAtThisBaseVar, []]; + _x setVariable [_assetsAtThisBaseVar, _baseAssets, true]; + if (_isInit) then { + _x setVariable [_assetsStartedAtThisBaseVar, _baseAssets, true]; + }; +} forEach milsim_baseObjects; + diff --git a/functions/fbcb2/assets/fn_removeAssetDiaryRecords.sqf b/functions/fbcb2/assets/fn_removeAssetDiaryRecords.sqf new file mode 100644 index 0000000..400cd7d --- /dev/null +++ b/functions/fbcb2/assets/fn_removeAssetDiaryRecords.sqf @@ -0,0 +1,16 @@ +if (!hasInterface) exitWith {}; + +{ + private _diarySubject = _x; + private _records = player allDiaryRecords _diarySubject; + if (count _records isEqualTo 0) then {continue}; + + { + private _diaryRecord = _x select -1; + player removeDiaryRecord [_diarySubject, _diaryRecord]; + } forEach _records; +} forEach [ + milsim_fbcb2_subjectAssetsFixedWingID, + milsim_fbcb2_subjectAssetsRotaryID, + milsim_fbcb2_subjectAssetsGroundID +]; \ No newline at end of file diff --git a/functions/fbcb2/assets/fn_removeMarkersOnMap.sqf b/functions/fbcb2/assets/fn_removeMarkersOnMap.sqf deleted file mode 100644 index 07051c1..0000000 --- a/functions/fbcb2/assets/fn_removeMarkersOnMap.sqf +++ /dev/null @@ -1,13 +0,0 @@ -private _assetMarkerStore = localNamespace getVariable [ - "milsim_fbcb2_assets_markerStore", - [] -]; - -{ - deleteMarkerLocal _x; -} forEach _assetMarkerStore; - -localNamespace setVariable [ - "milsim_fbcb2_assets_markerStore", - [] -]; \ No newline at end of file diff --git a/functions/fbcb2/assets/fn_showMarkersOnMap.sqf b/functions/fbcb2/assets/fn_showMarkersOnMap.sqf deleted file mode 100644 index 7f2b1e8..0000000 --- a/functions/fbcb2/assets/fn_showMarkersOnMap.sqf +++ /dev/null @@ -1,38 +0,0 @@ -params [ - ["_className", "", [""]], - ["_markerType", "hd_dot", [""]], - ["_markerColor", "", [""]], - ["_positions", [], []] -]; - -if (count _className isEqualTo 0) exitWith { - ["No class name provided!"] call BIS_fnc_error; -}; -if (count _markerColor isEqualTo 0) exitWith { - ["No marker color provided!"] call BIS_fnc_error; -}; -if (count _positions isEqualTo 0) exitWith { - ["No positions provided!"] call BIS_fnc_error; -}; - -private _assetMarkerStore = localNamespace getVariable [ - "milsim_fbcb2_assets_markerStore", - [] -]; - -private _start = (count _assetMarkerStore) + 1; -{ - _position = _x; - _newMarker = createMarkerLocal [ - format["milsim_fbcb2_assets_marker_%1", _start], - _position - ]; - _newMarker setMarkerTypeLocal _markerType; - _newMarker setMarkerColorLocal _markerColor; - _newMarker setMarkerTextLocal str(_start); - - _assetMarkerStore pushBack _newMarker; - _start = _start + 1; -} forEach _positions; - -localNamespace setVariable ["milsim_fbcb2_assets_markerStore", _assetMarkerStore]; diff --git a/functions/fbcb2/assets/fn_updateAssetDiary.sqf b/functions/fbcb2/assets/fn_updateAssetDiary.sqf index e729efb..9709b9d 100644 --- a/functions/fbcb2/assets/fn_updateAssetDiary.sqf +++ b/functions/fbcb2/assets/fn_updateAssetDiary.sqf @@ -1,7 +1,19 @@ +if (!hasInterface) exitWith {}; + // create diary records + +// remove any existing asset map markers +call milsim_fbcb2_assets_fnc_removeMarkersOnMap; + +// remove existing asset records +call milsim_fbcb2_assets_fnc_removeAssetDiaryRecords; + +// get all vehicles by base private _vehiclesByBase = call milsim_fbcb2_assets_fnc_getAssetsByBase; if (count _vehiclesByBase isEqualTo 0) exitWith {false}; + +// put vehicles from each base into a single array private _vehicles = []; { _vehicles append (_x#1); @@ -24,6 +36,12 @@ private _distinctVehiclesClassNames = []; // Take the first vehicle as a representative private _representativeVehicle = _vehiclesOfThisKind#0; private _vehicleCfg = configOf _representativeVehicle; + private _vehicleCallsign = toUpper ( + _representativeVehicle getVariable [ + "milsim_fbcb2_assets_callsign", + "NONE ASSIGNED" + ] + ); // Process the vehicle for extended info // Exclusion list for display names @@ -53,6 +71,10 @@ private _distinctVehiclesClassNames = []; _recordText pushBack _title; _recordText pushBack _image; _recordText pushBack "
"; + _recordText pushBack format[ + "CALLSIGN: %1", + _vehicleCallsign + ]; _recordText pushBack format[ "COUNT ACTIVE: %1", count _vehiclesOfThisKind @@ -78,32 +100,63 @@ private _distinctVehiclesClassNames = []; case (_representativeVehicle isKindOf "Air"): { _markerType = "loc_plane"; }; + case (_representativeVehicle isKindOf "Ship"): { + _markerType = "loc_boat"; + }; + case (_representativeVehicle isKindOf "Car"): { + _markerType = "loc_car"; + }; default { _markerType = "loc_truck"; }; }; + // Link to show markers _recordText pushBack format[ "SHOW MARKERS at vehicle positions (in %5)", _className, _markerType, _randomColor#0, - (_vehiclesOfThisKind apply {getPosASL _x}), + _vehiclesOfThisKind, format["%2", _randomColor#1, _randomColor#2] ]; // Link to hide markers - _recordText pushBack "REMOVE ALL MARKERS showing asset positions" + "
"; + _recordText pushBack "REMOVE ALL MARKERS showing asset positions"; // Link to update asset diary entries - _recordText pushBack "UPDATE ENTRIES for all assets" + "
"; + _recordText pushBack "UPDATE ENTRIES for all assets"; + + _recordText pushBack format[ + "%1", + "Notes:
+ - Markers are only displayed on your local machine.
+ - The REMOVE ALL option will remove all assets' markers from the map.
+ - UPDATE ENTRIES will update the asset diary with the latest information (~5 minutes at most)." + ]; + + // Add info and capacity sections _recordText pushBack _info; _recordText pushBack _capacity; + + private _subjectID = ""; + switch (true) do { + case (_representativeVehicle isKindOf "Helicopter"): { + _subjectID = milsim_fbcb2_subjectAssetsRotaryID; + }; + case (_representativeVehicle isKindOf "Air"): { + _subjectID = milsim_fbcb2_subjectAssetsFixedWingID; + }; + default { + _subjectID = milsim_fbcb2_subjectAssetsGroundID; + }; + }; + [ - milsim_fbcb2_subjectAssetsID, + _subjectID, format[ "%1x %2", count _vehiclesOfThisKind, @@ -116,4 +169,14 @@ private _distinctVehiclesClassNames = []; // "\A3\ui_f\data\igui\cfg\simpleTasks\types\car_ca.paa" } forEach _distinctVehiclesClassNames; +// log to RPT +[ + "fbcb2_assets", + "UPDATED ASSET DIARY", + [ + ["assetCount", count _vehicles], + ["distinctAssetCount", count _distinctVehiclesClassNames] + ] +] call milsim_fnc_log; + true; \ No newline at end of file diff --git a/functions/fbcb2/assets/markers/fn_removeMarkersOnMap.sqf b/functions/fbcb2/assets/markers/fn_removeMarkersOnMap.sqf new file mode 100644 index 0000000..ef6db27 --- /dev/null +++ b/functions/fbcb2/assets/markers/fn_removeMarkersOnMap.sqf @@ -0,0 +1,25 @@ +private _baseMarkerStoreVar = "milsim_fbcb2_assets_baseMarkerStore"; +private _assetMarkerStoreVar = "milsim_fbcb2_assets_assetMarkerStore"; + +private _baseMarkerStore = localNamespace getVariable [ + _baseMarkerStoreVar, + [] +]; +private _assetMarkerStore = localNamespace getVariable [ + _assetMarkerStoreVar, + [] +]; + +// delete markers +{ + deleteMarkerLocal (_x#1); +} forEach (_baseMarkerStore + _assetMarkerStore); + +localNamespace setVariable [ + _baseMarkerStoreVar, + [] +]; +localNamespace setVariable [ + _assetMarkerStoreVar, + [] +]; diff --git a/functions/fbcb2/assets/markers/fn_showMarkersOnMap.sqf b/functions/fbcb2/assets/markers/fn_showMarkersOnMap.sqf new file mode 100644 index 0000000..c28426b --- /dev/null +++ b/functions/fbcb2/assets/markers/fn_showMarkersOnMap.sqf @@ -0,0 +1,123 @@ +params [ + ["_className", "", [""]], + ["_markerType", "hd_dot", [""]], + ["_markerColor", "", [""]], + ["_assetObjects", [], []] +]; + +if (count _className isEqualTo 0) exitWith { + ["No class name provided!"] call BIS_fnc_error; +}; +if (count _markerColor isEqualTo 0) exitWith { + ["No marker color provided!"] call BIS_fnc_error; +}; +if (count _assetObjects isEqualTo 0) exitWith { + ["No vehicles provided!"] call BIS_fnc_error; +}; + +private _baseMarkerStoreVar = "milsim_fbcb2_assets_baseMarkerStore"; +private _assetMarkerStoreVar = "milsim_fbcb2_assets_assetMarkerStore"; + +private _baseMarkerStore = localNamespace getVariable [ + _baseMarkerStoreVar, + [] +]; +private _assetMarkerStore = localNamespace getVariable [ + _assetMarkerStoreVar, + [] +]; + +/////////////////////////////////////////////////////////////////////////////// +// Create base markers if not already present +if (not (count _baseMarkerStore > 0)) then { + { + private _base = _x; + + // create a circle marker with range as the detection range of assets + _newMarker = createMarkerLocal [ + format["milsim_fbcb2_assets_base_marker_%1", _forEachIndex + 1], + getPosASL _base + ]; + _newMarker setMarkerTypeLocal "mil_dot"; + _newMarker setMarkerColorLocal "ColorGreen"; + _newMarker setMarkerShapeLocal "ELLIPSE"; + _newMarker setMarkerSizeLocal [ + milsim_fbcb2_assets_setting_detectionRangeFromBase, + milsim_fbcb2_assets_setting_detectionRangeFromBase + ]; + _newMarker setMarkerAlphaLocal 0.5; + _newMarker setMarkerTextLocal str(_forEachIndex + 1); + + _baseMarkerStore pushBack [ + _base, + _newMarker + ]; + + // create a flag marker at base position + _newMarker = createMarkerLocal [ + format["milsim_fbcb2_assets_base_flag_marker_%1", _forEachIndex + 1], + getPosASL _base + ]; + _newMarker setMarkerTypeLocal "mil_flag"; + _newMarker setMarkerColorLocal "ColorGreen"; + _newMarker setMarkerSizeLocal [0.7, 0.7]; + _newMarker setMarkerTextLocal ([_base] call milsim_fnc_getNameOfBase); + + _baseMarkerStore pushBack [ + _base, + _newMarker + ]; + } forEach milsim_baseObjects; + + localNamespace setVariable [_baseMarkerStoreVar, _baseMarkerStore]; +}; + + +private _start = (count _assetMarkerStore) + 1; +private _createdAssetMarkers = []; +{ + private _asset = _x; + // if asset was removed since last update + if (isNull _asset) then {continue}; + // check if a marker is already placed for this asset + if ( + (_assetMarkerStore findIf { _x select 0 isEqualTo _asset }) + > -1 + ) then {continue}; + + // create a marker for the asset + private _newMarker = createMarkerLocal [ + format["milsim_fbcb2_assets_marker_%1", _start], + getPosASL _asset + ]; + _newMarker setMarkerAlphaLocal 0; + _newMarker setMarkerTypeLocal _markerType; + _newMarker setMarkerColorLocal _markerColor; + // _newMarker setMarkerTextLocal ([configOf _asset] call BIS_fnc_displayName); + + _createdAssetMarkers pushBack [ + _asset, + _newMarker + ]; + _start = _start + 1; +} forEach _assetObjects; + +// unhide added asset markers sequentially +[_createdAssetMarkers apply {_x#1}] spawn { + params ["_markers"]; + for "_alpha" from 0.0 to 1.0 step 0.03 do + { + { + _x setMarkerAlphaLocal _alpha; + } forEach _markers; + Sleep 0.002; + }; +}; + +// add to store +{ + _assetMarkerStore pushBack _x; +} forEach _createdAssetMarkers; + +// update store var +localNamespace setVariable [_assetMarkerStoreVar, _assetMarkerStore]; diff --git a/functions/fbcb2/fn_initFBCB2.sqf b/functions/fbcb2/fn_initFBCB2.sqf index 0e0bccd..1f3e864 100644 --- a/functions/fbcb2/fn_initFBCB2.sqf +++ b/functions/fbcb2/fn_initFBCB2.sqf @@ -14,13 +14,17 @@ milsim_fbcb2_subjectStatusID = "FBCB2_Status"; milsim_fbcb2_subjectIntelID = "FBCB2_Intel"; milsim_fbcb2_subjectMessagesID = "FBCB2_Messages"; milsim_fbcb2_subjectFrequenciesID = "FBCB2_Frequencies"; -milsim_fbcb2_subjectAssetsID = "FBCB2_Assets"; +milsim_fbcb2_subjectAssetsFixedWingID = "FBCB2_Assets_FixedWing"; +milsim_fbcb2_subjectAssetsRotaryID = "FBCB2_Assets_Rotary"; +milsim_fbcb2_subjectAssetsGroundID = "FBCB2_Assets_Ground"; player createDiarySubject[milsim_fbcb2_subjectStatusID, "FBCB2 - Status"]; player createDiarySubject[milsim_fbcb2_subjectMessagesID, "FBCB2 - Messages"]; player createDiarySubject[milsim_fbcb2_subjectIntelID, "FBCB2 - Intel"]; player createDiarySubject[milsim_fbcb2_subjectFrequenciesID, "FBCB2 - Frequencies"]; -player createDiarySubject[milsim_fbcb2_subjectAssetsID, "FBCB2 - Assets"]; +player createDiarySubject[milsim_fbcb2_subjectAssetsFixedWingID, "FBCB2 - Assets Plane"]; +player createDiarySubject[milsim_fbcb2_subjectAssetsRotaryID, "FBCB2 - Assets Rotary"]; +player createDiarySubject[milsim_fbcb2_subjectAssetsGroundID, "FBCB2 - Assets Ground"]; // store records in format: // [subject, [ @@ -29,8 +33,6 @@ player createDiarySubject[milsim_fbcb2_subjectAssetsID, "FBCB2 - Assets"]; milsim_fbcb2_diaryRecords = createHashMap; // populate diary -[] call milsim_fnc_processFBCB2FixedWingAssets; -[] call milsim_fnc_processFBCB2RotaryAssets; [] call milsim_fnc_processFBCB2RadioFrequencies; [] call milsim_fnc_processFBCB2SmokeColors; [] call milsim_fnc_processFBCB2Environment; diff --git a/functions/fbcb2/fn_processFBCB2FixedWingAssets.sqf b/functions/fbcb2/fn_processFBCB2FixedWingAssets.sqf deleted file mode 100644 index 19135ed..0000000 --- a/functions/fbcb2/fn_processFBCB2FixedWingAssets.sqf +++ /dev/null @@ -1,26 +0,0 @@ -private _recordTitle = "MDS - ASSETS - FIXED"; - -private _assetList = missionNamespace getVariable "milsim_var_fixedAssets"; - -_text = "=======------ Mission Data Set ------======="; - -{ - _callSign = _x select 0; - _asset = _x select 1; - _assigned = _x select 2; - _name = getText(configFile >> "CfgVehicles" >> _asset >> "displayName"); - - _data = "Callsign: " + _callsign + "
Asset: " + _name + "
Assigned: " + str _assigned + ""; - - _text = _text + "

" + _data; - -} foreach _assetList; - -_text = _text + "

Run Report on local node?"; - - -[ - milsim_fbcb2_subjectStatusID, - _recordTitle, - _text -] call milsim_fnc_createOrUpdateDiaryRecord; \ No newline at end of file diff --git a/functions/fbcb2/fn_processFBCB2RotaryAssets.sqf b/functions/fbcb2/fn_processFBCB2RotaryAssets.sqf deleted file mode 100644 index 95bdeda..0000000 --- a/functions/fbcb2/fn_processFBCB2RotaryAssets.sqf +++ /dev/null @@ -1,26 +0,0 @@ -private _recordTitle = "MDS - ASSETS - ROTARY"; - -_assetList = missionNamespace getVariable "milsim_var_rotaryAssets"; - -_text = "=======------ Mission Data Set ------======="; - - { - _callSign = _x select 0; - _asset = _x select 1; - _assigned = _x select 2; - _name = getText(configFile >> "CfgVehicles" >> _asset >> "displayName"); - - _data = "Callsign: " + _callsign + "
Asset: " + _name + "
Assigned: " + str _assigned + ""; - - _text = _text + "

" + _data; - -} foreach _assetList; - -_text = _text + "

Run Report on local node?"; - - -[ - milsim_fbcb2_subjectStatusID, - _recordTitle, - _text -] call milsim_fnc_createOrUpdateDiaryRecord; \ No newline at end of file diff --git a/functions/fbcb2/util/fn_createOrUpdateDiaryRecord.sqf b/functions/fbcb2/util/fn_createOrUpdateDiaryRecord.sqf index eb591c5..6cd8330 100644 --- a/functions/fbcb2/util/fn_createOrUpdateDiaryRecord.sqf +++ b/functions/fbcb2/util/fn_createOrUpdateDiaryRecord.sqf @@ -1,3 +1,5 @@ +if (!hasInterface) exitWith {}; + params [ ["_subjectID", milsim_fbcb2_subjectStatusID, [""]], ["_recordTitle", "", [""]], @@ -10,7 +12,7 @@ private _subjectRecords = milsim_fbcb2_diaryRecords getOrDefault [_subjectID, cr private _existingRecord = _subjectRecords getOrDefault [_recordTitle, diaryRecordNull, true]; if (!isNull _existingRecord) then { - player setDiaryRecordText [[_subjectID, _existingRecord], [_recordTitle, _recordText]]; + player setDiaryRecordText [[_subjectID, _existingRecord], [_recordTitle, _recordText, _recordIcon]]; systemChat format ["Updated diary record: %1", _recordTitle]; } else { private _new = player createDiaryRecord [ diff --git a/functions/fbcb2/util/fn_removeDiaryRecord.sqf b/functions/fbcb2/util/fn_removeDiaryRecord.sqf new file mode 100644 index 0000000..e69de29 diff --git a/functions/init/fn_initServer.sqf b/functions/init/fn_initServer.sqf index 3a886bd..e851136 100644 --- a/functions/init/fn_initServer.sqf +++ b/functions/init/fn_initServer.sqf @@ -9,7 +9,7 @@ publicVariable "milsim_baseObjects"; // init asset stores at bases [true] call milsim_fbcb2_assets_fnc_updateAssetsByBase; // run update every 5 minutes -[{call milsim_fbcb2_assets_fnc_updateAssetsByBase;}, 60*5] call CBA_fnc_addPerFrameHandler; +[{[false] call milsim_fbcb2_assets_fnc_updateAssetsByBase;}, 60*5] call CBA_fnc_addPerFrameHandler; // Initializes the Dynamic Groups framework and groups ["Initialize", [true]] call BIS_fnc_dynamicGroups; diff --git a/functions/reinsert/client/fn_addAceSelfActions.sqf b/functions/reinsert/client/fn_addAceSelfActions.sqf index 7734e1b..137540d 100644 --- a/functions/reinsert/client/fn_addAceSelfActions.sqf +++ b/functions/reinsert/client/fn_addAceSelfActions.sqf @@ -13,8 +13,8 @@ private _fileForReinsertAction = [ { // statement params ["_target", "_player", "_params"]; // find nearest base or location - private _base = [_player] call milsim_reinsert_fnc_getNearestBase; - private _baseName = [_base] call milsim_reinsert_fnc_getBaseName; + private _base = [_player] call milsim_fnc_getNearestBase; + private _baseName = [_base] call milsim_fnc_getNameOfBase; // send event to server ["milsim_reinsert_fileReinsertRequest", [_player, _base]] call CBA_fnc_serverEvent; // notify player their request was filed @@ -23,7 +23,7 @@ private _fileForReinsertAction = [ { // condition params ["_target", "_player", "_params"]; // find nearest base or location - private _base = [_player] call milsim_reinsert_fnc_getNearestBase; + private _base = [_player] call milsim_fnc_getNearestBase; private _baseDistance = _player distance _base; private _maxRangeToReady = missionNamespace getVariable ["milsim_reinsert_setting_reinsertion_maxRangeToReady", 400]; diff --git a/functions/reinsert/fn_getBaseName.sqf b/functions/reinsert/fn_getBaseName.sqf deleted file mode 100644 index ab2cbf8..0000000 --- a/functions/reinsert/fn_getBaseName.sqf +++ /dev/null @@ -1,8 +0,0 @@ -params [["_base", objNull, [objNull]]]; -if (_base == objNull) exitWith {""}; - -// get base name -private _baseName = _base getVariable ["name", ""]; -if (_baseName == "") then {_baseName = format["near %1", text (nearestLocation [_base, ["NameCity", "NameLocal"]])]}; - -_baseName; \ No newline at end of file diff --git a/functions/reinsert/server/fn_addToQueue.sqf b/functions/reinsert/server/fn_addToQueue.sqf index ce662d1..55d14a3 100644 --- a/functions/reinsert/server/fn_addToQueue.sqf +++ b/functions/reinsert/server/fn_addToQueue.sqf @@ -41,9 +41,9 @@ publicVariable "milsim_reinsert_reinsertionQueue"; // log to rpt private _logParams = [ - ["filedAtBase", [_base] call milsim_reinsert_fnc_getBaseName], + ["filedAtBase", [_base] call milsim_fnc_getNameOfBase], ["filedAtBaseDistance", _player distance _base], - ["closestBase", [_nearestBase] call milsim_reinsert_fnc_getBaseName], + ["closestBase", [_nearestBase] call milsim_fnc_getNameOfBase], ["closestBaseDistance", _player distance _nearestBase], ["maxDistanceSetting", _maxRangeToReady], ["inQueueDuration", diag_tickTime - _timeFiled] diff --git a/functions/reinsert/server/fn_globalShowQueue.sqf b/functions/reinsert/server/fn_globalShowQueue.sqf index a85462e..ea7e80e 100644 --- a/functions/reinsert/server/fn_globalShowQueue.sqf +++ b/functions/reinsert/server/fn_globalShowQueue.sqf @@ -21,7 +21,7 @@ if (count _timeoutPlayers > 0) then { private _thisBase = _x; // Add line for base name - _playerLines pushBack ([[_thisBase] call milsim_reinsert_fnc_getBaseName, 1, [0,1,0,1]]); + _playerLines pushBack ([[_thisBase] call milsim_fnc_getNameOfBase, 1, [0,1,0,1]]); // Get players under this base private _thisBasePlayers = _timeoutPlayers select {_x#1 isEqualTo _thisBase}; @@ -35,7 +35,7 @@ if (count _timeoutPlayers > 0) then { { // for each player under this base, add a line _x params ["_player", "_base", "_timeFiled"]; // get the closest base to the player - private _nearestBase = [_player] call milsim_reinsert_fnc_getNearestBase; + private _nearestBase = [_player] call milsim_fnc_getNearestBase; // add player to array of players under bases _playerLines pushBack ([format [ @@ -47,9 +47,9 @@ if (count _timeoutPlayers > 0) then { // log to rpt private _logParams = [ - ["filedAtBase", [_base] call milsim_reinsert_fnc_getBaseName], + ["filedAtBase", [_base] call milsim_fnc_getNameOfBase], ["filedAtBaseDistance", _player distance _base], - ["closestBase", [_nearestBase] call milsim_reinsert_fnc_getBaseName], + ["closestBase", [_nearestBase] call milsim_fnc_getNameOfBase], ["closestBaseDistance", _player distance _nearestBase], ["maxDistanceSetting", _maxRangeToReady], ["inQueueDuration", diag_tickTime - _timeFiled] diff --git a/functions/reinsert/server/fn_removeFromQueue.sqf b/functions/reinsert/server/fn_removeFromQueue.sqf index 0e24679..7c131a1 100644 --- a/functions/reinsert/server/fn_removeFromQueue.sqf +++ b/functions/reinsert/server/fn_removeFromQueue.sqf @@ -39,12 +39,12 @@ publicVariable "milsim_reinsert_reinsertionQueue"; // get first entry (longest wait) (_unitArrs#0) params ["_player", "_base", "_timeFiled"]; // _unitArr = [unit, base, timeInQueue] // get the closest base to the player -private _nearestBase = [_player] call milsim_reinsert_fnc_getNearestBase; +private _nearestBase = [_player] call milsim_fnc_getNearestBase; // log to rpt private _logParams = [ - ["filedAtBase", [_base] call milsim_reinsert_fnc_getBaseName], + ["filedAtBase", [_base] call milsim_fnc_getNameOfBase], ["filedAtBaseDistance", _player distance _base], - ["closestBase", [_nearestBase] call milsim_reinsert_fnc_getBaseName], + ["closestBase", [_nearestBase] call milsim_fnc_getNameOfBase], ["closestBaseDistance", _player distance _nearestBase], ["maxDistanceSetting", _maxRangeToReady], ["inQueueDuration", diag_tickTime - _timeFiled] diff --git a/functions/reinsert/server/fn_returnReinsertQueueNotification.sqf b/functions/reinsert/server/fn_returnReinsertQueueNotification.sqf index d114ad2..ffe648b 100644 --- a/functions/reinsert/server/fn_returnReinsertQueueNotification.sqf +++ b/functions/reinsert/server/fn_returnReinsertQueueNotification.sqf @@ -48,7 +48,7 @@ if (count _basesWithPeople isEqualTo 0) then { // forEach _basesWithPeople { private _thisBase = _x; - private _baseName = [_thisBase] call milsim_reinsert_fnc_getBaseName; + private _baseName = [_thisBase] call milsim_fnc_getNameOfBase; // generate player lines for this base private _playerLines = _queue select { diff --git a/functions/reinsert/server/fn_validateQueue.sqf b/functions/reinsert/server/fn_validateQueue.sqf index 9c59209..5e27733 100644 --- a/functions/reinsert/server/fn_validateQueue.sqf +++ b/functions/reinsert/server/fn_validateQueue.sqf @@ -7,16 +7,16 @@ private _maxRangeToReady = missionNamespace getVariable ["milsim_reinsert_settin private _distanceToOriginalBase = _player distance _base; // get the closest base to the player - private _nearestBase = [_player] call milsim_reinsert_fnc_getNearestBase; + private _nearestBase = [_player] call milsim_fnc_getNearestBase; private _isCloseEnoughToAnyBase = (_player distance _nearestBase) < _maxRangeToReady; if (not _isCloseEnoughToAnyBase || not (alive _player)) then { // don't include player in updated queue // log to rpt private _logParams = [ - ["filedAtBase", [_base] call milsim_reinsert_fnc_getBaseName], + ["filedAtBase", [_base] call milsim_fnc_getNameOfBase], ["filedAtBaseDistance", _player distance _base], - ["closestBase", [_nearestBase] call milsim_reinsert_fnc_getBaseName], + ["closestBase", [_nearestBase] call milsim_fnc_getNameOfBase], ["closestBaseDistance", _player distance _nearestBase], ["maxDistanceSetting", _maxRangeToReady], ["inQueueDuration", diag_tickTime - _timeFiled] @@ -36,9 +36,9 @@ private _maxRangeToReady = missionNamespace getVariable ["milsim_reinsert_settin // if player's base has changed, log to rpt if (_base != _nearestBase) then { private _logParams = [ - ["filedAtBase", [_base] call milsim_reinsert_fnc_getBaseName], + ["filedAtBase", [_base] call milsim_fnc_getNameOfBase], ["filedAtBaseDistance", _player distance _base], - ["closestBase", [_nearestBase] call milsim_reinsert_fnc_getBaseName], + ["closestBase", [_nearestBase] call milsim_fnc_getNameOfBase], ["closestBaseDistance", _player distance _nearestBase], ["maxDistanceSetting", _maxRangeToReady], ["inQueueDuration", diag_tickTime - _timeFiled] diff --git a/functions/settings/fn_addCBASettings.sqf b/functions/settings/fn_addCBASettings.sqf index 2f22ebf..703bab9 100644 --- a/functions/settings/fn_addCBASettings.sqf +++ b/functions/settings/fn_addCBASettings.sqf @@ -242,6 +242,32 @@ } ] call CBA_fnc_addSetting; +//--------------------- +// Asset Diary and Markers Settings + +[ + "milsim_fbcb2_assets_setting_detectionRangeFromBase", // variable + "SLIDER", // type + ["Detection Range From Base", "The range from a base that assets will be detected"], // title + ["17th Battalion", "Asset Diary and Markers"], // category + [0, 1000, 750, 0, false], // [_min, _max, _default, _trailingDecimals, _isPercentage] + true, // global setting + { + params ["_value"]; + [ + "fbcb2_assets", + "SETTING CHANGED", + [ + [ + "setting", + "milsim_fbcb2_assets_setting_detectionRangeFromBase" + ], + ["newValue", _value] + ] + ] call milsim_fnc_log; + } +] call CBA_fnc_addSetting; + diag_log text "[MILSIM] (settings) Custom CBA settings initialized"; nil; \ No newline at end of file diff --git a/functions/util/fn_getNameOfBase.sqf b/functions/util/fn_getNameOfBase.sqf new file mode 100644 index 0000000..81ed4ec --- /dev/null +++ b/functions/util/fn_getNameOfBase.sqf @@ -0,0 +1,17 @@ +params [["_base", objNull, [objNull]]]; +if (_base == objNull) exitWith {""}; + +// get base name +private _baseName = _base getVariable ["name", ""]; +// if (_baseName == "") then { +// _baseName = format[ +// "near %1", +// text (nearestLocation [_base, ["NameCity", "NameLocal"]]) +// ] +// }; + +if (_baseName == "") then { + _baseName = _base call BIS_fnc_locationDescription; +}; + +_baseName; \ No newline at end of file diff --git a/functions/reinsert/fn_getNearestBase.sqf b/functions/util/fn_getNearestBase.sqf similarity index 56% rename from functions/reinsert/fn_getNearestBase.sqf rename to functions/util/fn_getNearestBase.sqf index 03207a4..68b103c 100644 --- a/functions/reinsert/fn_getNearestBase.sqf +++ b/functions/util/fn_getNearestBase.sqf @@ -1,10 +1,10 @@ -params [["_player", objNull, [objNull]]]; -if (isNull _player) exitWith {objNull}; +params [["_object", objNull, [objNull]]]; +if (isNull _object) exitWith {objNull}; private _bases = missionNamespace getVariable ["milsim_baseObjects", []]; if (count _bases == 0) exitWith {objNull}; // get nearest base (Module_Respawn_F) -private _closestBase = [_bases, _player] call BIS_fnc_nearestPosition; +private _closestBase = [_bases, _object] call BIS_fnc_nearestPosition; if (isNull _closestBase) exitWith {objNull}; _closestBase; \ No newline at end of file