mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Arsenal - Improve performance of loadout verification (#9316)
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
This commit is contained in:
parent
41c7b12acb
commit
6928adfc72
@ -70,7 +70,7 @@ GVAR(lastSortDirectionRight) = DESCENDING;
|
|||||||
if (!isNil QGVAR(currentLoadoutsTab) && {GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts}) then {
|
if (!isNil QGVAR(currentLoadoutsTab) && {GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts}) then {
|
||||||
private _curSelData = _contentPanelCtrl lnbData [lnbCurSelRow _contentPanelCtrl, 1];
|
private _curSelData = _contentPanelCtrl lnbData [lnbCurSelRow _contentPanelCtrl, 1];
|
||||||
|
|
||||||
([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"];
|
([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsList", "_unavailableItemsList"];
|
||||||
_extendedLoadout params ["_loadout"];
|
_extendedLoadout params ["_loadout"];
|
||||||
|
|
||||||
private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName];
|
private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName];
|
||||||
@ -81,10 +81,10 @@ GVAR(lastSortDirectionRight) = DESCENDING;
|
|||||||
_contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName];
|
_contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName];
|
||||||
|
|
||||||
// Set color of row, depending if items are unavailable/missing
|
// Set color of row, depending if items are unavailable/missing
|
||||||
if (_nullItemsAmount > 0) then {
|
if (_nullItemsList isNotEqualTo []) then {
|
||||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]];
|
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]];
|
||||||
} else {
|
} else {
|
||||||
if (_unavailableItemsAmount > 0) then {
|
if (_unavailableItemsList isNotEqualTo []) then {
|
||||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]];
|
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -50,10 +50,10 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
|||||||
_loadoutCachedInfo = [_loadoutData] call FUNC(verifyLoadout);
|
_loadoutCachedInfo = [_loadoutData] call FUNC(verifyLoadout);
|
||||||
_contentPanelCtrl setVariable [_loadoutNameAndTab, _loadoutCachedInfo];
|
_contentPanelCtrl setVariable [_loadoutNameAndTab, _loadoutCachedInfo];
|
||||||
|
|
||||||
_loadoutCachedInfo params ["", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
|
_loadoutCachedInfo params ["", "_nullItemsList", "_unavailableItemsList"];
|
||||||
|
|
||||||
// Log missing / nil items to RPT (only once per arsenal session)
|
// Log missing / nil items to RPT (only once per arsenal session)
|
||||||
if (GVAR(EnableRPTLog) && {(_nullItemsAmount > 0) || {_unavailableItemsAmount > 0}}) then {
|
if (GVAR(EnableRPTLog) && {(_nullItemsList isNotEqualTo []) || {_unavailableItemsList isNotEqualTo []}}) then {
|
||||||
private _printComponent = "ACE_Arsenal - Loadout:";
|
private _printComponent = "ACE_Arsenal - Loadout:";
|
||||||
private _printNullItemsList = ["Missing items:", str _nullItemsList] joinString " ";
|
private _printNullItemsList = ["Missing items:", str _nullItemsList] joinString " ";
|
||||||
private _printUnavailableItemsList = ["Unavailable items:", str _unavailableItemsList] joinString " ";
|
private _printUnavailableItemsList = ["Unavailable items:", str _unavailableItemsList] joinString " ";
|
||||||
@ -69,7 +69,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
|||||||
_contentPanelCtrl lnbSetColumnsPos [0, 0.05, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
_contentPanelCtrl lnbSetColumnsPos [0, 0.05, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
||||||
};
|
};
|
||||||
|
|
||||||
_loadoutCachedInfo params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"];
|
_loadoutCachedInfo params ["_extendedLoadout", "_nullItemsList", "_unavailableItemsList"];
|
||||||
_extendedLoadout params ["_loadout"];
|
_extendedLoadout params ["_loadout"];
|
||||||
|
|
||||||
_newRow = _contentPanelCtrl lnbAddRow ["", _loadoutName];
|
_newRow = _contentPanelCtrl lnbAddRow ["", _loadoutName];
|
||||||
@ -77,10 +77,10 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
|||||||
ADD_LOADOUTS_LIST_PICTURES
|
ADD_LOADOUTS_LIST_PICTURES
|
||||||
|
|
||||||
// Change color on loadout lines that have items that aren't available or don't exist
|
// Change color on loadout lines that have items that aren't available or don't exist
|
||||||
if (_nullItemsAmount > 0) then {
|
if (_nullItemsList isNotEqualTo []) then {
|
||||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]]; // Red
|
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]]; // Red
|
||||||
} else {
|
} else {
|
||||||
if (_unavailableItemsAmount > 0) then {
|
if (_unavailableItemsList isNotEqualTo []) then {
|
||||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]]; // Gray
|
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]]; // Gray
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -107,7 +107,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
|||||||
|
|
||||||
[QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent;
|
[QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent;
|
||||||
} else {
|
} else {
|
||||||
([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"];
|
([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsList", "_unavailableItemsList"];
|
||||||
_extendedLoadout params ["_loadout"];
|
_extendedLoadout params ["_loadout"];
|
||||||
|
|
||||||
_contentPanelCtrl lnbSetColumnsPos [0, 0.15, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
_contentPanelCtrl lnbSetColumnsPos [0, 0.15, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
||||||
@ -118,10 +118,10 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
|||||||
_contentPanelCtrl lnbSetData [[_newRow, 1], _loadoutVar];
|
_contentPanelCtrl lnbSetData [[_newRow, 1], _loadoutVar];
|
||||||
|
|
||||||
// Change color on loadout lines that have items that aren't available or don't exist
|
// Change color on loadout lines that have items that aren't available or don't exist
|
||||||
if (_nullItemsAmount > 0) then {
|
if (_nullItemsList isNotEqualTo []) then {
|
||||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]]; // Red
|
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]]; // Red
|
||||||
} else {
|
} else {
|
||||||
if (_unavailableItemsAmount > 0) then {
|
if (_unavailableItemsList isNotEqualTo []) then {
|
||||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]]; // Gray
|
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]]; // Gray
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -23,275 +23,51 @@ if (count _loadout == 2) then {
|
|||||||
_loadout = _loadout select 0;
|
_loadout = _loadout select 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
private _cfgWeapons = configFile >> "CfgWeapons";
|
|
||||||
private _cfgMagazines = configFile >> "CfgMagazines";
|
|
||||||
private _cfgVehicles = configFile >> "CfgVehicles";
|
|
||||||
private _cfgGlasses = configFile >> "CfgGlasses";
|
|
||||||
|
|
||||||
private _weapons = GVAR(virtualItems) get IDX_VIRT_WEAPONS;
|
|
||||||
private _attachments = GVAR(virtualItems) get IDX_VIRT_ATTACHMENTS;
|
|
||||||
|
|
||||||
private _name = "";
|
private _name = "";
|
||||||
private _nullItemsAmount = 0;
|
private _itemArray = [];
|
||||||
private _unavailableItemsAmount = 0;
|
|
||||||
private _nullItemsList = [];
|
private _nullItemsList = [];
|
||||||
private _unavailableItemsList = [];
|
private _unavailableItemsList = [];
|
||||||
|
|
||||||
// Search for all items and turn them into config case; Don't touch other value types
|
// Search for all items and check their availability
|
||||||
private _fnc_toConfigCase = {
|
private _fnc_filterLoadout = {
|
||||||
_this apply {
|
_this apply {
|
||||||
if (_x isEqualType "") then {
|
if (_x isEqualType "" && {_x != ""}) then {
|
||||||
if (_x != "") then {
|
|
||||||
_name = _x call EFUNC(common,getConfigName);
|
_name = _x call EFUNC(common,getConfigName);
|
||||||
|
|
||||||
// If item doesn't exist in config, "" is returned
|
// If item doesn't exist in config, "" is returned
|
||||||
// Just return unaltered item name in that case, so it can be documented as being unavailable
|
if (_name == "") then {
|
||||||
[_x, _name] select (_name != "");
|
_nullItemsList pushBack _x;
|
||||||
} else {
|
} else {
|
||||||
_x
|
// Check if item or its base weapon exist in the arsenal
|
||||||
|
if !(_name in GVAR(virtualItemsFlat)) then {
|
||||||
|
_name = _name call FUNC(baseWeapon);
|
||||||
|
if !(_name in GVAR(virtualItemsFlat)) then {
|
||||||
|
_unavailableItemsList pushBack _name;
|
||||||
|
_name = "";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_name
|
||||||
} else {
|
} else {
|
||||||
// Handle arrays
|
// Handle arrays
|
||||||
if (_x isEqualType []) then {
|
if (_x isEqualType []) then {
|
||||||
_x call _fnc_toConfigCase
|
_itemArray = _x call _fnc_filterLoadout;
|
||||||
|
// If "" is given as a container, an error is thrown, therefore, filter out all unavailable/null containers
|
||||||
|
if (count _itemArray == 2 && {(_itemArray select 0) isEqualTo ""} && {(_itemArray select 1) isEqualType []}) then {
|
||||||
|
_itemArray = [];
|
||||||
|
};
|
||||||
|
_itemArray
|
||||||
} else {
|
} else {
|
||||||
// All other types
|
// All other types and empty strings
|
||||||
_x
|
_x
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Convert loadout to config case
|
// Convert loadout to config case and replace null/unavailable items
|
||||||
// Loadout might come from a different modpack, which might have different config naming
|
// Loadout might come from a different modpack, which might have different config naming
|
||||||
_loadout = _loadout call _fnc_toConfigCase;
|
_loadout = _loadout call _fnc_filterLoadout;
|
||||||
|
|
||||||
// Check a weapon, with its attachments and magazines, if items are available
|
[[_loadout, _extendedInfo], _nullItemsList arrayIntersect _nullItemsList, _unavailableItemsList arrayIntersect _unavailableItemsList]
|
||||||
private _fnc_weaponCheck = {
|
|
||||||
params ["_weaponArray", ["_index", -1]];
|
|
||||||
|
|
||||||
{
|
|
||||||
// Weapons and attachments
|
|
||||||
if (_x isEqualType "") then {
|
|
||||||
if (_x != "") then {
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgWeapons >> _x)) then {
|
|
||||||
// Get base weapon
|
|
||||||
_x = _x call FUNC(baseWeapon);
|
|
||||||
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(
|
|
||||||
// Weapon class name is at the very start of the array
|
|
||||||
if (_forEachIndex == 0) then {
|
|
||||||
// If the type of weapon is known, only look through that array
|
|
||||||
if (_index != -1) then {
|
|
||||||
// If binos, choose differently
|
|
||||||
if (_index == IDX_LOADOUT_BINO) then {
|
|
||||||
_x in (GVAR(virtualItems) get IDX_VIRT_BINO)
|
|
||||||
} else {
|
|
||||||
_x in (_weapons get _index)
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_x in (_weapons get IDX_VIRT_PRIMARY_WEAPONS) ||
|
|
||||||
{_x in (_weapons get IDX_VIRT_SECONDARY_WEAPONS)} ||
|
|
||||||
{_x in (_weapons get IDX_VIRT_HANDGUN_WEAPONS)} ||
|
|
||||||
{_x in (GVAR(virtualItems) get IDX_VIRT_BINO)}
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_x in (_attachments get IDX_VIRT_OPTICS_ATTACHMENTS) ||
|
|
||||||
{_x in (_attachments get IDX_VIRT_FLASHLIGHT_ATTACHMENTS)} ||
|
|
||||||
{_x in (_attachments get IDX_VIRT_MUZZLE_ATTACHMENTS)} ||
|
|
||||||
{_x in (_attachments get IDX_VIRT_BIPOD_ATTACHMENTS)}
|
|
||||||
}
|
|
||||||
) then {
|
|
||||||
_unavailableItemsList pushBackUnique _x;
|
|
||||||
_weaponArray set [_forEachIndex, ""];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _x;
|
|
||||||
_weaponArray set [_forEachIndex, ""];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
// Magazines
|
|
||||||
if (_x isNotEqualTo []) then {
|
|
||||||
_x params ["_magazine"];
|
|
||||||
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgMagazines >> _magazine)) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(_magazine in (GVAR(virtualItems) get IDX_VIRT_ITEMS_ALL)) then {
|
|
||||||
_unavailableItemsList pushBackUnique _magazine;
|
|
||||||
_weaponArray set [_forEachIndex, []];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _magazine;
|
|
||||||
_weaponArray set [_forEachIndex, []];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
} forEach _weaponArray;
|
|
||||||
};
|
|
||||||
|
|
||||||
private _item = "";
|
|
||||||
|
|
||||||
// Go through entire loadout to check if items are available in current arsenal
|
|
||||||
for "_dataIndex" from IDX_LOADOUT_PRIMARY_WEAPON to IDX_LOADOUT_ASSIGNEDITEMS do {
|
|
||||||
switch (_dataIndex) do {
|
|
||||||
// Primary weapon, Secondary weapon, Handgun weapon, Binoculars
|
|
||||||
case IDX_LOADOUT_PRIMARY_WEAPON;
|
|
||||||
case IDX_LOADOUT_SECONDARY_WEAPON;
|
|
||||||
case IDX_LOADOUT_HANDGUN_WEAPON;
|
|
||||||
case IDX_LOADOUT_BINO: {
|
|
||||||
[_loadout select _dataIndex, _dataIndex] call _fnc_weaponCheck;
|
|
||||||
};
|
|
||||||
// Uniform, vest, backpack
|
|
||||||
case IDX_LOADOUT_UNIFORM;
|
|
||||||
case IDX_LOADOUT_VEST;
|
|
||||||
case IDX_LOADOUT_BACKPACK: {
|
|
||||||
(_loadout select _dataIndex) params [["_item", ""], ["_containerItems", []]];
|
|
||||||
|
|
||||||
if (_item != "") then {
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgVehicles >> _item) || {isClass (_cfgWeapons >> _item)}) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(_item in (GVAR(virtualItems) get (_dataIndex + 1))) then {
|
|
||||||
_unavailableItemsList pushBackUnique _item;
|
|
||||||
_loadout set [_dataIndex, []];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
} else {
|
|
||||||
{
|
|
||||||
switch (true) do {
|
|
||||||
// Magazines have each 3 entries: Name, number of magazines and ammo count
|
|
||||||
case (_x isEqualTypeArray ["", 0, 0]): {
|
|
||||||
_x params ["_item"];
|
|
||||||
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgMagazines >> _item)) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(
|
|
||||||
_item in (GVAR(virtualItems) get IDX_VIRT_ITEMS_ALL) ||
|
|
||||||
{_item in (GVAR(virtualItems) get IDX_VIRT_GRENADES)} ||
|
|
||||||
{_item in (GVAR(virtualItems) get IDX_VIRT_EXPLOSIVES)} ||
|
|
||||||
{_item in (GVAR(virtualItems) get IDX_VIRT_MISC_ITEMS)}
|
|
||||||
) then {
|
|
||||||
_unavailableItemsList pushBackUnique _item;
|
|
||||||
((_loadout select _dataIndex) select 1) set [_forEachIndex, []];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _item;
|
|
||||||
((_loadout select _dataIndex) select 1) set [_forEachIndex, []];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// Weapons have 2 entries: Weapon info array and amount
|
|
||||||
case (_x isEqualTypeArray [[], 0]): {
|
|
||||||
[_x select 0] call _fnc_weaponCheck;
|
|
||||||
};
|
|
||||||
// Misc. items have 2 entries: Name and amount, containers have 2 entries: Name and isBackpack
|
|
||||||
default {
|
|
||||||
_x params ["_item"];
|
|
||||||
|
|
||||||
// Check if item exists
|
|
||||||
if (
|
|
||||||
isClass (_cfgWeapons >> _item) ||
|
|
||||||
{isClass (_cfgMagazines >> _item)} ||
|
|
||||||
{isClass (_cfgGlasses >> _item)} ||
|
|
||||||
{isClass (_cfgVehicles >> _item)}
|
|
||||||
) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(_item in GVAR(virtualItemsFlat)) then {
|
|
||||||
_unavailableItemsList pushBackUnique _item;
|
|
||||||
((_loadout select _dataIndex) select 1) set [_forEachIndex, []];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _item;
|
|
||||||
((_loadout select _dataIndex) select 1) set [_forEachIndex, []];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
} forEach _containerItems;
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _item;
|
|
||||||
_loadout set [_dataIndex, []];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// Headgear
|
|
||||||
case IDX_LOADOUT_HEADGEAR: {
|
|
||||||
_item = _loadout select _dataIndex;
|
|
||||||
|
|
||||||
if (_item != "") then {
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgWeapons >> _item)) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(_item in (GVAR(virtualItems) get IDX_VIRT_HEADGEAR)) then {
|
|
||||||
_unavailableItemsList pushBackUnique _item;
|
|
||||||
_loadout set [_dataIndex, ""];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _item;
|
|
||||||
_loadout set [_dataIndex, ""];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// Facewear
|
|
||||||
case IDX_LOADOUT_GOGGLES: {
|
|
||||||
_item = _loadout select _dataIndex;
|
|
||||||
|
|
||||||
if (_item != "") then {
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgGlasses >> _item)) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(_item in (GVAR(virtualItems) get IDX_VIRT_GOGGLES)) then {
|
|
||||||
_unavailableItemsList pushBackUnique _item;
|
|
||||||
_loadout set [_dataIndex, ""];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _item;
|
|
||||||
_loadout set [_dataIndex, ""];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// Assigned items: Map, Compass, Watch, GPS / UAV Terminal, Radio, NVGs
|
|
||||||
case IDX_LOADOUT_ASSIGNEDITEMS: {
|
|
||||||
private _assignedItems = _loadout select _dataIndex;
|
|
||||||
|
|
||||||
for "_subIndex" from 0 to 5 do {
|
|
||||||
_item = _assignedItems select _subIndex;
|
|
||||||
|
|
||||||
if (_item != "") then {
|
|
||||||
// Check if item exists
|
|
||||||
if (isClass (_cfgWeapons >> _item)) then {
|
|
||||||
// Check if item is available in arsenal
|
|
||||||
if !(_item in (GVAR(virtualItems) get (IDX_VIRT_NVG + ([2, 6, 4, 3, 5, 0] select _subIndex)))) then {
|
|
||||||
_unavailableItemsList pushBackUnique _item;
|
|
||||||
_assignedItems set [_subIndex, ""];
|
|
||||||
INC(_unavailableItemsAmount);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
_nullItemsList pushBackUnique _item;
|
|
||||||
_assignedItems set [_subIndex, ""];
|
|
||||||
INC(_nullItemsAmount);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
[[_loadout, _extendedInfo], _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]
|
|
||||||
|
Loading…
Reference in New Issue
Block a user