From 4fd0c13f9c045c01398940b172fbdde27fb82816 Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 10:17:39 +0100 Subject: [PATCH 1/7] add handling vor HMD Slot --- addons/wardrobe/functions/fnc_replace.sqf | 1 + addons/wardrobe/functions/fnc_replaceOther.sqf | 3 +++ 2 files changed, 4 insertions(+) diff --git a/addons/wardrobe/functions/fnc_replace.sqf b/addons/wardrobe/functions/fnc_replace.sqf index 9e4859c651c..758766c353e 100644 --- a/addons/wardrobe/functions/fnc_replace.sqf +++ b/addons/wardrobe/functions/fnc_replace.sqf @@ -37,6 +37,7 @@ private _replaceCode = switch (_typeNumber) do { case TYPE_UNIFORM: { _equipmentType = "UNIFORM"; LINKFUNC(replaceContainer) }; case TYPE_VEST: { _equipmentType = "VEST"; LINKFUNC(replaceContainer) }; case TYPE_BACKPACK: { _equipmentType = "BACKPACK"; LINKFUNC(replaceContainer) }; + case TYPE_HMD: { _equipmentType = "NVG"; LINKFUNC(replaceOther) }; default { // CfgGlasses items do not have a ItemInfo subclass and therefore, not typeNumber switch (true) do { diff --git a/addons/wardrobe/functions/fnc_replaceOther.sqf b/addons/wardrobe/functions/fnc_replaceOther.sqf index 7f88c7689af..99b3f4cc211 100644 --- a/addons/wardrobe/functions/fnc_replaceOther.sqf +++ b/addons/wardrobe/functions/fnc_replaceOther.sqf @@ -29,6 +29,9 @@ switch (_equipmentType) do { removeGoggles _player; _player addGoggles _classTarget; }; + case "NVG": { + _player linkItem _classTarget; + }; }; GVAR(inProgress) = false; // re-enable action From 4ea3859c98ac67062459a0d794f4bb3610da5294 Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 10:41:03 +0100 Subject: [PATCH 2/7] missionnamespace setvar -> gvar = value --- .hemtt/missions/Wardrobe.VR/mission.sqm | 10 +++++----- addons/wardrobe/XEH_preInit.sqf | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.hemtt/missions/Wardrobe.VR/mission.sqm b/.hemtt/missions/Wardrobe.VR/mission.sqm index 3eed3449ac4..d57967623eb 100644 --- a/.hemtt/missions/Wardrobe.VR/mission.sqm +++ b/.hemtt/missions/Wardrobe.VR/mission.sqm @@ -13,9 +13,9 @@ class EditorData class Camera { pos[]={27.77986,9.3148928,-11.992753}; - dir[]={-0.82791728,-0.44389084,-0.34282935}; - up[]={-0.41012207,0.89607823,-0.16982619}; - aside[]={-0.38258561,-4.6566129e-09,0.92392808}; + dir[]={-0.69794518,-0.36113313,-0.61844516}; + up[]={-0.27029148,0.93251151,-0.23950377}; + aside[]={-0.66319907,-8.5798092e-08,0.7484532}; }; }; binarizationWanted=0; @@ -134,7 +134,7 @@ class Mission class PositionInfo { position[]={16,5.2840548,-14}; - angles[]={0,4.7497735,-0}; + angles[]={0,4.7497735,0}; }; side="Empty"; flags=4; @@ -271,7 +271,7 @@ class Mission class PositionInfo { position[]={18,5,-14}; - angles[]={-0,1.0776811,0}; + angles[]={0,1.0776811,0}; }; side="Empty"; flags=4; diff --git a/addons/wardrobe/XEH_preInit.sqf b/addons/wardrobe/XEH_preInit.sqf index 22bd9de0b9d..d38f75ee071 100644 --- a/addons/wardrobe/XEH_preInit.sqf +++ b/addons/wardrobe/XEH_preInit.sqf @@ -8,7 +8,7 @@ PREP_RECOMPILE_END; #include "initSettings.inc.sqf" -missionNamespace setVariable [QGVAR(inProgress), false]; +GVAR(inProgress) = false; // Cache Wardrobe Replace Exceptions private _map = createHashMap; From 46d0ae82144b527cda951ca891308457a986b531 Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 11:19:59 +0100 Subject: [PATCH 3/7] init --- addons/wardrobe/XEH_preInit.sqf | 9 ++++++++ addons/wardrobe/functions/fnc_replace.sqf | 26 +++++++++++------------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/addons/wardrobe/XEH_preInit.sqf b/addons/wardrobe/XEH_preInit.sqf index d38f75ee071..4bab45e44bd 100644 --- a/addons/wardrobe/XEH_preInit.sqf +++ b/addons/wardrobe/XEH_preInit.sqf @@ -10,6 +10,15 @@ PREP_RECOMPILE_END; GVAR(inProgress) = false; +GVAR(replaceHashmap) = createHashMapFromArray [ + [TYPE_HEADGEAR, ["HEADGEAR", LINKFUNC(replaceOther)] ], + [TYPE_UNIFORM, ["UNIFORM", LINKFUNC(replaceContainer)]], + [TYPE_VEST, ["VEST", LINKFUNC(replaceContainer)]], + [TYPE_BACKPACK, ["BACKPACK", LINKFUNC(replaceContainer)]], + [TYPE_HMD, ["NVG", LINKFUNC(replaceOther)] ], + [TYPE_GOGGLE, ["FACEWEAR", LINKFUNC(replaceOther)] ] +]; + // Cache Wardrobe Replace Exceptions private _map = createHashMap; { diff --git a/addons/wardrobe/functions/fnc_replace.sqf b/addons/wardrobe/functions/fnc_replace.sqf index 758766c353e..322baae66e3 100644 --- a/addons/wardrobe/functions/fnc_replace.sqf +++ b/addons/wardrobe/functions/fnc_replace.sqf @@ -30,23 +30,21 @@ private _cfgWardobeTarget = configFile >> QUOTE(ADDON) >> _classTarget; private _duration = getNumber (_cfgWardobeTarget >> "duration"); // replace the main Item -private _equipmentType = ""; private _typeNumber = getNumber (_cfgOrigin >> "ItemInfo" >> "type"); -private _replaceCode = switch (_typeNumber) do { - case TYPE_HEADGEAR: { _equipmentType = "HEADGEAR"; LINKFUNC(replaceOther) }; - case TYPE_UNIFORM: { _equipmentType = "UNIFORM"; LINKFUNC(replaceContainer) }; - case TYPE_VEST: { _equipmentType = "VEST"; LINKFUNC(replaceContainer) }; - case TYPE_BACKPACK: { _equipmentType = "BACKPACK"; LINKFUNC(replaceContainer) }; - case TYPE_HMD: { _equipmentType = "NVG"; LINKFUNC(replaceOther) }; - default { - // CfgGlasses items do not have a ItemInfo subclass and therefore, not typeNumber - switch (true) do { - case (isClass (configFile >> "CfgGlasses" >> _classOrigin)): { _equipmentType = "FACEWEAR"; LINKFUNC(replaceOther) }; - default { {} }; - }; + +if (_typeNumber isEqualTo 0) then { + + // Switch-statement incase there will be more edge cases like CfgGlassess + _typeNumber = switch (true) do { + // CfgGlasses items do not have a ItemInfo subclass and therefore, will return 0 + case (isClass (configFile >> "CfgGlasses" >> _classOrigin)): { TYPE_GOGGLE }; + default { 0 }; }; }; -if (_replaceCode isEqualTo {}) exitWith { ERROR_2("typeNumber undefined: %1 - %2",_typeNumber,_classOrigin); }; + +GVAR(replaceHashmap) getOrDefault [_typeNumber, []] params ["_equipmentType", "_replaceCode"]; + +if (isNil "_replaceCode") exitWith { ERROR_2("typeNumber undefined: %1 - %2",_typeNumber,_classOrigin); }; private _extendedInfo = createHashMap; [QGVAR(itemChangedStart), [_player, _classOrigin, _classTarget, _equipmentType, _extendedInfo]] call CBA_fnc_localEvent; From 0b19b06a070f3370ec1a443182f85d4adb5070ad Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 11:31:11 +0100 Subject: [PATCH 4/7] replace _equipmentType with _typeNumber --- addons/wardrobe/XEH_preInit.sqf | 12 ++++++------ addons/wardrobe/functions/fnc_replace.sqf | 14 +++++++------- addons/wardrobe/functions/fnc_replaceContainer.sqf | 10 +++++----- addons/wardrobe/functions/fnc_replaceOther.sqf | 10 +++++----- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/addons/wardrobe/XEH_preInit.sqf b/addons/wardrobe/XEH_preInit.sqf index 4bab45e44bd..1ffcb7efe7f 100644 --- a/addons/wardrobe/XEH_preInit.sqf +++ b/addons/wardrobe/XEH_preInit.sqf @@ -11,12 +11,12 @@ PREP_RECOMPILE_END; GVAR(inProgress) = false; GVAR(replaceHashmap) = createHashMapFromArray [ - [TYPE_HEADGEAR, ["HEADGEAR", LINKFUNC(replaceOther)] ], - [TYPE_UNIFORM, ["UNIFORM", LINKFUNC(replaceContainer)]], - [TYPE_VEST, ["VEST", LINKFUNC(replaceContainer)]], - [TYPE_BACKPACK, ["BACKPACK", LINKFUNC(replaceContainer)]], - [TYPE_HMD, ["NVG", LINKFUNC(replaceOther)] ], - [TYPE_GOGGLE, ["FACEWEAR", LINKFUNC(replaceOther)] ] + [TYPE_HEADGEAR, LINKFUNC(replaceOther) ], + [TYPE_UNIFORM, LINKFUNC(replaceContainer)], + [TYPE_VEST, LINKFUNC(replaceContainer)], + [TYPE_BACKPACK, LINKFUNC(replaceContainer)], + [TYPE_HMD, LINKFUNC(replaceOther) ], + [TYPE_GOGGLE, LINKFUNC(replaceOther) ] ]; // Cache Wardrobe Replace Exceptions diff --git a/addons/wardrobe/functions/fnc_replace.sqf b/addons/wardrobe/functions/fnc_replace.sqf index 322baae66e3..62cf48252d5 100644 --- a/addons/wardrobe/functions/fnc_replace.sqf +++ b/addons/wardrobe/functions/fnc_replace.sqf @@ -42,26 +42,26 @@ if (_typeNumber isEqualTo 0) then { }; }; -GVAR(replaceHashmap) getOrDefault [_typeNumber, []] params ["_equipmentType", "_replaceCode"]; +private _replaceCode = GVAR(replaceHashmap) get _typeNumber; if (isNil "_replaceCode") exitWith { ERROR_2("typeNumber undefined: %1 - %2",_typeNumber,_classOrigin); }; private _extendedInfo = createHashMap; -[QGVAR(itemChangedStart), [_player, _classOrigin, _classTarget, _equipmentType, _extendedInfo]] call CBA_fnc_localEvent; +[QGVAR(itemChangedStart), [_player, _classOrigin, _classTarget, _typeNumber, _extendedInfo]] call CBA_fnc_localEvent; // temp action disabled GVAR(inProgress) = true; [{ - params ["_player", "_classOrigin", "_classTarget", "_equipmentType", "_replaceCode", "_extendedInfo"]; + params ["_player", "_classOrigin", "_classTarget", "_typeNumber", "_replaceCode", "_extendedInfo"]; - [QGVAR(itemChangedBegin), [_player, _classOrigin, _classTarget, _equipmentType, _extendedInfo]] call CBA_fnc_localEvent; + [QGVAR(itemChangedBegin), [_player, _classOrigin, _classTarget, _typeNumber, _extendedInfo]] call CBA_fnc_localEvent; - [_player, _classTarget, _equipmentType] call _replaceCode; + [_player, _classTarget, _typeNumber] call _replaceCode; - [QGVAR(itemChangedEnd), [_player, _classOrigin, _classTarget, _equipmentType, _extendedInfo]] call CBA_fnc_localEvent; + [QGVAR(itemChangedEnd), [_player, _classOrigin, _classTarget, _typeNumber, _extendedInfo]] call CBA_fnc_localEvent; -}, [_player, _classOrigin, _classTarget, _equipmentType, _replaceCode, _extendedInfo], _duration] call CBA_fnc_waitAndExecute; +}, [_player, _classOrigin, _classTarget, _typeNumber, _replaceCode, _extendedInfo], _duration] call CBA_fnc_waitAndExecute; // handle components [_classOrigin, _classTarget] call FUNC(compareComponents) params ["_missing", "_surplus"]; diff --git a/addons/wardrobe/functions/fnc_replaceContainer.sqf b/addons/wardrobe/functions/fnc_replaceContainer.sqf index dde6004795f..f56590844ad 100644 --- a/addons/wardrobe/functions/fnc_replaceContainer.sqf +++ b/addons/wardrobe/functions/fnc_replaceContainer.sqf @@ -18,7 +18,7 @@ * Public: No */ -params ["_player", "_classTarget", "_equipmentType"]; +params ["_player", "_classTarget", "_typeNumber"]; private _allMags = (magazinesAmmoFull _player) apply { _x#0 }; @@ -51,10 +51,10 @@ private _containerVars = []; } forEach [uniformContainer _player, vestContainer _player, backpackContainer _player]; // Replace Wearable Container -switch (_equipmentType) do { - case "UNIFORM": { _loadout # 3 set [0, _classTarget]; }; - case "VEST": { _loadout # 4 set [0, _classTarget]; }; - case "BACKPACK": { _loadout # 5 set [0, _classTarget]; }; +switch (_typeNumber) do { + case TYPE_UNIFORM: { _loadout # 3 set [0, _classTarget]; }; + case TYPE_VEST: { _loadout # 4 set [0, _classTarget]; }; + case TYPE_BACKPACK: { _loadout # 5 set [0, _classTarget]; }; }; // Apply new loadout diff --git a/addons/wardrobe/functions/fnc_replaceOther.sqf b/addons/wardrobe/functions/fnc_replaceOther.sqf index 99b3f4cc211..1fc61b8429a 100644 --- a/addons/wardrobe/functions/fnc_replaceOther.sqf +++ b/addons/wardrobe/functions/fnc_replaceOther.sqf @@ -18,18 +18,18 @@ * Public: No */ -params ["_player", "_classTarget", "_equipmentType"]; +params ["_player", "_classTarget", "_typeNumber"]; -switch (_equipmentType) do { - case "HEADGEAR": { +switch (_typeNumber) do { + case TYPE_HEADGEAR: { removeHeadgear _player; _player addHeadgear _classTarget; }; - case "FACEWEAR": { + case TYPE_GOGGLE: { removeGoggles _player; _player addGoggles _classTarget; }; - case "NVG": { + case TYPE_HMD: { _player linkItem _classTarget; }; }; From be5aeab86570f2f8d5ed52efcd769e68ff0434ee Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 11:35:45 +0100 Subject: [PATCH 5/7] Revert change of mission.sqm This reverts commit 4ea3859c98ac67062459a0d794f4bb3610da5294. --- .hemtt/missions/Wardrobe.VR/mission.sqm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.hemtt/missions/Wardrobe.VR/mission.sqm b/.hemtt/missions/Wardrobe.VR/mission.sqm index d57967623eb..3eed3449ac4 100644 --- a/.hemtt/missions/Wardrobe.VR/mission.sqm +++ b/.hemtt/missions/Wardrobe.VR/mission.sqm @@ -13,9 +13,9 @@ class EditorData class Camera { pos[]={27.77986,9.3148928,-11.992753}; - dir[]={-0.69794518,-0.36113313,-0.61844516}; - up[]={-0.27029148,0.93251151,-0.23950377}; - aside[]={-0.66319907,-8.5798092e-08,0.7484532}; + dir[]={-0.82791728,-0.44389084,-0.34282935}; + up[]={-0.41012207,0.89607823,-0.16982619}; + aside[]={-0.38258561,-4.6566129e-09,0.92392808}; }; }; binarizationWanted=0; @@ -134,7 +134,7 @@ class Mission class PositionInfo { position[]={16,5.2840548,-14}; - angles[]={0,4.7497735,0}; + angles[]={0,4.7497735,-0}; }; side="Empty"; flags=4; @@ -271,7 +271,7 @@ class Mission class PositionInfo { position[]={18,5,-14}; - angles[]={0,1.0776811,0}; + angles[]={-0,1.0776811,0}; }; side="Empty"; flags=4; From 0ec0fe37dfe8a5d88154bc6aeb28cbdcd90ec1c4 Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 12:21:12 +0100 Subject: [PATCH 6/7] upt docs --- docs/wiki/framework/wardrobe-framework.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/wiki/framework/wardrobe-framework.md b/docs/wiki/framework/wardrobe-framework.md index b3b11ef2e0d..90090ce54d3 100644 --- a/docs/wiki/framework/wardrobe-framework.md +++ b/docs/wiki/framework/wardrobe-framework.md @@ -331,14 +331,14 @@ Therefore, the debug script found at `addons\wardrobe\dev\compareContainerMaxLoa ### 6.2.1 Listenable -`_itemType` is STRING ["UNIFORM", "VEST", "BACKPACK", "HEADGEAR", "FACEWEAR"] +`_typeNumber` is NUMBER, see [script_macros.hpp](https://github.com/acemod/ACE3/blob/master/addons/main/script_macros.hpp#L75-L114) `_extendedInfo` is HASHMAP will be passed between events (works similar to `CBA_loadoutSet` events) | Event Name | Description | Passed Parameter(s) | Locality | | ---------- | ----------- | ------------------- | -------- | -| `ace_wardrobe_itemChangedStart` | Raised when the action to change an item is taken, but before any changes. | `[_player, _oldItem, _newItem, _itemType, _extendedInfo]` | Local | -| `ace_wardrobe_itemChangedBegin` | Raised just before the item is changed. | `[_player, _oldItem, _newItem, _itemType, _extendedInfo]` | Local | -| `ace_wardrobe_itemChangedEnd` | Raised just after the item has been changed. | `[_player, _oldItem, _newItem, _itemType, _extendedInfo]` | Local | +| `ace_wardrobe_itemChangedStart` | Raised when the action to change an item is taken, but before any changes. | `[_player, _oldItem, _newItem, _typeNumber, _extendedInfo]` | Local | +| `ace_wardrobe_itemChangedBegin` | Raised just before the item is changed. | `[_player, _oldItem, _newItem, _typeNumber, _extendedInfo]` | Local | +| `ace_wardrobe_itemChangedEnd` | Raised just after the item has been changed. | `[_player, _oldItem, _newItem, _typeNumber, _extendedInfo]` | Local | ## 6.3 Container Variables From af91782e4a248cbcfc31031699b4e448df8bf140 Mon Sep 17 00:00:00 2001 From: OverlordZorn Date: Tue, 20 Jan 2026 12:23:08 +0100 Subject: [PATCH 7/7] Update XEH_preInit.sqf --- addons/wardrobe/XEH_preInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/wardrobe/XEH_preInit.sqf b/addons/wardrobe/XEH_preInit.sqf index 1ffcb7efe7f..9b290223a96 100644 --- a/addons/wardrobe/XEH_preInit.sqf +++ b/addons/wardrobe/XEH_preInit.sqf @@ -8,7 +8,7 @@ PREP_RECOMPILE_END; #include "initSettings.inc.sqf" -GVAR(inProgress) = false; +GVAR(inProgress) = false; GVAR(replaceHashmap) = createHashMapFromArray [ [TYPE_HEADGEAR, LINKFUNC(replaceOther) ],