Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions addons/wardrobe/XEH_preInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@ PREP_RECOMPILE_END;

GVAR(inProgress) = false;

GVAR(replaceHashmap) = createHashMapFromArray [
[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
private _map = createHashMap;
{
Expand Down
38 changes: 18 additions & 20 deletions addons/wardrobe/functions/fnc_replace.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -30,40 +30,38 @@ 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); };

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"];
Expand Down
10 changes: 5 additions & 5 deletions addons/wardrobe/functions/fnc_replaceContainer.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* Public: No
*/

params ["_player", "_classTarget", "_equipmentType"];
params ["_player", "_classTarget", "_typeNumber"];

private _allMags = (magazinesAmmoFull _player) apply { _x#0 };

Expand Down Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions addons/wardrobe/functions/fnc_replaceOther.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
};
Expand Down
8 changes: 4 additions & 4 deletions docs/wiki/framework/wardrobe-framework.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down