{"name":"addGroupIcon","operator":null,"title":"addGroupIcon","type":"command","url":"https://community.bistudio.com/wiki/addGroupIcon","revid":376587,"updated":"2025-10-29T23:12:14Z","groups":["High Command"],"status":"ok","replaced_by":[],"games":[{"game":"arma2","name":"Arma 2","version":"1.00"},{"game":"arma2oa","name":"Arma 2: Operation Arrowhead","version":"1.50"},{"game":"tkoh","name":"Take On Helicopters","version":"1.00"},{"game":"arma3","name":"Arma 3","version":"0.50"}],"since":{"game":"arma2","name":"Arma 2","version":"1.00"},"arma3_since":"0.50","branch":null,"locality":{"argument":"global","effect":"local","server_exec":false},"exec":null,"description":"Adds icon to a group leader. Returns icon ID, Control icons visibility with setGroupIconsVisible. Since Arma 3 v2.22 the offset can be set separately for 2d and 3d.","syntaxes":[{"syntax":"group addGroupIcon [iconClass, offset]","since":null,"effect":null,"exec":null,"params":[{"name":"group","type":"Group","optional":false,"default":null,"description":"group to which add the icon","types":["Group"],"since":null,"text":"group: Group - group to which add the icon"},{"name":"iconClass","type":"String","optional":false,"default":null,"description":"class name of an icon from `CfgGroupIcons`","types":["String"],"since":null,"text":"iconClass: String - class name of an icon from `CfgGroupIcons`"},{"name":"offset","type":"Array of Numbers","optional":true,"default":"[0,0]","description":"X and Y offsets of the icon in format [offsetX, offsetY, (offsetX3d), (offsetY3d)]","types":["Array","Number"],"since":null,"text":"offset: Array of Numbers - (Optional, default [0,0]) X and Y offsets of the icon in format [offsetX, offsetY, (offsetX3d), (offsetY3d)]"}],"returns":{"type":"Number","types":["Number"],"description":"icon ID","text":"Number - icon ID"},"form":"binary","operator":null,"left":{"text":"group","types":["Group"]},"right":{"text":"[iconClass, offset]","types":["Array"]}}],"examples":[{"text":"```sqf\ngroupName addGroupIcon [\"b_inf\", [offsetX, offsetY]];\n```","code":["groupName addGroupIcon [\"b_inf\", [offsetX, offsetY]];"]},{"text":"```sqf\n// enable icons in 2D and 3D\nsetGroupIconsVisible [true, true];\nsetGroupIconsSelectable true;\n\n// add the icon for all existing groups\nallGroups apply\n{\n    private _icon = [\"o_inf\", \"b_inf\", \"n_inf\", \"c_unknown\"] select (side _x call BIS_fnc_sideID);\n    private _color = [side _x, false] call BIS_fnc_sideColor;\n    _x addGroupIcon [_icon, [0, 0]];\n    _x setGroupIconParams [_color, groupID _x, linearConversion [1, 15, count units _x, 0.5, 3, false], true];\n};\n\n// add group event handler to all existing groups to handle to icon sizing\nallGroups apply\n{\n    _x addEventHandler [\"UnitLeft\",\n    {\n        params [\"_group\"];\n        getGroupIconParams group player params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n        _group setGroupIconParams [_color, _text, linearConversion [1, 15, count units _group, 0.5, 2, true], _visibility];\n    }];\n};\n\n// add the icons whenever a group gets created\naddMissionEventHandler [\"GroupCreated\",\n{\n    params [\"_group\"];\n    _group spawn\n    {\n        params [\"_group\"];\n        private _start = diag_tickTime;\n        waitUntil {sleep 1; units _group isNotEqualTo [] || diag_tickTime - _start > 5};\n        if (units _group isEqualTo []) exitWith {};\n\n        private _icon = [\"o_inf\", \"b_inf\", \"n_inf\", \"c_unknown\"] select (side _group call BIS_fnc_sideID);\n        private _color = [side _group, false] call BIS_fnc_sideColor;\n\n        _group addGroupIcon [_icon, [0, 0]];\n\n        // scale icon depending on group size\n        _group setGroupIconParams [_color, groupID _group, linearConversion [1, 15, count units _group, 0.5, 2, true], true];\n\n        _group addEventHandler [\"UnitLeft\",\n        {\n            params [\"_group\"];\n            getGroupIconParams group player params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n            _group setGroupIconParams [_color, _text, linearConversion [1, 15, count units _group, 0.5, 2, true], _visibility];\n        }];\n    };\n}];\n\n// show group info when hovering over an icon (2D/3D)\naddMissionEventHandler [\"GroupIconOverEnter\",\n{\n    params\n    [\n        \"_is3D\", \"_group\", \"_waypointId\",\n        \"_posX\", \"_posY\",\n        \"_shift\", \"_control\", \"_alt\"\n    ];\n    hintSilent parseText format\n    [\n        \"<t align='left' font='EtelkaMonospacePro'><br/><t size='1.2'>General Information:</t><br/>Callsign: %1<br/>Leader: %2<br/>No. of Units: %3<br/>Delete when Empty: %4<br/><br/><t size='1.2'>Group Status:</t><br/>Health: %5<br/>Fleeing: %6<br/>Attack Enabled: %7<br/>Combat Behaviour: %8<br/>Combat Mode: %9<br/>Formation: %10<br/>Speed: %11<br/><br/><t size='1.2'>Waypoints:</t><br/>No. of Waypoints: %12<br/>Current Waypoint: %13<br/>Speed: %14</t>\",\n        format [\"%1 (%2)\",groupID _group, if (vehicle leader _group isNotEqualTo leader _group) then {[configFile >> \"CfgVehicles\" >> typeOf vehicle leader _group] call BIS_fnc_displayName} else {\"-\"}],\n        name leader _group,\n        count units _group,\n        isGroupDeletedWhenEmpty _group,\n        units _group apply {str round ((1 - damage _x)* 100) + \" %\"},\n        fleeing leader _x,\n        attackEnabled _group,\n        combatBehaviour _group,\n        combatMode _group,\n        formation _group,\n        speedMode _group,\n        count waypoints _group,\n        waypointType [_group, currentWaypoint _group],\n        units _group apply {str round speed _x + \" km/h\"}\n    ];\n\n    if !(_group getVariable [\"IconEnlarged\", false]) then\n    {\n        _group setVariable [\"IconEnlarged\", true];\n\n        getGroupIconParams _group params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n        _group setGroupIconParams [_color, _text, _scale * 1.25, _visibility];\n    };\n}];\n\n// remove the hint whenever the mouse is leaving the icon area (2D/3D)\naddMissionEventHandler [\"GroupIconOverLeave\",\n{\n    params\n    [\n        \"_is3D\", \"_group\", \"_waypointId\",\n        \"_posX\", \"_posY\",\n        \"_shift\", \"_control\", \"_alt\"\n    ];\n    hintSilent \"\";\n\n    if (_group getVariable [\"IconEnlarged\", false]) then\n    {\n        _group setVariable [\"IconEnlarged\", false];\n\n        getGroupIconParams _group params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n        _group setGroupIconParams [_color, _text, linearConversion [1, 15, count units _group, 0.5, 2, true], _visibility];\n    };\n}];\n\n// delete group and its units when clicking on the icon\naddMissionEventHandler [\"GroupIconClick\",\n{\n    params\n    [\n        \"_is3D\", \"_group\", \"_waypointId\",\n        \"_mouseButton\", \"_posX\", \"_posY\",\n        \"_shift\", \"_control\", \"_alt\"\n    ];\n\n    if (!_shift && _control && !_alt) then\n    {\n        units _group apply {deleteVehicle _x};\n        deleteGroup _group;\n    };\n}];\n```","code":["// enable icons in 2D and 3D\nsetGroupIconsVisible [true, true];\nsetGroupIconsSelectable true;\n\n// add the icon for all existing groups\nallGroups apply\n{\n\tprivate _icon = [\"o_inf\", \"b_inf\", \"n_inf\", \"c_unknown\"] select (side _x call BIS_fnc_sideID);\n\tprivate _color = [side _x, false] call BIS_fnc_sideColor;\n\t_x addGroupIcon [_icon, [0, 0]];\n\t_x setGroupIconParams [_color, groupID _x, linearConversion [1, 15, count units _x, 0.5, 3, false], true];\n};\n\n// add group event handler to all existing groups to handle to icon sizing\nallGroups apply\n{\n\t_x addEventHandler [\"UnitLeft\",\n\t{\n\t\tparams [\"_group\"];\n\t\tgetGroupIconParams group player params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n\t\t_group setGroupIconParams [_color, _text, linearConversion [1, 15, count units _group, 0.5, 2, true], _visibility];\n\t}];\n};\n\n// add the icons whenever a group gets created\naddMissionEventHandler [\"GroupCreated\",\n{\n\tparams [\"_group\"];\n\t_group spawn\n\t{\n\t\tparams [\"_group\"];\n\t\tprivate _start = diag_tickTime;\n\t\twaitUntil {sleep 1; units _group isNotEqualTo [] || diag_tickTime - _start > 5};\n\t\tif (units _group isEqualTo []) exitWith {};\n\n\t\tprivate _icon = [\"o_inf\", \"b_inf\", \"n_inf\", \"c_unknown\"] select (side _group call BIS_fnc_sideID);\n\t\tprivate _color = [side _group, false] call BIS_fnc_sideColor;\n\n\t\t_group addGroupIcon [_icon, [0, 0]];\n\n\t\t// scale icon depending on group size\n\t\t_group setGroupIconParams [_color, groupID _group, linearConversion [1, 15, count units _group, 0.5, 2, true], true];\n\n\t\t_group addEventHandler [\"UnitLeft\",\n\t\t{\n\t\t\tparams [\"_group\"];\n\t\t\tgetGroupIconParams group player params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n\t\t\t_group setGroupIconParams [_color, _text, linearConversion [1, 15, count units _group, 0.5, 2, true], _visibility];\n\t\t}];\n\t};\n}];\n\n// show group info when hovering over an icon (2D/3D)\naddMissionEventHandler [\"GroupIconOverEnter\",\n{\n\tparams\n\t[\n\t\t\"_is3D\", \"_group\", \"_waypointId\",\n\t\t\"_posX\", \"_posY\",\n\t\t\"_shift\", \"_control\", \"_alt\"\n\t];\n\thintSilent parseText format\n\t[\n\t\t\"<t align='left' font='EtelkaMonospacePro'><br/><t size='1.2'>General Information:</t><br/>Callsign: %1<br/>Leader: %2<br/>No. of Units: %3<br/>Delete when Empty: %4<br/><br/><t size='1.2'>Group Status:</t><br/>Health: %5<br/>Fleeing: %6<br/>Attack Enabled: %7<br/>Combat Behaviour: %8<br/>Combat Mode: %9<br/>Formation: %10<br/>Speed: %11<br/><br/><t size='1.2'>Waypoints:</t><br/>No. of Waypoints: %12<br/>Current Waypoint: %13<br/>Speed: %14</t>\",\n\t\tformat [\"%1 (%2)\",groupID _group, if (vehicle leader _group isNotEqualTo leader _group) then {[configFile >> \"CfgVehicles\" >> typeOf vehicle leader _group] call BIS_fnc_displayName} else {\"-\"}],\n\t\tname leader _group,\n\t\tcount units _group,\n\t\tisGroupDeletedWhenEmpty _group,\n\t\tunits _group apply {str round ((1 - damage _x)* 100) + \" %\"},\n\t\tfleeing leader _x,\n\t\tattackEnabled _group,\n\t\tcombatBehaviour _group,\n\t\tcombatMode _group,\n\t\tformation _group,\n\t\tspeedMode _group,\n\t\tcount waypoints _group,\n\t\twaypointType [_group, currentWaypoint _group],\n\t\tunits _group apply {str round speed _x + \" km/h\"}\n\t];\n\n\tif !(_group getVariable [\"IconEnlarged\", false]) then\n\t{\n\t\t_group setVariable [\"IconEnlarged\", true];\n\n\t\tgetGroupIconParams _group params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n\t\t_group setGroupIconParams [_color, _text, _scale * 1.25, _visibility];\n\t};\n}];\n\n// remove the hint whenever the mouse is leaving the icon area (2D/3D)\naddMissionEventHandler [\"GroupIconOverLeave\",\n{\n\tparams\n\t[\n\t\t\"_is3D\", \"_group\", \"_waypointId\",\n\t\t\"_posX\", \"_posY\",\n\t\t\"_shift\", \"_control\", \"_alt\"\n\t];\n\thintSilent \"\";\n\n\tif (_group getVariable [\"IconEnlarged\", false]) then\n\t{\n\t\t_group setVariable [\"IconEnlarged\", false];\n\n\t\tgetGroupIconParams _group params [\"_color\", \"_text\", \"_scale\", \"_visibility\"];\n\t\t_group setGroupIconParams [_color, _text, linearConversion [1, 15, count units _group, 0.5, 2, true], _visibility];\n\t};\n}];\n\n// delete group and its units when clicking on the icon\naddMissionEventHandler [\"GroupIconClick\",\n{\n\tparams\n\t[\n\t\t\"_is3D\", \"_group\", \"_waypointId\",\n\t\t\"_mouseButton\", \"_posX\", \"_posY\",\n\t\t\"_shift\", \"_control\", \"_alt\"\n\t];\n\n\tif (!_shift && _control && !_alt) then\n\t{\n\t\tunits _group apply {deleteVehicle _x};\n\t\tdeleteGroup _group;\n\t};\n}];"]}],"multiplayer":null,"problems":"The icons will be hidden again after switching to a different unit via teamSwitch. Execute `setGroupIconsVisible [true, true]; setGroupIconsSelectable true;` to make them visible again.","aliases":[],"see_also":["clearGroupIcons","getGroupIcon","getGroupIcons","getGroupIconParams","groupIconSelectable","groupIconsVisible","onGroupIconClick","removeGroupIcon","setGroupIcon","setGroupIconParams","setGroupIconsSelectable","setGroupIconsVisible"],"notes":[],"categories":["Arma 2: New Scripting Commands","Arma 2: Operation Arrowhead: Scripting Commands","Arma 2: Scripting Commands","Arma 3: Scripting Commands","Command Group: High Command","Introduced with Arma 2 version 1.00","Scripting Commands","Scripting Commands: Local Effect","Take On Helicopters: Scripting Commands"]}