HallyG 239 Posted August 1, 2016 Just a code snippet to display continually updating map markers for all units and uav's on the player's side. A result of me messing about with the functionality of the select command. If a unit is in a vehicle, the vehicle's driver (or the first player in the vehicle) followed by the crew count will be shown. For example "HallyG + 3". First argument toggles whether or not marker should be displayed for AI. Default behaviour, only show AI markers in singleplayer.Marker colour changes according to the player's side; The side used is the player's starting. http://imgur.com/a/LTgbk /* Author: HallyG Displays map markers for all friendly units on the map. Argument(s): 0: Show AI: <BOOLEAN> (default: Show AI in singleplayer only) Returns: <NOTHING> Example: [true] spawn FUNCTIONNAME; [true] execVM SCRIPTLOCATION; __________________________________________________________________*/ if (isDedicated || missionNamespace getVariable ["HGF_unitMarkers_running", false]) exitWith {}; HGF_unitMarkers_running = true; params [ ["_showAI", !isMultiplayer, [false]] ]; private _fnc_updtMkr = { params ["_marker", "_pos", "_dir", "_type", "_name"]; _marker setMarkerPosLocal _pos; _marker setMarkerDirLocal _dir; _marker setMarkerTypeLocal _type; _marker setMarkerTextLocal _name; }; private _markers = []; private _units = [[],[]]; private _colour = [playerSide, true] call BIS_fnc_sideColor; while {true} do { allUnitsUav select { if (isUAVConnected _x) then { (_units select 1) pushBackUnique _x; true }; }; allUnits select { if (isPlayer _x || _showAI) then { if (side _x isEqualto playerSide) then { private _unit = _x; if (({{_x isEqualTo _unit} count crew _x > 0} count allUnitsUav) isEqualTo 0) then { (_units select 0) pushBackUnique _x; true }; }; }; }; if (visibleGPS || visibleMap) then { { private _marker = format ["Unit%1", _x]; private _veh = {isPlayer _x || _showAI} count crew vehicle _x; if !(_marker in _markers) then { _markers pushBack (createMarkerLocal [_marker, visiblePositionASL _x]); _marker setMarkerAlphaLocal 0.75; _marker setMarkerSizeLocal [0.8, 0.8]; _marker setMarkerColorLocal _colour; }; [ [ _marker, (visiblePositionASL _x), (getDirVisual _x), [ ["Empty", "b_motor_inf"] select ((((crew vehicle _x) select {isPlayer _x || _showAI}) select 0) isEqualTo _x), "mil_triangle" ] select (isNull objectParent _x || {(objectParent _x isKindOf "ParachuteBase")}), [ format ["%1: %2 %3", getText (configFile >> "cfgVehicles" >> typeOf vehicle _x >> "displayname"), name _x, format [["+%1",""] select (_veh < 2), _veh -1]], name _x ] select (isNull objectParent _x || {(objectParent _x isKindOf "ParachuteBase")}) ], [ _marker, (visiblePositionASL _x), 0, "Empty", name _x ] ] select !(alive _x) call _fnc_updtMkr; if !(alive _x) then { (_units select 0) set [_forEachIndex, objNull] }; } forEach ((_units select 0) select {!isNull _x}); { private _unit = (uavControl _x) select 0; if (isPlayer _unit || _showAI) then { if (side _unit isEqualto playerSide) then { private _marker = format ["Uav%1", _x]; if !(_marker in _markers) then { _markers pushBack (createMarkerLocal [_marker, visiblePositionASL _x]); _marker setMarkerAlphaLocal 0.75; _marker setMarkerSizeLocal [0.8, 0.8]; _marker setMarkerColorLocal _colour; }; [ [ _marker, (visiblePositionASL _x), (getDirVisual _x), "b_uav", format ["%1: %2", getText (configFile >> "cfgVehicles" >> typeOf vehicle _x >> "displayName"), name _unit] ], [ _marker, (visiblePositionASL _x), (getDirVisual _x), "Empty", //"KIA" format ["%1: %2", getText (configFile >> "cfgVehicles" >> typeOf vehicle _x >> "displayName"), name _unit] ] ] select !(alive _x) call _fnc_updtMkr; if !(alive _x) then { (_units select 1) set [_forEachIndex, objNull] }; }; }; } forEach ((_units select 1) select {!isNull _x}); } else { {deleteMarkerLocal _x; true} count _markers; _markers = []; }; uiSleep 0.025; }; I guess, to improve this further, I could use the map mission event handler instead of a looped if then statement. Share this post Link to post Share on other sites
davidoss 552 Posted August 1, 2016 Nice but the game do it too isn't ? There are Soldier Tracker by Quicksilver which do it awesome. Share this post Link to post Share on other sites
HallyG 239 Posted August 1, 2016 On 01/08/2016 at 7:07 PM, davidoss said: Nice but the game do it too isn't ? There are Soldier Tracker by Quicksilver which do it awesome. Share this post Link to post Share on other sites
davidoss 552 Posted August 1, 2016 I am not saying that this is not useful and said "Nice". I am using it already. Share this post Link to post Share on other sites
HallyG 239 Posted August 1, 2016 I am not saying that this is not useful and said "Nice". I am using it already. Evidently I misunderstood you, my bad :) Share this post Link to post Share on other sites
fn_Quiksilver 1636 Posted August 1, 2016 would be interesting to explore faster/better ways of iterating through an array than {........} count _array <---- the method i use a lot maybe your use of select is better _array select {...}; maybe the apply command is worth exploring as well https://community.bistudio.com/wiki/apply and we are both waiting for this command https://community.bistudio.com/wiki/unitIsUAV Share this post Link to post Share on other sites