diff --git a/dayz_code/actions/player_build.sqf b/dayz_code/actions/player_build.sqf index 197ffc043..5c71a3160 100644 --- a/dayz_code/actions/player_build.sqf +++ b/dayz_code/actions/player_build.sqf @@ -93,6 +93,7 @@ if (_hasrequireditem or _bypass) then { player allowDamage false; _object = createVehicle [_classname, _built_location, [], 0, "CAN_COLLIDE"]; _object setDir _dir; + _object setpos _built_location; player reveal _object; cutText [format[localize "str_build_01",_text], "PLAIN DOWN"]; diff --git a/dayz_code/actions/sell_db.sqf b/dayz_code/actions/sell_db.sqf index fcaf82c64..a496fdad8 100644 --- a/dayz_code/actions/sell_db.sqf +++ b/dayz_code/actions/sell_db.sqf @@ -91,7 +91,7 @@ diag_log format["DEBUG Buy: %1", dayzTraderMenuResult]; _count = 0; if(_type == "CfgVehicles") then { - _count = {_x == _name} count (position player nearObjects [_name,10]); + _count = {(typeOf _x) == _name} count (nearestObjects [player, [_name], 10]); }; if(_type == "CfgMagazines") then { _count = {_x == _name} count magazines player; diff --git a/dayz_code/actions/trade_any_boat.sqf b/dayz_code/actions/trade_any_boat.sqf index 4383ed381..cb0e93d79 100644 --- a/dayz_code/actions/trade_any_boat.sqf +++ b/dayz_code/actions/trade_any_boat.sqf @@ -1,5 +1,8 @@ private["_position","_veh","_location","_isOk","_backpack","_vehType","_trg","_key","_part_out","_part_in","_qty_out","_qty_in","_qty","_buy_o_sell","_obj","_objectID","_objectUID"]; +if(TradeInprogress) exitWith { cutText ["Trade already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + // [part_out,part_in, qty_out, qty_in, loc]; _activatingPlayer = _this select 1; @@ -93,4 +96,6 @@ if (_qty >= _qty_in) then { } else { _needed = _qty_in - _qty; cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; -}; \ No newline at end of file +}; + +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/trade_any_vehicle.sqf b/dayz_code/actions/trade_any_vehicle.sqf index ce3a642bc..56f19b3d3 100644 --- a/dayz_code/actions/trade_any_vehicle.sqf +++ b/dayz_code/actions/trade_any_vehicle.sqf @@ -1,5 +1,8 @@ private["_position","_veh","_location","_isOk","_backpack","_vehType","_trg","_key","_part_out","_part_in","_qty_out","_qty_in","_qty","_buy_o_sell","_obj","_objectID","_objectUID"]; +if(TradeInprogress) exitWith { cutText ["Trade already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + // [part_out,part_in, qty_out, qty_in, loc]; _activatingPlayer = _this select 1; @@ -100,4 +103,6 @@ if (_qty >= _qty_in) then { } else { _needed = _qty_in - _qty; cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; -}; \ No newline at end of file +}; + +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/trade_backpacks.sqf b/dayz_code/actions/trade_backpacks.sqf index 8998a1850..7d4b2e220 100644 --- a/dayz_code/actions/trade_backpacks.sqf +++ b/dayz_code/actions/trade_backpacks.sqf @@ -1,6 +1,9 @@ private["_iarray","_part_out","_part_in","_qty_out","_qty_in","_qty"]; // [part_out,part_in, qty_out, qty_in,]; +if(TradeInprogress) exitWith { cutText ["Trade already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + _activatingPlayer = _this select 1; _part_out = (_this select 3) select 0; @@ -149,4 +152,6 @@ if (_bulkqty >= 1) then { _needed = _qty_in - _qty; cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; }; -}; \ No newline at end of file +}; + +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/trade_items.sqf b/dayz_code/actions/trade_items.sqf index 51cfce258..ac1aa1be7 100644 --- a/dayz_code/actions/trade_items.sqf +++ b/dayz_code/actions/trade_items.sqf @@ -1,6 +1,9 @@ private["_iarray","_part_out","_part_in","_qty_out","_qty_in","_qty","_buy_o_sell","_textPartIn","_textPartOut","_bos","_isOk"]; // [part_out,part_in, qty_out, qty_in,]; +if(TradeInprogress) exitWith { cutText ["Trade already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + _activatingPlayer = _this select 1; _part_out = (_this select 3) select 0; @@ -144,4 +147,6 @@ if (_bulkqty >= 1) then { _needed = _qty_in - _qty; cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; }; -}; \ No newline at end of file +}; + +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/trade_items_wo_db.sqf b/dayz_code/actions/trade_items_wo_db.sqf index f303096f8..a2e53a380 100644 --- a/dayz_code/actions/trade_items_wo_db.sqf +++ b/dayz_code/actions/trade_items_wo_db.sqf @@ -1,6 +1,9 @@ private["_activatingPlayer","_part_out","_part_in","_qty_out","_qty_in","_buy_o_sell","_textPartIn","_textPartOut","_traderID","_counter","_failed","_qty","_isOk","_needed"]; // [part_out,part_in, qty_out, qty_in,]; +if(TradeInprogress) exitWith { cutText ["Trade already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + //_activatingPlayer = _this select 1; _part_out = (_this select 3) select 0; @@ -13,8 +16,12 @@ _textPartOut = (_this select 3) select 6; //_traderID = (_this select 3) select 7; _counter = 0; +_success = false; _failed = false; +_total_in = 0; +_total_out = 0; + _qty = {_x == _part_in} count magazines player; // find total number of possible trades @@ -22,6 +29,8 @@ _total_trades = floor (_qty / _qty_in); if (_qty >= _qty_in) then { + + // trade all items for "_x" from 1 to _total_trades do { @@ -53,12 +62,20 @@ if (_qty >= _qty_in) then { }; cutText [localize "STR_DAYZ_CODE_2", "PLAIN DOWN"]; } else { - cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; - sleep 2; + + _total_in = _total_in + _qty_in; + _total_out = _total_out + _qty_out; + _success = true; + }; }; + if(_success) then { + cutText [format[("Traded %1 %2 for %3 %4"),_total_in,_textPartIn,_total_out,_textPartOut], "PLAIN DOWN"]; + }; } else { _needed = _qty_in - _qty; cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; -}; \ No newline at end of file +}; + +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/actions/trade_weapons.sqf b/dayz_code/actions/trade_weapons.sqf index ecdb3638f..4d826c120 100644 --- a/dayz_code/actions/trade_weapons.sqf +++ b/dayz_code/actions/trade_weapons.sqf @@ -1,6 +1,9 @@ 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"]; +if(TradeInprogress) exitWith { cutText ["Trade already in progress." , "PLAIN DOWN"]; }; +TradeInprogress = true; + _activatingPlayer = _this select 1; _part_out = (_this select 3) select 0; @@ -147,4 +150,6 @@ if (_bulkqty >= 1) then { _needed = _qty_in - _qty; cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; }; -}; \ No newline at end of file +}; + +TradeInprogress = false; \ No newline at end of file diff --git a/dayz_code/cfgVehicles.hpp b/dayz_code/cfgVehicles.hpp index 91027bc5a..ff4f450db 100644 --- a/dayz_code/cfgVehicles.hpp +++ b/dayz_code/cfgVehicles.hpp @@ -190,7 +190,6 @@ class Citizen1; // External class reference transportMaxWeapons = 10; transportMaxMagazines = 50; transportmaxbackpacks = 10; - supplyRadius = 0; }; diff --git a/dayz_code/compile/fn_selfActions.sqf b/dayz_code/compile/fn_selfActions.sqf index cbf92f1f9..5a6367868 100644 --- a/dayz_code/compile/fn_selfActions.sqf +++ b/dayz_code/compile/fn_selfActions.sqf @@ -76,7 +76,7 @@ if (!isNull cursorTarget and !_inVehicle and (player distance cursorTarget < 6)) _canmove = canmove cursorTarget; _text = getText (configFile >> "CfgVehicles" >> typeOf cursorTarget >> "displayName"); - // hintSilent (typeOf cursorTarget); + _rawmeat = meatraw; _hasRawMeat = false; diff --git a/dayz_code/compile/player_spawnCheck.sqf b/dayz_code/compile/player_spawnCheck.sqf index eaa963f2a..2ebb8456a 100644 --- a/dayz_code/compile/player_spawnCheck.sqf +++ b/dayz_code/compile/player_spawnCheck.sqf @@ -8,6 +8,8 @@ _maxZombies = dayz_maxLocalZombies; _maxWildZombies = 3; _age = -1; + + _nearbyBuildings = []; _radius = 300; _position = getPosATL player; @@ -40,6 +42,7 @@ switch (_nearbytype) do { _spawnZombies = count (_position nearEntities ["zZombie_Base",_radius+100]) < _maxZombies; + if ("ItemMap_Debug" in items player) then { deleteMarkerLocal "MaxZeds"; deleteMarkerLocal "Counter"; @@ -97,11 +100,13 @@ if (_nearbyCount < 1) exitwith {}; [_radius, _position, _inVehicle, _dateNow, _age, _locationstypes, _nearestCity] call player_spawnlootCheck; }; if ((time - dayz_spawnWait) > dayz_spawnDelay) then { - if (dayz_spawnZombies < dayz_maxLocalZombies) then { - if (_spawnZombies) then { - [_radius, _position, _inVehicle, _dateNow, _age, _locationstypes, _nearestCity, _maxZombies] call player_spawnzedCheck; -}; + if (dayz_spawnZombies < _maxZombies) then { + if (_spawnZombies) then { + hintSilent format["Spawning %1 / %2
total: %3 ",dayz_spawnZombies,_maxZombies,count (_position nearEntities ["zZombie_Base",_radius+100])]; + [_radius, _position, _inVehicle, _dateNow, _age, _locationstypes, _nearestCity, _maxZombies] call player_spawnzedCheck; + }; } else { + hintSilent format["Waiting %1 / %2
total: %3",dayz_spawnZombies,_maxZombies,count (_position nearEntities ["zZombie_Base",_radius+100])]; dayz_spawnWait = time; dayz_spawnZombies = 0; }; diff --git a/dayz_code/compile/player_spawnzedCheck.sqf b/dayz_code/compile/player_spawnzedCheck.sqf index 9370645bf..db02def58 100644 --- a/dayz_code/compile/player_spawnzedCheck.sqf +++ b/dayz_code/compile/player_spawnzedCheck.sqf @@ -9,9 +9,11 @@ _locationstypes = _this select 5; _nearestCity = _this select 6; _maxZombies = _this select 7; +/* if (_inVehicle) then { _maxZombies = _maxZombies / 2; }; +*/ _zombied = (_x getVariable ["zombieSpawn",-0.1]); _dateNow = (DateToNumber date); diff --git a/dayz_code/compile/zombie_generate.sqf b/dayz_code/compile/zombie_generate.sqf index 984028b79..42e0fb7e1 100644 --- a/dayz_code/compile/zombie_generate.sqf +++ b/dayz_code/compile/zombie_generate.sqf @@ -27,8 +27,10 @@ if (_doLoiter) then { //diag_log ("Spawned: " + str([_type, _position, [], _radius, _method])); _agent = createAgent [_type, _position, [], _radius, _method]; -dayzSpawnZed = [_agent]; -publicVariableServer "dayzSpawnZed"; +if(!(_agent == objNull)) then { + dayzSpawnZed = [_agent]; + publicVariableServer "dayzSpawnZed"; +}; if (_doLoiter) then { _agent setPosATL _position; diff --git a/dayz_code/config.cpp b/dayz_code/config.cpp index 5c0bd3c38..f22244952 100644 --- a/dayz_code/config.cpp +++ b/dayz_code/config.cpp @@ -33,7 +33,7 @@ class CfgMods hidePicture = 0; hideName = 0; action = "http://www.dayzepoch.com"; - version = "0.963"; + version = "0.97"; hiveVersion = 0.96; //0.93 }; }; diff --git a/dayz_code/init/variables.sqf b/dayz_code/init/variables.sqf index 4c8f9f09b..9325f0d9b 100644 --- a/dayz_code/init/variables.sqf +++ b/dayz_code/init/variables.sqf @@ -264,7 +264,11 @@ dayz_maxAnimals = 5; DAYZ_agentnumber = 0; dayz_animalDistance = 800; dayz_zSpawnDistance = 1000; -dayz_maxLocalZombies = 40; + +if(isNil "dayzTraderMenuResult") then { + dayz_maxLocalZombies = 40; +}; + dayz_spawnPos = getPosATL player; //init global arrays for Loot Chances @@ -356,6 +360,7 @@ if(!isDedicated) then { dayzGearSave = false; dayz_unsaved = false; UnlockInprogress = false; + TradeInprogress = false; dayz_scaleLight = 0; dayzDebug = false; dayzState = -1; diff --git a/dayz_code/rscTitles.hpp b/dayz_code/rscTitles.hpp index d34bc10d3..874768caf 100644 --- a/dayz_code/rscTitles.hpp +++ b/dayz_code/rscTitles.hpp @@ -87,7 +87,7 @@ class RscDisplayMain : RscStandardDisplay class DAYZ_Version : CA_Version { idc = -1; - text = "DayZ Epoch 0.963 (1.7.5.1)"; + text = "DayZ Epoch 0.97 (1.7.5.1)"; y = "(SafeZoneH + SafeZoneY) - (1 - 0.95)"; }; class CA_TitleMainMenu; diff --git a/dayz_server/system/server_monitor.sqf b/dayz_server/system/server_monitor.sqf index 3951a3073..94a3c1438 100644 --- a/dayz_server/system/server_monitor.sqf +++ b/dayz_server/system/server_monitor.sqf @@ -103,8 +103,8 @@ diag_log "HIVE: Starting"; _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}]; }; - _object setpos _pos; _object setdir _dir; + _object setpos _pos; _object setDamage _damage; if (count _intentory > 0) then {