many changes. includes rework of baselocation-asset storage format
This commit is contained in:
@@ -229,8 +229,8 @@ class BattalionInfo {
|
||||
};
|
||||
};
|
||||
|
||||
class Attack {
|
||||
callsign = CALLSIGN_ELEMENT(ECHO_CALLSIGN, ATTACK);
|
||||
class Armor {
|
||||
callsign = CALLSIGN_ELEMENT(ECHO_CALLSIGN, ARMOR);
|
||||
textColor = LVL4_TEXT_COLOR;
|
||||
frequencies[] = {
|
||||
{"Contact", {}, {FREQ_ECHO_GROUND, FREQ_ECHO_FLIGHT_CAS}},
|
||||
|
||||
@@ -93,10 +93,9 @@ class Params
|
||||
};
|
||||
|
||||
|
||||
class cfgFunctions
|
||||
{
|
||||
#include "framework\CfgFunctions.hpp"
|
||||
};
|
||||
// CfgFunctions
|
||||
#include "framework\CfgFunctions.hpp"
|
||||
|
||||
|
||||
|
||||
class CfgDebriefingSections {
|
||||
|
||||
@@ -1,146 +1,158 @@
|
||||
#include "script_mod.hpp"
|
||||
|
||||
class PREFIX
|
||||
{
|
||||
class settings
|
||||
{
|
||||
file = "framework\settings";
|
||||
class setDefaults { postInit = 1; };
|
||||
class addCBASettings { postInit = 1; };
|
||||
class addAARChatHandler { postInit = 1; };
|
||||
class addRespawnChatHandler { postInit = 1; };
|
||||
class CfgFunctions {
|
||||
class PREFIX
|
||||
{
|
||||
class settings
|
||||
{
|
||||
file = "framework\settings";
|
||||
class setDefaults { postInit = 1; };
|
||||
class addCBASettings { preInit = 1; };
|
||||
class addAARChatHandler { postInit = 1; };
|
||||
class addRespawnChatHandler { postInit = 1; };
|
||||
};
|
||||
|
||||
class init
|
||||
{
|
||||
file = "framework\init\functions";
|
||||
class initServer { postInit = 1;}; //needs refactor
|
||||
class initPlayerLocal { postInit = 1;};
|
||||
};
|
||||
|
||||
class client {
|
||||
file = "framework\client";
|
||||
class addZenModules { postInit = 1; };
|
||||
class addDNI_PlayerFPS { postInit = 1; }; // needs refactor
|
||||
class bindEventHandlers { postInit = 1; };
|
||||
class bindVehicleActions { postInit = 1; };
|
||||
class addClientStatsPFH {};
|
||||
class addMedicalOverlayPFH { postInit = 1; };
|
||||
class calculateClientStats {};
|
||||
class bindEmptyGroupGarbageCleanup { postInit = 1; };
|
||||
};
|
||||
|
||||
class server {
|
||||
file = "framework\server";
|
||||
class addServerStatsPFH {};
|
||||
class calculateServerStats {};
|
||||
class logPlayerInventory {};
|
||||
};
|
||||
|
||||
class ambience {
|
||||
file = "framework\ambience";
|
||||
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 init
|
||||
{
|
||||
file = "framework\init\functions";
|
||||
class initServer { postInit = 1;}; //needs refactor
|
||||
class initPlayerLocal { postInit = 1;};
|
||||
|
||||
|
||||
class DOUBLES(PREFIX,fbcb2_assets) {
|
||||
class functions {
|
||||
file = "framework\fbcb2_assets\functions";
|
||||
class addCBASettings {preInit=1;};
|
||||
class initClient {postInit=1;};
|
||||
class initServer {postInit=1;};
|
||||
class getAssetsByBase {};
|
||||
class getInventory {};
|
||||
class getMagsForWeapon {};
|
||||
class getStartingAssetsByBase {};
|
||||
class getVehicleData {};
|
||||
class getWeaponry {};
|
||||
class hintAllApprovedAssets {};
|
||||
class removeAssetDiaryRecords {};
|
||||
class removeMarkersOnMap {};
|
||||
class showMarkersOnMap {};
|
||||
class updateAssetDiary {};
|
||||
class updateAssetsByBase {};
|
||||
class getCallsignFromClassname {};
|
||||
class getStartingAndCurrentAssets {};
|
||||
class isAssetInRangeOfBase {};
|
||||
};
|
||||
};
|
||||
|
||||
class fbcb2 {
|
||||
file = "framework\fbcb2";
|
||||
class initFBCB2 { postInit = 1; };
|
||||
class processFBCB2RadioFrequencies {};
|
||||
class processFBCB2SmokeColors {};
|
||||
class processFBCB2Environment {};
|
||||
class hintFBCB2AssetStatus {};
|
||||
};
|
||||
class fbcb2_util {
|
||||
file = "framework\fbcb2\util";
|
||||
class createOrUpdateDiaryRecord {};
|
||||
};
|
||||
class fbcb2_radioFrequencies {
|
||||
file = "framework\fbcb2\radioFrequencies";
|
||||
class formatRadioElementForDiary {};
|
||||
class generateElementFrequencyRecordText {};
|
||||
class DOUBLES(PREFIX,fbcb2_main) {
|
||||
class functions {
|
||||
file = "framework\fbcb2_main\functions";
|
||||
class init { postInit = 1; };
|
||||
|
||||
class processFBCB2Environment {};
|
||||
class processFBCB2RadioFrequencies {};
|
||||
class processFBCB2SmokeColors {};
|
||||
};
|
||||
class util {
|
||||
file = "framework\fbcb2_main\util";
|
||||
class createOrUpdateDiaryRecord {};
|
||||
class formatRadioElementForDiary {};
|
||||
class generateElementFrequencyRecordText {};
|
||||
};
|
||||
};
|
||||
|
||||
class client {
|
||||
file = "framework\client";
|
||||
class addZenModules { postInit = 1; };
|
||||
class addDNI_PlayerFPS { postInit = 1; }; // needs refactor
|
||||
class bindEventHandlers { postInit = 1; };
|
||||
class bindVehicleActions { postInit = 1; };
|
||||
class addClientStatsPFH {};
|
||||
class addMedicalOverlayPFH { postInit = 1; };
|
||||
class calculateClientStats {};
|
||||
class bindEmptyGroupGarbageCleanup { postInit = 1; };
|
||||
class DOUBLES(PREFIX,reinsert) {
|
||||
class server {
|
||||
file = "framework\reinsert\server";
|
||||
class initServer { postInit = 1; };
|
||||
class addToQueue {};
|
||||
class globalShowQueue {};
|
||||
class removeFromQueue {};
|
||||
class returnReinsertQueueNotification {};
|
||||
class validateQueue {};
|
||||
};
|
||||
class client {
|
||||
file = "framework\reinsert\client";
|
||||
class initClient { postInit = 1; };
|
||||
class addAceSelfActions {};
|
||||
class addCheckQueueSelfAction {};
|
||||
class requestShowQueue {};
|
||||
};
|
||||
};
|
||||
|
||||
class server {
|
||||
file = "framework\server";
|
||||
class addServerStatsPFH {};
|
||||
class calculateServerStats {};
|
||||
class logPlayerInventory {};
|
||||
class DOUBLES(PREFIX,resupply) {
|
||||
class functions {
|
||||
file = "framework\resupply\functions";
|
||||
class addCBASettings {preInit=1;};
|
||||
class init {postInit=1;};
|
||||
class createBox {};
|
||||
class getSupplyCratesCfg {};
|
||||
class addArsenalObjectSpawnBoxActions {};
|
||||
};
|
||||
};
|
||||
|
||||
class ambience {
|
||||
file = "framework\ambience";
|
||||
class flakInitVehicle {};
|
||||
class flakEH {};
|
||||
class DOUBLES(PREFIX,util) {
|
||||
class functions {
|
||||
file = "framework\util\functions";
|
||||
class logMissionInfo { postInit = 1; };
|
||||
class addPlayerInfoToArray {};
|
||||
class log {};
|
||||
class padString {};
|
||||
class recurseSubclasses {};
|
||||
class getBattalionCfg {};
|
||||
class getNameOfBase {};
|
||||
class getNearestBase {};
|
||||
class getApprovedAssetsCfg {};
|
||||
};
|
||||
};
|
||||
|
||||
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,vehicleFlags) {
|
||||
class functions {
|
||||
file = "framework\vehicleFlags\functions";
|
||||
class init {postInit=1;};
|
||||
class getActionsFlagCategories {};
|
||||
class getVehicleFlagsCfg {};
|
||||
class isClassExcluded {};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class DOUBLES(PREFIX,util) {
|
||||
class functions {
|
||||
file = "framework\util\functions";
|
||||
class logMissionInfo { postInit = 1; };
|
||||
class addPlayerInfoToArray {};
|
||||
class log {};
|
||||
class padString {};
|
||||
class recurseSubclasses {};
|
||||
class getBattalionCfg {};
|
||||
class getNameOfBase {};
|
||||
class getNearestBase {};
|
||||
};
|
||||
};
|
||||
|
||||
class DOUBLES(PREFIX,resupply) {
|
||||
class functions {
|
||||
file = "framework\resupply\functions";
|
||||
class init {postInit=1;};
|
||||
class createBox {};
|
||||
class getSupplyCratesCfg {};
|
||||
class addArsenalObjectSpawnBoxActions {};
|
||||
class addCBASettings {postInit=1;};
|
||||
};
|
||||
};
|
||||
|
||||
class DOUBLES(PREFIX,fbcb2_assets) {
|
||||
class functions {
|
||||
file = "framework\fbcb2_assets\functions";
|
||||
class init {postInit=1;};
|
||||
class updateAssetDiary {};
|
||||
class removeAssetDiaryRecords {};
|
||||
class getMagsForWeapon {};
|
||||
class getWeaponry {};
|
||||
class getInventory {};
|
||||
class getVehicleData {};
|
||||
class getAssetsByBase {};
|
||||
class getStartingAssetsByBase {};
|
||||
class updateAssetsByBase {};
|
||||
class showMarkersOnMap {};
|
||||
class removeMarkersOnMap {};
|
||||
};
|
||||
};
|
||||
|
||||
class DOUBLES(PREFIX,vehicleFlags) {
|
||||
class functions {
|
||||
file = "framework\vehicleFlags\functions";
|
||||
class init {postInit=1;};
|
||||
class getActionsFlagCategories {};
|
||||
class getVehicleFlagsCfg {};
|
||||
class isClassExcluded {};
|
||||
};
|
||||
};
|
||||
|
||||
class DOUBLES(PREFIX,reinsert) {
|
||||
class server {
|
||||
file = "framework\reinsert\server";
|
||||
class initServer { postInit = 1; };
|
||||
class addToQueue {};
|
||||
class globalShowQueue {};
|
||||
class removeFromQueue {};
|
||||
class returnReinsertQueueNotification {};
|
||||
class validateQueue {};
|
||||
};
|
||||
class client {
|
||||
file = "framework\reinsert\client";
|
||||
class initClient { postInit = 1; };
|
||||
class addAceSelfActions {};
|
||||
class addCheckQueueSelfAction {};
|
||||
class requestShowQueue {};
|
||||
};
|
||||
|
||||
};
|
||||
@@ -1,31 +0,0 @@
|
||||
_assetList = param [0, [objNull], [[objNull]]];
|
||||
|
||||
_text = parseText "<t size='4'>MESSAGE</t>";
|
||||
_text = composeText [_text, lineBreak ];
|
||||
|
||||
_text = composeText [_text, parseText "<t align='left' size='2'>Asset</t><t align='right' size='2'>Available</t>", lineBreak ];
|
||||
|
||||
{
|
||||
_callSign = _x select 0;
|
||||
_asset = _x select 1;
|
||||
_assigned = _x select 2;
|
||||
_available = 0; //count (getMarkerPos "respawn_west" nearEntities [ _asset, 2000] );
|
||||
|
||||
_homes = allMissionObjects "ModuleRespawnPosition_F";
|
||||
|
||||
{
|
||||
_home = _x;
|
||||
_available = _available + count( _home nearEntities [ _asset, 750] );
|
||||
} forEach _homes;
|
||||
|
||||
|
||||
_image = getText(configFile >> "CfgVehicles" >> _asset >> "picture");
|
||||
|
||||
_name = getText(configFile >> "CfgVehicles" >> _asset >> "displayName") select [0, 24];
|
||||
_data = "<img size='1' align='left' image='" + _image + "'/><t size='1' align='left'> " + _name + "</t><t size='1' align='right'>" + str _available + " [ " + str _assigned +" ]</t>";
|
||||
_text = composeText[ _text, parseText _data, lineBreak ];
|
||||
|
||||
|
||||
} foreach _assetList;
|
||||
|
||||
hint _text;
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
if ( !hasInterface ) exitWith {};
|
||||
|
||||
waitUntil { !isNil "milsim_complete" };
|
||||
|
||||
milsim_fbcb2_recordTitleColor = "#ff6666";
|
||||
milsim_fbcb2_recordTitleFont = "PuristaMedium";
|
||||
milsim_fbcb2_recordTitleSize = 20;
|
||||
|
||||
milsim_fbcb2_recordTextHeaderSize = 16;
|
||||
milsim_fbcb2_recordTextBodySize = 14;
|
||||
|
||||
milsim_fbcb2_subjectStatusID = "FBCB2_Status";
|
||||
milsim_fbcb2_subjectIntelID = "FBCB2_Intel";
|
||||
milsim_fbcb2_subjectMessagesID = "FBCB2_Messages";
|
||||
milsim_fbcb2_subjectFrequenciesID = "FBCB2_Frequencies";
|
||||
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_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, [
|
||||
// [title, diaryRecord]
|
||||
// ]]
|
||||
milsim_fbcb2_diaryRecords = createHashMap;
|
||||
|
||||
// populate diary
|
||||
[] call milsim_fnc_processFBCB2RadioFrequencies;
|
||||
[] call milsim_fnc_processFBCB2SmokeColors;
|
||||
[] call milsim_fnc_processFBCB2Environment;
|
||||
[] call milsim_fbcb2_assets_fnc_updateAssetDiary;
|
||||
@@ -13,7 +13,7 @@
|
||||
{
|
||||
params ["_value"];
|
||||
[
|
||||
"fbcb2_assets",
|
||||
QUOTE(COMPONENT),
|
||||
"SETTING CHANGED",
|
||||
[
|
||||
[
|
||||
@@ -22,6 +22,12 @@
|
||||
],
|
||||
["newValue", _value]
|
||||
]
|
||||
] call milsim_util_fnc_log;
|
||||
] call EFUNC(util,log);
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"CREATED SETTINGS",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
@@ -1,4 +1,6 @@
|
||||
#include "../script_component.hpp"
|
||||
|
||||
// return each base with its assets
|
||||
milsim_baseObjects apply {
|
||||
[_x, _x getVariable ["milsim_fbcb2_assets_assetsAtThisBase", []]]
|
||||
GVARMAIN(baseObjects) apply {
|
||||
[_x, _x getVariable [QGVAR(assetsAtThisBase), []]]
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
params [
|
||||
["_className", "", [""]]
|
||||
];
|
||||
|
||||
// Get the approved assets config
|
||||
private _approvedAssetsCfg = call EFUNC(util,getApprovedAssetsCfg);
|
||||
if (isNull _approvedAssetsCfg) exitWith {""};
|
||||
|
||||
// Get the asset definition
|
||||
private _assetDef = (_approvedAssetsCfg >> _className);
|
||||
if (isClass _assetDef) exitWith {getText(_assetDef >> "callsign")};
|
||||
|
||||
"";
|
||||
@@ -0,0 +1,17 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
// get all starting assets at each base and combine to array
|
||||
private _startingAssetsByBase = call FUNC(getStartingAssetsByBase);
|
||||
private _startingAssets = [];
|
||||
{
|
||||
_startingAssets append (_x#1);
|
||||
} forEach _startingAssetsByBase;
|
||||
|
||||
// get all current assets at each base and combine to array
|
||||
private _assetsByBase = call FUNC(getAssetsByBase);
|
||||
private _assets = [];
|
||||
{
|
||||
_assets append (_x#1);
|
||||
} forEach _assetsByBase;
|
||||
|
||||
[_startingAssets, _assets];
|
||||
@@ -1,4 +1,6 @@
|
||||
#include "../script_component.hpp"
|
||||
|
||||
// return each base with its assets
|
||||
milsim_baseObjects apply {
|
||||
[_x, _x getVariable ["milsim_fbcb2_assets_assetsStartedAtThisBase", []]]
|
||||
GVARMAIN(baseObjects) apply {
|
||||
[_x, _x getVariable [QGVAR(assetsStartedAtThisBase), []]]
|
||||
};
|
||||
@@ -39,7 +39,7 @@ private _pylons = getAllPylonsInfo _vic;
|
||||
///////////////////////////////////////////////
|
||||
// WRITE TITLE
|
||||
///////////////////////////////////////////////
|
||||
_title pushBack format["<font size='24' shadow='1' color='#e1701a' face='PuristaBold'>%1</font>", _dispName];
|
||||
_title pushBack format["%1", _dispName];
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// WRITE IMAGE
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
// get vehicles the mission started with at base locations
|
||||
(call FUNC(getStartingAndCurrentAssets)) params [
|
||||
"_startingAssets",
|
||||
"_currentAssets"
|
||||
];
|
||||
|
||||
// get distinct classnames to group by
|
||||
private _distinctStartingAssetsClassNames = [];
|
||||
{
|
||||
_x params ["_netId", "_cfg"];
|
||||
private _className = configName _cfg;
|
||||
_distinctStartingAssetsClassNames pushBackUnique _className;
|
||||
} forEach _startingAssets;
|
||||
|
||||
// get the approved assets config to identify callsigns
|
||||
private _approvedAssetsCfg = call EFUNC(util,getApprovedAssetsCfg);
|
||||
if (isNull _approvedAssetsCfg) exitWith {
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"No approved assets defined.",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
[
|
||||
"ERROR: No approved assets defined. See defines/ApprovedAssets.hpp"
|
||||
] call BIS_fnc_error;
|
||||
};
|
||||
|
||||
_text = parseText "<t size='4'>MESSAGE</t>";
|
||||
_text = composeText [_text, lineBreak ];
|
||||
|
||||
_text = composeText [_text, parseText "<t align='left' size='2'>Asset</t><t align='right' size='2'>Available</t>", lineBreak ];
|
||||
|
||||
{
|
||||
private _className = _x;
|
||||
// only approved assets
|
||||
if (!isClass (_approvedAssetsCfg >> _className)) then {continue};
|
||||
|
||||
private _callsign = [_className] call FUNC(getCallsignFromClassname);
|
||||
|
||||
private _startingAssetsOfThisType = _startingAssets select {
|
||||
// select all starting assets of this type
|
||||
_x params ["_netId", "_cfg"];
|
||||
_className isEqualTo (configName _cfg);
|
||||
};
|
||||
private _currentAssetsOfThisType = _currentAssets select {
|
||||
_x params ["_netId", "_cfg"];
|
||||
private _object = _netId call BIS_fnc_objectFromNetId;
|
||||
// objNull if deleted, then check classname and if alive
|
||||
!isNull _object && {
|
||||
_className isEqualTo (typeOf _object) &&
|
||||
alive _object
|
||||
};
|
||||
};
|
||||
|
||||
(_startingAssetsOfThisType#0) params [
|
||||
"_assetNetId",
|
||||
"_assetCfg"
|
||||
];
|
||||
|
||||
_assigned = count _startingAssetsOfThisType;
|
||||
_available = count _currentAssetsOfThisType;
|
||||
// count (getMarkerPos "respawn_west" nearEntities [ _asset, 2000] );
|
||||
|
||||
|
||||
_image = getText(_assetCfg >> "picture");
|
||||
|
||||
_name = getText(_assetCfg >> "displayName") select [0, 22];
|
||||
private _data = format[
|
||||
"<img size='1' align='left' image='%1'/><t size='1' align='left'> %2</t><t size='1' align='right'>%3 [ %4 ]</t>",
|
||||
_image,
|
||||
_name,
|
||||
_available,
|
||||
_assigned
|
||||
];
|
||||
|
||||
// private _data = format[
|
||||
// "<img size='1' align='left' image='%1'/>
|
||||
// <t size='1' align='left'> %2</t>
|
||||
// <t size='1' align='middle'>%3</t>
|
||||
// <t size='1' align='right'>%4</t>",
|
||||
// _image,
|
||||
// _name,
|
||||
// _assigned,
|
||||
// _available
|
||||
// ];
|
||||
_text = composeText[ _text, parseText _data, lineBreak ];
|
||||
|
||||
|
||||
} foreach _distinctStartingAssetsClassNames;
|
||||
|
||||
hint _text;
|
||||
@@ -0,0 +1,8 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
params [["_asset", objNull, [objNull]]];
|
||||
|
||||
private _closestBase = [_asset] call EFUNC(util,getNearestBase);
|
||||
if (isNull _closestBase) exitWith {false};
|
||||
|
||||
(_asset distance2D _closestBase) <= GVAR(setting_detectionRangeFromBase)
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
{
|
||||
@@ -10,7 +12,7 @@ if (!hasInterface) exitWith {};
|
||||
player removeDiaryRecord [_diarySubject, _diaryRecord];
|
||||
} forEach _records;
|
||||
} forEach [
|
||||
milsim_fbcb2_subjectAssetsFixedWingID,
|
||||
milsim_fbcb2_subjectAssetsRotaryID,
|
||||
milsim_fbcb2_subjectAssetsGroundID
|
||||
EGVAR(fbcb2_main,subjectAssetsFixedWingID),
|
||||
EGVAR(fbcb2_main,subjectAssetsRotaryID),
|
||||
EGVAR(fbcb2_main,subjectAssetsGroundID)
|
||||
];
|
||||
@@ -1,12 +1,11 @@
|
||||
private _baseMarkerStoreVar = "milsim_fbcb2_assets_baseMarkerStore";
|
||||
private _assetMarkerStoreVar = "milsim_fbcb2_assets_assetMarkerStore";
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
private _baseMarkerStore = localNamespace getVariable [
|
||||
_baseMarkerStoreVar,
|
||||
QGVAR(baseMarkerStore),
|
||||
[]
|
||||
];
|
||||
private _assetMarkerStore = localNamespace getVariable [
|
||||
_assetMarkerStoreVar,
|
||||
QGVAR(assetMarkerStore),
|
||||
[]
|
||||
];
|
||||
|
||||
@@ -16,10 +15,10 @@ private _assetMarkerStore = localNamespace getVariable [
|
||||
} forEach (_baseMarkerStore + _assetMarkerStore);
|
||||
|
||||
localNamespace setVariable [
|
||||
_baseMarkerStoreVar,
|
||||
QGVAR(baseMarkerStore),
|
||||
[]
|
||||
];
|
||||
localNamespace setVariable [
|
||||
_assetMarkerStoreVar,
|
||||
QGVAR(assetMarkerStore),
|
||||
[]
|
||||
];
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
params [
|
||||
["_className", "", [""]],
|
||||
["_markerType", "hd_dot", [""]],
|
||||
@@ -12,11 +14,11 @@ 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;
|
||||
["No vehicles to draw markers for!"] call BIS_fnc_error;
|
||||
};
|
||||
|
||||
private _baseMarkerStoreVar = "milsim_fbcb2_assets_baseMarkerStore";
|
||||
private _assetMarkerStoreVar = "milsim_fbcb2_assets_assetMarkerStore";
|
||||
private _baseMarkerStoreVar = QGVAR(baseMarkerStore);
|
||||
private _assetMarkerStoreVar = QGVAR(assetMarkerStore);
|
||||
|
||||
private _baseMarkerStore = localNamespace getVariable [
|
||||
_baseMarkerStoreVar,
|
||||
@@ -35,15 +37,15 @@ if (not (count _baseMarkerStore > 0)) then {
|
||||
|
||||
// create a circle marker with range as the detection range of assets
|
||||
_newMarker = createMarkerLocal [
|
||||
format["milsim_fbcb2_assets_base_marker_%1", _forEachIndex + 1],
|
||||
format["%1_%2", QGVAR(baseCircleMarker), _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
|
||||
GVAR(setting_detectionRangeFromBase),
|
||||
GVAR(setting_detectionRangeFromBase)
|
||||
];
|
||||
_newMarker setMarkerAlphaLocal 0.5;
|
||||
_newMarker setMarkerTextLocal str(_forEachIndex + 1);
|
||||
@@ -55,19 +57,19 @@ if (not (count _baseMarkerStore > 0)) then {
|
||||
|
||||
// create a flag marker at base position
|
||||
_newMarker = createMarkerLocal [
|
||||
format["milsim_fbcb2_assets_base_flag_marker_%1", _forEachIndex + 1],
|
||||
format["%1_%2", QGVAR(baseFlagMarker), _forEachIndex + 1],
|
||||
getPosASL _base
|
||||
];
|
||||
_newMarker setMarkerTypeLocal "mil_flag";
|
||||
_newMarker setMarkerColorLocal "ColorGreen";
|
||||
_newMarker setMarkerSizeLocal [0.7, 0.7];
|
||||
_newMarker setMarkerTextLocal ([_base] call milsim_util_fnc_getNameOfBase);
|
||||
_newMarker setMarkerTextLocal ([_base] call EFUNC(util,getNameOfBase));
|
||||
|
||||
_baseMarkerStore pushBack [
|
||||
_base,
|
||||
_newMarker
|
||||
];
|
||||
} forEach milsim_baseObjects;
|
||||
} forEach GVARMAIN(baseObjects);
|
||||
|
||||
localNamespace setVariable [_baseMarkerStoreVar, _baseMarkerStore];
|
||||
};
|
||||
@@ -85,9 +87,12 @@ private _start = (count _assetMarkerStore) + 1;
|
||||
> -1
|
||||
) then {continue};
|
||||
|
||||
// check if the asset is within base detection range
|
||||
if (not ([_asset] call FUNC(isAssetInRangeOfBase))) then {continue};
|
||||
|
||||
// create a marker for the asset
|
||||
private _newMarker = createMarkerLocal [
|
||||
format["milsim_fbcb2_assets_marker_%1", _start],
|
||||
format["%1_%2", QGVAR(assetMarker), _start],
|
||||
getPosASL _asset
|
||||
];
|
||||
_newMarker setMarkerAlphaLocal 1;
|
||||
|
||||
@@ -10,101 +10,145 @@ call FUNC(removeMarkersOnMap);
|
||||
// remove existing asset records
|
||||
call FUNC(removeAssetDiaryRecords);
|
||||
|
||||
// get all vehicles by base
|
||||
private _vehiclesByBase = call FUNC(getAssetsByBase);
|
||||
if (count _vehiclesByBase isEqualTo 0) exitWith {false};
|
||||
(call FUNC(getStartingAndCurrentAssets)) params [
|
||||
"_startingAssets",
|
||||
"_currentAssets"
|
||||
];
|
||||
|
||||
// put vehicles from each base into a single array
|
||||
private _vehicles = [];
|
||||
{
|
||||
_vehicles append (_x#1);
|
||||
} forEach _vehiclesByBase;
|
||||
|
||||
if (count _vehicles isEqualTo 0) exitWith {false};
|
||||
// get distinct vehicle class names
|
||||
private _distinctVehiclesClassNames = [];
|
||||
{
|
||||
_distinctVehiclesClassNames pushBackUnique (typeOf _x);
|
||||
} forEach _vehicles;
|
||||
_x params ["_netId", "_cfg"];
|
||||
private _className = configName _cfg;
|
||||
_distinctVehiclesClassNames pushBackUnique _className;
|
||||
} forEach _startingAssets;
|
||||
|
||||
|
||||
// for random color cycling
|
||||
private _colorSelectionIndex = 0;
|
||||
private _randomColors = [
|
||||
["ColorRed", "#FF0000", "Red"],
|
||||
["ColorGreen", "#00FF00", "Green"],
|
||||
["ColorBlue", "#0000FF", "Blue"],
|
||||
["ColorYellow", "#FFFF00", "Yellow"],
|
||||
["ColorWhite", "#FFFFFF", "White"]
|
||||
];
|
||||
|
||||
// ForEach unique vehicle class name, we'll find the first and gather its info
|
||||
{
|
||||
private _className = _x;
|
||||
private _vehiclesOfThisKind = _vehicles select {typeOf _x isEqualTo _className};
|
||||
// This should never happen, but...
|
||||
if (count _vehiclesOfThisKind isEqualTo 0) then {continue};
|
||||
|
||||
// Take the first vehicle as a representative
|
||||
private _representativeVehicle = _vehiclesOfThisKind#0;
|
||||
private _vehicleCfg = configOf _representativeVehicle;
|
||||
private _vehicleCallsign = toUpper (
|
||||
_representativeVehicle getVariable [
|
||||
QGVAR(callsign),
|
||||
"NONE ASSIGNED"
|
||||
]
|
||||
[_className] call FUNC(getCallsignFromClassname)
|
||||
);
|
||||
|
||||
// Get all starting assets of this type
|
||||
private _startingAssetsOfThisType = _startingAssets select {
|
||||
_x params ["_netId", "_cfg"];
|
||||
_className isEqualTo (configName _cfg);
|
||||
};
|
||||
// Get all current assets of this type
|
||||
private _currentAssetsOfThisType = _currentAssets select {
|
||||
_x params ["_netId", "_cfg"];
|
||||
private _object = _netId call BIS_fnc_objectFromNetId;
|
||||
// objNull if deleted, then check classname and if alive
|
||||
!isNull _object && {_className isEqualTo (typeOf _object) && alive _object};
|
||||
};
|
||||
// This should never happen, but...
|
||||
if (count _startingAssetsOfThisType isEqualTo 0) then {continue};
|
||||
|
||||
// Try to find a not null vehicle that can be processed
|
||||
private _exampleVehicleToProcess = objNull;
|
||||
private _assetCfg = configNull;
|
||||
|
||||
private _exampleVehicleToProcessIndex = _startingAssetsOfThisType findIf {
|
||||
_x params ["_netId", "_cfg"];
|
||||
!isNull (_netId call BIS_fnc_objectFromNetId);
|
||||
};
|
||||
// If found, get the data
|
||||
if (_exampleVehicleToProcessIndex > -1) then {
|
||||
private _exampleData = _startingAssetsOfThisType select _exampleVehicleToProcessIndex;
|
||||
_assetNetId = _exampleData#0;
|
||||
_assetCfg = _exampleData#1;
|
||||
_exampleVehicleToProcess = _assetNetId call BIS_fnc_objectFromNetId;
|
||||
} else {
|
||||
// otherwise, we only have the config to work with
|
||||
private _exampleData = _startingAssetsOfThisType#0;
|
||||
_assetCfg = _exampleData#1;
|
||||
};
|
||||
|
||||
private _parentClassNames = [_assetCfg, true] call BIS_fnc_returnParents;
|
||||
|
||||
|
||||
|
||||
// Process the vehicle for extended info
|
||||
// Exclusion list for display names
|
||||
if (
|
||||
((configOf _representativeVehicle) call BIS_fnc_displayName)
|
||||
[_assetCfg] call BIS_fnc_displayName
|
||||
in ["Helicopter"]
|
||||
) then {continue};
|
||||
|
||||
// Get the vehicle data
|
||||
private _processed = [_representativeVehicle] call FUNC(getVehicleData);
|
||||
|
||||
if (isNil "_processed") then {continue};
|
||||
_processed params ["_vehicleCfg", "_displayName", "_diaryTextSections"];
|
||||
private _processed = [configNull, "", []];
|
||||
if (!isNull _exampleVehicleToProcess) then {
|
||||
_processed = [_exampleVehicleToProcess] call FUNC(getVehicleData);
|
||||
};
|
||||
_processed params ["_processedVehicleCfg", "_displayName", "_diaryTextSections"];
|
||||
_diaryTextSections params [
|
||||
"_title",
|
||||
"_image",
|
||||
"_info",
|
||||
"_capacity"
|
||||
// "_weapons",
|
||||
// "_pylonWeapons",
|
||||
// "_inventory"
|
||||
["_title", "", [""]],
|
||||
["_image", "", [""]],
|
||||
["_info", "", [""]],
|
||||
["_capacity", "", [""]]
|
||||
// ["_weapons", "", [""]],
|
||||
// ["_pylonWeapons", "", [""]],
|
||||
// ["_inventory", "", [""]]
|
||||
];
|
||||
|
||||
// Get what we can from the vehicle cfg
|
||||
|
||||
// Create the diary record
|
||||
private _recordText = [];
|
||||
// Add the title and image
|
||||
_recordText pushBack _title;
|
||||
if (count _title isEqualTo 0) then {
|
||||
_title = format["%1", [_assetCfg] call BIS_fnc_displayName];
|
||||
};
|
||||
_recordText pushBack format[
|
||||
"<font size='24' shadow='1' color='#e1701a' face='PuristaBold'>%1</font>",
|
||||
_title
|
||||
];
|
||||
if (count _image isEqualTo 0) then {
|
||||
_image = format["<img width='200' image='%1'/>", getText(_assetCfg >> 'editorPreview')];
|
||||
};
|
||||
_recordText pushBack _image;
|
||||
_recordText pushBack "<br/>";
|
||||
_recordText pushBack format[
|
||||
"CALLSIGN: %1",
|
||||
_vehicleCallsign
|
||||
];
|
||||
_recordText pushBack format[
|
||||
"COUNT STARTED: %1",
|
||||
count _startingAssetsOfThisType
|
||||
];
|
||||
_recordText pushBack format[
|
||||
"COUNT ACTIVE: %1",
|
||||
count _vehiclesOfThisKind
|
||||
count _currentAssetsOfThisType
|
||||
];
|
||||
|
||||
// Here, we'll create a link to show markers on the map for all vehicles of this kind
|
||||
private _randomColor = selectRandom [
|
||||
["ColorRed", "#FF0000", "Red"],
|
||||
["ColorGreen", "#00FF00", "Green"],
|
||||
["ColorBlue", "#0000FF", "Blue"],
|
||||
["ColorYellow", "#FFFF00", "Yellow"],
|
||||
["ColorWhite", "#FFFFFF", "White"]
|
||||
];
|
||||
private _vehicleCfg = configFile >> "CfgVehicles" >> _className;
|
||||
// get 'picture' for record
|
||||
private _icon = getText(_vehicleCfg >> "picture");
|
||||
private _icon = getText(_assetCfg >> "picture");
|
||||
// determine marker type
|
||||
private _markerType = "mil_dot";
|
||||
switch (true) do {
|
||||
case (_representativeVehicle isKindOf "Helicopter"): {
|
||||
case ("Helicopter" in _parentClassNames): {
|
||||
_markerType = "loc_heli";
|
||||
};
|
||||
case (_representativeVehicle isKindOf "Air"): {
|
||||
case ("Air" in _parentClassNames): {
|
||||
_markerType = "loc_plane";
|
||||
};
|
||||
case (_representativeVehicle isKindOf "Ship"): {
|
||||
case ("Ship" in _parentClassNames): {
|
||||
_markerType = "loc_boat";
|
||||
};
|
||||
case (_representativeVehicle isKindOf "Car"): {
|
||||
case ("Car" in _parentClassNames): {
|
||||
_markerType = "loc_car";
|
||||
};
|
||||
default {
|
||||
@@ -112,63 +156,92 @@ private _distinctVehiclesClassNames = [];
|
||||
};
|
||||
};
|
||||
|
||||
private "_randomColor";
|
||||
if (_colorSelectionIndex < count _randomColors) then {
|
||||
_randomColor = _randomColors select _colorSelectionIndex;
|
||||
INC(_colorSelectionIndex);
|
||||
} else {
|
||||
_colorSelectionIndex = 0;
|
||||
_randomColor = _randomColors select _colorSelectionIndex;
|
||||
};
|
||||
|
||||
// Link to show markers
|
||||
private _showMarkersText = format[
|
||||
"<execute expression='[""%1"",""%2"",""%3"",%4] call FUNC(showMarkersOnMap'>SHOW MARKERS at vehicle positions</execute> (in %5)",
|
||||
"<execute expression='[""%1"",""%2"",""%3"",%4] call %5'>SHOW MARKERS for vehicles at base</execute> (in %6)",
|
||||
_className,
|
||||
_markerType,
|
||||
_randomColor#0,
|
||||
(_vehiclesOfThisKind apply {
|
||||
format["%1", _x call BIS_fnc_netId]
|
||||
(_currentAssetsOfThisType apply {
|
||||
_x params ["_netId", "_cfg"];
|
||||
_netId;
|
||||
}),
|
||||
QFUNC(showMarkersOnMap),
|
||||
format["<font color='%1'>%2</font>", _randomColor#1, _randomColor#2]
|
||||
];
|
||||
_recordText pushBack _showMarkersText;
|
||||
|
||||
// Link to hide markers
|
||||
_recordText pushBack "<execute expression=""call FUNC(removeMarkersOnMap"">REMOVE ALL MARKERS showing asset positions</execute>";
|
||||
_recordText pushBack format[
|
||||
"<execute expression=""call %1"">REMOVE ALL MARKERS showing asset positions</execute>",
|
||||
QFUNC(removeMarkersOnMap)
|
||||
];
|
||||
|
||||
// Link to update asset diary entries
|
||||
_recordText pushBack "<execute expression=""call FUNC(updateAssetDiary"">UPDATE ENTRIES for all assets</execute>";
|
||||
_recordText pushBack format[
|
||||
"<execute expression=""call %1"">UPDATE ENTRIES for all assets</execute>",
|
||||
QFUNC(updateAssetDiary)
|
||||
];
|
||||
|
||||
// link to display hint with all assets
|
||||
_recordText pushBack format[
|
||||
"<execute expression=""call %1"">SHOW APPROVED ASSET COUNTS via hint</execute>",
|
||||
QFUNC(hintAllApprovedAssets)
|
||||
];
|
||||
|
||||
_recordText pushBack format[
|
||||
"<font size='10' color='#777777'>%1</font>",
|
||||
"Notes:<br/>
|
||||
- Markers are only displayed on your local machine.<br/>
|
||||
- The REMOVE ALL option will remove all assets' markers from the map.<br/>
|
||||
- UPDATE ENTRIES will update the asset diary with the latest information (~5 minutes at most)."
|
||||
- UPDATE ENTRIES will update the asset diary with the latest information.<br/>
|
||||
- Markers will only be displayed for assets that are within a certain distance of a base."
|
||||
];
|
||||
|
||||
|
||||
|
||||
// Add info and capacity sections
|
||||
_recordText pushBack _info;
|
||||
_recordText pushBack _capacity;
|
||||
// Add info and capacity sections - exclude if no living examples were found
|
||||
if (count _info > 0) then {
|
||||
_recordText pushBack _info;
|
||||
};
|
||||
if (count _capacity > 0) then {
|
||||
_recordText pushBack _capacity;
|
||||
};
|
||||
|
||||
|
||||
private _subjectID = "";
|
||||
switch (true) do {
|
||||
case (_representativeVehicle isKindOf "Helicopter"): {
|
||||
_subjectID = EGVAR(fbcb2,subjectAssetsRotaryID);
|
||||
case ("Helicopter" in _parentClassNames): {
|
||||
_subjectID = EGVAR(fbcb2_main,subjectAssetsRotaryID);
|
||||
};
|
||||
case (_representativeVehicle isKindOf "Air"): {
|
||||
_subjectID = EGVAR(fbcb2,subjectAssetsFixedWingID);
|
||||
case ("Air" in _parentClassNames): {
|
||||
_subjectID = EGVAR(fbcb2_main,subjectAssetsFixedWingID);
|
||||
};
|
||||
default {
|
||||
_subjectID = EGVAR(fbcb2,subjectAssetsGroundID);
|
||||
_subjectID = EGVAR(fbcb2_main,subjectAssetsGroundID);
|
||||
};
|
||||
};
|
||||
|
||||
[
|
||||
_subjectID,
|
||||
format[
|
||||
"%1x %2",
|
||||
count _vehiclesOfThisKind,
|
||||
(configOf _representativeVehicle) call BIS_fnc_displayName
|
||||
"[%1/%2] %3",
|
||||
count _currentAssetsOfThisType,
|
||||
count _startingAssetsOfThisType,
|
||||
(_assetCfg) call BIS_fnc_displayName
|
||||
],
|
||||
_recordText joinString "<br/>",
|
||||
_icon
|
||||
] call milsim_fnc_createOrUpdateDiaryRecord;
|
||||
] call EFUNC(fbcb2_main,createOrUpdateDiaryRecord);
|
||||
|
||||
// "\A3\ui_f\data\igui\cfg\simpleTasks\types\car_ca.paa"
|
||||
} forEach _distinctVehiclesClassNames;
|
||||
@@ -178,8 +251,9 @@ private _distinctVehiclesClassNames = [];
|
||||
QUOTE(COMPONENT),
|
||||
"UPDATED ASSET DIARY",
|
||||
[
|
||||
["assetCount", count _vehicles],
|
||||
["distinctAssetCount", count _distinctVehiclesClassNames]
|
||||
["startingAssetCount", count _startingAssets],
|
||||
["startingAssetCountDistinct", count _distinctVehiclesClassNames],
|
||||
["currentassetCount", count _currentAssets]
|
||||
]
|
||||
] call EFUNC(util,log);
|
||||
|
||||
|
||||
@@ -17,32 +17,29 @@ private _allSaved = [];
|
||||
private _assetsAtThisBaseVar = QGVAR(assetsAtThisBase);
|
||||
private _assetsStartedAtThisBaseVar = QGVAR(assetsStartedAtThisBase);
|
||||
|
||||
private _approvedAssetsCfg = call EFUNC(util,getApprovedAssetsCfg);
|
||||
if (isNull _approvedAssetsCfg) exitWith {};
|
||||
|
||||
{
|
||||
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 EFUNC(util,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 [QGVAR(callsign), _callsign, true];
|
||||
if (not ([_asset] call FUNC(isAssetInRangeOfBase))) then {continue};
|
||||
|
||||
|
||||
// add to base's assets list
|
||||
private _closestBase = [_asset] call EFUNC(util,getNearestBase);
|
||||
private _baseAssets = _closestBase getVariable [_assetsAtThisBaseVar, []];
|
||||
_baseAssets pushBackUnique _asset;
|
||||
_baseAssets pushBackUnique [
|
||||
_asset call BIS_fnc_netId,
|
||||
configOf _asset
|
||||
];
|
||||
// broadcast later so we're not spamming network
|
||||
_closestBase setVariable [
|
||||
_assetsAtThisBaseVar,
|
||||
@@ -60,7 +57,7 @@ private _assetsStartedAtThisBaseVar = QGVAR(assetsStartedAtThisBase);
|
||||
|
||||
_allSaved pushBack _asset;
|
||||
} forEach _found;
|
||||
} forEach ((missionConfigFile >> "ApprovedAssets") call BIS_fnc_returnChildren);
|
||||
} forEach (_approvedAssetsCfg call BIS_fnc_returnChildren);
|
||||
|
||||
// Add all ground vehicles (LandVehicle)
|
||||
{
|
||||
@@ -68,23 +65,16 @@ private _assetsStartedAtThisBaseVar = QGVAR(assetsStartedAtThisBase);
|
||||
// avoid duplicates
|
||||
if (_asset in _allSaved) then {continue};
|
||||
|
||||
private _closestBase = [_asset] call EFUNC(util,getNearestBase);
|
||||
if (isNull _closestBase) then {
|
||||
// no base found
|
||||
continue;
|
||||
};
|
||||
if (not ([_asset] call FUNC(isAssetInRangeOfBase))) then {continue};
|
||||
|
||||
if (
|
||||
_asset distance _closestBase >
|
||||
GVAR(setting_detectionRangeFromBase)
|
||||
) then {
|
||||
// not within range
|
||||
continue;
|
||||
};
|
||||
|
||||
// add to base's assets list
|
||||
private _closestBase = [_asset] call EFUNC(util,getNearestBase);
|
||||
private _baseAssets = _closestBase getVariable [_assetsAtThisBaseVar, []];
|
||||
_baseAssets pushBackUnique _asset;
|
||||
_baseAssets pushBackUnique [
|
||||
_asset call BIS_fnc_netId,
|
||||
configOf _asset
|
||||
];
|
||||
// broadcast later so we're not spamming network
|
||||
_closestBase setVariable [
|
||||
_assetsAtThisBaseVar,
|
||||
@@ -115,7 +105,7 @@ private _assetsStartedAtThisBaseVar = QGVAR(assetsStartedAtThisBase);
|
||||
if (_isInit) then {
|
||||
_base setVariable [_assetsStartedAtThisBaseVar, _baseAssets, true];
|
||||
};
|
||||
} forEach milsim_baseObjects;
|
||||
} forEach GVARMAIN(baseObjects);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// log starting assets if init
|
||||
@@ -131,14 +121,11 @@ if !(_isInit || _logCurrentAssets) exitWith {};
|
||||
|
||||
// prepare key value for logging
|
||||
private _baseAssetsHashesPrep = _baseAssets apply {
|
||||
private _asset = _x;
|
||||
_x params ["_netId", "_cfg"];
|
||||
[
|
||||
["callsign", _asset getVariable [
|
||||
QGVAR(callsign),
|
||||
"N/A"
|
||||
]],
|
||||
["className", typeOf _asset],
|
||||
["displayName", (configOf _asset) call BIS_fnc_displayName]
|
||||
["callsign", [configName _cfg] call FUNC(getCallsignFromClassname)],
|
||||
["className", configName _cfg],
|
||||
["displayName", [_cfg] call BIS_fnc_displayName]
|
||||
];
|
||||
};
|
||||
|
||||
@@ -155,13 +142,13 @@ if !(_isInit || _logCurrentAssets) exitWith {};
|
||||
if (_logCurrentAssets) then {
|
||||
{
|
||||
[
|
||||
"fbcb2_assets",
|
||||
QUOTE(COMPONENT),
|
||||
"CURRENT ASSETS",
|
||||
[
|
||||
["baseName", [[_base] call milsim_util_fnc_getNameOfBase]],
|
||||
["baseName", [[_base] call EFUNC(util,getNameOfBase)]],
|
||||
["asset", _x]
|
||||
]
|
||||
] call milsim_util_fnc_log;
|
||||
] call EFUNC(util,log);
|
||||
} forEach _baseAssetsHashes;
|
||||
};
|
||||
|
||||
@@ -172,10 +159,10 @@ if !(_isInit || _logCurrentAssets) exitWith {};
|
||||
"fbcb2_assets",
|
||||
"STARTING ASSETS",
|
||||
[
|
||||
["baseName", [[_base] call milsim_util_fnc_getNameOfBase]],
|
||||
["baseName", [[_base] call EFUNC(util,getNameOfBase)]],
|
||||
["asset", _x]
|
||||
]
|
||||
] call milsim_util_fnc_log;
|
||||
] call EFUNC(util,log);
|
||||
} forEach _baseAssetsHashes;
|
||||
};
|
||||
} forEach milsim_baseObjects;
|
||||
} forEach GVARMAIN(baseObjects);
|
||||
39
framework/fbcb2_main/functions/fn_init.sqf
Normal file
39
framework/fbcb2_main/functions/fn_init.sqf
Normal file
@@ -0,0 +1,39 @@
|
||||
#include "../script_component.hpp"
|
||||
|
||||
if ( !hasInterface ) exitWith {};
|
||||
|
||||
waitUntil { !isNil QGVARMAIN(complete) };
|
||||
|
||||
GVAR(recordTitleColor) = "#ff6666";
|
||||
GVAR(recordTitleFont) = "PuristaMedium";
|
||||
GVAR(recordTitleSize) = 20;
|
||||
|
||||
GVAR(recordTextHeaderSize) = 16;
|
||||
GVAR(recordTextBodySize) = 14;
|
||||
|
||||
GVAR(subjectStatusID) = "FBCB2_Status";
|
||||
GVAR(subjectIntelID) = "FBCB2_Intel";
|
||||
GVAR(subjectMessagesID) = "FBCB2_Messages";
|
||||
GVAR(subjectFrequenciesID) = "FBCB2_Frequencies";
|
||||
GVAR(subjectAssetsFixedWingID) = "FBCB2_Assets_FixedWing";
|
||||
GVAR(subjectAssetsRotaryID) = "FBCB2_Assets_Rotary";
|
||||
GVAR(subjectAssetsGroundID) = "FBCB2_Assets_Ground";
|
||||
|
||||
player createDiarySubject[GVAR(subjectStatusID), "FBCB2 Status"];
|
||||
player createDiarySubject[GVAR(subjectMessagesID), "FBCB2 Messages"];
|
||||
player createDiarySubject[GVAR(subjectIntelID), "FBCB2 Intel"];
|
||||
player createDiarySubject[GVAR(subjectFrequenciesID), "FBCB2 Frequencies"];
|
||||
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 - assets handled in that component
|
||||
[] call FUNC(processFBCB2RadioFrequencies);
|
||||
[] call FUNC(processFBCB2SmokeColors);
|
||||
[] call FUNC(processFBCB2Environment);
|
||||
@@ -1,11 +1,13 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
private _recordTitle = "MDS - INTEL - ENVIRONMENT";
|
||||
|
||||
private _text = [
|
||||
format[
|
||||
"<font size='%1' color='%2' face='%3'>%4</font><br/><br/>",
|
||||
milsim_fbcb2_recordTitleSize,
|
||||
milsim_fbcb2_recordTitleColor,
|
||||
milsim_fbcb2_recordTitleFont,
|
||||
GVAR(recordTitleSize),
|
||||
GVAR(recordTitleColor),
|
||||
GVAR(recordTitleFont),
|
||||
_recordTitle
|
||||
]
|
||||
];
|
||||
@@ -19,9 +21,9 @@ private _sunTimes = date call BIS_fnc_sunriseSunsetTime;
|
||||
_text pushBack format[
|
||||
"<font size='%1' color='%2'>Local Sunrise</font><br/>
|
||||
<font size='%3' color='%4'>%5</font><br/><br/>",
|
||||
milsim_fbcb2_recordTextHeaderSize,
|
||||
GVAR(recordTextHeaderSize),
|
||||
_sunriseColor,
|
||||
milsim_fbcb2_recordTextBodySize,
|
||||
GVAR(recordTextBodySize),
|
||||
_whiteColor,
|
||||
([_sunTimes select 0, "HH:MM"] call BIS_fnc_timeToString)
|
||||
];
|
||||
@@ -29,9 +31,9 @@ _text pushBack format[
|
||||
_text pushBack format[
|
||||
"<font size='%1' color='%2'>Local Sunset</font><br/>
|
||||
<font size='%3' color='%4'>%5</font><br/><br/>",
|
||||
milsim_fbcb2_recordTextHeaderSize,
|
||||
GVAR(recordTextHeaderSize),
|
||||
_sunsetColor,
|
||||
milsim_fbcb2_recordTextBodySize,
|
||||
GVAR(recordTextBodySize),
|
||||
_whiteColor,
|
||||
([_sunTimes select 1, "HH:MM"] call BIS_fnc_timeToString)
|
||||
];
|
||||
@@ -39,7 +41,7 @@ _text pushBack format[
|
||||
_text = _text joinString "";
|
||||
|
||||
[
|
||||
milsim_fbcb2_subjectIntelID,
|
||||
GVAR(subjectIntelID),
|
||||
_recordTitle,
|
||||
_text
|
||||
] call milsim_fnc_createOrUpdateDiaryRecord;
|
||||
] call FUNC(createOrUpdateDiaryRecord);
|
||||
@@ -1,11 +1,28 @@
|
||||
// updated 2024-02-01 by IndigoFox
|
||||
// now reads from the battalion config structure to generate the diary entries
|
||||
|
||||
#include "../script_component.hpp"
|
||||
|
||||
////////////////////////////////////////
|
||||
// Get info from missionConfigFile
|
||||
////////////////////////////////////////
|
||||
private _battalionInfoCfg = call milsim_util_fnc_getBattalionCfg;
|
||||
private _battalionInfoCfg = call EFUNC(util,getBattalionCfg);
|
||||
if (isNull _battalionInfoCfg) exitWith {
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"Null Battalion Config",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
};
|
||||
|
||||
private _battalionElementCfgs = [_battalionInfoCfg >> "Command"] call BIS_fnc_returnChildren;
|
||||
if (count _battalionElementCfgs == 0) exitWith {
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"ERROR: No battalion elements found. Check that the battalion config is correctly structured. See defines/BattalionInfo.hpp and framework/util/functions/getBattalionCfg.sqf.",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
};
|
||||
|
||||
////////////////////////////////////////
|
||||
// Define formatting constants
|
||||
@@ -29,22 +46,28 @@ private _FREQ_TEXT_COLOR = "#CCCCCC";
|
||||
reverse _battalionElementCfgs;
|
||||
|
||||
{
|
||||
diag_log text format[
|
||||
"[%1] <%2> Processing battalion element %3",
|
||||
QUOTE(PREFIX),
|
||||
_fnc_scriptName,
|
||||
configName _x
|
||||
];
|
||||
// recursively generate diary text for all child elements of battalion-level elements
|
||||
private _diaryTitleText = [_x, true] call milsim_fnc_generateElementFrequencyRecordText;
|
||||
private _diaryTitleText = [_x, true] call FUNC(generateElementFrequencyRecordText);
|
||||
[
|
||||
milsim_fbcb2_subjectFrequenciesID,
|
||||
GVAR(subjectFrequenciesID),
|
||||
_diaryTitleText#0,
|
||||
_diaryTitleText#1
|
||||
] call milsim_fnc_createOrUpdateDiaryRecord;
|
||||
] call FUNC(createOrUpdateDiaryRecord);
|
||||
} forEach _battalionElementCfgs;
|
||||
|
||||
// add the battalion command to the top of the list
|
||||
// don't process child elements
|
||||
private _diaryTitleText = [_battalionInfoCfg >> "Command", false] call milsim_fnc_generateElementFrequencyRecordText;
|
||||
private _diaryTitleText = [_battalionInfoCfg >> "Command", false] call FUNC(generateElementFrequencyRecordText);
|
||||
[
|
||||
milsim_fbcb2_subjectFrequenciesID,
|
||||
GVAR(subjectFrequenciesID),
|
||||
_diaryTitleText#0,
|
||||
_diaryTitleText#1
|
||||
] call milsim_fnc_createOrUpdateDiaryRecord;
|
||||
] call FUNC(createOrUpdateDiaryRecord);
|
||||
|
||||
true;
|
||||
@@ -1,12 +1,14 @@
|
||||
#include "../script_component.hpp"
|
||||
|
||||
private _recordTitle = "MDS - INTEL - SMOKES";
|
||||
|
||||
private _text = [
|
||||
// Title
|
||||
format[
|
||||
"<font size='%1' color='%2' face='%3'>%4</font>",
|
||||
milsim_fbcb2_recordTitleSize,
|
||||
milsim_fbcb2_recordTitleColor,
|
||||
milsim_fbcb2_recordTitleFont,
|
||||
GVAR(recordTitleSize),
|
||||
GVAR(recordTitleColor),
|
||||
GVAR(recordTitleFont),
|
||||
_recordTitle
|
||||
]
|
||||
];
|
||||
@@ -25,7 +27,7 @@ private _smokeColors = [
|
||||
_x params ["_color", "_name", "_description"];
|
||||
_text pushBack format[
|
||||
"<font size='%1'><font color='%2'>%3</font> - %4</font>",
|
||||
milsim_fbcb2_recordTextHeaderSize,
|
||||
GVAR(recordTextHeaderSize),
|
||||
_color,
|
||||
_name,
|
||||
_description
|
||||
@@ -35,7 +37,7 @@ private _smokeColors = [
|
||||
_text = _text joinString "<br/><br/>";
|
||||
|
||||
[
|
||||
milsim_fbcb2_subjectIntelID,
|
||||
GVAR(subjectIntelID),
|
||||
_recordTitle,
|
||||
_text
|
||||
] call milsim_fnc_createOrUpdateDiaryRecord;
|
||||
] call FUNC(createOrUpdateDiaryRecord);
|
||||
3
framework/fbcb2_main/script_component.hpp
Normal file
3
framework/fbcb2_main/script_component.hpp
Normal file
@@ -0,0 +1,3 @@
|
||||
#define COMPONENT fbcb2_main
|
||||
#define COMPONENT_BEAUTIFIED FBCB2 - Main
|
||||
#include "../script_mod.hpp"
|
||||
@@ -1,14 +1,16 @@
|
||||
#include "../script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
params [
|
||||
["_subjectID", milsim_fbcb2_subjectStatusID, [""]],
|
||||
["_subjectID", GVAR(subjectStatusID), [""]],
|
||||
["_recordTitle", "", [""]],
|
||||
["_recordText", "", [""]],
|
||||
["_recordIcon", "", [""]]
|
||||
];
|
||||
|
||||
// Check if already created
|
||||
private _subjectRecords = milsim_fbcb2_diaryRecords getOrDefault [_subjectID, createHashMap, true];
|
||||
private _subjectRecords = GVAR(diaryRecords) getOrDefault [_subjectID, createHashMap, true];
|
||||
private _existingRecord = _subjectRecords getOrDefault [_recordTitle, diaryRecordNull, true];
|
||||
|
||||
if (!isNull _existingRecord) then {
|
||||
@@ -24,5 +26,5 @@ if (!isNull _existingRecord) then {
|
||||
]
|
||||
];
|
||||
_subjectRecords set [_recordTitle, _new];
|
||||
milsim_fbcb2_diaryRecords set [_subjectID, _subjectRecords];
|
||||
GVAR(diaryRecords) set [_subjectID, _subjectRecords];
|
||||
};
|
||||
@@ -1,4 +1,6 @@
|
||||
// called from milsim_fnc_processFBCB2RadioFrequencies
|
||||
#include "../script_component.hpp"
|
||||
|
||||
params ["_cfg", ["_indentCount", 1, [5]]];
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
@@ -62,8 +64,8 @@ _freqLeadingSpace = _freqLeadingSpace joinString "";
|
||||
_ELEMENT_FREQ_SIZE,
|
||||
_ELEMENT_FREQ_FONT,
|
||||
_FREQ_TEXT_COLOR,
|
||||
[_role, "right", " ", _FREQ_PAD_LENGTH] call milsim_util_fnc_padString,
|
||||
[_srStr, "right", " ", _FREQ_PAD_LENGTH] call milsim_util_fnc_padString,
|
||||
[_role, "right", " ", _FREQ_PAD_LENGTH] call EFUNC(util,padString),
|
||||
[_srStr, "right", " ", _FREQ_PAD_LENGTH] call EFUNC(util,padString),
|
||||
_lrStr
|
||||
];
|
||||
} forEach (getArray (_cfg >> "frequencies"));
|
||||
@@ -1,5 +1,8 @@
|
||||
// called from milsim_fnc_processFBCB2RadioFrequencies ONLY
|
||||
// this function is called recursively to process all child elements of a battalion element in missionConfigFile
|
||||
|
||||
#include "../script_component.hpp"
|
||||
|
||||
params [
|
||||
["_elementCfg", configNull, [configNull]],
|
||||
["_shouldProcessChildCfgs", true]
|
||||
@@ -40,9 +43,9 @@ _freqLeadingSpace = _freqLeadingSpace joinString "";
|
||||
private _headers = [
|
||||
format[
|
||||
"<font size='%1' color='%2' face='%3'>%4</font>",
|
||||
milsim_fbcb2_recordTitleSize,
|
||||
milsim_fbcb2_recordTitleColor,
|
||||
milsim_fbcb2_recordTitleFont,
|
||||
GVAR(recordTitleSize),
|
||||
GVAR(recordTitleColor),
|
||||
GVAR(recordTitleFont),
|
||||
_recordTitle
|
||||
],
|
||||
format[
|
||||
@@ -51,8 +54,8 @@ private _headers = [
|
||||
_ELEMENT_FREQ_SIZE,
|
||||
_ELEMENT_FREQ_FONT,
|
||||
_FREQ_TEXT_COLOR,
|
||||
["ROLE", "right", " ", _FREQ_PAD_LENGTH] call milsim_util_fnc_padString,
|
||||
["SR", "right", " ", _FREQ_PAD_LENGTH] call milsim_util_fnc_padString,
|
||||
["ROLE", "right", " ", _FREQ_PAD_LENGTH] call EFUNC(util,padString),
|
||||
["SR", "right", " ", _FREQ_PAD_LENGTH] call EFUNC(util,padString),
|
||||
"LR"
|
||||
]
|
||||
];
|
||||
@@ -65,16 +68,28 @@ private _allText = [];
|
||||
|
||||
// get all child elements recursively and format them
|
||||
if (_shouldProcessChildCfgs) then {
|
||||
diag_log text format[
|
||||
"[%1] <%2> Processing %3",
|
||||
QUOTE(PREFIX),
|
||||
_fnc_scriptName,
|
||||
configName _battalionElement
|
||||
];
|
||||
[_battalionElement, {
|
||||
params ["_cfg", "_recurseCounter"];
|
||||
// add config
|
||||
private _lines = [_cfg, _recurseCounter+1] call milsim_fnc_formatRadioElementForDiary;
|
||||
private _lines = [_cfg, _recurseCounter+1] call FUNC(formatRadioElementForDiary);
|
||||
// private _lines = [_cfg, _indentCount] call t;
|
||||
_allText pushBack (_lines joinString "<br/>");
|
||||
}] call milsim_util_fnc_recurseSubclasses;
|
||||
}] call EFUNC(util,recurseSubclasses);
|
||||
} else {
|
||||
diag_log text format[
|
||||
"[%1] <%2> Processing %3",
|
||||
QUOTE(PREFIX),
|
||||
_fnc_scriptName,
|
||||
configName _battalionElement
|
||||
];
|
||||
// or if the param was false, just add the battalion element
|
||||
private _lines = [_battalionElement, 1] call milsim_fnc_formatRadioElementForDiary;
|
||||
private _lines = [_battalionElement, 1] call FUNC(formatRadioElementForDiary);
|
||||
// private _lines = [_cfg, _indentCount] call t;
|
||||
_allText pushBack (_lines joinString "<br/>");
|
||||
};
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
if (!isServer) exitWith {};
|
||||
|
||||
milsim_baseObjects = allMissionObjects "ModuleRespawnPosition_F";
|
||||
GVARMAIN(baseObjects) = allMissionObjects "ModuleRespawnPosition_F";
|
||||
publicVariable "milsim_baseObjects";
|
||||
|
||||
// Initializes the Dynamic Groups framework and groups
|
||||
|
||||
3
framework/reinsert/script_component.hpp
Normal file
3
framework/reinsert/script_component.hpp
Normal file
@@ -0,0 +1,3 @@
|
||||
#define COMPONENT fbcb2_reinsert
|
||||
#define COMPONENT_BEAUTIFIED FBCB2 - Reinsertion
|
||||
#include "../script_mod.hpp"
|
||||
@@ -22,4 +22,10 @@
|
||||
] call EFUNC(util,log);
|
||||
},
|
||||
true // requires mission restart
|
||||
] call CBA_fnc_addSetting;
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"CREATED SETTINGS",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
14
framework/util/functions/fn_getApprovedAssetsCfg.sqf
Normal file
14
framework/util/functions/fn_getApprovedAssetsCfg.sqf
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "../script_component.hpp"
|
||||
|
||||
private _approvedAssetsCfg = (missionConfigFile >> "ApprovedAssets");
|
||||
|
||||
if (!IS_CONFIG(_approvedAssetsCfg) || {!isClass _approvedAssetsCfg}) exitWith {
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"ERROR: Approved assets config not found. Check that the config is present and correctly named in the mission config file. See defines/ApprovedAssets.hpp and framework/util/functions/getApprovedAssetsCfg.sqf.",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
configNull;
|
||||
};
|
||||
|
||||
_approvedAssetsCfg;
|
||||
@@ -1 +1,14 @@
|
||||
(missionConfigFile >> "BattalionInfo")
|
||||
#include "../script_component.hpp"
|
||||
|
||||
private _battalionInfoCfg = (missionConfigFile >> "BattalionInfo");
|
||||
|
||||
if (!IS_CONFIG(_battalionInfoCfg) || {!isClass _battalionInfoCfg}) exitWith {
|
||||
[
|
||||
QUOTE(COMPONENT),
|
||||
"ERROR: Battalion config not found. Check that the battalion config is present and correctly named in the mission config file. See defines/BattalionInfo.hpp and framework/util/functions/getBattalionCfg.sqf.",
|
||||
[]
|
||||
] call EFUNC(util,log);
|
||||
configNull;
|
||||
};
|
||||
|
||||
_battalionInfoCfg;
|
||||
Reference in New Issue
Block a user