diff --git a/SQF/dayz_code/Configs/CfgExtra/snappoints.hpp b/SQF/dayz_code/Configs/CfgExtra/snappoints.hpp index 5a6e00ece..3f76ff931 100644 --- a/SQF/dayz_code/Configs/CfgExtra/snappoints.hpp +++ b/SQF/dayz_code/Configs/CfgExtra/snappoints.hpp @@ -2,7 +2,6 @@ Created by Raymix */ - class SnapBuilding { //Barriers whitelist class Barrier { @@ -12,11 +11,14 @@ class SnapBuilding { "Land_HBarrier1_DZ", "Sandbag1_DZ", "BagFenceRound_DZ", - "Fort_RazorWire" + "Fort_RazorWire", + "WoodFloorQuarter_DZ", + "WoodFloorHalf_DZ", + "WoodFloor_DZ", + "MetalFloor_DZ" }; radius = 5; }; - //snap points class Land_HBarrier5Preview: Barrier{ //fix for broken offsets in ghost points[] = { {0,0,0,"Pivot"}, @@ -242,8 +244,8 @@ class SnapBuilding { class Cinder_DZE: FloorsWallsStairs { //All cinder walls and doors points[] = { {0,0,0,"Pivot"}, - {-2.64, 0, 0,"Left"}, - {2.64, 0, 0,"Right"}, + {-2.64, 0, 1.685,"Left"}, + {2.64, 0, 1.685,"Right"}, {0, 0, 3.37042,"Top"} }; radius = 10; @@ -257,6 +259,22 @@ class SnapBuilding { {0,0,-1.685,"Bottom"} }; }; + class CinderWallDoorway_Preview_DZ: Cinder_DZE { + points[] = { + {0,0,0,"Pivot"}, + {-2.64, 0, 1.685,"Left"}, + {2.64, 0, 1.685,"Right"}, + {0, 0, 3.37042,"Top"} + }; + }; + class CinderWallSmallDoorway_Preview_DZ: Cinder_DZE { + points[] = { + {0,0,0,"Pivot"}, + {-2.64, 0, 1.685,"Left"}, + {2.64, 0, 1.685,"Right"}, + {0, 0, 3.37042,"Top"} + }; + }; class CinderWallDoorway_Preview_DZ: Cinder_DZE {}; class CinderWallSmallDoorway_Preview_DZ: Cinder_DZE {}; class CinderWallHalf_Preview_DZ: Cinder_DZE { diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_buyItems.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_buyItems.sqf index f109c25f1..78911c60a 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_buyItems.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_buyItems.sqf @@ -1,6 +1,4 @@ -private ["_weaponsToBuy","_backpacksToBuy","_toolsToBuy","_sidearmToBuy","_primaryToBuy","_priceToBuy" -,"_enoughMoney","_myMoney","_canBuy","_moneyInfo","_count","_success","_toolClasses","_itemsToLog" -,"_tCost","_bTotal","_backpack","_pistolMagsToBuy","_regularMagsToBuy","_hasPrimary","_p","_toolAmounts"]; +private ["_activatingPlayer","_bTotal","_backpack","_backpacksToBuy","_buyVehicle","_buyingType","_canBuy","_count","_dir","_enoughMoney","_hasPrimary","_helipad","_isKeyOK","_item2Add","_itemsToLog","_keyColor","_keyNumber","_keySelected","_location","_moneyInfo","_myMoney","_p","_parentClasses","_part_out","_pistolMagsToBuy","_price","_priceToBuy","_primaryToBuy","_regularMagsToBuy","_sidearmToBuy","_sign","_success","_tCost","_toolAmounts","_toolClasses","_toolsToBuy","_vehiclesToBuy","_weaponsToBuy","_worth"]; if (count Z_BuyingArray < 1) exitWith { systemChat localize "STR_EPOCH_TRADE_BUY_NO_ITEMS"; }; @@ -181,7 +179,11 @@ if (_enoughMoney) then { }; _bTotal = _bTotal + (_x select 9); } count Z_BuyingArray; - systemChat format[localize "STR_EPOCH_TRADE_BUY_IN_BACKPACK",_bTotal]; + if (_item2Add != "0") then { + systemChat format[localize "STR_EPOCH_TRADE_BUY_VEH_IN_BACKPACK",(Z_BuyingArray select 0) select 3]; + } else { + systemChat format[localize "STR_EPOCH_TRADE_BUY_IN_BACKPACK",_bTotal]; + }; }; if (Z_SellingFrom == 1) then { //vehicle @@ -203,7 +205,11 @@ if (_enoughMoney) then { }; _bTotal = _bTotal + (_x select 9); } count Z_BuyingArray; - systemChat format[localize "STR_EPOCH_TRADE_BUY_IN_VEHICLE",_bTotal,typeOf Z_vehicle]; + if (_item2Add != "0") then { + systemChat format[localize "STR_EPOCH_TRADE_BUY_VEH_IN_VEHICLE",(Z_BuyingArray select 0) select 3,typeOf (Z_vehicle)]; + } else { + systemChat format[localize "STR_EPOCH_TRADE_BUY_IN_VEHICLE",_bTotal,typeOf Z_vehicle]; + }; }; if (Z_SellingFrom == 2) then { //gear @@ -239,7 +245,11 @@ if (_enoughMoney) then { }; _bTotal = _bTotal + (_x select 9); } count Z_BuyingArray; - systemChat format[localize "STR_EPOCH_TRADE_BUY_IN_GEAR",_bTotal]; + if (_item2Add != "0") then { + systemChat format[localize "STR_EPOCH_TRADE_BUY_VEH_IN_GEAR",(Z_BuyingArray select 0) select 3]; + } else { + systemChat format[localize "STR_EPOCH_TRADE_BUY_IN_GEAR",_bTotal]; + }; }; if (!Z_SingleCurrency) then { _success = [player,_priceToBuy,_moneyInfo,false,0] call Z_payDefault; diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_canAfford.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_canAfford.sqf index ef77063b1..a8792e0a1 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_canAfford.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_canAfford.sqf @@ -1,4 +1,4 @@ -private ["_worth","_total_currency","_return","_part","_totalToPay","_inventoryMoney","_backpackMoney","_kinds","_amounts","_vehicleMoney"]; +private ["_amounts","_backpackMoney","_backpackPlayer","_counter","_findGem","_forEachIndex","_inventoryMoney","_kinds","_mags","_part","_return","_totalToPay","_total_currency","_vehicleMoney","_worth"]; _totalToPay = _this; _return = [false, [], [], [], 0]; @@ -45,7 +45,7 @@ if (Z_AllowTakingMoneyFromBackpack) then { if (_findGem >= 0) then { _worth = DZE_GemWorthList select _findGem; _total_currency = _total_currency + (_worth * (_amounts select _forEachIndex)); - _counter = 0 ; + _counter = 0; while {_counter < (_amounts select _forEachIndex)} do { _backpackMoney set [count(_backpackMoney),_x]; _counter = _counter + 1; @@ -68,7 +68,7 @@ if (Z_AllowTakingMoneyFromVehicle) then { _worth = (_part >> "worth"); if isNumber (_worth) then { _total_currency = _total_currency + (getNumber(_worth) * (_amounts select _forEachIndex)); - _counter = 0 ; + _counter = 0; while {_counter < (_amounts select _forEachIndex)} do { _vehicleMoney set [count(_vehicleMoney),_x]; _counter = _counter + 1; @@ -80,7 +80,7 @@ if (Z_AllowTakingMoneyFromVehicle) then { _total_currency = _total_currency + (_worth * (_amounts select _forEachIndex)); _counter = 0 ; while {_counter < (_amounts select _forEachIndex)} do { - _backpackMoney set [count(_backpackMoney),_x]; + _vehicleMoney set [count(_vehicleMoney),_x]; _counter = _counter + 1; }; }; diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_changeBuySell.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_changeBuySell.sqf index 72c2bb9d7..3484d55c4 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_changeBuySell.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_changeBuySell.sqf @@ -1,6 +1,6 @@ #include "defines.hpp" -Z_Selling = !Z_Selling; +Z_Selling = !Z_Selling; if (Z_Selling) then { (findDisplay Z_AT_DIALOGWINDOW displayCtrl Z_AT_SELLBUYTOGGLE) ctrlSetText localize "STR_EPOCH_PLAYER_291"; (findDisplay Z_AT_DIALOGWINDOW displayCtrl Z_AT_FILTERBUTTON) ctrlSetText localize "STR_UI_FILTER"; diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_fillBuyableList.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_fillBuyableList.sqf index 955420613..148899a1f 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_fillBuyableList.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_fillBuyableList.sqf @@ -12,10 +12,9 @@ _typeOf = typeOf (unitBackPack player); _type = _x select 1; _count = 0; - if (_type in DZE_tradeVehicle) then { - _count = { local _x } count (nearestObjects [(getPosATL player), [_name], Z_VehicleDistance]); + if (_type in DZE_tradeVehicle && {_name == typeOf (DZE_myVehicle)} && {local DZE_myVehicle} && {alive DZE_myVehicle}) then { + _count = { (local _x && _x == DZE_myVehicle) } count (nearestObjects [(getPosATL player), [_name], Z_VehicleDistance]); }; - if (_type == "trade_items") then { { if (isText(configFile >> "CfgWeapons" >> _x >> "Attachments" >> _name) or _name in getArray (configFile >> "CfgWeapons" >> _x >> "magazines")) then { diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_logTrade.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_logTrade.sqf index 020889f41..30b64240c 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_logTrade.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_logTrade.sqf @@ -18,15 +18,15 @@ _Z_logTrade = { // Log to client RPT if (Z_SingleCurrency) then { if (_buyOrSell == "buy") then { - diag_log format["%5: Bought %4 x %1 into %7 at %2 for %3x%6",_className,inTraderCity,_price,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; + diag_log format["%5: Purchased %4x %1 into %7 at %2 for %3x%6",_className,inTraderCity,_price,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; } else { - diag_log format["%5: Sold %4 x %1 from %7 at %2 for %3x%6",_className,inTraderCity,_price,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; + diag_log format["%5: Sold %4x %1 from %7 at %2 for %3x%6",_className,inTraderCity,_price,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; }; } else { if (_buyOrSell == "buy") then { - diag_log format["%5: Bought %4 x %1 into %7 at %2 for %3",_className,inTraderCity,_tCost,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; + diag_log format["%5: Purchased %4x %1 into %7 at %2 for %3",_className,inTraderCity,_tCost,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; } else { - diag_log format["%5: Sold %4 x %1 from %7 at %2 for %3",_className,inTraderCity,_tCost,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; + diag_log format["%5: Sold %4x %1 from %7 at %2 for %3",_className,inTraderCity,_tCost,_quantity,localize "STR_EPOCH_PLAYER_289",_currency,_container]; }; }; diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_payDefault.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_payDefault.sqf index e489ce86a..269e1a99a 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_payDefault.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_payDefault.sqf @@ -12,16 +12,16 @@ _moneyInVehicle = _moneyInfo select 3; if (!_justChecking) then { { - _nil = [player, _x , 1] call BIS_fnc_invRemove; + _nil = [player, _x , 1] call BIS_fnc_invRemove; } count _moneyInGear; _moneyInGear = []; // Clear since money is removed now if (count _moneyInBackpack > 0) then { - _nil = [unitBackpack _player, _moneyInBackpack, [], []] call ZUPA_fnc_removeWeaponsAndMagazinesCargo; + _nil = [unitBackpack _player, _moneyInBackpack, [], []] call ZUPA_fnc_removeWeaponsAndMagazinesCargo; }; if (!isNull Z_vehicle && count _moneyInVehicle > 0) then { - _nil = [Z_vehicle, _moneyInVehicle, [], []] call ZUPA_fnc_removeWeaponsAndMagazinesCargo; + _nil = [Z_vehicle, _moneyInVehicle, [], []] call ZUPA_fnc_removeWeaponsAndMagazinesCargo; }; }; diff --git a/SQF/dayz_code/actions/AdvancedTrading/init.sqf b/SQF/dayz_code/actions/AdvancedTrading/init.sqf index b1b931393..6c40d47ac 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/init.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/init.sqf @@ -111,3 +111,4 @@ createDialog "AdvancedTrading"; (findDisplay Z_AT_DIALOGWINDOW displayCtrl Z_AT_DETAILSTEXT) ctrlSetText " " + localize "STR_EPOCH_TRADE_DETAILS"; call Z_ChangeBuySell; +false call Z_checkCloseVehicle; // set up vehicle for removing currency from it, otherwise you need to click vehicle before currency will be removed. diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 2b1499aca..d706d9e3b 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -15076,6 +15076,15 @@ Purchased %1 items into your gear Du hast %1 Gegenstände in deine Ausrüstung gekauft. + + You purchased a %1, the key has been added into your backpack. + + + You purchased a %1, the key has been added into your %2. + + + You purchased a %1, the key has been added to your toolbelt. + Sold %1 items from your backpack Du hast %1 Gegenstände aus deinem Rucksack verkauft. diff --git a/SQF/dayz_server/compile/server_handleSafeGear.sqf b/SQF/dayz_server/compile/server_handleSafeGear.sqf index 1125e9985..f8b0be9a1 100644 --- a/SQF/dayz_server/compile/server_handleSafeGear.sqf +++ b/SQF/dayz_server/compile/server_handleSafeGear.sqf @@ -1,5 +1,4 @@ -private ["_player","_obj","_objectID","_objectUID","_statusText","_puid","_status","_clientID","_type","_lockedClass","_unlockedClass","_packedClass", -"_name","_pos","_dir","_vector","_charID","_ownerID","_weapons","_magazines","_backpacks","_holder"]; +private ["_backpacks","_charID","_clientID","_dir","_dllcall","_holder","_lockBoxes","_lockCode","_lockColor","_lockedClass","_magazines","_name","_obj","_objectID","_objectUID","_ownerID","_packedClass","_player","_playerUID","_pos","_status","_statusText","_type","_unlockedClass","_vector","_weapons"]; _player = _this select 0; _obj = _this select 1; @@ -19,7 +18,7 @@ _ownerID = _obj getVariable ["ownerPUID","0"]; if (isNull _player) then {diag_log "ERROR: server_handleSafeGear called with Null player object";}; _clientID = owner _player; -_puid = getPlayerUID _player; +_playerUID = getPlayerUID _player; _statusText = switch (_status) do { case 0: {"UNLOCKED"}; @@ -28,7 +27,7 @@ _statusText = switch (_status) do { }; if (isNull _obj) exitWith { - diag_log format["ERROR: server_handleSafeGear called with Null safe object by %1(%2). %3 attempt failed.",_name,_puid,_statusText]; + diag_log format["ERROR: server_handleSafeGear called with Null safe object by %1(%2). %3 attempt failed.",_name,_playerUID,_statusText]; dze_waiting = "fail"; _clientID publicVariableClient "dze_waiting"; }; @@ -106,11 +105,27 @@ switch (_status) do { _type = switch _type do { case "VaultStorage"; - case "VaultStorageLocked": {"Safe"}; + case "VaultStorageLocked": { + _lockCode = _charID; + "Safe" + }; case "LockboxStorage"; - case "LockboxStorageLocked": {"LockBox"}; + case "LockboxStorageLocked": { + _lockBoxes = ["LockboxStorage","LockboxStorageLocked"]; + if (_type in _lockBoxes) then { + _lockCode = parseNumber _charID; + _lockCode = _lockCode - 10000; + if (_lockCode <= 99) then { _lockColor = "Red"; }; + if (_lockCode >= 100 && _lockCode <= 199) then { _lockColor = "Green"; _lockCode = _lockCode - 100; }; + if (_lockCode >= 200) then { _lockColor = "Blue"; _lockCode = _lockCode - 200; }; + if (_lockCode <= 9) then { _lockCode = format["0%1", _lockCode]; }; + _lockCode = format ["%1%2",_lockColor,_lockCode]; + }; + "LockBox" + }; }; -diag_log format["%6 %5: ObjID:%1 ObjUID:%2 CharID:%7 OwnerID:%8 BY %3(%4)",_objectID,_objectUID,_name,_puid,_statusText,_type,_charID,_ownerID]; +diag_log format["%1 (%2) %3 %4 with code: %5 @%6 (%7)",_name,_playerUID,_statusText,_type,_lockCode,mapGridPosition _pos,_pos]; + dze_waiting = "success"; _clientID publicVariableClient "dze_waiting"; \ No newline at end of file diff --git a/SQF/dayz_server/compile/server_tradeObject.sqf b/SQF/dayz_server/compile/server_tradeObject.sqf index 69a494b03..9510dcbfc 100644 --- a/SQF/dayz_server/compile/server_tradeObject.sqf +++ b/SQF/dayz_server/compile/server_tradeObject.sqf @@ -1,13 +1,17 @@ -private ["_player","_PUID","_name","_traderid","_buyorsell","_data","_result","_key","_outcome","_clientID","_price","_quantity","_container","_return"]; +private ["_player","_playerUID","_name","_traderid","_buyorsell","_data","_result","_key","_outcome","_clientID","_price","_quantity","_container","_return"]; _player = _this select 0; _traderID = _this select 1; _buyorsell = _this select 2; //0 > Buy // 1 > Sell _classname = _this select 3; _traderCity = _this select 4; -_currency = _this select 5; +_currency = _this select 5; _price = _this select 6; +_clientID = owner _player; +_playerUID = getPlayerUID _player; +_name = if (alive _player) then { name _player; } else { "Dead Player"; }; + if (count _this > 7) then { _quantity = _this select 7; _container = _this select 8; @@ -18,16 +22,12 @@ if (count _this > 7) then { _return = true; }; -_clientID = owner _player; - if (typeName _price == "SCALAR") then { _price = format ["%1x%2",_price,_currency]; } else { _price = format ["%1",_price]; }; -_name = if (alive _player) then { name _player; } else { "Dead Player"; }; -_PUID = getPlayerUID _player; if (_buyorsell == 0) then { //Buy - diag_log format["%8: %9: %1 (%2) bought %6 x %3 into %7 at %4 for %5", _name, _PUID, _classname, _traderCity, _price, _quantity,_container,localize "STR_EPOCH_PLAYER_289",localize "STR_EPOCH_PLAYER"]; + diag_log format["%8: %1 (%2) purchased %6x %3 into %7 at %4 for %5", _name, _playerUID, _classname, _traderCity, _price, _quantity,_container,localize "STR_EPOCH_PLAYER_289"]; } else { //SELL - diag_log format["%8: %9: %1 (%2) sold %6 x %3 from %7 at %4 for %5",_name, _PUID, _classname, _traderCity, _price, _quantity,_container,localize "STR_EPOCH_PLAYER_289",localize "STR_EPOCH_PLAYER"]; + diag_log format["%8: %1 (%2) sold %6x %3 from %7 at %4 for %5",_name, _playerUID, _classname, _traderCity, _price, _quantity,_container,localize "STR_EPOCH_PLAYER_289"]; }; if (DZE_ConfigTrader) then {