mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-13 19:52:38 +03:00
There is no point in setting inTraderCity = "Any"; since you can use the isInTraderCity variable to check if a player is in any trader city. Also "Any" will return false for isNil, so the only time "Unknown Trader City" was being used was when the player had not entered any city yet. If they left a known trader and went to an unknown one the RPT message would say "bought x at Any". Now it will correctly say "Unknown Trader" anytime a purchase is made without inTraderCity being set.
188 lines
5.0 KiB
Plaintext
188 lines
5.0 KiB
Plaintext
private ["_part_out","_part_in","_qty_out","_qty_in","_qty","_buy_o_sell","_traderID","_bos","_needed","_activatingPlayer","_textPartIn","_textPartOut","_started","_finished","_animState","_isMedic","_removed"];
|
|
// [part_out,part_in, qty_out, qty_in,"buy"];
|
|
|
|
if (DZE_ActionInProgress) exitWith {localize "str_epoch_player_103" call dayz_rollingMessages;};
|
|
DZE_ActionInProgress = true;
|
|
|
|
_activatingPlayer = player;
|
|
|
|
//diag_log format["DEBUG WEAPONS: %1", _this];
|
|
|
|
_part_out = (_this select 3) select 0;
|
|
_part_in = (_this select 3) select 1;
|
|
_qty_out = (_this select 3) select 2;
|
|
_qty_in = (_this select 3) select 3;
|
|
_buy_o_sell = (_this select 3) select 4;
|
|
_textPartIn = (_this select 3) select 5;
|
|
_textPartOut = (_this select 3) select 6;
|
|
_traderID = (_this select 3) select 7;
|
|
|
|
_bos = 0;
|
|
_abort = false;
|
|
_msg = "";
|
|
if(_buy_o_sell == "sell") then {
|
|
_bos = 1;
|
|
|
|
_msg = "Need the weapon in your hands before you can sell it.";
|
|
_config = (configFile >> "CfgWeapons" >> _part_in);
|
|
_configName = configName(_config);
|
|
_wepType = getNumber(_config >> "Type");
|
|
|
|
_isToolBelt = (_wepType == 131072);
|
|
_isBinocs = (_wepType == 4096);
|
|
|
|
_abort = (!(_configName in (weapons player)));
|
|
|
|
if(_isToolBelt || _isBinocs) then {
|
|
_msg = "Need the item on your toolbelt before you can sell it.";
|
|
};
|
|
|
|
} else {
|
|
|
|
// buying item type must NOT exist if rifle || pistol
|
|
_msg = "Drop or sell your current weapon before you can buy a new one.";
|
|
_config = (configFile >> "CfgWeapons" >> _part_out);
|
|
_configName = configName(_config);
|
|
_wepType = getNumber(_config >> "Type");
|
|
|
|
_isPistol = (_wepType == 2);
|
|
_isRifle = (_wepType == 1);
|
|
_isToolBelt = (_wepType == 131072);
|
|
_isBinocs = (_wepType == 4096);
|
|
|
|
if (_isRifle) then {
|
|
_abort = ((primaryWeapon player) != "");
|
|
};
|
|
if (_isPistol) then {
|
|
_secondaryWeapon = "";
|
|
{
|
|
if ((getNumber (configFile >> "CfgWeapons" >> _x >> "Type")) == 2) exitWith {
|
|
_secondaryWeapon = _x;
|
|
};
|
|
} count (weapons player);
|
|
_abort = (_secondaryWeapon != "");
|
|
};
|
|
if(_isToolBelt || _isBinocs) then {
|
|
_abort = (_configName in (weapons player));
|
|
_msg = "Drop or sell your current toolbelt item before you can buy a new one.";
|
|
};
|
|
};
|
|
|
|
if (_abort) exitWith {
|
|
_msg call dayz_rollingMessages;
|
|
DZE_ActionInProgress = false;
|
|
};
|
|
|
|
localize "str_epoch_player_105" call dayz_rollingMessages;
|
|
|
|
// force animation
|
|
player playActionNow "Medic";
|
|
["Working",0,[3,2,8,0]] call dayz_NutritionSystem;
|
|
|
|
r_interrupt = false;
|
|
_animState = animationState player;
|
|
r_doLoop = true;
|
|
_started = false;
|
|
_finished = false;
|
|
|
|
while {r_doLoop} do {
|
|
_animState = animationState player;
|
|
_isMedic = ["medic",_animState] call fnc_inString;
|
|
if (_isMedic) then {
|
|
_started = true;
|
|
};
|
|
if (_started && !_isMedic) then {
|
|
r_doLoop = false;
|
|
_finished = true;
|
|
};
|
|
if (r_interrupt) then {
|
|
r_doLoop = false;
|
|
};
|
|
uiSleep 0.1;
|
|
};
|
|
r_doLoop = false;
|
|
|
|
if (!_finished) exitWith {
|
|
r_interrupt = false;
|
|
if (vehicle player == player) then {
|
|
[objNull, player, rSwitchMove,""] call RE;
|
|
player playActionNow "stop";
|
|
};
|
|
DZE_ActionInProgress = false;
|
|
localize "str_epoch_player_106" call dayz_rollingMessages;
|
|
};
|
|
|
|
if (_finished) then {
|
|
|
|
_canAfford = false;
|
|
if(_bos == 1) then {
|
|
|
|
//sell
|
|
_qty = {_x == _part_in} count weapons player;
|
|
if (_qty >= _qty_in) then {
|
|
_part_inClass = configFile >> "CfgWeapons" >> _part_in;
|
|
_removed = ([player,_part_inClass,_qty_in] call BIS_fnc_invRemove);
|
|
if (_removed == _qty_in) then {
|
|
_canAfford = [[[_part_out,_qty_out]],1] call epoch_returnChange;
|
|
};
|
|
};
|
|
|
|
} else {
|
|
|
|
//buy
|
|
_trade_total = [[_part_in,_qty_in]] call epoch_itemCost;
|
|
_total_currency = call epoch_totalCurrency;
|
|
_return_change = _total_currency - _trade_total;
|
|
if (_return_change >= 0) then {
|
|
_canAfford = true;
|
|
};
|
|
};
|
|
|
|
if (_canAfford) then {
|
|
|
|
if (isNil "_part_out") then { _part_out = "Unknown Weapon/Magazine" };
|
|
if(_bos == 1) then {
|
|
// Selling
|
|
PVDZE_obj_Trade = [_activatingPlayer,_traderID,_bos,_part_in,inTraderCity,_part_out,_qty_out];
|
|
} else {
|
|
// Buying
|
|
PVDZE_obj_Trade = [_activatingPlayer,_traderID,_bos,_part_out,inTraderCity,_part_in,_qty_in];
|
|
};
|
|
publicVariableServer "PVDZE_obj_Trade";
|
|
|
|
if(_bos == 0) then {
|
|
|
|
waitUntil {!isNil "dayzTradeResult"};
|
|
|
|
//diag_log format["DEBUG Complete Trade: %1", dayzTradeResult];
|
|
|
|
if(dayzTradeResult == "PASS") then {
|
|
|
|
_done = [[[_part_in,_qty_in]],0] call epoch_returnChange;
|
|
if (_done) then {
|
|
player addWeapon _part_out;
|
|
format[localize "str_epoch_player_186",_qty_in,_textPartIn,_qty_out,_textPartOut] call dayz_rollingMessages;
|
|
};
|
|
|
|
} else {
|
|
format[localize "str_epoch_player_183",_textPartOut] call dayz_rollingMessages;
|
|
};
|
|
} else {
|
|
// selling
|
|
format[localize "str_epoch_player_186",_qty_in,_textPartIn,_qty_out,_textPartOut] call dayz_rollingMessages;
|
|
};
|
|
|
|
dayzTradeResult = nil;
|
|
} else {
|
|
if(_bos == 0) then {
|
|
_qty = {_x == _part_in} count magazines player;
|
|
} else {
|
|
_qty = {_x == _part_in} count weapons player;
|
|
};
|
|
_needed = _qty_in - _qty;
|
|
format[localize "str_epoch_player_184",_needed,_textPartIn] call dayz_rollingMessages;
|
|
};
|
|
};
|
|
|
|
DZE_ActionInProgress = false;
|