diff --git a/SQF/dayz_code/Configs/CfgMagazines.hpp b/SQF/dayz_code/Configs/CfgMagazines.hpp index ce31f13cc..deadefbc2 100644 --- a/SQF/dayz_code/Configs/CfgMagazines.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines.hpp @@ -2404,7 +2404,7 @@ class CfgMagazines { neednearby[] = {"workshop"}; requiretools[] = {"ItemToolbox"}; output[] = {{"cinder_garage_kit",1}}; - input[] = {{"CinderBlocks",3},{"MortarBucket",1}}; + input[] = {{"CinderBlocks",3},{"MortarBucket",1},{"ItemTankTrap",1}}; }; }; diff --git a/SQF/dayz_code/actions/object_pickup.sqf b/SQF/dayz_code/actions/object_pickup.sqf index 6611a9202..b96fd2905 100644 --- a/SQF/dayz_code/actions/object_pickup.sqf +++ b/SQF/dayz_code/actions/object_pickup.sqf @@ -33,21 +33,6 @@ if(_classname isKindOf "TrapBear") exitwith {DZE_CanPickup = true; deleteVehicle player playActionNow "PutDown"; -if (_classname == "MeleeCrowbar") then { - player addMagazine 'crowbar_swing'; -}; -if (_classname == "MeleeHatchet") then { - player addMagazine 'hatchet_swing'; -}; -if (_classname == "MeleeMachete") then { - player addMagazine 'Machete_swing'; -}; -if (_classname == "MeleeFishingPole") then { - player addMagazine 'Fishing_Swing'; -}; - -sleep 1; - _claimedBy = _holder getVariable["claimed","0"]; if (_claimedBy != _playerID) exitWith {sleep 1; DZE_CanPickup = true; cutText [format[(localize "str_player_beinglooted"),_text] , "PLAIN DOWN"]}; @@ -64,6 +49,9 @@ _qty = count _obj; if(_qty >= 1) then { + //Remove melee magazines (BIS_fnc_invAdd fix) (add new melee ammo to array if needed) + {player removeMagazines _x} forEach ["Hatchet_Swing","Crowbar_Swing","Machete_Swing","Fishing_Swing"]; + _config = (configFile >> _type >> _classname); _isOk = [player,_config] call BIS_fnc_invAdd; if (_isOk) then { @@ -81,20 +69,15 @@ if(_qty >= 1) then { }; }; }; - } else { - _holder setVariable["claimed","0",true]; - cutText [localize "STR_DAYZ_CODE_2", "PLAIN DOWN"]; - if (_classname == "MeleeCrowbar") then { - player removeMagazine 'crowbar_swing'; - }; - if (_classname == "MeleeHatchet") then { - player removeMagazine 'hatchet_swing'; - }; - if (_classname == "MeleeMachete") then { - player removeMagazine 'Machete_swing'; - }; - if (_classname == "MeleeFishingPole") then { - player removeMagazine 'Fishing_Swing'; + + //adding melee mags back if needed + switch (primaryWeapon player) do + { + case "MeleeHatchet": {player addMagazine 'Hatchet_Swing';}; + case "MeleeCrowbar": {player addMagazine 'Crowbar_Swing';}; + case "MeleeMachete": {player addMagazine 'Machete_Swing';}; + case "MeleeFishingPole": {player addMagazine 'Fishing_Swing';}; + }; }; }; diff --git a/SQF/dayz_code/actions/player_craftItem.sqf b/SQF/dayz_code/actions/player_craftItem.sqf index fa29b3e63..3b8c7fb8f 100644 --- a/SQF/dayz_code/actions/player_craftItem.sqf +++ b/SQF/dayz_code/actions/player_craftItem.sqf @@ -9,7 +9,7 @@ if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "P TradeInprogress = true; // temp array of removed parts -_temp_removed_array = []; + _abort = false; _distance = 3; _reason = ""; @@ -59,6 +59,8 @@ if (_canDo) then { while {_craft_doLoop} do { + _temp_removed_array = []; + _missing = ""; _missingTools = false; { diff --git a/SQF/dayz_code/actions/player_craftItem1.sqf b/SQF/dayz_code/actions/player_craftItem1.sqf index 2f6c9f0d4..41b09f698 100644 --- a/SQF/dayz_code/actions/player_craftItem1.sqf +++ b/SQF/dayz_code/actions/player_craftItem1.sqf @@ -9,7 +9,7 @@ if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "P TradeInprogress = true; // temp array of removed parts -_temp_removed_array = []; + _abort = false; _distance = 3; _reason = ""; @@ -59,6 +59,8 @@ if (_canDo) then { while {_craft_doLoop} do { + _temp_removed_array = []; + _missing = ""; _missingTools = false; { diff --git a/SQF/dayz_code/actions/player_craftItem2.sqf b/SQF/dayz_code/actions/player_craftItem2.sqf index b649748fd..88f9820d1 100644 --- a/SQF/dayz_code/actions/player_craftItem2.sqf +++ b/SQF/dayz_code/actions/player_craftItem2.sqf @@ -9,7 +9,7 @@ if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "P TradeInprogress = true; // temp array of removed parts -_temp_removed_array = []; + _abort = false; _distance = 3; _reason = ""; @@ -59,6 +59,8 @@ if (_canDo) then { while {_craft_doLoop} do { + _temp_removed_array = []; + _missing = ""; _missingTools = false; { diff --git a/SQF/dayz_code/actions/player_craftItem3.sqf b/SQF/dayz_code/actions/player_craftItem3.sqf index 77d14614a..8c2f1722c 100644 --- a/SQF/dayz_code/actions/player_craftItem3.sqf +++ b/SQF/dayz_code/actions/player_craftItem3.sqf @@ -9,7 +9,7 @@ if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "P TradeInprogress = true; // temp array of removed parts -_temp_removed_array = []; + _abort = false; _distance = 3; _reason = ""; @@ -59,6 +59,8 @@ if (_canDo) then { while {_craft_doLoop} do { + _temp_removed_array = []; + _missing = ""; _missingTools = false; { diff --git a/SQF/dayz_code/actions/player_craftItem4.sqf b/SQF/dayz_code/actions/player_craftItem4.sqf index c4e5fd44e..192014616 100644 --- a/SQF/dayz_code/actions/player_craftItem4.sqf +++ b/SQF/dayz_code/actions/player_craftItem4.sqf @@ -9,7 +9,7 @@ if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "P TradeInprogress = true; // temp array of removed parts -_temp_removed_array = []; + _abort = false; _distance = 3; _reason = ""; @@ -59,6 +59,8 @@ if (_canDo) then { while {_craft_doLoop} do { + _temp_removed_array = []; + _missing = ""; _missingTools = false; { diff --git a/SQF/dayz_code/actions/remove.sqf b/SQF/dayz_code/actions/remove.sqf index 37155c7bf..9b8c66532 100644 --- a/SQF/dayz_code/actions/remove.sqf +++ b/SQF/dayz_code/actions/remove.sqf @@ -164,12 +164,15 @@ if (_proceed) then { // Find one random part to give back _refundpart = ["PartEngine","PartGeneric","PartFueltank","PartWheel","PartGlass","ItemJerrycan"] call BIS_fnc_selectRandom; _selectedRemoveOutput set [count _selectedRemoveOutput,[_refundpart,1]]; + _giveRefund = true; } else { _selectedRemoveOutput = getArray (configFile >> "CfgVehicles" >> _objType >> "removeoutput"); + _giveRefund = (_objectID != "0" && _objectUID != "0"); + }; // give refund items - if((count _selectedRemoveOutput) > 0) then { + if((count _selectedRemoveOutput) > 0 and _giveRefund) then { // Put itemsg { _itemOut = _x select 0; diff --git a/SQF/dayz_code/compile/player_packTent.sqf b/SQF/dayz_code/compile/player_packTent.sqf index 3415ec8de..73a92c1d1 100644 --- a/SQF/dayz_code/compile/player_packTent.sqf +++ b/SQF/dayz_code/compile/player_packTent.sqf @@ -49,43 +49,46 @@ _holder = _object; _weapons = getWeaponCargo _obj; _magazines = getMagazineCargo _obj; _backpacks = getBackpackCargo _obj; + +if(_objectID != "0" && _objectUID != "0") then { + + dayzDeleteObj = [_objectID,_objectUID]; + publicVariableServer "dayzDeleteObj"; + if (isServer) then { + dayzDeleteObj call server_deleteObj; + }; + deleteVehicle _obj; -//["dayzDeleteObj",[_objectID,_objectUID]] call callRpcProcedure; -dayzDeleteObj = [_objectID,_objectUID]; -publicVariableServer "dayzDeleteObj"; -if (isServer) then { - dayzDeleteObj call server_deleteObj; + //Add weapons + _objWpnTypes = _weapons select 0; + _objWpnQty = _weapons select 1; + _countr = 0; + { + _holder addweaponcargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + //Add Magazines + _objWpnTypes = _magazines select 0; + _objWpnQty = _magazines select 1; + _countr = 0; + { + _holder addmagazinecargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + //Add Backpacks + _objWpnTypes = _backpacks select 0; + _objWpnQty = _backpacks select 1; + _countr = 0; + { + _holder addbackpackcargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + cutText [localize "str_success_tent_pack", "PLAIN DOWN"]; +} else { + deleteVehicle _obj; }; -deleteVehicle _obj; - -//Add weapons -_objWpnTypes = _weapons select 0; -_objWpnQty = _weapons select 1; -_countr = 0; -{ - _holder addweaponcargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; -} forEach _objWpnTypes; - -//Add Magazines -_objWpnTypes = _magazines select 0; -_objWpnQty = _magazines select 1; -_countr = 0; -{ - _holder addmagazinecargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; -} forEach _objWpnTypes; - -//Add Backpacks -_objWpnTypes = _backpacks select 0; -_objWpnQty = _backpacks select 1; -_countr = 0; -{ - _holder addbackpackcargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; -} forEach _objWpnTypes; - -cutText [localize "str_success_tent_pack", "PLAIN DOWN"]; - s_player_packtent = -1; TradeInprogress = false; \ No newline at end of file diff --git a/SQF/dayz_code/compile/player_packVault.sqf b/SQF/dayz_code/compile/player_packVault.sqf index 34acd4583..ea49d32df 100644 --- a/SQF/dayz_code/compile/player_packVault.sqf +++ b/SQF/dayz_code/compile/player_packVault.sqf @@ -57,52 +57,56 @@ if(!isNull _obj and alive _obj) then { _magazines = getMagazineCargo _obj; _backpacks = getBackpackCargo _obj; - // Remove from database - dayzDeleteObj = [_objectID,_objectUID]; - publicVariableServer "dayzDeleteObj"; - - // Set down vault "take" item - _bag = createVehicle [_packedClass,_pos,[], 0, "CAN_COLLIDE"]; - - // Delete original - deleteVehicle _obj; + if (_objectID != "0" && _objectUID != "0") then { - _bag setdir _dir; - _bag setpos _pos; - player reveal _bag; - - // Empty weapon holder - _holder = _bag; + // Remove from database + dayzDeleteObj = [_objectID,_objectUID]; + publicVariableServer "dayzDeleteObj"; - //Add weapons - _objWpnTypes = _weapons select 0; - _objWpnQty = _weapons select 1; - _countr = 0; - { - _holder addweaponcargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } forEach _objWpnTypes; + // Set down vault "take" item + _bag = createVehicle [_packedClass,_pos,[], 0, "CAN_COLLIDE"]; - //Add Magazines - _objWpnTypes = _magazines select 0; - _objWpnQty = _magazines select 1; - _countr = 0; - { - _holder addmagazinecargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } forEach _objWpnTypes; + // Delete original + deleteVehicle _obj; - //Add Backpacks - _objWpnTypes = _backpacks select 0; - _objWpnQty = _backpacks select 1; - _countr = 0; - { - _holder addbackpackcargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } forEach _objWpnTypes; + _bag setdir _dir; + _bag setpos _pos; + player reveal _bag; + + // Empty weapon holder + _holder = _bag; - cutText [format["Your %1 has been packed",_text], "PLAIN DOWN"]; + //Add weapons + _objWpnTypes = _weapons select 0; + _objWpnQty = _weapons select 1; + _countr = 0; + { + _holder addweaponcargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + //Add Magazines + _objWpnTypes = _magazines select 0; + _objWpnQty = _magazines select 1; + _countr = 0; + { + _holder addmagazinecargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; - s_player_packvault = -1; + //Add Backpacks + _objWpnTypes = _backpacks select 0; + _objWpnQty = _backpacks select 1; + _countr = 0; + { + _holder addbackpackcargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + cutText [format["Your %1 has been packed",_text], "PLAIN DOWN"]; + } else { + deleteVehicle _obj; + }; }; +s_player_packvault = -1; TradeInprogress = false; \ No newline at end of file diff --git a/SQF/dayz_epoch/models/cinder_stack.p3d b/SQF/dayz_epoch/models/cinder_stack.p3d index 2c27595de..52e07409d 100644 Binary files a/SQF/dayz_epoch/models/cinder_stack.p3d and b/SQF/dayz_epoch/models/cinder_stack.p3d differ diff --git a/SQF/dayz_epoch/models/cinder_wall_full.p3d b/SQF/dayz_epoch/models/cinder_wall_full.p3d index 2abbbe9fc..99d5df6ec 100644 Binary files a/SQF/dayz_epoch/models/cinder_wall_full.p3d and b/SQF/dayz_epoch/models/cinder_wall_full.p3d differ diff --git a/SQF/dayz_epoch/models/planks.p3d b/SQF/dayz_epoch/models/planks.p3d index c56105c4c..ec9515f8a 100644 Binary files a/SQF/dayz_epoch/models/planks.p3d and b/SQF/dayz_epoch/models/planks.p3d differ diff --git a/SQF/dayz_epoch/models/plywood.p3d b/SQF/dayz_epoch/models/plywood.p3d index da0e3ca76..6b6df4f6b 100644 Binary files a/SQF/dayz_epoch/models/plywood.p3d and b/SQF/dayz_epoch/models/plywood.p3d differ diff --git a/SQF/dayz_epoch/models/steel_garage_door.p3d b/SQF/dayz_epoch/models/steel_garage_door.p3d index 44f754ad7..7237a917e 100644 Binary files a/SQF/dayz_epoch/models/steel_garage_door.p3d and b/SQF/dayz_epoch/models/steel_garage_door.p3d differ diff --git a/SQF/dayz_epoch/models/steel_garage_frame.p3d b/SQF/dayz_epoch/models/steel_garage_frame.p3d index 3c042bd4d..884b46956 100644 Binary files a/SQF/dayz_epoch/models/steel_garage_frame.p3d and b/SQF/dayz_epoch/models/steel_garage_frame.p3d differ diff --git a/SQF/dayz_epoch/models/workbench.p3d b/SQF/dayz_epoch/models/workbench.p3d index d7dfc8f03..228354bce 100644 Binary files a/SQF/dayz_epoch/models/workbench.p3d and b/SQF/dayz_epoch/models/workbench.p3d differ diff --git a/SQF/dayz_epoch/textures/planksWB.rvmat b/SQF/dayz_epoch/textures/planksWB.rvmat index edfa3181a..62c4bde84 100644 --- a/SQF/dayz_epoch/textures/planksWB.rvmat +++ b/SQF/dayz_epoch/textures/planksWB.rvmat @@ -1,4 +1,4 @@ -surfaceInfo="z\addons\dayz_epoch\textures\wood.bisurf"; +surfaceInfo="data\wood.bisurf"; ambient[]={1,1,1,1}; diffuse[]={1,1,1,1}; forcedDiffuse[]={0,0,0,0}; diff --git a/SQF/dayz_epoch/textures/plywoodWB.rvmat b/SQF/dayz_epoch/textures/plywoodWB.rvmat index 72af47add..d448976f4 100644 --- a/SQF/dayz_epoch/textures/plywoodWB.rvmat +++ b/SQF/dayz_epoch/textures/plywoodWB.rvmat @@ -1,4 +1,4 @@ -surfaceInfo="z\addons\dayz_epoch\textures\wood.bisurf"; +surfaceInfo="data\wood.bisurf"; ambient[]={1,1,1,1}; diffuse[]={1,1,1,1}; forcedDiffuse[]={0,0,0,0}; diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf index 25ed14669..04d741b9d 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -1,538 +1,542 @@ -waituntil {!isnil "bis_fnc_init"}; - -BIS_MPF_remoteExecutionServer = { - if ((_this select 1) select 2 == "JIPrequest") then { - [nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE; - }; -}; - -BIS_Effects_Burn = {}; -server_playerLogin = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf"; -server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf"; -server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf"; -server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf"; -server_playerDied = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf"; -server_publishObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf"; //Creates the object in DB -server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf"; //Removes the object from the DB -server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; // Custom to add vehicles -server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; // Custom to add vehicles -server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf"; -server_traders = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf"; -server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf"; -zombie_findOwner = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_findOwner.sqf"; -server_updateNearbyObjects = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateNearbyObjects.sqf"; -server_spawnCrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf"; -server_handleZedSpawn = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_handleZedSpawn.sqf"; -server_spawnEvents = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf"; - -fnc_plyrHit = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf"; -server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf"; - - -vehicle_handleInteract = { - private["_object"]; - _object = _this select 0; - needUpdate_objects = needUpdate_objects - [_object]; - [_object, "all"] call server_updateObject; -}; - -vehicle_handleServerKilled = { - private["_unit","_killer"]; - _unit = _this select 0; - _killer = _this select 1; - - [_unit, "killed"] call server_updateObject; - - _unit removeAllMPEventHandlers "MPKilled"; - _unit removeAllEventHandlers "Killed"; - _unit removeAllEventHandlers "HandleDamage"; - _unit removeAllEventHandlers "GetIn"; - _unit removeAllEventHandlers "GetOut"; -}; - -object_handleServerKilled = { - private["_unit","_objectID","_objectUID"]; - _unit = _this select 0; - - _objectID = _unit getVariable ["ObjectID","0"]; - _objectUID = _unit getVariable ["ObjectUID","0"]; - - [_objectID,_objectUID] call server_deleteObj; - - _unit removeAllMPEventHandlers "MPKilled"; - _unit removeAllEventHandlers "Killed"; - _unit removeAllEventHandlers "HandleDamage"; - _unit removeAllEventHandlers "GetIn"; - _unit removeAllEventHandlers "GetOut"; -}; - -check_publishobject = { - private["_allowed","_object","_playername"]; - - _object = _this select 0; - _playername = _this select 1; - - _allowed = false; - - //diag_log format ["DEBUG: Checking if Object: %1 is allowed published by %2", _object, _playername]; - - if ((typeOf _object) in dayz_allowedObjects) then { - //diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername]; - _allowed = true; - }; - _allowed -}; - -//event Handlers -eh_localCleanup = { - private ["_object"]; - _object = _this select 0; - _object addEventHandler ["local", { - if(_this select 1) then { - private["_type","_unit"]; - _unit = _this select 0; - _type = typeOf _unit; - _myGroupUnit = group _unit; - _unit removeAllMPEventHandlers "mpkilled"; - _unit removeAllMPEventHandlers "mphit"; - _unit removeAllMPEventHandlers "mprespawn"; - _unit removeAllEventHandlers "FiredNear"; - _unit removeAllEventHandlers "HandleDamage"; - _unit removeAllEventHandlers "Killed"; - _unit removeAllEventHandlers "Fired"; - _unit removeAllEventHandlers "GetOut"; - _unit removeAllEventHandlers "GetIn"; - _unit removeAllEventHandlers "Local"; - clearVehicleInit _unit; - deleteVehicle _unit; - deleteGroup _myGroupUnit; - _unit = nil; - diag_log ("CLEANUP: DELETED A " + str(_type) ); - }; - }]; -}; - -server_hiveWrite = { - private["_data"]; - //diag_log ("ATTEMPT WRITE: " + _this); - _data = "HiveExt" callExtension _this; - //diag_log ("WRITE: " +str(_data)); -}; - -server_hiveReadWrite = { - private["_key","_resultArray","_data"]; - _key = _this; - //diag_log ("ATTEMPT READ/WRITE: " + _key); - _data = "HiveExt" callExtension _key; - //diag_log ("READ/WRITE: " +str(_data)); - _resultArray = call compile format ["%1",_data]; - _resultArray -}; - -server_characterSync = { - private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"]; - _characterID = _this select 0; - _playerPos = _this select 1; - _playerGear = _this select 2; - _playerBackp = _this select 3; - _medical = _this select 4; - _currentState = _this select 5; - _currentModel = _this select 6; - - _key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,0,0,0,0,_currentState,0,0,_currentModel,0]; - //diag_log ("HIVE: WRITE: "+ str(_key) + " / " + _characterID); - _key call server_hiveWrite; -}; - -//onPlayerConnected "[_uid,_name] spawn server_onPlayerConnect;"; -onPlayerDisconnected "[_uid,_name] call server_onPlayerDisconnect;"; - -// Setup globals allow overwrite from init.sqf -if(isnil "dayz_MapArea") then { - dayz_MapArea = 10000; -}; -if(isnil "DynamicVehicleArea") then { - DynamicVehicleArea = dayz_MapArea / 2; -}; - -// Get all buildings and roads only once TODO: set variables to nil after done if nessicary -MarkerPosition = getMarkerPos "center"; -RoadList = MarkerPosition nearRoads DynamicVehicleArea; - -BuildingList = []; -{ - if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then - { - BuildingList set [count BuildingList,_x]; - }; -} forEach (MarkerPosition nearObjects ["building",DynamicVehicleArea]); - -spawn_vehicles = { - private ["_weights","_isOverLimit","_isAbort","_counter","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"]; - - if (isDedicated) then { - waituntil {!isnil "fnc_buildWeightedArray"}; - - _isOverLimit = true; - _isAbort = false; - _counter = 0; - while {_isOverLimit} do { - - waitUntil{!isNil "BIS_fnc_selectRandom"}; - _index = AllowedVehiclesList call BIS_fnc_selectRandom; - - _vehicle = _index select 0; - _velimit = _index select 1; - - _qty = {_x == _vehicle} count serverVehicleCounter; - - // If under limit allow to proceed - if(_qty <= _velimit) then { - _isOverLimit = false; - }; - - // counter to stop after 5 attempts - _counter = _counter + 1; - - if(_counter >= 5) then { - _isOverLimit = false; - _isAbort = true; - }; - }; - - if (_isAbort) then { - diag_log("DEBUG: unable to find sutable vehicle to spawn"); - } else { - - // add vehicle to counter for next pass - serverVehicleCounter set [count serverVehicleCounter,_vehicle]; - - // Find Vehicle Type to better control spawns - _isAir = _vehicle isKindOf "Air"; - _isShip = _vehicle isKindOf "Ship"; - - if(_isShip || _isAir) then { - if(_isShip) then { - // Spawn anywhere on coast on water - waitUntil{!isNil "BIS_fnc_selectRandom"}; - _position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos; - //diag_log("DEBUG: spawning boat near coast " + str(_position)); - } else { - // Spawn air anywhere that is flat - waitUntil{!isNil "BIS_fnc_selectRandom"}; - _position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos; - //diag_log("DEBUG: spawning air anywhere flat " + str(_position)); - }; - - - } else { - // Spawn around buildings and 50% near roads - if((random 1) > 0.5) then { - - waitUntil{!isNil "BIS_fnc_selectRandom"}; - _position = RoadList call BIS_fnc_selectRandom; - - _position = _position modelToWorld [0,0,0]; - - waitUntil{!isNil "BIS_fnc_findSafePos"}; - _position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos; - - //diag_log("DEBUG: spawning near road " + str(_position)); - - } else { - - waitUntil{!isNil "BIS_fnc_selectRandom"}; - _position = BuildingList call BIS_fnc_selectRandom; - - _position = _position modelToWorld [0,0,0]; - - waitUntil{!isNil "BIS_fnc_findSafePos"}; - _position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos; - - //diag_log("DEBUG: spawning around buildings " + str(_position)); - - }; - }; - // only proceed if two params otherwise BIS_fnc_findSafePos failed and may spawn in air - if ((count _position) == 2) then { - - _dir = round(random 180); - - _istoomany = _position nearObjects ["AllVehicles",50]; - if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); }; - - //place vehicle - _veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"]; - _veh setdir _dir; - _veh setpos _position; - - if(DZEdebug) then { - _marker = createMarker [str(_position) , _position]; - _marker setMarkerShape "ICON"; - _marker setMarkerType "DOT"; - _marker setMarkerText _vehicle; - }; - - // Get position with ground - _objPosition = getPosATL _veh; - - clearWeaponCargoGlobal _veh; - clearMagazineCargoGlobal _veh; - - // Add 0-3 loots to vehicle using random cfgloots - _num = floor(random 4); - _allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"]; - - for "_x" from 1 to _num do { - _iClass = _allCfgLoots call BIS_fnc_selectRandom; - - _itemTypes = [] + ((getArray (configFile >> "cfgLoot" >> _iClass)) select 0); - _index = dayz_CLBase find _iClass; - _weights = dayz_CLChances select _index; - _cntWeights = count _weights; - - _index = floor(random _cntWeights); - _index = _weights select _index; - _itemType = _itemTypes select _index; - _veh addMagazineCargoGlobal [_itemType,1]; - //diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType)); - }; - - [_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh; - }; - }; - }; -}; - -spawn_roadblocks = { - private ["_position","_veh","_num","_config","_itemType","_itemChance","_weights","_index","_iArray","_istoomany","_marker","_spawnloot","_nearby","_spawnveh","_WreckList"]; - _WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"]; - - waitUntil{!isNil "BIS_fnc_selectRandom"}; - if (isDedicated) then { - - _position = RoadList call BIS_fnc_selectRandom; - - _position = _position modelToWorld [0,0,0]; - - waitUntil{!isNil "BIS_fnc_findSafePos"}; - _position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos; - - if ((count _position) == 2) then { - // Get position with ground - - _istoomany = _position nearObjects ["All",5]; - - if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); }; - - if(DZEdebug) then { - _marker = createMarker [str(_position) , _position]; - _marker setMarkerShape "ICON"; - _marker setMarkerType "DOT"; - }; - - waitUntil{!isNil "BIS_fnc_selectRandom"}; - _spawnveh = _WreckList call BIS_fnc_selectRandom; - _spawnloot = "DynamicDebris"; - - if((_spawnveh == "HMMWVWreck") or (_spawnveh == "UralWreck") or (_spawnveh == "UAZWreck")) then { - _spawnloot = "DynamicDebrisMilitary"; - }; - - //diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position)); - _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"]; - _veh enableSimulation false; - - // Randomize placement a bit - _veh setDir round(random 360); - _veh setpos _position; - - _veh setVariable ["ObjectID","1",true]; - }; - - }; - -}; - -if(isnil "DynamicVehicleDamageLow") then { - DynamicVehicleDamageLow = 0; -}; -if(isnil "DynamicVehicleDamageHigh") then { - DynamicVehicleDamageHigh = 100; -}; - -if(isnil "DynamicVehicleFuelLow") then { - DynamicVehicleFuelLow = 0; -}; -if(isnil "DynamicVehicleFuelHigh") then { - DynamicVehicleFuelHigh = 100; -}; - -// Damage generator function -generate_new_damage = { - private ["_damage"]; - _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100; - _damage; -}; - -// Damage generator fuction -generate_exp_damage = { - private ["_damage"]; - _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100; - - // limit this to 85% since vehicle would blow up otherwise. - //if(_damage >= 0.85) then { - // _damage = 0.85; - //}; - _damage; -}; - -server_getDiff = { - private["_variable","_object","_vNew","_vOld","_result"]; - _variable = _this select 0; - _object = _this select 1; - _vNew = _object getVariable[_variable,0]; - _vOld = _object getVariable[(_variable + "_CHK"),_vNew]; - _result = 0; - if (_vNew < _vOld) then { - //JIP issues - _vNew = _vNew + _vOld; - _object getVariable[(_variable + "_CHK"),_vNew]; - } else { - _result = _vNew - _vOld; - _object setVariable[(_variable + "_CHK"),_vNew]; - }; - _result -}; - -server_getDiff2 = { - private["_variable","_object","_vNew","_vOld","_result"]; - _variable = _this select 0; - _object = _this select 1; - _vNew = _object getVariable[_variable,0]; - _vOld = _object getVariable[(_variable + "_CHK"),_vNew]; - _result = _vNew - _vOld; - _object setVariable[(_variable + "_CHK"),_vNew]; - _result -}; - -dayz_objectUID = { - private["_position","_dir","_key","_object"]; - _object = _this; - _position = getPosATL _object; - _dir = direction _object; - _key = [_dir,_position] call dayz_objectUID2; - _key -}; - -dayz_objectUID2 = { - private["_position","_dir","_key"]; - _dir = _this select 0; - _key = ""; - _position = _this select 1; - { - _x = _x * 10; - if ( _x < 0 ) then { _x = _x * -10 }; - _key = _key + str(round(_x)); - } forEach _position; - _key = _key + str(round(_dir)); - _key -}; - -dayz_objectUID3 = { - private["_position","_dir","_key"]; - _dir = _this select 0; - _key = ""; - _position = _this select 1; - { - _x = _x * 10; - if ( _x < 0 ) then { _x = _x * -10 }; - _key = _key + str(round(_x)); - } forEach _position; - _key = _key + str(round(_dir + time)); - _key -}; - -dayz_recordLogin = { - private["_key"]; - _key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2]; - _key call server_hiveWrite; -}; - -// Cleanup flies -server_cleanFlies = -{ - private ["_sound","_newdayz_flyMonitor"]; - - DZE_FlyWorkingSet = DZE_FlyWorkingSet+dayz_flyMonitor; - dayz_flyMonitor = []; - - _newdayz_flyMonitor = []; - { - _sound = _x select 0; - _body = _x select 1; - - // Remove flies - if (isNull _body) then { - deleteVehicle _sound; - [_body] call server_Delete; - } else { - _newdayz_flyMonitor set [count _newdayz_flyMonitor,_x]; - }; - - } forEach DZE_FlyWorkingSet; - - DZE_FlyWorkingSet = _newdayz_flyMonitor; -}; - -server_cleanDead = -{ - { - if (_x isKindOf "zZombie_Base") then - { - deleteVehicle _x; - } - else - { - _handled = _x getVariable ["handled",true]; - if (_handled) then { - _x enableSimulation false; - _body removeAllEventHandlers "HandleDamage"; - _body removeAllEventHandlers "Killed"; - _body removeAllEventHandlers "Fired"; - _body removeAllEventHandlers "FiredNear"; - }; - }; - } forEach allDead; -}; - -server_cleanLoot = -{ -private ["_deletedLoot","_startTime","_looted","_objectPos","_noPlayerNear","_nearObj"]; - - _deletedLoot = 0; - _startTime = diag_tickTime; - - { - _looted = (_x getVariable ["looted",-0.1]); - if (_looted != -0.1) then - { - _objectPos = getPosATL _x; - _noPlayerNear = {isPlayer _x} count (_objectPos nearEntities ["CAManBase",35]) == 0; - - if (_noPlayerNear) then - { - _nearObj = nearestObjects [_objectPos,["ReammoBox","WeaponHolder","WeaponHolderBase"],((sizeOf (typeOf _x)) + 5)]; - { - deleteVehicle _x; - _deletedLoot = _deletedLoot + 1; - } forEach _nearObj; - _x setVariable ["looted",-0.1,true]; - }; - }; - } forEach BuildingList; - - _endTime = diag_tickTime; - - diag_log (format["CLEANUP: DELETED %1 ITEMS, RUNTIME: %2",_deletedLoot,(_endTime - _startTime)]); -}; +waituntil {!isnil "bis_fnc_init"}; + +BIS_MPF_remoteExecutionServer = { + if ((_this select 1) select 2 == "JIPrequest") then { + [nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE; + }; +}; + +BIS_Effects_Burn = {}; +server_playerLogin = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf"; +server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf"; +server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf"; +server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf"; +server_playerDied = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf"; +server_publishObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf"; //Creates the object in DB +server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf"; //Removes the object from the DB +server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; // Custom to add vehicles +server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; // Custom to add vehicles +server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf"; +server_traders = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf"; +server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf"; +zombie_findOwner = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_findOwner.sqf"; +server_updateNearbyObjects = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateNearbyObjects.sqf"; +server_spawnCrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf"; +server_handleZedSpawn = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_handleZedSpawn.sqf"; +server_spawnEvents = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf"; + +fnc_plyrHit = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf"; +server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf"; + + +vehicle_handleInteract = { + private["_object"]; + _object = _this select 0; + needUpdate_objects = needUpdate_objects - [_object]; + [_object, "all"] call server_updateObject; +}; + +vehicle_handleServerKilled = { + private["_unit","_killer"]; + _unit = _this select 0; + _killer = _this select 1; + + [_unit, "killed"] call server_updateObject; + + _unit removeAllMPEventHandlers "MPKilled"; + _unit removeAllEventHandlers "Killed"; + _unit removeAllEventHandlers "HandleDamage"; + _unit removeAllEventHandlers "GetIn"; + _unit removeAllEventHandlers "GetOut"; +}; + +object_handleServerKilled = { + private["_unit","_objectID","_objectUID"]; + _unit = _this select 0; + + _objectID = _unit getVariable ["ObjectID","0"]; + _objectUID = _unit getVariable ["ObjectUID","0"]; + + [_objectID,_objectUID] call server_deleteObj; + + _unit removeAllMPEventHandlers "MPKilled"; + _unit removeAllEventHandlers "Killed"; + _unit removeAllEventHandlers "HandleDamage"; + _unit removeAllEventHandlers "GetIn"; + _unit removeAllEventHandlers "GetOut"; +}; + +check_publishobject = { + private["_allowed","_object","_playername"]; + + _object = _this select 0; + _playername = _this select 1; + + _allowed = false; + + //diag_log format ["DEBUG: Checking if Object: %1 is allowed published by %2", _object, _playername]; + + if ((typeOf _object) in dayz_allowedObjects) then { + //diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername]; + _allowed = true; + }; + _allowed +}; + +//event Handlers +eh_localCleanup = { + private ["_object"]; + _object = _this select 0; + _object addEventHandler ["local", { + if(_this select 1) then { + private["_type","_unit"]; + _unit = _this select 0; + _type = typeOf _unit; + _myGroupUnit = group _unit; + _unit removeAllMPEventHandlers "mpkilled"; + _unit removeAllMPEventHandlers "mphit"; + _unit removeAllMPEventHandlers "mprespawn"; + _unit removeAllEventHandlers "FiredNear"; + _unit removeAllEventHandlers "HandleDamage"; + _unit removeAllEventHandlers "Killed"; + _unit removeAllEventHandlers "Fired"; + _unit removeAllEventHandlers "GetOut"; + _unit removeAllEventHandlers "GetIn"; + _unit removeAllEventHandlers "Local"; + clearVehicleInit _unit; + deleteVehicle _unit; + deleteGroup _myGroupUnit; + _unit = nil; + diag_log ("CLEANUP: DELETED A " + str(_type) ); + }; + }]; +}; + +server_hiveWrite = { + private["_data"]; + //diag_log ("ATTEMPT WRITE: " + _this); + _data = "HiveExt" callExtension _this; + //diag_log ("WRITE: " +str(_data)); +}; + +server_hiveReadWrite = { + private["_key","_resultArray","_data"]; + _key = _this; + //diag_log ("ATTEMPT READ/WRITE: " + _key); + _data = "HiveExt" callExtension _key; + //diag_log ("READ/WRITE: " +str(_data)); + _resultArray = call compile format ["%1",_data]; + _resultArray +}; + +server_characterSync = { + private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"]; + _characterID = _this select 0; + _playerPos = _this select 1; + _playerGear = _this select 2; + _playerBackp = _this select 3; + _medical = _this select 4; + _currentState = _this select 5; + _currentModel = _this select 6; + + _key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,0,0,0,0,_currentState,0,0,_currentModel,0]; + //diag_log ("HIVE: WRITE: "+ str(_key) + " / " + _characterID); + _key call server_hiveWrite; +}; + +//onPlayerConnected "[_uid,_name] spawn server_onPlayerConnect;"; +onPlayerDisconnected "[_uid,_name] call server_onPlayerDisconnect;"; + +// Setup globals allow overwrite from init.sqf +if(isnil "dayz_MapArea") then { + dayz_MapArea = 10000; +}; +if(isnil "DynamicVehicleArea") then { + DynamicVehicleArea = dayz_MapArea / 2; +}; + +// Get all buildings and roads only once TODO: set variables to nil after done if nessicary +MarkerPosition = getMarkerPos "center"; +RoadList = MarkerPosition nearRoads DynamicVehicleArea; + +BuildingList = []; +{ + if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then + { + BuildingList set [count BuildingList,_x]; + }; +} forEach (MarkerPosition nearObjects ["building",DynamicVehicleArea]); + +spawn_vehicles = { + private ["_weights","_isOverLimit","_isAbort","_counter","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"]; + + if (isDedicated) then { + waituntil {!isnil "fnc_buildWeightedArray"}; + + _isOverLimit = true; + _isAbort = false; + _counter = 0; + while {_isOverLimit} do { + + waitUntil{!isNil "BIS_fnc_selectRandom"}; + _index = AllowedVehiclesList call BIS_fnc_selectRandom; + + _vehicle = _index select 0; + _velimit = _index select 1; + + _qty = {_x == _vehicle} count serverVehicleCounter; + + // If under limit allow to proceed + if(_qty <= _velimit) then { + _isOverLimit = false; + }; + + // counter to stop after 5 attempts + _counter = _counter + 1; + + if(_counter >= 5) then { + _isOverLimit = false; + _isAbort = true; + }; + }; + + if (_isAbort) then { + diag_log("DEBUG: unable to find sutable vehicle to spawn"); + } else { + + // add vehicle to counter for next pass + serverVehicleCounter set [count serverVehicleCounter,_vehicle]; + + // Find Vehicle Type to better control spawns + _isAir = _vehicle isKindOf "Air"; + _isShip = _vehicle isKindOf "Ship"; + + if(_isShip || _isAir) then { + if(_isShip) then { + // Spawn anywhere on coast on water + waitUntil{!isNil "BIS_fnc_selectRandom"}; + _position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos; + //diag_log("DEBUG: spawning boat near coast " + str(_position)); + } else { + // Spawn air anywhere that is flat + waitUntil{!isNil "BIS_fnc_selectRandom"}; + _position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos; + //diag_log("DEBUG: spawning air anywhere flat " + str(_position)); + }; + + + } else { + // Spawn around buildings and 50% near roads + if((random 1) > 0.5) then { + + waitUntil{!isNil "BIS_fnc_selectRandom"}; + _position = RoadList call BIS_fnc_selectRandom; + + _position = _position modelToWorld [0,0,0]; + + waitUntil{!isNil "BIS_fnc_findSafePos"}; + _position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos; + + //diag_log("DEBUG: spawning near road " + str(_position)); + + } else { + + waitUntil{!isNil "BIS_fnc_selectRandom"}; + _position = BuildingList call BIS_fnc_selectRandom; + + _position = _position modelToWorld [0,0,0]; + + waitUntil{!isNil "BIS_fnc_findSafePos"}; + _position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos; + + //diag_log("DEBUG: spawning around buildings " + str(_position)); + + }; + }; + // only proceed if two params otherwise BIS_fnc_findSafePos failed and may spawn in air + if ((count _position) == 2) then { + + _dir = round(random 180); + + _istoomany = _position nearObjects ["AllVehicles",50]; + if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); }; + + //place vehicle + _veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"]; + _veh setdir _dir; + _veh setpos _position; + + if(DZEdebug) then { + _marker = createMarker [str(_position) , _position]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "DOT"; + _marker setMarkerText _vehicle; + }; + + // Get position with ground + _objPosition = getPosATL _veh; + + clearWeaponCargoGlobal _veh; + clearMagazineCargoGlobal _veh; + + // Add 0-3 loots to vehicle using random cfgloots + _num = floor(random 4); + _allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"]; + + for "_x" from 1 to _num do { + _iClass = _allCfgLoots call BIS_fnc_selectRandom; + + _itemTypes = [] + ((getArray (configFile >> "cfgLoot" >> _iClass)) select 0); + _index = dayz_CLBase find _iClass; + _weights = dayz_CLChances select _index; + _cntWeights = count _weights; + + _index = floor(random _cntWeights); + _index = _weights select _index; + _itemType = _itemTypes select _index; + _veh addMagazineCargoGlobal [_itemType,1]; + //diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType)); + }; + + [_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh; + }; + }; + }; +}; + +spawn_roadblocks = { + private ["_position","_veh","_num","_config","_itemType","_itemChance","_weights","_index","_iArray","_istoomany","_marker","_spawnloot","_nearby","_spawnveh","_WreckList"]; + _WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"]; + + waitUntil{!isNil "BIS_fnc_selectRandom"}; + if (isDedicated) then { + + _position = RoadList call BIS_fnc_selectRandom; + + _position = _position modelToWorld [0,0,0]; + + waitUntil{!isNil "BIS_fnc_findSafePos"}; + _position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos; + + if ((count _position) == 2) then { + // Get position with ground + + _istoomany = _position nearObjects ["All",5]; + + if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); }; + + if(DZEdebug) then { + _marker = createMarker [str(_position) , _position]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "DOT"; + }; + + waitUntil{!isNil "BIS_fnc_selectRandom"}; + _spawnveh = _WreckList call BIS_fnc_selectRandom; + _spawnloot = "DynamicDebris"; + + if((_spawnveh == "HMMWVWreck") or (_spawnveh == "UralWreck") or (_spawnveh == "UAZWreck")) then { + _spawnloot = "DynamicDebrisMilitary"; + }; + + //diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position)); + _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"]; + _veh enableSimulation false; + + // Randomize placement a bit + _veh setDir round(random 360); + _veh setpos _position; + + _veh setVariable ["ObjectID","1",true]; + }; + + }; + +}; + +if(isnil "DynamicVehicleDamageLow") then { + DynamicVehicleDamageLow = 0; +}; +if(isnil "DynamicVehicleDamageHigh") then { + DynamicVehicleDamageHigh = 100; +}; + +if(isnil "DynamicVehicleFuelLow") then { + DynamicVehicleFuelLow = 0; +}; +if(isnil "DynamicVehicleFuelHigh") then { + DynamicVehicleFuelHigh = 100; +}; + +// Damage generator function +generate_new_damage = { + private ["_damage"]; + _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100; + _damage; +}; + +// Damage generator fuction +generate_exp_damage = { + private ["_damage"]; + _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100; + + // limit this to 85% since vehicle would blow up otherwise. + //if(_damage >= 0.85) then { + // _damage = 0.85; + //}; + _damage; +}; + +server_getDiff = { + private["_variable","_object","_vNew","_vOld","_result"]; + _variable = _this select 0; + _object = _this select 1; + _vNew = _object getVariable[_variable,0]; + _vOld = _object getVariable[(_variable + "_CHK"),_vNew]; + _result = 0; + if (_vNew < _vOld) then { + //JIP issues + _vNew = _vNew + _vOld; + _object getVariable[(_variable + "_CHK"),_vNew]; + } else { + _result = _vNew - _vOld; + _object setVariable[(_variable + "_CHK"),_vNew]; + }; + _result +}; + +server_getDiff2 = { + private["_variable","_object","_vNew","_vOld","_result"]; + _variable = _this select 0; + _object = _this select 1; + _vNew = _object getVariable[_variable,0]; + _vOld = _object getVariable[(_variable + "_CHK"),_vNew]; + _result = _vNew - _vOld; + _object setVariable[(_variable + "_CHK"),_vNew]; + _result +}; + +dayz_objectUID = { + private["_position","_dir","_key","_object"]; + _object = _this; + _position = getPosATL _object; + _dir = direction _object; + _key = [_dir,_position] call dayz_objectUID2; + _key +}; + +dayz_objectUID2 = { + private["_position","_dir","_key"]; + _dir = _this select 0; + _key = ""; + _position = _this select 1; + { + _x = _x * 10; + if ( _x < 0 ) then { _x = _x * -10 }; + _key = _key + str(round(_x)); + } forEach _position; + _key = _key + str(round(_dir)); + _key +}; + +dayz_objectUID3 = { + private["_position","_dir","_key"]; + _dir = _this select 0; + _key = ""; + _position = _this select 1; + { + _x = _x * 10; + if ( _x < 0 ) then { _x = _x * -10 }; + _key = _key + str(round(_x)); + } forEach _position; + _key = _key + str(round(_dir + time)); + _key +}; + +dayz_recordLogin = { + private["_key"]; + _key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2]; + _key call server_hiveWrite; +}; + +// Cleanup flies +server_cleanFlies = +{ + private ["_sound","_newdayz_flyMonitor"]; + + DZE_FlyWorkingSet = DZE_FlyWorkingSet+dayz_flyMonitor; + dayz_flyMonitor = []; + + _newdayz_flyMonitor = []; + { + _sound = _x select 0; + _body = _x select 1; + + // Remove flies + if (isNull _body) then { + deleteVehicle _sound; + [_body] call server_Delete; + } else { + _newdayz_flyMonitor set [count _newdayz_flyMonitor,_x]; + }; + + } forEach DZE_FlyWorkingSet; + + DZE_FlyWorkingSet = _newdayz_flyMonitor; +}; + +server_cleanDead = { + private ["_objectPos","_noPlayerNear","_body","_handled"]; + { + if (_x isKindOf "zZombie_Base") then + { + _objectPos = getPosATL _x; + _noPlayerNear = {isPlayer _x} count (_objectPos nearEntities ["CAManBase",35]) == 0; + if (_noPlayerNear) then + { + deleteVehicle _x; + }; + } else { + _handle = _x getVariable ["handle",true]; + if (_handle) then { + _x enableSimulation false; + _body removeAllEventHandlers "HandleDamage"; + _body removeAllEventHandlers "Killed"; + _body removeAllEventHandlers "Fired"; + _body removeAllEventHandlers "FiredNear"; _x setVariable ["handle",false]; + }; + }; + } forEach allDead; +}; + + +server_cleanLoot = +{ +private ["_deletedLoot","_startTime","_looted","_objectPos","_noPlayerNear","_nearObj"]; + + _deletedLoot = 0; + _startTime = diag_tickTime; + + { + _looted = (_x getVariable ["looted",-0.1]); + if (_looted != -0.1) then + { + _objectPos = getPosATL _x; + _noPlayerNear = {isPlayer _x} count (_objectPos nearEntities ["CAManBase",35]) == 0; + + if (_noPlayerNear) then + { + _nearObj = nearestObjects [_objectPos,["ReammoBox","WeaponHolder","WeaponHolderBase"],((sizeOf (typeOf _x)) + 5)]; + { + deleteVehicle _x; + _deletedLoot = _deletedLoot + 1; + } forEach _nearObj; + _x setVariable ["looted",-0.1,true]; + }; + }; + } forEach BuildingList; + + _endTime = diag_tickTime; + + diag_log (format["CLEANUP: DELETED %1 ITEMS, RUNTIME: %2",_deletedLoot,(_endTime - _startTime)]); +}; diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf index e6c0283ec..6e77746eb 100644 --- a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf index c9926e084..67b15e828 100644 --- a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf index 0d2572753..13ea4bee9 100644 --- a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf index 52d40c856..a322f6b22 100644 --- a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf @@ -116,6 +116,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf index 84025949b..e1b826b81 100644 --- a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf @@ -117,6 +117,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf index b83c8ef4b..6b726dde7 100644 --- a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf @@ -84,5 +84,5 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf index c9926e084..67b15e828 100644 --- a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_18.Sara/init.sqf b/Server Files/MPMissions/DayZ_Epoch_18.Sara/init.sqf index dc4b58850..be0be643e 100644 --- a/Server Files/MPMissions/DayZ_Epoch_18.Sara/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_18.Sara/init.sqf @@ -75,5 +75,5 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf index 05c0c6468..709e83f85 100644 --- a/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf index 5d8b19188..854dc8865 100644 --- a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf index 926849ffa..2c2416c84 100644 --- a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf index 6c4c0103f..3123e1885 100644 --- a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_6.Dingor/init.sqf b/Server Files/MPMissions/DayZ_Epoch_6.Dingor/init.sqf index 1fae993e7..378b9ed78 100644 --- a/Server Files/MPMissions/DayZ_Epoch_6.Dingor/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_6.Dingor/init.sqf @@ -105,6 +105,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf index 77b94892c..48b606da7 100644 --- a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf @@ -105,6 +105,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf index 3560cd8a9..e6652dfe9 100644 --- a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf index 87b81eea9..05bd4c1a8 100644 --- a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf @@ -104,6 +104,6 @@ if (!isDedicated) then { _void = [] execVM "R3F_Realism\R3F_Realism_Init.sqf"; //Lights - //[] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + [] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; }; #include "\z\addons\dayz_code\system\REsec.sqf"