Forbid buying >1 of any tool into gear

Previous duplicate check only checked player's current tools and the
buying array types for >1 of the same tool (not buying array amounts).

Also added prevention of binocular slot overflow.
This commit is contained in:
ebaydayz
2016-08-03 18:56:42 -04:00
parent de9d3feb0f
commit 5a55bcb9b0
3 changed files with 37 additions and 19 deletions

View File

@@ -2,7 +2,7 @@ private ["_selection","_return","_toBuyWeaps","_toBuyTotalMags","_toBuyBags","_t
,"_primaryToBuy","_p","_b","_check0","_check1","_check2","_check3","_check4","_allowedMags"
,"_allowedPrimary","_allowedTools","_allowedSidearm","_allowedBackpacks","_parentClasses","_toolClasses"
,"_duplicate","_quantity","_tool","_totalBagSlots","_pistolMags","_regularMags","_toBuyPistolMags"
,"_toBuyRegularMags","_type","_freeSpace","_backpack","_totalSpace"
,"_toBuyRegularMags","_type","_freeSpace","_backpack","_totalSpace","_toolAmounts","_allowedBinocular"
];
_selection = Z_SellingFrom;
_return = false;
@@ -16,6 +16,7 @@ _sidearmToBuy = _this select 4;
_primaryToBuy = _this select 5;
_vehiclesToBuy = _this select 6;
_toolClasses = _this select 7;
_toolAmounts = _this select 8;
_allowedMags = 0;
_allowedWeapons = 0;
_allowedBackpacks = 0;
@@ -40,43 +41,51 @@ if (_selection == 2) then { //gear
_p = primaryWeapon player;
_allowedPrimary = if (!isNil "_p" && _p != "") then {0} else {1};
if (DZE_TwoPrimaries == 2 && dayz_onBack == "") then { _allowedPrimary = _allowedPrimary + 1; };
// (secondaryWeapon player) returns launcher, doesn't work for pistol
_allowedSidearm = 1;
{
if (getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 2) exitWith { // 2 = WeaponSlotHandGun (occupies pistol slot)
_allowedSidearm = 0;
};
} count (weapons player);
_b = unitBackpack player;
_allowedBackpacks = if (isNull _b) then {1} else {0};
_allowedTools = 14; // 12 toolbelt + 1 Binocular + 1 NVG
_allowedSidearm = 1;
_allowedBinocular = 2;
_duplicate = false;
{
_parentClasses = [(configFile >> "CfgWeapons" >> _x),true] call BIS_fnc_returnParents;
if ('ItemCore' in _parentClasses || 'Binocular' in _parentClasses) then {
if ("ItemCore" in _parentClasses || "Binocular" in _parentClasses) then {
_allowedTools = _allowedTools - 1;
if (_x in _toolClasses) then {_duplicate = true;}; // Forbid purchasing duplicate tools into gear
}
};
_type = getNumber (configFile >> "CfgWeapons" >> _x >> "type");
if (_type == 2) then { _allowedSidearm = 0; }; // 2 = WeaponSlotHandGun (occupies pistol slot) // (secondaryWeapon player) returns launcher, doesn't work for pistol
if (_type == 4096) then { _allowedBinocular = _allowedBinocular - 1; }; // 4096 = WeaponSlotBinocular
} count (weapons player);
{
_tool = _x;
_quantity = {(_tool == _x)} count _toolClasses;
if (_quantity > 1) exitWith {_duplicate = true;}; // Forbid purchasing multiples of the same tool into gear
if (_quantity > 1) exitWith {_duplicate = true;}; // Forbid buying multiples of same tool into gear. Ok to exit since duplicate will cancel buy
if (getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 4096) then {
_allowedBinocular = _allowedBinocular - (_toolAmounts select _forEachIndex);
};
} forEach _toolClasses;
{
if (_x > 1) exitWith {_duplicate = true;};
} count _toolAmounts;
_check1 = false;
_check2 = false;
_check3 = false;
_check4 = false;
if (_allowedPrimary >= _primaryToBuy && _allowedSidearm >= _sidearmToBuy && _allowedTools >= _toolsToBuy && !_duplicate) then {
_check1 = true;
} else {
systemChat format[localize "STR_EPOCH_TRADE_GEAR_FULL", _allowedPrimary, _allowedSidearm , _allowedTools];
if (_duplicate) then { systemChat localize "STR_EPOCH_TRADE_DUPLICATE_TOOL"; };
if (_duplicate) then {
systemChat localize "STR_EPOCH_TRADE_DUPLICATE_TOOL";
} else {
systemChat format[localize "STR_EPOCH_TRADE_GEAR_FULL", _allowedPrimary, _allowedSidearm , _allowedTools];
};
};
if (_allowedPistolMags >= _toBuyPistolMags && _allowedRegularMags >= _toBuyRegularMags) then {
_check2 = true;
@@ -88,8 +97,12 @@ if (_selection == 2) then { //gear
} else {
systemChat localize "STR_EPOCH_TRADE_HAVE_BACKPACK";
};
if (_check1 && _check2 && _check3) then { _return = true; };
if (_allowedBinocular > -1) then {
_check4 = true;
} else {
systemChat localize "STR_EPOCH_TRADE_BINOCULARS_FULL";
};
if (_check1 && _check2 && _check3 && _check4) then { _return = true; };
};
if (_selection == 1) then { //vehicle