Files
DayZ-Epoch/SQF/dayz_code/actions/AdvancedTrading/functions/zupa_fnc_removeWeaponsAndMagazinesCargo.sqf
icomrade bdf0870f3e Fix keys not deleting
Should work fine, but more validation is always good, I tested selling
from all inventories with DZE_SaleRequiresKey true and false.
2016-07-29 00:55:20 -04:00

133 lines
3.7 KiB
Plaintext

/* ----------------------------------------------------------------------------
Examples:
_result = [_backpack, ["SmokeShell","M16_AMMO"],["M16","M16","M240"],["backpack1","backpack2"]] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
_result == [[1,0,0,1,1,1,0],[1,0,0,1],[1,0]]; // 1 = success, 0 = fail ->( item was not in cargo)
Author:
Zupa 2014-09-30
---------------------------------------------------------------------------- */
private ["_bags","_vehInfo","_forEachIndex","_counter","_normalBagss","_inCargo","_unit","_items","_weaps","_normalItems","_normalWeaps","_normalBags","_unit_allItems","_unit_allItems_types","_unit_allItems_count","_unit_allWeaps","_unit_allWeaps_types","_unit_allWeaps_count","_unit_allBags","_unit_allBags_types","_unit_allBags_count","_returnVar","_returnMag","_returnWeap","_returnBag"];
_unit = _this select 0;
_items = _this select 1;
_weaps = _this select 2;
_bags = [];
_vehInfo = [];
if(count _this > 3) then {
if (count (_this select 3) > 0) then {
if (typeName ((_this select 3) select 0) == "STRING") then {
_bags = _this select 3;
} else {
_vehInfo = _this select 3;
};
};
if (count _this == 5) then {
_vehInfo = _this select 4;
};
};
_normalItems = [];
_normalWeaps = [];
_normalBags = [];
_unit_allItems = getMagazineCargo _unit; // [[type1, typeN, ...],[count1, countN, ...]]
_unit_allItems_types = _unit_allItems select 0;
_unit_allItems_count = _unit_allItems select 1;
_unit_allWeaps = getWeaponCargo _unit;
_unit_allWeaps_types = _unit_allWeaps select 0;
_unit_allWeaps_count = _unit_allWeaps select 1;
_unit_allBags = getBackpackCargo _unit;
_unit_allBags_types = _unit_allBags select 0;
_unit_allBags_count = _unit_allBags select 1;
clearMagazineCargoGlobal _unit;
clearWeaponCargoGlobal _unit;
if( count _bags > 0 )then{
clearBackpackCargoGlobal _unit;
};
{
_counter = 0 ;
while{ _counter < ( _unit_allItems_count select _forEachIndex)}do{
_normalItems set [count(_normalItems),_x];
_counter = _counter + 1;
};
}forEach _unit_allItems_types;
{
_counter = 0 ;
while{ _counter < ( _unit_allWeaps_count select _forEachIndex)}do{
_normalWeaps set [count(_normalWeaps),_x];
_counter = _counter + 1;
};
}forEach _unit_allWeaps_types;
{
_counter = 0 ;
while{ _counter < ( _unit_allBags_count select _forEachIndex)}do{
_normalBagss set [count(_normalBags),_x];
_counter = _counter + 1;
};
}forEach _unit_allBags_types;
_returnVar = [];
_returnMag = [];
_returnWeap = [];
_returnBag = [];
{
_inCargo = _normalItems find _x;
if(_inCargo > -1)then{
_normalItems set [_inCargo, "soldItem"];
_returnMag set [count(_returnMag),1];
}else{
_returnMag set [count(_returnMag),0];
};
}count _items;
_normalItems = _normalItems - ["soldItem"];
{
_unit addMagazineCargoGlobal [_x, 1];
}count _normalItems;
{
_inCargo = _normalBags find _x;
if(_inCargo > -1)then{
_normalBags set [_inCargo, "soldItem"];
_returnBag set [count(_returnBag),1];
}else{
_returnBag set [count(_returnBag),0];
};
}count _bags;
{
_unit addBackpackCargoGlobal [_x, 1];
}count _normalBags;
{
_inCargo = _normalWeaps find _x;
if(_inCargo > -1)then{
_normalWeaps set [_inCargo, "soldItem"];
_returnWeap set [count(_returnWeap),1];
}else{
_returnWeap set [count(_returnWeap),0];
};
}count _weaps;
_normalWeaps = _normalWeaps - ["soldItem"];
{
_unit addWeaponCargoGlobal [_x, 1];
}count _normalWeaps;
_normalWeaps = _normalWeaps - ["soldItem"];
if (count _vehInfo > 0) then {
_sell = [_vehInfo, ((_vehInfo select 0) select 4), _unit] call DZE_deleteTradedVehicle;
if (_sell > 0) then {
_returnVar set [3,[1]];
};
};
_returnVar set [0,_returnMag];
_returnVar set [1,_returnWeap];
_returnVar set [2,_returnBag];
_returnVar;