Advertisement
Guest User

Untitled

a guest
Dec 9th, 2014
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.45 KB | None | 0 0
  1. [] execVM "\z\addons\dayz_server\init\AH.sqf";
  2. waituntil {!isnil "bis_fnc_init"};
  3.  
  4. BIS_MPF_remoteExecutionServer = {
  5. if ((_this select 1) select 2 == "JIPrequest") then {
  6. [nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE;
  7. };
  8. };
  9.  
  10. BIS_Effects_Burn = {};
  11. server_playerLogin = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf";
  12. server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf";
  13. server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf";
  14. server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf";
  15. server_playerDied = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf";
  16. server_publishObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf";
  17. server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf";
  18. server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf";
  19. server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf";
  20. server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf";
  21. server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf";
  22. server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
  23. server_traders = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf";
  24. server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf";
  25. server_spawnCrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf";
  26. server_spawnEvents = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf";
  27. //server_weather = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_weather.sqf";
  28. fnc_plyrHit = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf";
  29. server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
  30. server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";
  31.  
  32. /* PVS/PVC - Skaronator */
  33. server_sendToClient = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_sendToClient.sqf";
  34.  
  35. #include "\z\addons\dayz_server\bankzones\bankinit.sqf"
  36.  
  37. //onPlayerConnected {[_uid,_name] call server_onPlayerConnect;};
  38. onPlayerDisconnected {[_uid,_name] call server_onPlayerDisconnect;};
  39.  
  40. server_updateNearbyObjects = {
  41. private["_pos"];
  42. _pos = _this select 0;
  43. {
  44. [_x, "gear"] call server_updateObject;
  45. } count nearestObjects [_pos, dayz_updateObjects, 10];
  46. };
  47.  
  48. server_handleZedSpawn = {
  49. private["_zed"];
  50. _zed = _this select 0;
  51. _zed enableSimulation false;
  52. };
  53.  
  54. zombie_findOwner = {
  55. private["_unit"];
  56. _unit = _this select 0;
  57. #ifdef DZE_SERVER_DEBUG
  58. diag_log ("CLEANUP: DELETE UNCONTROLLED ZOMBIE: " + (typeOf _unit) + " OF: " + str(_unit) );
  59. #endif
  60. deleteVehicle _unit;
  61. };
  62.  
  63. vehicle_handleInteract = {
  64. private["_object"];
  65. _object = _this select 0;
  66. needUpdate_objects = needUpdate_objects - [_object];
  67. [_object, "all"] call server_updateObject;
  68. };
  69.  
  70. array_reduceSizeReverse = {
  71. private["_array","_count","_num","_newarray","_startnum","_index"];
  72. _array = _this select 0;
  73. _newarray = [];
  74. _count = _this select 1;
  75. _num = count _array;
  76. if (_num > _count) then {
  77. _startnum = _num - 1;
  78. _index = _count - 1;
  79. for "_i" from 0 to _index do {
  80. _newarray set [(_index-_i),_array select (_startnum - _i)];
  81. };
  82. _array = _newarray;
  83. };
  84. _array
  85. };
  86.  
  87. array_reduceSize = {
  88. private ["_array1","_array","_count","_num"];
  89. _array1 = _this select 0;
  90. _array = _array1 - ["Hatchet_Swing","Machete_Swing","Fishing_Swing","sledge_swing","crowbar_swing","CSGAS"];
  91. _count = _this select 1;
  92. _num = count _array;
  93. if (_num > _count) then {
  94. _array resize _count;
  95. };
  96. _array
  97. };
  98.  
  99. object_handleServerKilled = {
  100. private["_unit","_objectID","_objectUID","_killer"];
  101. _unit = _this select 0;
  102. _killer = _this select 1;
  103.  
  104. _objectID = _unit getVariable ["ObjectID","0"];
  105. _objectUID = _unit getVariable ["ObjectUID","0"];
  106.  
  107. [_objectID,_objectUID,_killer] call server_deleteObj;
  108.  
  109. _unit removeAllMPEventHandlers "MPKilled";
  110. _unit removeAllEventHandlers "Killed";
  111. _unit removeAllEventHandlers "HandleDamage";
  112. _unit removeAllEventHandlers "GetIn";
  113. _unit removeAllEventHandlers "GetOut";
  114. };
  115.  
  116. check_publishobject = {
  117. private["_allowed","_object","_playername"];
  118.  
  119. _object = _this select 0;
  120. _playername = _this select 1;
  121. _allowed = false;
  122.  
  123. if ((typeOf _object) in dayz_allowedObjects) then {
  124. //diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername];
  125. _allowed = true;
  126. };
  127. _allowed
  128. };
  129.  
  130. //event Handlers
  131. eh_localCleanup = {
  132. private ["_object"];
  133. _object = _this select 0;
  134. _object addEventHandler ["local", {
  135. if(_this select 1) then {
  136. private["_type","_unit"];
  137. _unit = _this select 0;
  138. _type = typeOf _unit;
  139. _myGroupUnit = group _unit;
  140. _unit removeAllMPEventHandlers "mpkilled";
  141. _unit removeAllMPEventHandlers "mphit";
  142. _unit removeAllMPEventHandlers "mprespawn";
  143. _unit removeAllEventHandlers "FiredNear";
  144. _unit removeAllEventHandlers "HandleDamage";
  145. _unit removeAllEventHandlers "Killed";
  146. _unit removeAllEventHandlers "Fired";
  147. _unit removeAllEventHandlers "GetOut";
  148. _unit removeAllEventHandlers "GetIn";
  149. _unit removeAllEventHandlers "Local";
  150. clearVehicleInit _unit;
  151. deleteVehicle _unit;
  152. if ((count (units _myGroupUnit) == 0) && (_myGroupUnit != grpNull)) then {
  153. deleteGroup _myGroupUnit;
  154. };
  155. //_unit = nil;
  156. // diag_log ("CLEANUP: DELETED A " + str(_type) );
  157. };
  158. }];
  159. };
  160.  
  161. server_hiveWrite = {
  162. private["_data"];
  163. _data = "HiveExt" callExtension _this;
  164. };
  165.  
  166. server_hiveReadWrite = {
  167. private["_key","_resultArray","_data"];
  168. _key = _this;
  169. _data = "HiveExt" callExtension _key;
  170. _resultArray = call compile format ["%1",_data];
  171. _resultArray
  172. };
  173.  
  174. server_hiveReadWriteLarge = {
  175. private["_key","_resultArray","_data"];
  176. _key = _this;
  177. _data = "HiveExt" callExtension _key;
  178. _resultArray = call compile _data;
  179. _resultArray
  180. };
  181.  
  182. server_checkIfTowed = {
  183. private ["_vehicle","_player","_attached"];
  184. if (DZE_HeliLift) then {
  185. _vehicle = _this select 0;
  186. _player = _this select 2;
  187. _attached = _vehicle getVariable["attached",false];
  188. if (typeName _attached == "OBJECT") then {
  189. _player action ["eject", _vehicle];
  190. detach _vehicle;
  191. _vehicle setVariable["attached",false,true];
  192. _attached setVariable["hasAttached",false,true];
  193. };
  194. };
  195. };
  196. /* Not used, why is this here?
  197. server_characterSync = {
  198. private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"];
  199. _characterID = _this select 0;
  200. _playerPos = _this select 1;
  201. _playerGear = _this select 2;
  202. _playerBackp = _this select 3;
  203. _medical = _this select 4;
  204. _currentState = _this select 5;
  205. _currentModel = _this select 6;
  206.  
  207. _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];
  208. _key call server_hiveWrite;
  209. };
  210. */
  211.  
  212. if(isnil "dayz_MapArea") then {
  213. dayz_MapArea = 10000;
  214. };
  215. if(isnil "DynamicVehicleArea") then {
  216. DynamicVehicleArea = dayz_MapArea / 2;
  217. };
  218.  
  219. // Get all buildings && roads only once TODO: set variables to nil after done if nessicary
  220. MarkerPosition = getMarkerPos "center";
  221. RoadList = MarkerPosition nearRoads DynamicVehicleArea;
  222.  
  223. // Very taxing !!! but only on first startup
  224. BuildingList = [];
  225. {
  226. if (DZE_MissionLootTable) then {
  227. if (isClass (missionConfigFile >> "CfgBuildingLoot" >> (typeOf _x))) then
  228. {
  229. BuildingList set [count BuildingList,_x];
  230. };
  231. } else {
  232. if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then
  233. {
  234. BuildingList set [count BuildingList,_x];
  235. };
  236. };
  237.  
  238.  
  239. } count (MarkerPosition nearObjects ["building",DynamicVehicleArea]);
  240.  
  241. spawn_vehicles = {
  242. private ["_random","_lastIndex","_weights","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"];
  243.  
  244. if (!isDedicated) exitWith { }; //Be sure the run this
  245.  
  246. while {count AllowedVehiclesList > 0} do {
  247. // BIS_fnc_selectRandom replaced because the index may be needed to remove the element
  248. _index = floor random count AllowedVehiclesList;
  249. _random = AllowedVehiclesList select _index;
  250.  
  251. _vehicle = _random select 0;
  252. _velimit = _random select 1;
  253.  
  254. _qty = {_x == _vehicle} count serverVehicleCounter;
  255.  
  256. // If under limit allow to proceed
  257. if (_qty <= _velimit) exitWith {};
  258.  
  259. // vehicle limit reached, remove vehicle from list
  260. // since elements cannot be removed from an array, overwrite it with the last element && cut the last element of (as long as order is not important)
  261. _lastIndex = (count AllowedVehiclesList) - 1;
  262. if (_lastIndex != _index) then {
  263. AllowedVehiclesList set [_index, AllowedVehiclesList select _lastIndex];
  264. };
  265. AllowedVehiclesList resize _lastIndex;
  266. };
  267.  
  268. if (count AllowedVehiclesList == 0) then {
  269. diag_log("DEBUG: unable to find suitable vehicle to spawn");
  270. } else {
  271.  
  272. // add vehicle to counter for next pass
  273. serverVehicleCounter set [count serverVehicleCounter,_vehicle];
  274.  
  275. // Find Vehicle Type to better control spawns
  276. _isAir = _vehicle isKindOf "Air";
  277. _isShip = _vehicle isKindOf "Ship";
  278.  
  279. if(_isShip || _isAir) then {
  280. if(_isShip) then {
  281. // Spawn anywhere on coast on water
  282. waitUntil{!isNil "BIS_fnc_findSafePos"};
  283. _position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos;
  284. //diag_log("DEBUG: spawning boat near coast " + str(_position));
  285. } else {
  286. // Spawn air anywhere that is flat
  287. waitUntil{!isNil "BIS_fnc_findSafePos"};
  288. _position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos;
  289. //diag_log("DEBUG: spawning air anywhere flat " + str(_position));
  290. };
  291.  
  292.  
  293. } else {
  294. // Spawn around buildings && 50% near roads
  295. if((random 1) > 0.5) then {
  296.  
  297. waitUntil{!isNil "BIS_fnc_selectRandom"};
  298. _position = RoadList call BIS_fnc_selectRandom;
  299.  
  300. _position = _position modelToWorld [0,0,0];
  301.  
  302. waitUntil{!isNil "BIS_fnc_findSafePos"};
  303. _position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
  304.  
  305. //diag_log("DEBUG: spawning near road " + str(_position));
  306.  
  307. } else {
  308.  
  309. waitUntil{!isNil "BIS_fnc_selectRandom"};
  310. _position = BuildingList call BIS_fnc_selectRandom;
  311.  
  312. _position = _position modelToWorld [0,0,0];
  313.  
  314. waitUntil{!isNil "BIS_fnc_findSafePos"};
  315. _position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
  316.  
  317. //diag_log("DEBUG: spawning around buildings " + str(_position));
  318.  
  319. };
  320. };
  321. // only proceed if two params otherwise BIS_fnc_findSafePos failed && may spawn in air
  322. if ((count _position) == 2) then {
  323.  
  324. _dir = round(random 180);
  325.  
  326. _istoomany = _position nearObjects ["AllVehicles",50];
  327. if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); };
  328.  
  329. //place vehicle
  330. _veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"];
  331. _veh setdir _dir;
  332. _veh setpos _position;
  333.  
  334. if(DZEdebug) then {
  335. _marker = createMarker [str(_position) , _position];
  336. _marker setMarkerShape "ICON";
  337. _marker setMarkerType "DOT";
  338. _marker setMarkerText _vehicle;
  339. };
  340.  
  341. // Get position with ground
  342. _objPosition = getPosATL _veh;
  343.  
  344. clearWeaponCargoGlobal _veh;
  345. clearMagazineCargoGlobal _veh;
  346. // _veh setVehicleAmmo DZE_vehicleAmmo;
  347.  
  348. // Add 0-3 loots to vehicle using random cfgloots
  349. _num = floor(random 4);
  350. _allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"];
  351.  
  352. for "_x" from 1 to _num do {
  353. _iClass = _allCfgLoots call BIS_fnc_selectRandom;
  354.  
  355. _itemTypes = [];
  356. if (DZE_MissionLootTable) then{
  357. {
  358. _itemTypes set[count _itemTypes, _x select 0]
  359. } count getArray(missionConfigFile >> "cfgLoot" >> _iClass);
  360. }
  361. else {
  362. {
  363. _itemTypes set[count _itemTypes, _x select 0]
  364. } count getArray(configFile >> "cfgLoot" >> _iClass);
  365. };
  366.  
  367. _index = dayz_CLBase find _iClass;
  368. _weights = dayz_CLChances select _index;
  369. _cntWeights = count _weights;
  370.  
  371. _index = floor(random _cntWeights);
  372. _index = _weights select _index;
  373. _itemType = _itemTypes select _index;
  374. _veh addMagazineCargoGlobal [_itemType,1];
  375. //diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType));
  376. };
  377.  
  378. [_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh;
  379. };
  380. };
  381. };
  382.  
  383. spawn_ammosupply = {
  384. private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
  385. if (isDedicated) then {
  386. _WreckList = ["Supply_Crate_DZE"];
  387. waitUntil{!isNil "BIS_fnc_selectRandom"};
  388. _position = RoadList call BIS_fnc_selectRandom;
  389. _position = _position modelToWorld [0,0,0];
  390. waitUntil{!isNil "BIS_fnc_findSafePos"};
  391. _position = [_position,5,20,5,0,2000,0] call BIS_fnc_findSafePos;
  392. if ((count _position) == 2) then {
  393.  
  394. _istoomany = _position nearObjects ["All",5];
  395.  
  396. if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many at " + str(_position)); };
  397.  
  398. _spawnveh = _WreckList call BIS_fnc_selectRandom;
  399.  
  400. if(DZEdebug) then {
  401. _marker = createMarker [str(_position) , _position];
  402. _marker setMarkerShape "ICON";
  403. _marker setMarkerType "DOT";
  404. _marker setMarkerText str(_spawnveh);
  405. };
  406.  
  407. _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
  408. _veh enableSimulation false;
  409. _veh setDir round(random 360);
  410. _veh setpos _position;
  411. _veh setVariable ["ObjectID","1",true];
  412. };
  413. };
  414. };
  415.  
  416. DZE_LocalRoadBlocks = [];
  417.  
  418. spawn_roadblocks = {
  419. private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
  420. _WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"];
  421.  
  422. waitUntil{!isNil "BIS_fnc_selectRandom"};
  423. if (isDedicated) then {
  424.  
  425. _position = RoadList call BIS_fnc_selectRandom;
  426.  
  427. _position = _position modelToWorld [0,0,0];
  428.  
  429. waitUntil{!isNil "BIS_fnc_findSafePos"};
  430. _position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos;
  431.  
  432. if ((count _position) == 2) then {
  433. // Get position with ground
  434.  
  435. _istoomany = _position nearObjects ["All",5];
  436.  
  437. if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); };
  438.  
  439. waitUntil{!isNil "BIS_fnc_selectRandom"};
  440. _spawnveh = _WreckList call BIS_fnc_selectRandom;
  441.  
  442. if(DZEdebug) then {
  443. _marker = createMarker [str(_position) , _position];
  444. _marker setMarkerShape "ICON";
  445. _marker setMarkerType "DOT";
  446. _marker setMarkerText str(_spawnveh);
  447. };
  448.  
  449. _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
  450. _veh enableSimulation false;
  451.  
  452. _veh setDir round(random 360); // Randomize placement a bit
  453. _veh setpos _position;
  454.  
  455. _veh setVariable ["ObjectID","1",true];
  456. };
  457.  
  458. };
  459.  
  460. };
  461.  
  462. spawn_mineveins = {
  463. private ["_position","_veh","_istoomany","_marker","_spawnveh","_positions"];
  464.  
  465. if (isDedicated) then {
  466.  
  467. _position = [getMarkerPos "center",0,(HeliCrashArea*0.75),10,0,2000,0] call BIS_fnc_findSafePos;
  468.  
  469. if ((count _position) == 2) then {
  470.  
  471. _positions = selectBestPlaces [_position, 500, "(1 + forest) * (1 + hills) * (1 - houses) * (1 - sea)", 10, 5];
  472.  
  473. _position = (_positions call BIS_fnc_selectRandom) select 0;
  474.  
  475. // Get position with ground
  476. _istoomany = _position nearObjects ["All",10];
  477.  
  478. if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many objects at " + str(_position)); };
  479.  
  480. if(isOnRoad _position) exitWith { diag_log("DEBUG VEIN: on road " + str(_position)); };
  481.  
  482. _spawnveh = ["Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Gold_Vein_DZE","Gold_Vein_DZE"] call BIS_fnc_selectRandom;
  483.  
  484. if(DZEdebug) then {
  485. _marker = createMarker [str(_position) , _position];
  486. _marker setMarkerShape "ICON";
  487. _marker setMarkerType "DOT";
  488. _marker setMarkerText str(_spawnveh);
  489. };
  490.  
  491. //diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position));
  492. _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
  493. _veh enableSimulation false;
  494.  
  495. // Randomize placement a bit
  496. _veh setDir round(random 360);
  497. _veh setpos _position;
  498.  
  499. _veh setVariable ["ObjectID","1",true];
  500.  
  501.  
  502. };
  503. };
  504. };
  505.  
  506. if(isnil "DynamicVehicleDamageLow") then {
  507. DynamicVehicleDamageLow = 0;
  508. };
  509. if(isnil "DynamicVehicleDamageHigh") then {
  510. DynamicVehicleDamageHigh = 65;
  511. };
  512.  
  513. if(isnil "DynamicVehicleFuelLow") then {
  514. DynamicVehicleFuelLow = 10;
  515. };
  516. if(isnil "DynamicVehicleFuelHigh") then {
  517. DynamicVehicleFuelHigh = 80;
  518. };
  519.  
  520. if(isnil "DZE_DiagFpsSlow") then {
  521. DZE_DiagFpsSlow = false;
  522. };
  523. if(isnil "DZE_DiagFpsFast") then {
  524. DZE_DiagFpsFast = false;
  525. };
  526. if(isnil "DZE_DiagVerbose") then {
  527. DZE_DiagVerbose = false;
  528. };
  529.  
  530. dze_diag_fps = {
  531. if(DZE_DiagVerbose) then {
  532. diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", diag_fps,(count (allMissionObjects "")),(playersNumber west)];
  533. } else {
  534. diag_log format["DEBUG FPS : %1", diag_fps];
  535. };
  536. };
  537.  
  538. // Damage generator function
  539. generate_new_damage = {
  540. private ["_damage"];
  541. _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
  542. _damage;
  543. };
  544.  
  545. // Damage generator fuction
  546. generate_exp_damage = {
  547. private ["_damage"];
  548. _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
  549.  
  550. // limit this to 85% since vehicle would blow up otherwise.
  551. //if(_damage >= 0.85) then {
  552. // _damage = 0.85;
  553. //};
  554. _damage;
  555. };
  556.  
  557. server_getDiff = {
  558. private["_variable","_object","_vNew","_vOld","_result"];
  559. _variable = _this select 0;
  560. _object = _this select 1;
  561. _vNew = _object getVariable[_variable,0];
  562. _vOld = _object getVariable[(_variable + "_CHK"),_vNew];
  563. _result = 0;
  564. if (_vNew < _vOld) then {
  565. //JIP issues
  566. _vNew = _vNew + _vOld;
  567. _object getVariable[(_variable + "_CHK"),_vNew];
  568. } else {
  569. _result = _vNew - _vOld;
  570. _object setVariable[(_variable + "_CHK"),_vNew];
  571. };
  572. _result
  573. };
  574.  
  575. server_getDiff2 = {
  576. private["_variable","_object","_vNew","_vOld","_result"];
  577. _variable = _this select 0;
  578. _object = _this select 1;
  579. _vNew = _object getVariable[_variable,0];
  580. _vOld = _object getVariable[(_variable + "_CHK"),_vNew];
  581. _result = _vNew - _vOld;
  582. _object setVariable[(_variable + "_CHK"),_vNew];
  583. _result
  584. };
  585.  
  586. dayz_objectUID = {
  587. private["_position","_dir","_key","_object"];
  588. _object = _this;
  589. _position = getPosATL _object;
  590. _dir = direction _object;
  591. _key = [_dir,_position] call dayz_objectUID2;
  592. _key
  593. };
  594.  
  595. dayz_objectUID2 = {
  596. private["_position","_dir","_key"];
  597. if((count _this) == 2) then{
  598. _dir = _this select 0;
  599. _key = "";
  600. _position = _this select 1;
  601. {
  602. _x = _x * 10;
  603. if ( _x < 0 ) then { _x = _x * -10 };
  604. _key = _key + str(round(_x));
  605. } count _position;
  606. _key = _key + str(round(_dir));
  607. }else{
  608. if((count _this) == 3) then{
  609. if(typename (_this select 2) == "ARRAY")then{
  610. _vector = _this select 2;
  611. if(count _vector == 2)then{
  612. if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
  613. _key = "";
  614. _position = _this select 1;
  615. {
  616. _x = _x * 10;
  617. if ( _x < 0 ) then { _x = _x * -10 };
  618. _key = _key + str(round(_x));
  619. } count _position;
  620.  
  621. _vecCnt = 0;
  622. {
  623. _set = _x;
  624. {
  625. _vecCnt = _vecCnt + (round (_x * 100))
  626.  
  627. } foreach _set;
  628.  
  629. } foreach _vector;
  630. if(_vecCnt < 0)then{
  631. _vecCnt = ((_vecCnt * -1) * 3);
  632. };
  633. _key = _key + str(_vecCnt);
  634. }else{
  635. _dir = _this select 0;
  636. _key = "";
  637. _position = _this select 1;
  638. {
  639. _x = _x * 10;
  640. if ( _x < 0 ) then { _x = _x * -10 };
  641. _key = _key + str(round(_x));
  642. } count _position;
  643. _key = _key + str(round(_dir));
  644. };
  645. }else{
  646. _dir = _this select 0;
  647. _key = "";
  648. _position = _this select 1;
  649. {
  650. _x = _x * 10;
  651. if ( _x < 0 ) then { _x = _x * -10 };
  652. _key = _key + str(round(_x));
  653. } count _position;
  654. _key = _key + str(round(_dir));
  655. };
  656.  
  657. }else{
  658. _dir = _this select 0;
  659. _key = "";
  660. _position = _this select 1;
  661. {
  662. _x = _x * 10;
  663. if ( _x < 0 ) then { _x = _x * -10 };
  664. _key = _key + str(round(_x));
  665. } count _position;
  666. _key = _key + str(round(_dir));
  667. };
  668. }else{
  669. if((count _this) == 4) then{
  670. if(typename (_this select 3) == "ARRAY")then{
  671. _vector = _this select 3;
  672. if(count _vector == 2)then{
  673. if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
  674. _key = "";
  675. _position = _this select 1;
  676. {
  677. _x = _x * 10;
  678. if ( _x < 0 ) then { _x = _x * -10 };
  679. _key = _key + str(round(_x));
  680. } count _position;
  681.  
  682. _vecCnt = 0;
  683. {
  684. _set = _x;
  685. {
  686. _vecCnt = _vecCnt + (round (_x * 100))
  687.  
  688. } foreach _set;
  689.  
  690. } foreach _vector;
  691. if(_vecCnt < 0)then{
  692. _vecCnt = ((_vecCnt * -1) * 3);
  693. };
  694. _key = _key + str(_vecCnt);
  695. }else{
  696. _dir = _this select 0;
  697. _key = "";
  698. _position = _this select 1;
  699. {
  700. _x = _x * 10;
  701. if ( _x < 0 ) then { _x = _x * -10 };
  702. _key = _key + str(round(_x));
  703. } count _position;
  704. _key = _key + str(round(_dir));
  705. };
  706. }else{
  707. _dir = _this select 0;
  708. _key = "";
  709. _position = _this select 1;
  710. {
  711. _x = _x * 10;
  712. if ( _x < 0 ) then { _x = _x * -10 };
  713. _key = _key + str(round(_x));
  714. } count _position;
  715. _key = _key + str(round(_dir));
  716. };
  717. }else{
  718. if(typename (_this select 2) == "ARRAY")then{
  719. _vector = _this select 2;
  720. if(count _vector == 2)then{
  721. if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
  722. _key = "";
  723. _position = _this select 1;
  724. {
  725. _x = _x * 10;
  726. if ( _x < 0 ) then { _x = _x * -10 };
  727. _key = _key + str(round(_x));
  728. } count _position;
  729.  
  730. _vecCnt = 0;
  731. {
  732. _set = _x;
  733. {
  734. _vecCnt = _vecCnt + (round (_x * 100))
  735.  
  736. } foreach _set;
  737.  
  738. } foreach _vector;
  739. if(_vecCnt < 0)then{
  740. _vecCnt = ((_vecCnt * -1) * 3);
  741. };
  742. _key = _key + str(_vecCnt);
  743. }else{
  744. _dir = _this select 0;
  745. _key = "";
  746. _position = _this select 1;
  747. {
  748. _x = _x * 10;
  749. if ( _x < 0 ) then { _x = _x * -10 };
  750. _key = _key + str(round(_x));
  751. } count _position;
  752. _key = _key + str(round(_dir));
  753. };
  754. }else{
  755. _dir = _this select 0;
  756. _key = "";
  757. _position = _this select 1;
  758. {
  759. _x = _x * 10;
  760. if ( _x < 0 ) then { _x = _x * -10 };
  761. _key = _key + str(round(_x));
  762. } count _position;
  763. _key = _key + str(round(_dir));
  764. };
  765. }else{
  766. _dir = _this select 0;
  767. _key = "";
  768. _position = _this select 1;
  769. {
  770. _x = _x * 10;
  771. if ( _x < 0 ) then { _x = _x * -10 };
  772. _key = _key + str(round(_x));
  773. } count _position;
  774. _key = _key + str(round(_dir));
  775. };
  776. };
  777. }else{
  778. _dir = _this select 0;
  779. _key = "";
  780. _position = _this select 1;
  781. {
  782. _x = _x * 10;
  783. if ( _x < 0 ) then { _x = _x * -10 };
  784. _key = _key + str(round(_x));
  785. } count _position;
  786. _key = _key + str(round(_dir));
  787. };
  788. };
  789.  
  790. };
  791. _key
  792. };
  793.  
  794. dayz_objectUID3 = {
  795. private["_position","_dir","_key"];
  796. _dir = _this select 0;
  797. _key = "";
  798. _position = _this select 1;
  799. {
  800. _x = _x * 10;
  801. if ( _x < 0 ) then { _x = _x * -10 };
  802. _key = _key + str(round(_x));
  803. } count _position;
  804. _key = _key + str(round(_dir + time));
  805. _key
  806. };
  807.  
  808. dayz_recordLogin = {
  809. private["_key"];
  810. _key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2];
  811. _key call server_hiveWrite;
  812. };
  813. #include "ESSconfig.sqf"
  814. currentInvites = [];
  815. publicVariable "currentInvites";
  816.  
  817. dayz_perform_purge = {
  818. if(!isNull(_this)) then {
  819. _group = group _this;
  820. _this removeAllMPEventHandlers "mpkilled";
  821. _this removeAllMPEventHandlers "mphit";
  822. _this removeAllMPEventHandlers "mprespawn";
  823. _this removeAllEventHandlers "FiredNear";
  824. _this removeAllEventHandlers "HandleDamage";
  825. _this removeAllEventHandlers "Killed";
  826. _this removeAllEventHandlers "Fired";
  827. _this removeAllEventHandlers "GetOut";
  828. _this removeAllEventHandlers "GetIn";
  829. _this removeAllEventHandlers "Local";
  830. clearVehicleInit _this;
  831. deleteVehicle _this;
  832. if ((count (units _group) == 0) && (_group != grpNull)) then {
  833. deleteGroup _group;
  834. };
  835. };
  836. };
  837.  
  838. dayz_perform_purge_player = {
  839.  
  840. private ["_countr","_backpack","_backpackType","_backpackWpn","_backpackMag","_objWpnTypes","_objWpnQty","_location","_dir","_holder","_weapons","_magazines"];
  841. diag_log ("Purging player: " + str(_this));
  842.  
  843. if(!isNull(_this)) then {
  844.  
  845. _location = getPosATL _this;
  846. _dir = getDir _this;
  847.  
  848. _holder = createVehicle ["GraveDZE", _location, [], 0, "CAN_COLLIDE"];
  849. _holder setDir _dir;
  850. _holder setPosATL _location;
  851.  
  852. _holder enableSimulation false;
  853.  
  854. _weapons = weapons _this;
  855. _magazines = magazines _this;
  856.  
  857. // find backpack
  858. if(!(isNull unitBackpack _this)) then {
  859. _backpack = unitBackpack _this;
  860. _backpackType = typeOf _backpack;
  861. _backpackWpn = getWeaponCargo _backpack;
  862. _backpackMag = getMagazineCargo _backpack;
  863.  
  864. _holder addBackpackCargoGlobal [_backpackType,1];
  865.  
  866. // add items from backpack
  867. _objWpnTypes = _backpackWpn select 0;
  868. _objWpnQty = _backpackWpn select 1;
  869. _countr = 0;
  870. {
  871. _holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
  872. _countr = _countr + 1;
  873. } count _objWpnTypes;
  874.  
  875. // add backpack magazine items
  876. _objWpnTypes = _backpackMag select 0;
  877. _objWpnQty = _backpackMag select 1;
  878. _countr = 0;
  879. {
  880. _holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
  881. _countr = _countr + 1;
  882. } count _objWpnTypes;
  883. };
  884. };
  885.  
  886. // add weapons
  887. {
  888. _holder addWeaponCargoGlobal [_x, 1];
  889. } count _weapons;
  890.  
  891. // add mags
  892. {
  893. _holder addMagazineCargoGlobal [_x, 1];
  894. } count _magazines;
  895. _group = group _this;
  896. _this removeAllMPEventHandlers "mpkilled";
  897. _this removeAllMPEventHandlers "mphit";
  898. _this removeAllMPEventHandlers "mprespawn";
  899. _this removeAllEventHandlers "FiredNear";
  900. _this removeAllEventHandlers "HandleDamage";
  901. _this removeAllEventHandlers "Killed";
  902. _this removeAllEventHandlers "Fired";
  903. _this removeAllEventHandlers "GetOut";
  904. _this removeAllEventHandlers "GetIn";
  905. _this removeAllEventHandlers "Local";
  906. clearVehicleInit _this;
  907. deleteVehicle _this;
  908. if ((count (units _group) == 0) && (_group != grpNull)) then {
  909. deleteGroup _group;
  910. };
  911. // _this = nil;
  912. };
  913.  
  914.  
  915. dayz_removePlayerOnDisconnect = {
  916. if(!isNull(_this)) then {
  917. _group = group _this;
  918. _this removeAllMPEventHandlers "mphit";
  919. deleteVehicle _this;
  920. deleteGroup (group _this);
  921. };
  922. };
  923.  
  924. server_timeSync = {
  925. //Send request
  926. private ["_hour","_minute","_date","_key","_result","_outcome"];
  927. _key = "CHILD:307:";
  928. _result = _key call server_hiveReadWrite;
  929. _outcome = _result select 0;
  930. if(_outcome == "PASS") then {
  931. _date = _result select 1;
  932.  
  933. if(dayz_fullMoonNights) then {
  934. _hour = _date select 3;
  935. _minute = _date select 4;
  936. //Force full moon nights
  937. _date = [2013,8,3,_hour,_minute];
  938. };
  939.  
  940. setDate _date;
  941. PVDZE_plr_SetDate = _date;
  942. publicVariable "PVDZE_plr_SetDate";
  943. diag_log ("TIME SYNC: Local Time set to " + str(_date));
  944. };
  945. };
  946.  
  947. // must spawn these
  948. server_spawncleanDead = {
  949. private ["_deathTime","_delQtyZ","_delQtyP","_qty","_allDead"];
  950. _allDead = allDead;
  951. _delQtyZ = 0;
  952. _delQtyP = 0;
  953. {
  954. if (local _x) then {
  955. if (_x isKindOf "zZombie_Base") then
  956. {
  957. _x call dayz_perform_purge;
  958. sleep 0.05;
  959. _delQtyZ = _delQtyZ + 1;
  960. } else {
  961. if (_x isKindOf "CAManBase") then {
  962. _deathTime = _x getVariable ["processedDeath", diag_tickTime];
  963. if (diag_tickTime - _deathTime > 1800) then {
  964. _x call dayz_perform_purge_player;
  965. sleep 0.025;
  966. _delQtyP = _delQtyP + 1;
  967. };
  968. };
  969. };
  970. };
  971. sleep 0.025;
  972. } count _allDead;
  973. if (_delQtyZ > 0 || _delQtyP > 0) then {
  974. _qty = count _allDead;
  975. diag_log (format["CLEANUP: Deleted %1 players && %2 zombies out of %3 dead",_delQtyP,_delQtyZ,_qty]);
  976. };
  977. };
  978. server_cleanupGroups = {
  979. if (DZE_DYN_AntiStuck3rd > 3) then { DZE_DYN_GroupCleanup = nil; DZE_DYN_AntiStuck3rd = 0; };
  980. if(!isNil "DZE_DYN_GroupCleanup") exitWith { DZE_DYN_AntiStuck3rd = DZE_DYN_AntiStuck3rd + 1;};
  981. DZE_DYN_GroupCleanup = true;
  982. {
  983. if ((count (units _x) == 0) && (_x != grpNull)) then {
  984. deleteGroup _x;
  985. };
  986. sleep 0.001;
  987. } count allGroups;
  988. DZE_DYN_GroupCleanup = nil;
  989. };
  990.  
  991. server_checkHackers = {
  992. if (DZE_DYN_AntiStuck2nd > 3) then { DZE_DYN_HackerCheck = nil; DZE_DYN_AntiStuck2nd = 0; };
  993. if(!isNil "DZE_DYN_HackerCheck") exitWith { DZE_DYN_AntiStuck2nd = DZE_DYN_AntiStuck2nd + 1;};
  994. DZE_DYN_HackerCheck = true;
  995. {
  996. if (!((isNil "_x") || {(isNull _x)})) then {
  997. if(vehicle _x != _x && !(vehicle _x in PVDZE_serverObjectMonitor) && (isPlayer _x) && !((typeOf vehicle _x) in DZE_safeVehicle)) then {
  998. diag_log ("CLEANUP: KILLING A HACKER " + (name _x) + " " + str(_x) + " IN " + (typeOf vehicle _x));
  999. (vehicle _x) setDamage 1;
  1000. _x setDamage 1;
  1001. sleep 0.25;
  1002. };
  1003. };
  1004. sleep 0.001;
  1005. } count allUnits;
  1006. DZE_DYN_HackerCheck = nil;
  1007. };
  1008.  
  1009. server_spawnCleanFire = {
  1010. private ["_delQtyFP","_qty","_delQtyNull","_missionFires"];
  1011. _missionFires = allMissionObjects "Land_Fire_DZ";
  1012. _delQtyFP = 0;
  1013. {
  1014. if (local _x) then {
  1015. deleteVehicle _x;
  1016. sleep 0.025;
  1017. _delQtyFP = _delQtyFP + 1;
  1018. };
  1019. sleep 0.001;
  1020. } count _missionFires;
  1021. if (_delQtyFP > 0) then {
  1022. _qty = count _missionFires;
  1023. diag_log (format["CLEANUP: Deleted %1 fireplaces out of %2",_delQtyNull,_qty]);
  1024. };
  1025. };
  1026. server_spawnCleanLoot = {
  1027. private ["_created","_delQty","_nearby","_age","_keep","_qty","_missionObjs","_dateNow"];
  1028. if (DZE_DYN_AntiStuck > 3) then { DZE_DYN_cleanLoot = nil; DZE_DYN_AntiStuck = 0; };
  1029. if(!isNil "DZE_DYN_cleanLoot") exitWith { DZE_DYN_AntiStuck = DZE_DYN_AntiStuck + 1;};
  1030. DZE_DYN_cleanLoot = true;
  1031.  
  1032. _missionObjs = allMissionObjects "ReammoBox";
  1033. _delQty = 0;
  1034. _dateNow = (DateToNumber date);
  1035. {
  1036. if (!isNull _x) then {
  1037. _keep = _x getVariable["permaLoot", false];
  1038. if (!_keep) then {
  1039. _created = _x getVariable["created", -0.1];
  1040. if (_created == -0.1) then{
  1041. _x setVariable["created", _dateNow, false];
  1042. _created = _dateNow;
  1043. }
  1044. else {
  1045. _age = (_dateNow - _created) * 525948;
  1046. if (_age > 20) then{
  1047. _nearby = { (isPlayer _x) && (alive _x) } count(_x nearEntities[["CAManBase", "AllVehicles"], 130]);
  1048. if (_nearby == 0) then{
  1049. deleteVehicle _x;
  1050. sleep 0.025;
  1051. _delQty = _delQty + 1;
  1052. };
  1053. };
  1054. };
  1055. };
  1056. };
  1057. sleep 0.001;
  1058. } count _missionObjs;
  1059. if (_delQty > 0) then {
  1060. _qty = count _missionObjs;
  1061. diag_log (format["CLEANUP: Deleted %1 Loot Piles out of %2",_delQty,_qty]);
  1062. };
  1063. DZE_DYN_cleanLoot = nil;
  1064. };
  1065.  
  1066. server_spawnCleanAnimals = {
  1067. private ["_pos","_delQtyAnimal","_qty","_missonAnimals","_nearby"];
  1068. _missonAnimals = entities "CAAnimalBase";
  1069. _delQtyAnimal = 0;
  1070. {
  1071. if (local _x) then {
  1072. _x call dayz_perform_purge;
  1073. sleep 0.05;
  1074. _delQtyAnimal = _delQtyAnimal + 1;
  1075. } else {
  1076. if (!alive _x) then {
  1077. _pos = getPosATL _x;
  1078. if (count _pos > 0) then {
  1079. _nearby = {(isPlayer _x) && (alive _x)} count (_pos nearEntities [["CAManBase","AllVehicles"], 130]);
  1080. if (_nearby==0) then {
  1081. _x call dayz_perform_purge;
  1082. sleep 0.05;
  1083. _delQtyAnimal = _delQtyAnimal + 1;
  1084. };
  1085. };
  1086. };
  1087. };
  1088. sleep 0.001;
  1089. } count _missonAnimals;
  1090. if (_delQtyAnimal > 0) then {
  1091. _qty = count _missonAnimals;
  1092. diag_log (format["CLEANUP: Deleted %1 Animals out of %2",_delQtyAnimal,_qty]);
  1093. };
  1094. };
  1095.  
  1096. server_logUnlockLockEvent = {
  1097. private["_player", "_obj", "_objectID", "_objectUID", "_statusText", "_status"];
  1098. _player = _this select 0;
  1099. _obj = _this select 1;
  1100. _status = _this select 2;
  1101. if (!isNull(_obj)) then {
  1102. _objectID = _obj getVariable["ObjectID", "0"];
  1103. _objectUID = _obj getVariable["ObjectUID", "0"];
  1104. _statusText = "UNLOCKED";
  1105. if (_status) then {
  1106. [_obj, "gear"] call server_updateObject;
  1107. _statusText = "LOCKED";
  1108. };
  1109. diag_log format["SAFE %5: ID:%1 UID:%2 BY %3(%4)", _objectID, _objectUID, (name _player), (getPlayerUID _player), _statusText];
  1110. };
  1111. };
  1112.  
  1113. //Used for Epoch Events
  1114. fnc_refreshMarker = {
  1115. private["_checkInterval","_start_time","_wait_time","_markerName","_position","_marker","_markershape","_markercolor","_markerRadius"];
  1116. _markerName = _this select 0;
  1117. _position = _this select 1;
  1118. _markershape = _this select 2;
  1119. _markercolor = _this select 3;
  1120. _markerRadius = _this select 4;
  1121. _checkInterval = _this select 5;
  1122. _wait_time = _this select 6;
  1123.  
  1124. _start_time = diag_tickTime;
  1125. waitUntil{
  1126. deleteMarker _markerName;
  1127. sleep 1;
  1128. _marker = createMarker [_markerName, _position];
  1129. _marker setMarkerShape _markershape;
  1130. _marker setMarkerColor _markercolor;
  1131. _marker setMarkerAlpha 0.5;
  1132. _marker setMarkerSize [(_markerRadius + 50), (_markerRadius + 50)];
  1133. sleep _checkInterval;
  1134. (diag_tickTime - _start_time) > _wait_time;
  1135. };
  1136. deleteMarker _markerName;
  1137. };
  1138. server_isNearWater = {
  1139. private["_result","_position","_radius"];
  1140. _result = false;
  1141. _position = _this select 0;
  1142. _radius = _this select 1;
  1143.  
  1144. for "_i" from 0 to 359 step 45 do {
  1145. _position = [(_position select 0) + (sin(_i)*_radius), (_position select 1) + (cos(_i)*_radius)];
  1146. if (surfaceIsWater _position) exitWith {
  1147. _result = true;
  1148. };
  1149. };
  1150. _result
  1151. };
  1152.  
  1153. server_findSafePosition = {
  1154. private["_safepos","_validspot","_position","_tavTest","_tavHeight"];
  1155. _safepos = [getMarkerPos "center",0,9500,30,0,0.5,0];
  1156. _validspot = false;
  1157. while{!_validspot} do {
  1158. _position = _safepos call BIS_fnc_findSafePos;
  1159. _validspot = true;
  1160.  
  1161. if ([_position,150] call server_isNearWater) then { _validspot = false; };
  1162.  
  1163. _tavTest = createVehicle ["Can_Small",[_position select 0,_position select 1,0],[], 0, "CAN_COLLIDE"];
  1164. _tavHeight = (getPosASL _tavTest) select 2;
  1165. deleteVehicle _tavTest;
  1166. if(_tavHeight >= 200) then { _validspot = false; };
  1167. };
  1168. _position set [2, 0];
  1169. _position
  1170. };
  1171.  
  1172. ///precise building
  1173. KK_fnc_floatToString = {
  1174. private "_arr";
  1175. if (abs (_this - _this % 1) == 0) exitWith { str _this };
  1176. _arr = toArray str abs (_this % 1);
  1177. _arr set [0, 32];
  1178. toString (toArray str (
  1179. abs (_this - _this % 1) * _this / abs _this
  1180. ) + _arr - [32])
  1181. };
  1182.  
  1183. KK_fnc_positionToString = {
  1184. format [
  1185. "[%1,%2,%3]",
  1186. _this select 0 call KK_fnc_floatToString,
  1187. _this select 1 call KK_fnc_floatToString,
  1188. _this select 2 call KK_fnc_floatToString
  1189. ]
  1190. };
  1191.  
  1192. execVM "\z\addons\dayz_server\init\broadcaster.sqf"; //dzgm
  1193. execVM "\z\addons\dayz_server\init\ESSfloor.sqf"; //ess
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement