mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 04:02:37 +03:00
236 lines
8.5 KiB
Plaintext
236 lines
8.5 KiB
Plaintext
private ["_sellArray","_sellVehicle","_outcome","_vehCheckArray","_vehArray","_weaponsArray","_itemsArray","_bpArray","_bpCheckArray","_weaponsCheckArray","_itemsCheckArray","_VehKey","_wA","_mA","_money","_itemData","_bag","_itemsToLog","_tCost","_tSold","_wealth","_backpackName","_vehName"];
|
|
|
|
if (count Z_SellArray < 1) exitWith { systemChat localize "STR_EPOCH_TRADE_SELL_NO_ITEMS"; };
|
|
if (Z_SellingFrom == 1 && (isNull DZE_myVehicle or !local DZE_myVehicle)) exitWith { systemChat localize "STR_EPOCH_PLAYER_245"; };
|
|
|
|
closeDialog 2;
|
|
_sellArray = Z_SellArray;
|
|
Z_SellArray = [];
|
|
_outcome = [];
|
|
_weaponsArray = [];
|
|
_itemsArray = [];
|
|
_bpArray = [];
|
|
_bpCheckArray = [];
|
|
_vehArray = [];
|
|
_vehCheckArray = [];
|
|
_weaponsCheckArray = [];
|
|
_itemsCheckArray = [];
|
|
_itemsToLog = [[],[],[],"sell"];
|
|
|
|
_sellVehicle = {
|
|
private ["_damage","_tireDmg","_tires","_okToSell","_returnInfo","_hitpoints","_objectID","_objectUID","_objectCharacterId","_notSetup","_vehicle","_sellType"];
|
|
_vehicle = _this select 0;
|
|
_sellType = _this select 1;
|
|
_returnInfo = [];
|
|
if (DZE_myVehicle == _vehicle) then {
|
|
_okToSell = true;
|
|
_tires = 0;
|
|
_tireDmg = 0;
|
|
_damage = 0;
|
|
if (!(_sellType in ["trade_any_boat", "trade_any_boat_old"])) then {
|
|
_hitpoints = DZE_myVehicle call vehicle_getHitpoints;
|
|
{
|
|
if (["Wheel",_x,false] call fnc_inString) then {
|
|
_damage = ([DZE_myVehicle,_x] call object_getHit) select 0;
|
|
_tireDmg = _tireDmg + _damage;
|
|
_tires = _tires + 1;
|
|
};
|
|
} forEach _hitpoints;
|
|
if (_tireDmg > 0 && _tires > 0) then {
|
|
if ((_tireDmg / _tires) > 0.75) then {
|
|
_okToSell = false;
|
|
};
|
|
};
|
|
};
|
|
_objectID = DZE_myVehicle getVariable ["ObjectID","0"];
|
|
_objectUID = DZE_myVehicle getVariable ["ObjectUID","0"];
|
|
_objectCharacterId = DZE_myVehicle getVariable ["CharacterID","0"];
|
|
_notSetup = (_objectID == "0" && _objectUID == "0");
|
|
|
|
if (local DZE_myVehicle && !isNull DZE_myVehicle && alive DZE_myVehicle && !_notSetup) then {
|
|
if (_okToSell) then {
|
|
_returnInfo = [_objectCharacterId, DZE_myVehicle, _objectID, _objectUID, _sellType];
|
|
} else {
|
|
systemChat format[localize "str_epoch_player_182",typeOf DZE_myVehicle];
|
|
_returnInfo = [];
|
|
};
|
|
} else {
|
|
systemChat localize "str_epoch_player_245";
|
|
_returnInfo = [];
|
|
};
|
|
};
|
|
_returnInfo;
|
|
};
|
|
|
|
{
|
|
private ["_type","_name"];
|
|
_type = _x select 1;
|
|
_name = _x select 0;
|
|
|
|
call {
|
|
if (_type == "trade_items") exitwith {
|
|
_itemsArray set [count(_itemsArray),_name];
|
|
_itemsCheckArray set [count(_itemsCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
if (_type == "trade_weapons") exitwith {
|
|
_weaponsArray set [count(_weaponsArray),_name];
|
|
_weaponsCheckArray set [count(_weaponsCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
if (_type == "trade_backpacks") exitwith {
|
|
_bpArray set [count(_bpArray),_name];
|
|
_bpCheckArray set [count(_bpCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
if (_type in DZE_tradeVehicle) exitwith {
|
|
if (local DZE_myVehicle) then {
|
|
_VehKey = [DZE_myVehicle, _type] call _sellVehicle;
|
|
if (count _VehKey > 0) then {
|
|
_vehArray set [count(_vehArray),_VehKey];
|
|
_vehCheckArray set [count(_vehCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
} else {
|
|
systemChat localize "STR_EPOCH_PLAYER_245";
|
|
};
|
|
};
|
|
};
|
|
} forEach _sellArray;
|
|
|
|
_tSold = _itemsArray + _weaponsArray + _bpArray + _vehArray;
|
|
|
|
if (Z_SellingFrom == 0) then {
|
|
_outcome = [unitBackpack player,_itemsArray,_weaponsArray, _vehArray] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
|
|
_backpackName = getText(configFile >> "CfgVehicles" >> typeOf (unitBackpack player) >> "displayname");
|
|
systemChat format[localize "STR_EPOCH_TRADE_SELL_IN_BACKPACK",count _tSold,_backpackName];
|
|
};
|
|
if (Z_SellingFrom == 1) then {
|
|
_outcome = [DZE_myVehicle,_itemsArray,_weaponsArray,_vehArray] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
|
|
_vehName = getText(configFile >> "CfgVehicles" >> typeOf DZE_myVehicle >> "displayname");
|
|
systemChat format[localize "STR_EPOCH_TRADE_SELL_IN_VEHICLE",count _tSold,_vehName];
|
|
};
|
|
|
|
_itemsToLog set [0,(_itemsArray + _weaponsArray + _bpArray + [typeOf DZE_myVehicle])];
|
|
|
|
//gear
|
|
if (Z_SellingFrom == 2) then {
|
|
private ["_localResult", "_vehTraded","_bagTraded","_name","_type"];
|
|
_wA = [];
|
|
_mA = [];
|
|
_vehTraded = false;
|
|
_bagTraded = false;
|
|
|
|
{
|
|
if ((_x select 1) in DZE_tradeVehicle) then {
|
|
_localResult = [_vehArray, (_x select 1)] call DZE_deleteTradedVehicle;
|
|
if (_localResult == 1) then {_vehTraded = true;};
|
|
} else {
|
|
if (_x select 1 == "trade_backpacks") then {
|
|
//BIS_fnc_invRemove doesn't handle backpacks
|
|
_bag = unitBackpack player;
|
|
removeBackpack player;
|
|
_localResult = if (_bag != (unitBackpack player)) then {1} else {0};
|
|
if (_localResult == 1) then {_bagTraded = true;};
|
|
} else {
|
|
_name = _x select 0;
|
|
_type = _x select 1;
|
|
if (_type == "trade_items") then {_name = configFile >> "CfgMagazines" >> _name;};
|
|
if (_type == "trade_weapons") then {_name = configFile >> "CfgWeapons" >> _name;};
|
|
if (_x select 0 == dayz_onBack) then {
|
|
dayz_onBack = ""; // Remove from back
|
|
_localResult = 1;
|
|
} else {
|
|
_localResult = [player,_name,1] call BIS_fnc_invRemove; // Use config for BIS_fnc_invRemove
|
|
};
|
|
if (_localResult != 1) then {
|
|
if (_x select 1 == "trade_items") then {
|
|
_mA set [count(_mA),0];
|
|
} else {
|
|
_wA set [count(_wA),0];
|
|
};
|
|
} else {
|
|
if (_x select 1 == "trade_items") then {
|
|
_mA set [count(_mA),1];
|
|
} else {
|
|
_wA set [count(_wA),1];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
} forEach _sellArray;
|
|
|
|
_outcome set [0,_mA];
|
|
_outcome set [1,_wA];
|
|
_outcome set [2,[]];
|
|
if (_vehTraded) then {
|
|
_outcome set [3,[1]];
|
|
};
|
|
if (_bagTraded) then {
|
|
_outcome set [2,[1]];
|
|
};
|
|
systemChat format[localize "STR_EPOCH_TRADE_SELL_IN_GEAR",count _tSold];
|
|
};
|
|
|
|
{_itemsToLog set [1, (_itemsToLog select 1) + _x]} forEach _outcome;
|
|
_money = 0;
|
|
|
|
if (Z_SingleCurrency) then {
|
|
{
|
|
_money = _money + ((((_itemsCheckArray select _forEachIndex) select 0)) * _x);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((((_itemsCheckArray select _forEachIndex) select 0)) * _x)]];
|
|
} forEach (_outcome select 0);
|
|
{
|
|
_money = _money + ((((_weaponsCheckArray select _forEachIndex) select 0)) * _x);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((((_weaponsCheckArray select _forEachIndex) select 0)) * _x)]];
|
|
} forEach (_outcome select 1);
|
|
{
|
|
_money = _money + ((((_bpCheckArray select _forEachIndex) select 0)) * _x);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((((_bpCheckArray select _forEachIndex) select 0)) * _x)]];
|
|
} forEach (_outcome select 2);
|
|
|
|
if (count _outcome > 3) then {
|
|
_money = _money + ((_vehCheckArray select 0) select 0);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((_vehCheckArray select 0) select 0)]];
|
|
};
|
|
} else {
|
|
{
|
|
_itemData = _itemsCheckArray select _forEachIndex;
|
|
_money = _money + ((_itemData select 0) * (_itemData select 1) * _x);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((_itemData select 0) * (_itemData select 1) * _x)]];
|
|
} forEach (_outcome select 0);
|
|
{
|
|
_itemData = _weaponsCheckArray select _forEachIndex;
|
|
_money = _money + ((_itemData select 0) * (_itemData select 1) * _x);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((_itemData select 0) * (_itemData select 1) * _x)]];
|
|
} forEach (_outcome select 1);
|
|
{
|
|
_itemData = _bpCheckArray select _forEachIndex;
|
|
_money = _money + ((_itemData select 0) * (_itemData select 1) * _x);
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((_itemData select 0) * (_itemData select 1) * _x)]];
|
|
} forEach (_outcome select 2);
|
|
if ((count _outcome) > 3) then {
|
|
_itemData = _vehCheckArray select 0;
|
|
_money = _money + ((_itemData select 0) * (_itemData select 1));
|
|
_itemsToLog set [2, (_itemsToLog select 2) + [((_itemData select 0) * (_itemData select 1))]];
|
|
};
|
|
};
|
|
|
|
if (typeName _money == "SCALAR") then {
|
|
if (Z_SingleCurrency) then {
|
|
_wealth = player getVariable[(["cashMoney","globalMoney"] select Z_persistentMoney),0];
|
|
player setVariable[(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth + _money),true];
|
|
systemChat format[localize "STR_EPOCH_TRADE_SUCCESS_CHANGE",[_money] call BIS_fnc_numberText,CurrencyName];
|
|
} else {
|
|
[_money,0,false,0,[],[],false] call Z_returnChange;
|
|
_tCost = "";
|
|
_tCost = [_money,true] call z_calcCurrency;
|
|
if (_tCost != "") then { systemChat format[localize "STR_EPOCH_TRADE_SELL_SUCCESS",_tCost]; };
|
|
};
|
|
_itemsToLog call Z_logTrade;
|
|
call player_forceSave;
|
|
if (Z_SellingFrom == 1) then {
|
|
PVDZ_veh_Save = [DZE_myVehicle,"gear"];
|
|
publicVariableServer "PVDZ_veh_Save";
|
|
};
|
|
} else {
|
|
systemChat localize "STR_EPOCH_TRADE_DEBUG";
|
|
diag_log "Money is not a number. Something went wrong.";
|
|
};
|