Commit Graph

1750 Commits

Author SHA1 Message Date
Axles
1b83385f9b Sahrani support updates
Added much needed buildings and moved the traders that were on islands
back to the main island.
2013-12-11 21:41:10 -08:00
Axles
46984fd14d Panthera Update 2013-12-09 09:37:08 -08:00
HARLAN
b9be34f287 Merge pull request #884 from dayz10k/master
#883 radar/optics on GAZ VODNIKs
2013-12-09 08:56:34 -08:00
HARLAN
8dc921e7ad #883 radar/optics on GAZ VODNIKs 2013-12-09 11:56:04 -05:00
HARLAN
e111199614 Update ROLLING CHANGE LOG 1.0.3.1.txt 2013-12-09 11:30:32 -05:00
HARLAN
67d3886e2d Merge pull request #882 from dayz10k/master
#879 remind players to remove lock if they want to delete modular door
2013-12-09 08:27:43 -08:00
HARLAN
d853908063 #879 remind players to remove lock if they want to delete modular door 2013-12-09 11:27:05 -05:00
HARLAN
ac9bf30172 Merge pull request #881 from dayz10k/master
#869 area maintenance tweaks
2013-12-09 07:43:55 -08:00
HARLAN
cab3788c57 Area Maintenance 2013-12-09 10:41:02 -05:00
HARLAN
ffc4675ae2 area maintenance tweaks 2013-12-09 10:40:19 -05:00
[VB]AWOL
0fcf880a1d fixes to swap object code 2013-12-09 08:59:44 -06:00
[VB]AWOL
992ab5fda9 merge
BIS_MPF_remoteExecutionServer = {
	if ((_this select 1) select 2 == "JIPrequest") then {
		[
	};
};

BIS_E

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_swapObject =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf";
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_publishVeh3 = 		compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.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";
//server_weather =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_weather.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;
};

array_reduceSizeReverse = {
	private["_array","_count","_num","_newarray","_startnum","_index"];
	_array = _this select 0;
	_newarray = [];
	_count = _this select 1;
	_num = count _array;
	if (_num > _count) then {
		_startnum = _num - 1;
		_index = _count - 1;
		for "_i" from 0 to _index do {
			_newarray set [(_index-_i),_array select (_startnum - _i)];
		};
		_array = _newarray;
	};
	_array
};

array_reduceSize = {
	private ["_array1","_array","_count","_num"];
	_array1 = _this select 0;
	_array = _array1 - ["Hatchet_Swing","Machete_Swing","Fishing_Swing","sledge_swing","crowbar_swing","CSGAS"];
	_count = _this select 1;
	_num = count _array;
	if (_num > _count) then {
		_array resize _count;
	};
	_array
};

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","_killer"];
	_unit = _this select 0;
	_killer = _this select 1;

	_objectID =	 _unit getVariable ["ObjectID","0"];
	_objectUID = _unit getVariable ["ObjectUID","0"];

	[_objectID,_objectUID,_killer] 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_hiveReadWriteLarge = {
	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 _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;

// Very taxing !!! but only on first startup
BuildingList = [];
{
	if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then
	{
		BuildingList set [count BuildingList,_x];
	};
} forEach (MarkerPosition nearObjects ["building",DynamicVehicleArea]);

spawn_vehicles = {
	private ["_random","_lastIndex","_weights","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"];

	if (isDedicated) then {

		while {count AllowedVehiclesList > 0} do {
			// BIS_fnc_selectRandom replaced because the index may be needed to remove the element
			_index = floor random count AllowedVehiclesList;
			_random = AllowedVehiclesList select _index;

			_vehicle = _random select 0;
			_velimit = _random select 1;

			_qty = {_x == _vehicle} count serverVehicleCounter;

			// If under limit allow to proceed
			if (_qty <= _velimit) exitWith {};

			// vehicle limit reached, remove vehicle from list
			// since elements cannot be removed from an array, overwrite it with the last element and cut the last element of (as long as order is not important)
			_lastIndex = (count AllowedVehiclesList) - 1;
			if (_lastIndex != _index) then {
				AllowedVehiclesList set [_index, AllowedVehiclesList select _lastIndex];
			};
			AllowedVehiclesList resize _lastIndex;
		};

		if (count AllowedVehiclesList == 0) then {
			diag_log("DEBUG: unable to find suitable 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_findSafePos"};
					_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_findSafePos"};
					_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;
				// _veh setVehicleAmmo DZE_vehicleAmmo;

				// 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_ammosupply = {
	private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
	if (isDedicated) then {
		_WreckList = ["Supply_Crate_DZE"];
		waitUntil{!isNil "BIS_fnc_selectRandom"};
		_position = RoadList call BIS_fnc_selectRandom;
		_position = _position modelToWorld [0,0,0];
		waitUntil{!isNil "BIS_fnc_findSafePos"};
		_position = [_position,5,20,5,0,2000,0] call BIS_fnc_findSafePos;
		if ((count _position) == 2) then {

			_istoomany = _position nearObjects ["All",5];

			if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many at " + str(_position)); };

			_spawnveh = _WreckList call BIS_fnc_selectRandom;

			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText str(_spawnveh);
			};

			_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
			_veh enableSimulation false;
			_veh setDir round(random 360);
			_veh setpos _position;
			_veh setVariable ["ObjectID","1",true];
		};
	};
};

DZE_LocalRoadBlocks = [];

spawn_roadblocks = {
	private ["_position","_veh","_istoomany","_marker","_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)); };

			waitUntil{!isNil "BIS_fnc_selectRandom"};
			_spawnveh = _WreckList call BIS_fnc_selectRandom;

			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText str(_spawnveh);
			};

			// fill array with classes and positions [class,pos,dir]
			// DZE_LocalRoadBlocks set [count DZE_LocalRoadBlocks,[_spawnveh,_position,round(random 360)]];

			//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];
		};

	};

};

spawn_mineveins = {
	private ["_position","_veh","_istoomany","_marker","_spawnveh","_positions"];

	if (isDedicated) then {

		_position = [getMarkerPos "center",0,(HeliCrashArea*0.75),10,0,2000,0] call BIS_fnc_findSafePos;

		if ((count _position) == 2) then {

			_positions = selectBestPlaces [_position, 500, "(1 + forest) * (1 + hills) * (1 - houses) * (1 - sea)", 10, 5];

			_position = (_positions call BIS_fnc_selectRandom) select 0;

			// Get position with ground

			_istoomany = _position nearObjects ["All",10];

			if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many objects at " + str(_position)); };

			if(isOnRoad _position) exitWith { diag_log("DEBUG VEIN: on road " + str(_position)); };

			_spawnveh = ["Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Gold_Vein_DZE"] call BIS_fnc_selectRandom;

			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText str(_spawnveh);
			};

			//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;
};

if(isnil "DZE_DiagFpsSlow") then {
	DZE_DiagFpsSlow = false;
};
if(isnil "DZE_DiagFpsFast") then {
	DZE_DiagFpsFast = false;
};
if(isnil "DZE_DiagVerbose") then {
	DZE_DiagVerbose = false;
};

dze_diag_fps = {
	if(DZE_DiagVerbose) then {
		diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", diag_fps,(count (allMissionObjects "")),(playersNumber west)];
	} else {
		diag_log format["DEBUG FPS : %1", diag_fps];
	};
};

// 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;
};

dayz_perform_purge = {
	if(!isNull(_this)) then {
		_this removeAllMPEventHandlers "mpkilled";
		_this removeAllMPEventHandlers "mphit";
		_this removeAllMPEventHandlers "mprespawn";
		_this removeAllEventHandlers "FiredNear";
		_this removeAllEventHandlers "HandleDamage";
		_this removeAllEventHandlers "Killed";
		_this removeAllEventHandlers "Fired";
		_this removeAllEventHandlers "GetOut";
		_this removeAllEventHandlers "GetIn";
		_this removeAllEventHandlers "Local";
		clearVehicleInit _this;
		deleteVehicle _this;
		deleteGroup (group _this);
	};
};

dayz_perform_purge_player = {

	private ["_countr","_backpack","_backpackType","_backpackWpn","_backpackMag","_objWpnTypes","_objWpnQty","_location","_dir","_holder","_weapons","_magazines"];
    diag_log ("Purging player: " + str(_this));

	if(!isNull(_this)) then {

		_location = getPosATL _this;
		_dir = getDir _this;

		_holder = createVehicle ["GraveDZE", _location, [], 0, "CAN_COLLIDE"];
		_holder setDir _dir;
		_holder setPosATL _location;

		_holder enableSimulation false;

		_weapons = weapons _this;
		_magazines = magazines _this;

		// find backpack
		if(!(isNull unitBackpack _this)) then {
			_backpack = unitBackpack _this;
			_backpackType = typeOf _backpack;
			_backpackWpn = getWeaponCargo _backpack;
			_backpackMag = getMagazineCargo _backpack;

			_holder addBackpackCargoGlobal [_backpackType,1];

			// add items from backpack
			_objWpnTypes = _backpackWpn select 0;
			_objWpnQty = _backpackWpn select 1;
			_countr = 0;
			{
				_holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
				_countr = _countr + 1;
			} forEach _objWpnTypes;

			// add backpack magazine items
			_objWpnTypes = _backpackMag select 0;
			_objWpnQty = _backpackMag select 1;
			_countr = 0;
			{
				_holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
				_countr = _countr + 1;
			} forEach _objWpnTypes;
		};
	};

	// add weapons
	{
		_holder addWeaponCargoGlobal [_x, 1];
	} forEach _weapons;

	// add mags
	{
		_holder addMagazineCargoGlobal [_x, 1];
	} forEach _magazines;

	_this removeAllMPEventHandlers "mpkilled";
	_this removeAllMPEventHandlers "mphit";
	_this removeAllMPEventHandlers "mprespawn";
	_this removeAllEventHandlers "FiredNear";
	_this removeAllEventHandlers "HandleDamage";
	_this removeAllEventHandlers "Killed";
	_this removeAllEventHandlers "Fired";
	_this removeAllEventHandlers "GetOut";
	_this removeAllEventHandlers "GetIn";
	_this removeAllEventHandlers "Local";
	clearVehicleInit _this;
	deleteVehicle _this;
	deleteGroup (group _this);
	//  _this = nil;
};

dayz_removePlayerOnDisconnect = {
	if(!isNull(_this)) then {
		_this removeAllMPEventHandlers "mphit";
		deleteVehicle _this;
		deleteGroup (group _this);
	};
};

server_timeSync = {
	//Send request
	private ["_year","_month","_day","_hour","_minute","_date","_key","_result","_outcome"];
    _key = "CHILD:307:";
	_result = _key call server_hiveReadWrite;
	_outcome = _result select 0;
	if(_outcome == "PASS") then {
		_date = _result select 1;

		if(dayz_fullMoonNights) then {
			//date setup
			//_year = _date select 0;
			//_month = _date select 1;
			//_day = _date select 2;
			_hour = _date select 3;
			_minute = _date select 4;

			//Force full moon nights
			_date = [2013,8,3,_hour,_minute];
		};

		setDate _date;
		PVDZE_plr_SetDate = _date;
		publicVariable "PVDZE_plr_SetDate";
		diag_log ("TIME SYNC: Local Time set to " + str(_date));
	};
};

// must spawn these
server_spawncleanDead = {
	private ["_deathTime","_delQtyZ","_delQtyP","_qty","_allDead"];

	if(!isNil "DZE_DYN_cleandead") exitWith { };
	DZE_DYN_cleandead = true;

	_allDead = allDead;
	_delQtyZ = 0;
	_delQtyP = 0;
	{
		if (local _x) then {
			if (_x isKindOf "zZombie_Base") then
			{
				_x call dayz_perform_purge;
				sleep 0.025;
				_delQtyZ = _delQtyZ + 1;
			} else {

				if (_x isKindOf "CAManBase") then {
					_deathTime = _x getVariable ["processedDeath", diag_tickTime];
					if (diag_tickTime - _deathTime > 1800) then {
						_x call dayz_perform_purge_player;
						sleep 0.025;
						_delQtyP = _delQtyP + 1;
					};
				};
			};
		};
		sleep 0.001;
	} forEach _allDead;
	if (_delQtyZ > 0 or _delQtyP > 0) then {
		_qty = count _allDead;
		diag_log (format["CLEANUP: Deleted %1 players and %2 zombies out of %3 dead",_delQtyP,_delQtyZ,_qty]);
	};
	DZE_DYN_cleandead = nil;
};

server_spawnCleanNull = {
	private ["_delQtyNull"];
	_delQtyNull = 0;
	{
		if (isNull _x) then {
			//diag_log (format["CLEANUP: Purge performed on null OBJ: %1",_x]);
			_x call dayz_perform_purge;
			sleep 1;
			_delQtyNull = _delQtyNull + 1;
		};
		sleep 0.001;
	} forEach (allMissionObjects "");
	if (_delQtyNull > 0) then {
		diag_log (format["CLEANUP: Deleted %1 null objects",_delQtyNull]);
	};
};

server_spawnCleanFire = {
	private ["_delQtyFP","_qty","_delQtyNull","_missionFires"];
	_missionFires = allMissionObjects "Land_Fire_DZ";
	_delQtyFP = 0;
	{
		if (local _x) then {
			deleteVehicle _x;
			sleep 0.025;
			_delQtyFP = _delQtyFP + 1;
		};
		sleep 0.001;
	} forEach _missionFires;
	if (_delQtyFP > 0) then {
		_qty = count _missionFires;
		diag_log (format["CLEANUP: Deleted %1 fireplaces out of %2",_delQtyNull,_qty]);
	};
};
server_spawnCleanLoot = {
	private ["_created","_delQty","_nearby","_age","_keep","_qty","_missionObjs","_dateNow"];
	if(!isNil "DZE_DYN_cleanLoot") exitWith { };
	DZE_DYN_cleanLoot = true;

	_missionObjs =  allMissionObjects "ReammoBox";
	_delQty = 0;
	_dateNow = (DateToNumber date);
	{
		_keep = _x getVariable ["permaLoot",false];
		if (!_keep) then {
			_created = _x getVariable ["created",-0.1];
			if (_created == -0.1) then {
				_x setVariable ["created",_dateNow,false];
				_created = _dateNow;
			} else {
				_age = (_dateNow - _created) * 525948;
				if (_age > 20) then {
					_nearby = {(isPlayer _x) and (alive _x)} count (_x nearEntities [["CAManBase","AllVehicles"], 130]);
					if (_nearby==0) then {
						deleteVehicle _x;
						sleep 0.025;
						_delQty = _delQty + 1;
					};
				};
			};
		};
		sleep 0.001;
	} forEach _missionObjs;
	if (_delQty > 0) then {
		_qty = count _missionObjs;
		diag_log (format["CLEANUP: Deleted %1 Loot Piles out of %2",_delQty,_qty]);
	};
	DZE_DYN_cleanLoot = nil;
};

server_spawnCleanAnimals = {
	private ["_pos","_delQtyAnimal","_qty","_missonAnimals","_nearby"];
	if(!isNil "DZE_DYN_cleanAnimals") exitWith { };
	DZE_DYN_cleanAnimals = true;
	_missonAnimals = entities "CAAnimalBase";
	_delQtyAnimal = 0;
	{
		if (local _x) then {
			_x call dayz_perform_purge;
			sleep 0.025;
			_delQtyAnimal = _delQtyAnimal + 1;
		} else {
			if (!alive _x) then {
				_pos = getPosATL _x;
				if (count _pos > 0) then {
					_nearby = {(isPlayer _x) and (alive _x)} count (_pos nearEntities [["CAManBase","AllVehicles"], 130]);
					if (_nearby==0) then {
						_x call dayz_perform_purge;
						sleep 0.025;
						_delQtyAnimal = _delQtyAnimal + 1;
					};
				};
			};
		};
		sleep 0.001;
	} forEach _missonAnimals;
	if (_delQtyAnimal > 0) then {
		_qty = count _missonAnimals;
		diag_log (format["CLEANUP: Deleted %1 Animals out of %2",_delQtyAnimal,_qty]);
	};
<<<<<<< HEAD
	DZE_DYN_cleanAnimals = nil;
};
=======
	DZE_DYN_cleanLoot = nil;
};
>>>>>>> dcc8fb0478
2013-12-09 08:07:55 -06:00
[VB]AWOL
bb2c2df88b fixes, added isnull check to reduce obj not found log spam 2013-12-09 08:04:50 -06:00
Skaronator
dcc8fb0478 Small Optimizations 2013-12-09 14:24:39 +01:00
[VB]AWOL
1078440552 fixed typos in sara mission.sqf 2013-12-08 20:06:49 -06:00
[VB]AWOL
a9b5c895f5 setdamage battleye exceptions 2013-12-08 19:58:57 -06:00
[VB]AWOL
d8f98b25ca minpos cannot be 0 must be negative number 2013-12-08 18:37:14 -06:00
[VB]AWOL
bccbad268f comment out lights by default and remove if statements 2013-12-08 16:33:39 -06:00
[VB]AWOL
51c3a053a3 done 2013-12-08 16:20:53 -06:00
[VB]AWOL
31e00830ef cleanup redundant folders and remove whitelister 2013-12-08 16:18:18 -06:00
[VB]AWOL
66d0bd1504 same as previous 2013-12-08 16:12:19 -06:00
[VB]AWOL
0cea80259b combine server git with main one 2013-12-08 15:59:47 -06:00
[VB]AWOL
cebe9e588c Version bump for upcoming hotfix 2013-12-08 11:02:42 -06:00
vbawol
92bf508167 Merge pull request #877 from facoptere/master
Antihack on every mission file
2013-12-08 08:44:43 -08:00
vbawol
29ed504b5f Merge pull request #876 from VeryBigBro/patch-4
Update README.md
2013-12-08 08:44:03 -08:00
facoptere
abb2fd8751 antihack on every mission file 2013-12-08 17:43:50 +01:00
facoptere
2ce20f19da antihack on every mission file 2013-12-08 17:41:59 +01:00
[VB]AWOL
43b68af003 entities instead of allMissionObjects
code lock if already running cleanup
2013-12-08 09:53:24 -06:00
Anton
c8eaa3cb4b Update README.md
Minor edits.
2013-12-08 18:37:47 +03:00
[VB]AWOL
78c9f6324b disable null cleanup by default 2013-12-08 09:33:45 -06:00
[VB]AWOL
63851f9b94 comment out diag 2013-12-08 09:26:40 -06:00
vbawol
a5fdf0ec6a Merge pull request #874 from AVendettaForYou/master
Fixed calls or trader files (Issue #861)
2013-12-08 06:53:44 -08:00
Jeff
3d4b0658d5 Fixed calls or trader files
will have black market trader shortly.
2013-12-08 09:46:18 -05:00
[VB]AWOL
a9019d05e5 fixed typo in armored suv DZ 2013-12-07 08:45:38 -06:00
[VB]AWOL
2f3aad3e10 removed epoch pbo source 2013-12-06 19:15:48 -06:00
Skaronator
2eedda7ff2 Merge pull request #870 from Torndeco/patch-3
Update spawn_loot.sqf
2013-12-06 16:33:36 -08:00
Torndeco
186baf6bba Update spawn_loot.sqf
Typo, Were 2 createvehicle "WeaponHolder" for the cfglootweapon switch statement
2013-12-07 00:20:41 +00:00
HARLAN
3fd4105ef5 Update ROLLING CHANGE LOG 1.0.3.1.txt 2013-12-06 13:36:18 -05:00
HARLAN
0514c210fc Update ROLLING CHANGE LOG 1.0.3.1.txt 2013-12-06 13:35:03 -05:00
[VB]AWOL
ef527384a8 getting ready for 1.0.3.1 2013-12-06 11:05:17 -06:00
HARLAN
c79af3a8da Merge pull request #866 from dayz10k/master
melee mags for skinchanges, actions after skinchanges
2013-12-06 08:40:28 -08:00
HARLAN
688422a22e #848 remember melee mags after skinchange
from dayz CE

4e1239bbda/SQF/dayz_code/system/player_spawn_2.sqf
2013-12-06 11:38:29 -05:00
HARLAN
434cea2555 #848 remember melee mags after skinchange 2013-12-06 11:36:04 -05:00
HARLAN
a27ce9a5a4 #848 remember melee mags after skinchange
merged from DayZ CE

4e1239bbda/SQF/dayz_code/compile/player_switchModel.sqf

tagging chainsaw as Melee so this works
2013-12-06 11:34:37 -05:00
Skaronator
1255989f4e Merge pull request #865 from infiSTAR/patch-1
Update remoteexec.txt
2013-12-06 08:30:39 -08:00
HARLAN
c008ff2832 #848 remember melee mags after skinchange and reveal objects
pulled from DayZ CE

657688a439 (diff-037f2fbb6c571dc6054b7fa36f624fdc)

and 

4e1239bbda (diff-037f2fbb6c571dc6054b7fa36f624fdc)
2013-12-06 11:29:20 -05:00
HARLAN
efae6d186a #848 remember melee mags after skinchange
pulled from DayZ CE
2013-12-06 11:24:19 -05:00
infiSTAR
2fc094cbd1 Update remoteexec.txt
!="spawn BIS_Effects_AirDestructionStage2" !="]spawn BIS_Effects_AirDestructionStage2"

replaced with

!"spawn BIS_Effects_AirDestructionStage2"

the old version still kicked on helicrash.
2013-12-06 17:23:38 +01:00
Skaronator
9a61b4cf8a Little bit Performance ++ 2013-12-06 17:19:25 +01:00
HARLAN
ee326a623f Merge pull request #863 from dayz10k/master
fix skinbase crafting localization
2013-12-06 08:10:28 -08:00