#include "..\script_component.hpp" if (!hasInterface) exitWith {}; // create diary records // remove any existing asset map markers call FUNC(removeMarkersOnMap); // remove existing asset records call FUNC(removeAssetDiaryRecords); (call FUNC(getStartingAndCurrentAssets)) params [ "_startingAssets", "_currentAssets" ]; // get distinct vehicle class names private _distinctVehiclesClassNames = []; { _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 _vehicleCallsign = toUpper ( [_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 ( [_assetCfg] call BIS_fnc_displayName in ["Helicopter"] ) then {continue}; // Get the vehicle data 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", "", [""]] ]; // Get what we can from the vehicle cfg // Create the diary record private _recordText = []; // Add the title and image if (count _title isEqualTo 0) then { _title = format["%1", [_assetCfg] call BIS_fnc_displayName]; }; _recordText pushBack format[ "%1", _title ]; if (count _image isEqualTo 0) then { _image = format["", getText(_assetCfg >> 'editorPreview')]; }; _recordText pushBack _image; _recordText pushBack "
"; _recordText pushBack format[ "CALLSIGN: %1", _vehicleCallsign ]; _recordText pushBack format[ "COUNT STARTED: %1", count _startingAssetsOfThisType ]; _recordText pushBack format[ "COUNT ACTIVE: %1", count _currentAssetsOfThisType ]; // Here, we'll create a link to show markers on the map for all vehicles of this kind // get 'picture' for record private _icon = getText(_assetCfg >> "picture"); // determine marker type private _markerType = "mil_dot"; switch (true) do { case ("Helicopter" in _parentClassNames): { _markerType = "loc_heli"; }; case ("Air" in _parentClassNames): { _markerType = "loc_plane"; }; case ("Ship" in _parentClassNames): { _markerType = "loc_boat"; }; case ("Car" in _parentClassNames): { _markerType = "loc_car"; }; default { _markerType = "loc_truck"; }; }; 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[ "SHOW MARKERS for vehicles at base (in %6)", _className, _markerType, _randomColor#0, (_currentAssetsOfThisType apply { _x params ["_netId", "_cfg"]; _netId; }), QFUNC(showMarkersOnMap), format["%2", _randomColor#1, _randomColor#2] ]; _recordText pushBack _showMarkersText; // Link to hide markers _recordText pushBack format[ "REMOVE ALL MARKERS showing asset positions", QFUNC(removeMarkersOnMap) ]; // Link to update asset diary entries _recordText pushBack format[ "UPDATE ENTRIES for all assets", QFUNC(updateAssetDiary) ]; // link to display hint with all assets _recordText pushBack format[ "SHOW APPROVED ASSET COUNTS via hint", QFUNC(hintAllApprovedAssets) ]; _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.
- Markers will only be displayed for assets that are within a certain distance of a base." ]; // 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 ("Helicopter" in _parentClassNames): { _subjectID = EGVAR(fbcb2_main,subjectAssetsRotaryID); }; case ("Air" in _parentClassNames): { _subjectID = EGVAR(fbcb2_main,subjectAssetsFixedWingID); }; default { _subjectID = EGVAR(fbcb2_main,subjectAssetsGroundID); }; }; [ _subjectID, format[ "[%1/%2] %3", count _currentAssetsOfThisType, count _startingAssetsOfThisType, (_assetCfg) call BIS_fnc_displayName ], _recordText joinString "
", _icon ] call EFUNC(common,createOrUpdateDiaryRecord); // "\A3\ui_f\data\igui\cfg\simpleTasks\types\car_ca.paa" } forEach _distinctVehiclesClassNames; // log to RPT [ LEVEL_INFO, QUOTE(COMPONENT), "UPDATED ASSET DIARY", [ ["startingAssetCount", count _startingAssets], ["startingAssetCountDistinct", count _distinctVehiclesClassNames], ["currentassetCount", count _currentAssets] ] ] call EFUNC(common,log); true;