Files
DayZ-Epoch/dayz_code/actions/trade_weapons.sqf
vbawol 15f091ef44 0.87
added cancel to repair and salvage menus, added message to salvage when
player does not, fixed bulk crates selling of weapons and backpacks, Can
no longer place vaults on roads or within 50m of trader citys, Added now
entering/leaving messages to trader citys, Added kill messages from f0rt
and stapo.
2013-02-01 16:05:05 -06:00

150 lines
3.5 KiB
Plaintext

private ["_part_out","_part_in","_qty_out","_qty_in","_qty","_buy_o_sell","_traderID","_bos","_bulkItem","_bulkqty","_gold_out","_gold_qty_out","_partial_qty_out","_silver_qty_out","_needed","_activatingPlayer","_textPartIn","_textPartOut"];
// [part_out,part_in, qty_out, qty_in,"buy"];
_activatingPlayer = _this select 1;
_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;
_bulkqty = 0;
if(_buy_o_sell == "buy") then {
_qty = {_x == _part_in} count magazines player;
} else {
// SELL ONLY check if item is bulk
_bulkItem = "bulk_" + _part_in;
_bulkqty = {_x == _bulkItem} count magazines player;
diag_log format["DEBUG bulk: %1", _bulkItem];
_qty = {_x == _part_in} count weapons player;
_bos = 1;
};
if (_bulkqty >= 1) then {
// TODO: optimize for one db call only
_part_in = "bulk_" + _part_in;
player removeMagazine _part_in;
diag_log format["DEBUG remove magazine %1", _part_in];
// increment trader for each
for "_x" from 1 to 12 do {
["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure;
waitUntil {!isNil "dayzTradeResult"};
if(dayzTradeResult == "PASS") then {
diag_log format["DEBUG Complete Trade: %1", dayzTradeResult];
};
};
_qty_out = _qty_out * 12;
// gold = 36 copper
// gold = 6 silver
//
if (_part_out == "ItemSilverBar") then {
if (_qty_out >= 6) then {
// find number of gold
_gold_out = _qty_out / 6;
// whole number of gold bars
_gold_qty_out = floor _gold_out;
_part_out = "ItemGoldBar";
for "_x" from 1 to _gold_qty_out do {
player addMagazine _part_out;
};
// Find remainder
_partial_qty_out = (_gold_out - _gold_qty_out) * 6;
// whole number of gold bars
_silver_qty_out = floor _partial_qty_out;
_part_out = "ItemSilverBar";
for "_x" from 1 to _silver_qty_out do {
player addMagazine _part_out;
};
} else {
for "_x" from 1 to _qty_out do {
player addMagazine _part_out;
};
};
} else {
for "_x" from 1 to _qty_out do {
player addMagazine _part_out;
};
};
cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"];
dayzTradeResult = nil;
} else {
if (_qty >= _qty_in) then {
["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure;
waitUntil {!isNil "dayzTradeResult"};
diag_log format["DEBUG Complete Trade: %1", dayzTradeResult];
if(dayzTradeResult == "PASS") then {
for "_x" from 1 to _qty_in do {
if(_buy_o_sell == "buy") then {
player removeMagazine _part_in;
} else {
player removeWeapon _part_in;
};
};
for "_x" from 1 to _qty_out do {
if(_buy_o_sell == "buy") then {
player addWeapon _part_out;
} else {
player addMagazine _part_out;
};
};
// [player,"repair",0,false] call dayz_zombieSpeak;
cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"];
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
} else {
cutText [format[("Insufficient Stock %1"),_textPartOut] , "PLAIN DOWN"];
};
dayzTradeResult = nil;
} else {
_needed = _qty_in - _qty;
cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"];
};
};