diff --git a/addons/common/CfgFunctions.hpp b/addons/common/CfgFunctions.hpp index d8283148e..fde194db6 100644 --- a/addons/common/CfgFunctions.hpp +++ b/addons/common/CfgFunctions.hpp @@ -77,6 +77,7 @@ class CfgFunctions { PATHTO_FNC(binocularMagazine); PATHTO_FNC(addBinocularMagazine); PATHTO_FNC(removeBinocularMagazine); + PATHTO_FNC(randomizeFacewear); }; class Cargo { diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index a407a7831..b9e762ed3 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -71,4 +71,7 @@ activateAddons GVAR(addons); }]; }] call CBA_fnc_addClassEventHandler; +// Facewear randomization +["CAManBase", "InitPost", CBA_fnc_randomizeFacewear] call CBA_fnc_addClassEventHandler; + ADDON = true; diff --git a/addons/common/fnc_randomizeFacewear.sqf b/addons/common/fnc_randomizeFacewear.sqf new file mode 100644 index 000000000..f14fdd655 --- /dev/null +++ b/addons/common/fnc_randomizeFacewear.sqf @@ -0,0 +1,57 @@ +#include "script_component.hpp" +/* ---------------------------------------------------------------------------- +Function: CBA_fnc_randomizeFacewear + +Description: + Add config defined weighted random facewear to unit. + + CBA_facewearList[] = {}; // default: ignore and use facewear from BIS_fnc_unitHeadgear instead + CBA_facewearList[] = {"", 1}; // no facewear, delete and overwrite facewear from BIS_fnc_unitHeadgear + + // 40% no facewear, 30% balaclava, 30% bandana. Weighted randomization: Sum of propabilites must not necessarily equal 1. + CBA_facewearList[] = {"", 0.4, "G_Balaclava_blk", 0.3, "G_Bandanna_blk", 0.3}; + +Parameters: + _unit - unit + +Returns: + true on success, false on error + +Examples: + (begin example) + [unit] call CBA_fnc_randomizeFacewear; + (end) + +Author: + commy2 +---------------------------------------------------------------------------- */ + +params [["_unit", objNull, [objNull]]]; + +if (isNull _unit) exitWith { + WARNING_1("Unit [%1] is null",_unit); + false +}; + +// Disabled conditions +if (!local _unit) exitWith {true}; + +private _randomizationDisabled = getArray (missionConfigFile >> "disableRandomization") findIf { + _unit isKindOf _x || {(vehicleVarName _unit) isEqualTo _x} +} != -1; + +if (_randomizationDisabled || {!(_unit getVariable ["BIS_enableRandomization", true])}) exitWith {true}; + +// Get list +private _facewearList = getArray (configFile >> "CfgVehicles" >> typeOf _unit >> "CBA_facewearList"); +if (_facewearList isEqualTo []) exitWith {true}; + +// Apply +private _facewear = selectRandomWeighted _facewearList; +if ((toLower _facewear) in ["", "none"]) then { + removeGoggles _unit; +} else { + _unit addGoggles _facewear; +}; + +true