Commit Graph
100 Commits
Author SHA1 Message Date
[VB]AWOL 8ecf61184a readme 2014-01-21 14:13:05 -06:00
[VB]AWOL 84db9dc980 fixes to napf serverTraders array 2014-01-21 12:24:21 -06:00
[VB]AWOL ac37605493 little less area and no boats 2014-01-20 10:28:46 -06:00
[VB]AWOL 3e26c96ccc no shoremode and correct maparea 2014-01-20 10:23:07 -06:00
[VB]AWOL 752c663027 DayZ_Epoch_25.sauerland fixes 2014-01-20 09:32:47 -06:00
[VB]AWOL 4089982e51 instance 25 for Sauerland 2014-01-20 09:30:51 -06:00
[VB]AWOL 6eaa4f8bab TEST double agro range on all weapons 2014-01-20 09:03:52 -06:00
[VB]AWOL 90e862183d loot positions for new building 2014-01-20 09:03:32 -06:00
[VB]AWOL afa1036ca9 Sauerland mission file part 1 2014-01-20 09:03:17 -06:00
[VB]AWOL e96a473f44 changelog 2014-01-19 21:53:51 -06:00
[VB]AWOL d9698c48a0 fixed constant blur effect after halo jump 2014-01-19 19:10:38 -06:00
[VB]AWOL 9062ac5f95 fixed #996
we now limit the speed factor to (18 max run speed) for thirst and
hunger, this will fix issue with getting hungry while too fast while
driving or flying.
2014-01-19 14:38:51 -06:00
[VB]AWOL 2567311ada cleanup extra classes 2014-01-19 12:50:56 -06:00
[VB]AWOL 97311b4928 added back gutting vars to BE since it was reverted 2014-01-19 12:38:48 -06:00
[VB]AWOL c95303bc9b added //new to all scripts and cleaned up some commented lines
to
2014-01-18 09:16:10 -06:00
[VB]AWOL 7ef18f0183 mpeventhandler.txt updated for new BE 2014-01-18 09:00:22 -06:00
[VB]AWOL 91c7ddf829 napf traders finalized 2014-01-18 00:31:37 -06:00
[VB]AWOL e52ec823d7 napf traders 2014-01-17 21:31:56 -06:00
[VB]AWOL 454b7f592c forgot to save a few files 2014-01-17 16:46:49 -06:00
[VB]AWOL cab5d03ab7 updated for latest BE
regex metacharacters ({}[]()^$.|*+? and \) now have to be escaped using
'\' if they should be used as literals.
2014-01-17 14:56:27 -06:00
[VB]AWOL 0a178f2ecc Included Custom Islands 2014-01-16 23:02:29 -06:00
[VB]AWOL bbf22db3f2 format 2014-01-16 23:01:01 -06:00
[VB]AWOL dda9f9d532 Napf credits 2014-01-16 22:57:38 -06:00
[VB]AWOL 91836d6145 removed all traces of CfgTownGenerator 2014-01-16 19:30:34 -06:00
[VB]AWOL 16901c122c not used 2014-01-16 19:30:12 -06:00
[VB]AWOL 5ffe563baa removed old database.dll 2014-01-16 19:22:00 -06:00
[VB]AWOL ec2fb5709c tweaks to minpos and maparea for napf 2014-01-16 18:01:09 -06:00
[VB]AWOL ef779ba2e0 lower animal counts and removed unused variable MaxHeliCrashes 2014-01-16 16:35:31 -06:00
[VB]AWOL 8c24f2a1a4 Napf missing jetskiaddon line 2014-01-16 15:48:37 -06:00
[VB]AWOL 3d7ba8ca39 remove documents (changed mind) 2014-01-15 19:43:41 -06:00
[VB]AWOL 2c4a677840 SFuel here instead of SetFuel since it is also a command 2014-01-15 19:30:16 -06:00
[VB]AWOL c4333e2b7d fixes to format and localize 2014-01-15 19:21:13 -06:00
[VB]AWOL a5addbda5b fixed #984 2014-01-14 12:01:48 -06:00
[VB]AWOL 20dab78c27 spawn calls need dummy input or error out 2014-01-13 09:48:29 -06:00
[VB]AWOL aa8975e36c wrong variable used here
@zabn let me know if this is not correct.
2014-01-13 09:35:58 -06:00
[VB]AWOL 63db8aa252 incorrect createVehicleLocal format
removed setdir since its a round pole and should not be needed
2014-01-13 09:30:59 -06:00
[VB]AWOL 35d1dea5b2 fixed typo in player build 2014-01-13 09:26:51 -06:00
[VB]AWOL 70546d693e fixed #980 2014-01-13 08:32:45 -06:00
[VB]AWOL 9e694a2b4f readme's 2014-01-12 21:33:42 -06:00
[VB]AWOL f08d554d7e keys cleanup pt2 2014-01-12 18:54:35 -06:00
[VB]AWOL 78ae60aff0 Removed old bikey and added new versioned one.
Also moved external keys to sub folder.
Thanks to @Tansien for the suggestion.
2014-01-11 14:32:24 -06:00
[VB]AWOL de5eb05caf Napf support part 1 2014-01-11 09:28:46 -06:00
[VB]AWOL 75fd7d31a4 overon support and bikey 2014-01-11 09:23:23 -06:00
[VB]AWOL 505952d562 1.0.4 latest server pbo 2014-01-08 09:40:40 -06:00
[VB]AWOL 2fab76a530 typo 2014-01-08 08:55:31 -06:00
[VB]AWOL 0acc23a796 Lower weapon count on safes to 25 2014-01-08 08:55:03 -06:00
[VB]AWOL c7e2ed41bd parent class 2014-01-01 20:29:35 -06:00
[VB]AWOL 551384c935 as50 DZ config 2014-01-01 20:28:42 -06:00
[VB]AWOL 293c5cb6b5 version bump, prep for 1.0.4 2014-01-01 20:05:16 -06:00
[VB]AWOL 172a4b9ad0 incorrect format KISS 2013-12-27 10:10:04 -06:00
[VB]AWOL 8971621d26 fixed incorrect code here 2013-12-27 10:04:45 -06:00
[VB]AWOL 70c5195b99 readme 2013-12-19 12:04:45 -06:00
[VB]AWOL ec1bebb2c9 Fixes issue with missing weapons on graves
http://epochmod.com/forum/index.php?/topic/5092-player-grave/?p=33281
2013-12-19 12:03:20 -06:00
[VB]AWOL a3525b4ed6 fixed #916 2013-12-18 10:58:31 -06:00
[VB]AWOL aaac7cf447 added pook bell copters to addons for other maps 2013-12-18 10:22:11 -06:00
[VB]AWOL a84768c603 manual merge of #931 2013-12-17 16:04:34 -06:00
[VB]AWOL f13affcb80 incorrect chainsaw name 2013-12-12 22:17:38 -06:00
[VB]AWOL aae68de9ee 1.0.3.1 released 2013-12-12 16:31:13 -06:00
[VB]AWOL c43caf7ab6 SMD sara example configs 2013-12-12 14:24:38 -06:00
[VB]AWOL 1fd0d5e90d 1.0.3.1 final server pbo 2013-12-12 12:14:46 -06:00
[VB]AWOL 4692a5625f updated sara markers 2013-12-12 12:13:15 -06:00
[VB]AWOL 66a2b92d04 added new loot positions for SMD sara 2013-12-12 11:59:28 -06:00
[VB]AWOL ac397a073b updated for sara mission files 2013-12-12 10:10:34 -06:00
[VB]AWOL 03ec419c29 Added missing tree type for SMD sara 2013-12-12 10:10:14 -06:00
[VB]AWOL de5cab5130 cleanup sara 2013-12-12 09:54:43 -06:00
[VB]AWOL 975835bb40 added spawn BIS_Effects_Burn to battleye restriction 2013-12-11 13:59:54 -06:00
[VB]AWOL 28487215bc bikey for SMD Sara A2 2013-12-11 12:44:18 -06:00
[VB]AWOL f91a06f7a9 added proper SMD_Sara_A2 support 2013-12-11 12:39:42 -06:00
[VB]AWOL 143214b8fd Server pbo 1.0.3.1 2013-12-11 08:48:32 -06:00
[VB]AWOL 51c7d3fc87 use getposalt instead of position here fixes
http://bmrf.me/vbforums/showthread.php?11562-Smelting-Tin-BUG&p=75405#post75405
2013-12-11 08:17:12 -06:00
[VB]AWOL 41ca2e07bc pt2 2013-12-11 00:02:11 -06:00
[VB]AWOL 1709187a2a version bump in config.cfg plus server.pbo 2013-12-10 23:58:53 -06:00
[VB]AWOL 699b7e84a3 Merge branch 'master' of https://github.com/vbawol/DayZ-Epoch 2013-12-10 21:10:56 -06:00
[VB]AWOL d9cad7a734 lower plank pack spawn chance raise sledge handle and fishing pole 2013-12-10 21:08:41 -06:00
[VB]AWOL 454e6ac5c7 increase percent of silver and gold mine 2013-12-10 20:51:44 -06:00
[VB]AWOL b7910c7603 force tags back on if previously enabled after changing clothes 2013-12-10 18:56:39 -06:00
[VB]AWOL e6c9733f1e disallow changing clothes with full chainsaw 2013-12-10 18:56:08 -06:00
[VB]AWOL 8e0e424402 changed revel to use array and persist tag state 2013-12-10 18:10:55 -06:00
[VB]AWOL 66e1a9b10f Prevent changing clothes while wearing a backback
Also removed 10m restriction on other players nearby
2013-12-10 17:30:09 -06:00
[VB]AWOL a10472270a DZE_requireplot override var added = 0 disables requirement 2013-12-10 16:00:27 -06:00
[VB]AWOL e59ceab3ef added 10ths of seconds to abort timer 2013-12-10 15:45:10 -06:00
[VB]AWOL 9299ffe7b6 removed extra onpause causing button flicker after abort was pressed 2013-12-10 15:43:31 -06:00
[VB]AWOL c648cee5f1 revert changes to combat timer 2013-12-10 15:42:22 -06:00
[VB]AWOL 1b0f83e7b7 Merge branch 'master' of https://github.com/vbawol/DayZ-Epoch 2013-12-09 23:27:02 -06:00
[VB]AWOL d7682ac187 not really needed as we log each swap object call already. 2013-12-09 23:26:56 -06:00
[VB]AWOL 3e450bae4e avoid chainsaw from using dayz_meleeMagazineCheck 2013-12-09 23:26:23 -06:00
[VB]AWOL cf82ace63d Sahrani not Chernarus here 2013-12-09 22:40:13 -06:00
[VB]AWOL 7cae21fa06 header updated and send player instead of uid 2013-12-09 22:19:10 -06:00
[VB]AWOL 83a871019a optimize by using only one missionobjects for litobjects 2013-12-09 16:49:58 -06:00
[VB]AWOL 4859b805d0 not working revert 2013-12-09 16:35:50 -06:00
[VB]AWOL 5da0c7fd34 Gems 2013-12-09 16:19:27 -06:00
[VB]AWOL f52c774883 zombie attack range set to static 2.5m 2013-12-09 16:17:59 -06: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
[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