2222params [" " , " _player" , " _actionParams" ];
2323_actionParams params [" _cfgOrigin" , " _cfgTarget" ];
2424
25- private _classTarget = configName _cfgTarget ;
25+
26+ // PREP
2627private _classOrigin = configName _cfgOrigin ;
27- private _cfgWardobeTarget = configFile >> QUOTE(ADDON) >> _classTarget ;
28+ private _classTarget = configName _cfgTarget ;
29+
30+ private _typeOrigin = _cfgOrigin call LINKFUNC(getTypeNumber);
31+ private _typeTarget = _cfgTarget call LINKFUNC(getTypeNumber);
2832
29- // duration of the "animation"
33+ // Duration of Animationphase
3034private _duration = _actionParams call LINKFUNC(getDuration);
3135
32- // replace the main Item
33- private _typeNumber = getNumber (_cfgOrigin >> " ItemInfo" >> " type" );
34-
35- if (_typeNumber isEqualTo 0 ) then {
36-
37- // Switch-statement incase there will be more edge cases like CfgGlassess
38- _typeNumber = switch (true ) do {
39- // CfgGlasses items do not have a ItemInfo subclass and therefore, will return 0
40- case (isClass (configFile >> " CfgGlasses" >> _classOrigin )): { TYPE_GOGGLE };
41- case (getNumber (configFile >> " CfgVehicles" >> _classOrigin >> " isBackpack" ) isEqualTo 1 ): { TYPE_BACKPACK };
42- default { 0 };
43- };
44- };
4536
46- private _replaceCode = GVAR(replaceHashmap) get _typeNumber ;
37+ private _replaceCode = GVAR(replaceHashmap) get _typeOrigin ;
4738
48- if (isNil " _replaceCode" ) exitWith { ERROR_2(" typeNumber undefined: %1 - %2" ,_typeNumber ,_classOrigin ); };
4939
50- private _extendedInfo = createHashMap;
51- [QGVAR(itemChangedStart), [ _player , _classOrigin , _classTarget , _typeNumber , _extendedInfo ]] call CBA_fnc_localEvent ;
40+ // FAIL CONDITIONS
41+ private _isNotEqualTypeNumber = _typeOrigin isNotEqualTo _typeTarget ;
5242
53- // temp action disabled
43+ if (isNil " _replaceCode" ) exitWith { ERROR_2(" typeNumber undefined: %1 - %2" ,_typeOrigin ,_classOrigin ); };
44+ if (_isNotEqualTypeNumber && { _typeTarget in [TYPE_UNIFORM, TYPE_VEST, TYPE_BACKPACK] }) exitWith {
45+ ERROR_4(" Convertion of containers not supported: %1: %2 -> %3: %4" ,_classOrigin ,_typeOrigin ,_classTarget ,_typeTarget )
46+ };
47+ if (_isNotEqualTypeNumber && {
48+ switch (_typeTarget ) do {
49+ case TYPE_HEADGEAR: { " " isNotEqualTo headgear _player };
50+ case TYPE_GOGGLE: { " " isNotEqualTo goggles _player };
51+ case TYPE_HMD: { " " isNotEqualTo hmd _player };
52+ }
53+ }
54+ ) exitWith { [ [LLSTRING(slotOccupied), _typeTarget call LINKFUNC(getSlotName)], 2 ] call EFUNC(common,displayTextStructured); };
55+
56+ // REPLACE MECHANIC
57+ // Disables Wardrobe Action temporarily
5458GVAR(inProgress) = true ;
5559
56- [{
57- params [" _player" , " _classOrigin" , " _classTarget" , " _typeNumber" , " _replaceCode" , " _extendedInfo" ];
60+ // use hashmap instead of array to futureproofing - espl. regarding API Events - extended data can simply be added
61+ private _replaceData = createHashMapFromArray [
62+ [" player" , _player ],
63+ [" classOrigin" , _classOrigin ],
64+ [" classTarget" , _classTarget ],
65+ [" typeOrigin" , _typeOrigin ],
66+ [" typeTarget" , _typeTarget ]
67+ ];
68+
69+ private _extendedInfo = createHashMap;
70+ [QGVAR(itemChangedStart), [_replaceData , _extendedInfo ]] call CBA_fnc_localEvent ; // API
5871
59- [QGVAR(itemChangedBegin), [_player , _classOrigin , _classTarget , _typeNumber , _extendedInfo ]] call CBA_fnc_localEvent ;
72+ [{
73+ params [" _replaceData" , " _replaceCode" , " _extendedInfo" ];
6074
61- [_player , _classTarget , _typeNumber ] call _replaceCode ;
75+ [QGVAR(itemChangedBegin), [_replaceData , _extendedInfo ]] call CBA_fnc_localEvent ; // API
76+ _replaceData call _replaceCode ;
77+ [QGVAR(itemChangedEnd), [_replaceData , _extendedInfo ]] call CBA_fnc_localEvent ; // API
6278
63- [QGVAR(itemChangedEnd) , [_player , _classOrigin , _classTarget , _typeNumber , _extendedInfo ]] call CBA_fnc_localEvent ;
79+ } , [_replaceData , _replaceCode , _extendedInfo ], _duration ] call CBA_fnc_waitAndExecute ;
6480
65- }, [_player , _classOrigin , _classTarget , _typeNumber , _replaceCode , _extendedInfo ], _duration ] call CBA_fnc_waitAndExecute ;
6681
67- // handle components
82+ // HANDLE COMPONENTS
6883[_classOrigin , _classTarget ] call FUNC(compareComponents) params [" _missing" , " _surplus" ];
6984
7085// add surplus
@@ -89,11 +104,12 @@ GVAR(inProgress) = true;
89104 };
90105} forEach _missing ;
91106
92- // handle effects
107+
108+ // EFFECTS
93109// animation/gestures
94110[_player , _actionParams call LINKFUNC(getGesture)] call EFUNC(common,doGesture);
95111
96- // plays random sound at the beginning
112+ // Soundseffects
97113private _sound = _actionParams call LINKFUNC(getSound);
98114if (_sound isNotEqualTo " " ) then {
99115 [
@@ -103,7 +119,7 @@ if (_sound isNotEqualTo "") then {
103119 ] call CBA_fnc_waitAndExecute ;
104120};
105121
106- // notification
122+ // Notification
107123private _imgNotify = getText (_cfgTarget >> " picture" );
108124if ! (" .paa" in _imgNotify ) then {
109125 // some vanilla items dont have the .paa and cba notify will display the path as a string without the .paa
0 commit comments