Files
DayZ-Epoch/dayz_code/actions/trade_backpacks.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

152 lines
3.4 KiB
Plaintext

private["_iarray","_part_out","_part_in","_qty_out","_qty_in","_qty"];
// [part_out,part_in, qty_out, qty_in,];
_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];
_bos = 1;
_qty = 0;
_bag = unitBackpack player;
_class = typeOf _bag;
if(_class == _part_in) then {
_qty = 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;
diag_log format["DEBUG Starting to wait for answer: %1", dayzTradeObject];
waitUntil {!isNil "dayzTradeResult"};
diag_log format["DEBUG Complete Trade: %1", dayzTradeResult];
if(dayzTradeResult == "PASS") then {
if(_buy_o_sell == "buy") then {
for "_x" from 1 to _qty_in do {
player removeMagazine _part_in;
};
removeBackpack player;
player addBackpack _part_out;
} else {
// Sell
for "_x" from 1 to _qty_out do {
player addMagazine _part_out;
};
removeBackpack player;
// player addBackpack _part_out;
};
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"];
};
};