mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-16 05:39:58 +03:00
* Advanced trading tidying, spelling fixes, private fixes and string fixes. Fixes snap building issue with metal floors Fixed spelling mistakes in various scripts Fixed formatting uglyness in various scripts Fixed invalid private lines in various scripts Changed Advanced trading so buying worked more like selling, You can't select backpack if you don't have a pack nor can you select a vehicle if you don't have a vehicle. Removed some redundant strings from Advanced trading and changed a few of the strings to be more englishy Removed the ability to buy a backpack into your backpack (You cant do this anyway) Fixed a bug where if you had nothing in your backpack it would break the checkArrayInConfig script so the titlebar would not refresh correctly Removed slot counts on no backpack and no vehicle (No need for it, just clutter) Moved backpack/vehicle checking to z_at_getContainer.sqf * Last part of tidyness fixes Last part of tidyness fixes * Actual backpack fix Lets actually fix the buying backpack into backpack or backpack when you already have one. * Missing from commit Missing from commit
233 lines
8.2 KiB
Plaintext
233 lines
8.2 KiB
Plaintext
private ["_tempArray","_outcome","_vehCheckArray","_vehArray","_weaponsArray","_itemsArray","_bpArray","_bpCheckArray","_weaponsCheckArray","_itemsCheckArray","_VehKey","_wA","_mA","_money","_itemData","_success","_bag","_itemsToLog","_tCost","_tSold"];
|
|
|
|
if (count Z_SellArray < 1) exitWith { systemChat localize "STR_EPOCH_TRADE_SELL_NO_ITEMS"; };
|
|
|
|
_tempArray = Z_SellArray;
|
|
closeDialog 2;
|
|
_outcome = [];
|
|
_weaponsArray = [];
|
|
_itemsArray = [];
|
|
_bpArray = [];
|
|
_bpCheckArray = [];
|
|
_vehArray = [];
|
|
_vehCheckArray = [];
|
|
_weaponsCheckArray = [];
|
|
_itemsCheckArray = [];
|
|
_itemsToLog = [[],[],[],"sell"];
|
|
|
|
_sellVehicle = {
|
|
private ["_distance","_damage","_tireDmg","_tires","_okToSell","_returnInfo","_obj","_hitpoints","_objectID","_objectUID","_objectCharacterId","_notSetup","_part_in","_qty_in","_activatingPlayer","_objects","_qty","_vehicle"];
|
|
_vehicle = _this select 0;
|
|
_sellType = _this select 1;
|
|
_part_in = typeOf _vehicle;
|
|
_qty_in = 1;
|
|
_activatingPlayer = player;
|
|
_distance = Z_VehicleDistance;
|
|
_returnInfo = [];
|
|
_objects = nearestObjects [(getPosATL player), [_part_in], _distance];
|
|
_qty = ({(typeOf _x) == _part_in} count _objects);
|
|
if (_qty >= _qty_in) then {
|
|
_obj = (_objects select 0);
|
|
_okToSell = true;
|
|
_tires = 0;
|
|
_tireDmg = 0;
|
|
_damage = 0;
|
|
if (!(_sellType in ["trade_any_boat", "trade_any_boat_old"])) then {
|
|
_hitpoints = _obj call vehicle_getHitpoints;
|
|
{
|
|
if (["Wheel",_x,false] call fnc_inString) then {
|
|
_damage = [_obj,_x] call object_getHit;
|
|
_tireDmg = _tireDmg + _damage;
|
|
_tires = _tires + 1;
|
|
};
|
|
} forEach _hitpoints;
|
|
if (_tireDmg > 0 && _tires > 0) then {
|
|
if ((_tireDmg / _tires) > 0.75) then {
|
|
_okToSell = false;
|
|
};
|
|
};
|
|
};
|
|
_objectID = _obj getVariable ["ObjectID","0"];
|
|
_objectUID = _obj getVariable ["ObjectUID","0"];
|
|
_objectCharacterId = _obj getVariable ["CharacterID","0"];
|
|
_notSetup = (_objectID == "0" && _objectUID == "0");
|
|
|
|
if (local _obj && !isNull _obj && alive _obj && !_notSetup) then {
|
|
if (_okToSell) then {
|
|
_returnInfo = [_objectCharacterId, _obj, _objectID, _objectUID, _sellType];
|
|
} else {
|
|
systemChat format[localize "str_epoch_player_182",typeOf _obj];
|
|
_returnInfo = [];
|
|
};
|
|
} else {
|
|
systemChat localize "str_epoch_player_245";
|
|
_returnInfo = [];
|
|
};
|
|
};
|
|
_returnInfo;
|
|
};
|
|
|
|
{
|
|
private ["_type","_name"];
|
|
_type = _x select 1;
|
|
_name = _x select 0;
|
|
|
|
switch (true) do {
|
|
case (_type == "trade_items") :
|
|
{
|
|
_itemsArray set [count(_itemsArray),_name];
|
|
_itemsCheckArray set [count(_itemsCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
case (_type == "trade_weapons") :
|
|
{
|
|
_weaponsArray set [count(_weaponsArray),_name];
|
|
_weaponsCheckArray set [count(_weaponsCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
case (_type == "trade_backpacks") :
|
|
{
|
|
_bpArray set [count(_bpArray),_name];
|
|
_bpCheckArray set [count(_bpCheckArray),[_x select 2, _x select 11]];
|
|
};
|
|
case (_type in ["trade_any_vehicle", "trade_any_vehicle_free", "trade_any_vehicle_old", "trade_any_bicycle", "trade_any_bicycle_old", "trade_any_boat", "trade_any_boat_old"]) :
|
|
{
|
|
if (local Z_vehicle) then {
|
|
_VehKey = [Z_vehicle, _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 Z_SellArray;
|
|
|
|
_tSold = _itemsArray + _weaponsArray + _bpArray + _vehArray;
|
|
|
|
if (Z_SellingFrom == 0) then {
|
|
_outcome = [unitBackpack player,_itemsArray,_weaponsArray, _vehArray] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
|
|
systemchat format[localize "STR_EPOCH_TRADE_SELL_IN_BACKPACK",count _tSold];
|
|
};
|
|
if (Z_SellingFrom == 1) then {
|
|
_outcome = [Z_vehicle,_itemsArray,_weaponsArray,_bpArray, _vehArray] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
|
|
systemchat format[localize "STR_EPOCH_TRADE_SELL_IN_VEHICLE",count _tSold,typeOf Z_vehicle];
|
|
};
|
|
|
|
_itemsToLog set [0,(_itemsArray + _weaponsArray + _bpArray + [typeOf Z_vehicle])];
|
|
|
|
//gear
|
|
if (Z_SellingFrom == 2) then {
|
|
private ["_localResult", "_vehTraded"];
|
|
_wA = [];
|
|
_mA = [];
|
|
_vehTraded = false;
|
|
_bagTraded = false;
|
|
|
|
{
|
|
if ((_x select 1) in ["trade_any_vehicle", "trade_any_vehicle_free", "trade_any_vehicle_old", "trade_any_bicycle", "trade_any_bicycle_old", "trade_any_boat", "trade_any_boat_old"]) 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;};
|
|
_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 Z_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 {
|
|
_success = [player,_money] call SC_fnc_addCoins;
|
|
systemChat format[localize "STR_EPOCH_TRADE_SUCCESS_CHANGE", _money , CurrencyName];
|
|
} else {
|
|
_success = [_money, 0] call Z_returnChange;
|
|
_tCost = "";
|
|
_tCost = _money call z_calcDefaultCurrencyNoImg;
|
|
if (_tCost != "") then { systemChat format[localize "STR_EPOCH_TRADE_SELL_SUCCESS",_tCost]; };
|
|
};
|
|
_itemsToLog call Z_logTrade;
|
|
} else {
|
|
systemChat localize "STR_EPOCH_TRADE_DEBUG";
|
|
diag_log "Money is not a number. Something went wrong.";
|
|
};
|