diff --git a/addons/dogtags/CfgEventHandlers.hpp b/addons/dogtags/CfgEventHandlers.hpp index 2a3f71f852d..94a12962d0a 100644 --- a/addons/dogtags/CfgEventHandlers.hpp +++ b/addons/dogtags/CfgEventHandlers.hpp @@ -13,3 +13,9 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); }; }; + +class Extended_DisplayLoad_EventHandlers { + class RscDisplayInventory { + ADDON = QUOTE(_this call FUNC(inventoryDisplayLoad)); + }; +}; diff --git a/addons/dogtags/XEH_PREP.hpp b/addons/dogtags/XEH_PREP.hpp index a34a04a982a..37844cdba0c 100644 --- a/addons/dogtags/XEH_PREP.hpp +++ b/addons/dogtags/XEH_PREP.hpp @@ -7,6 +7,7 @@ PREP(canTakeDogtag); PREP(checkDogtag); PREP(getDogtagData); PREP(getDogtagItem); +PREP(inventoryDisplayLoad); PREP(showDogtag); PREP(ssn); PREP(takeDogtag); diff --git a/addons/dogtags/functions/fnc_inventoryDisplayLoad.sqf b/addons/dogtags/functions/fnc_inventoryDisplayLoad.sqf new file mode 100644 index 00000000000..a497fe48857 --- /dev/null +++ b/addons/dogtags/functions/fnc_inventoryDisplayLoad.sqf @@ -0,0 +1,51 @@ +#include "..\script_component.hpp" +/* + * Author: johnb43 + * Executed every time an inventory display is opened. + * + * Arguments: + * 0: Inventory display + * + * Return Value: + * None + * + * Example: + * [DISPLAY] call ace_dogtags_fnc_inventoryDisplayLoad + * + * Public: No + */ + +disableSerialization; + +params ["_display"]; + +// Monitor changes that can happen and force our update +private _dummyControl = _display ctrlCreate ["RscMapControl", -1]; + +_dummyControl ctrlSetPosition [0, 0, 0, 0]; +_dummyControl ctrlCommit 0; + +_dummyControl ctrlAddEventHandler ["Draw", { + private _display = ctrlParent (_this select 0); + private _cfgWeapons = configFile >> "CfgWeapons"; + + { + private _itemList = _display displayCtrl _x; + + // If control isn't shown, skip + if (!ctrlShown _itemList) then { + continue; + }; + + for "_i" from (lbSize _itemList) to 0 step -1 do { + private _item = _itemList lbData _i; + + if (_item isKindOf ["ACE_dogtag", _cfgWeapons]) then { + private _dogtagData = GVAR(dogtagsData) getOrDefault [_item, []]; + + // If data doesn't exist, put name as "unknown" + _itemList lbSetText [_i, [LLSTRING(itemName), ": ", _dogtagData param [0, LELSTRING(common,unknown)]] joinString ""]; + }; + }; + } forEach [IDC_ITEMLIST_GROUND, IDC_ITEMLIST_SOLDIER, IDC_ITEMLIST_UNIFORM, IDC_ITEMLIST_VEST, IDC_ITEMLIST_BACKPACK]; +}]; diff --git a/addons/dogtags/script_component.hpp b/addons/dogtags/script_component.hpp index 67e70b9dd26..e4a57c06116 100644 --- a/addons/dogtags/script_component.hpp +++ b/addons/dogtags/script_component.hpp @@ -26,3 +26,9 @@ "a3\sounds_f\characters\ingame\AinvPpneMstpSlayWpstDnon_medic.wss",\ "a3\sounds_f\characters\ingame\AinvPpneMstpSlayWrflDnon_medic.wss"\ ] + +#define IDC_ITEMLIST_GROUND 632 +#define IDC_ITEMLIST_SOLDIER 640 +#define IDC_ITEMLIST_UNIFORM 633 +#define IDC_ITEMLIST_VEST 638 +#define IDC_ITEMLIST_BACKPACK 619