Guest User

server_functions.sqf

a guest
Sep 24th, 2013
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.73 KB | None | 0 0
  1. waituntil {!isnil "bis_fnc_init"};
  2.  
  3. BIS_MPF_remoteExecutionServer = {
  4. if ((_this select 1) select 2 == "JIPrequest") then {
  5. [nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE;
  6. };
  7. };
  8.  
  9. BIS_Effects_Burn = {};
  10. server_playerLogin = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf";
  11. server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf";
  12. server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf";
  13. server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf";
  14. server_playerDied = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf";
  15. server_publishObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf"; //Creates the object in DB
  16. server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf"; //Removes the object from the DB
  17. server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf";
  18. server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; // Custom to add vehicles
  19. server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; // Custom to add vehicles
  20. server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
  21. server_traders = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf";
  22. server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf";
  23. zombie_findOwner = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_findOwner.sqf";
  24. server_updateNearbyObjects = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateNearbyObjects.sqf";
  25. server_spawnCrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf";
  26. server_handleZedSpawn = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_handleZedSpawn.sqf";
  27. server_spawnEvents = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf";
  28.  
  29. fnc_plyrHit = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf";
  30. fnc_hTime = compile preprocessFile "\z\addons\dayz_server\Missions\misc\fnc_hTime.sqf"; //Random integer selector for mission wait time
  31. server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
  32.  
  33.  
  34. vehicle_handleInteract = {
  35. private["_object"];
  36. _object = _this select 0;
  37. needUpdate_objects = needUpdate_objects - [_object];
  38. [_object, "all"] call server_updateObject;
  39. };
  40.  
  41. vehicle_handleServerKilled = {
  42. private["_unit","_killer"];
  43. _unit = _this select 0;
  44. _killer = _this select 1;
  45.  
  46. [_unit, "killed"] call server_updateObject;
  47.  
  48. _unit removeAllMPEventHandlers "MPKilled";
  49. _unit removeAllEventHandlers "Killed";
  50. _unit removeAllEventHandlers "HandleDamage";
  51. _unit removeAllEventHandlers "GetIn";
  52. _unit removeAllEventHandlers "GetOut";
  53. };
  54.  
  55. object_handleServerKilled = {
  56. private["_unit","_objectID","_objectUID"];
  57. _unit = _this select 0;
  58.  
  59. _objectID = _unit getVariable ["ObjectID","0"];
  60. _objectUID = _unit getVariable ["ObjectUID","0"];
  61.  
  62. [_objectID,_objectUID] call server_deleteObj;
  63.  
  64. _unit removeAllMPEventHandlers "MPKilled";
  65. _unit removeAllEventHandlers "Killed";
  66. _unit removeAllEventHandlers "HandleDamage";
  67. _unit removeAllEventHandlers "GetIn";
  68. _unit removeAllEventHandlers "GetOut";
  69. };
  70.  
  71. check_publishobject = {
  72. private["_allowed","_object","_playername"];
  73.  
  74. _object = _this select 0;
  75. _playername = _this select 1;
  76.  
  77. _allowed = false;
  78.  
  79. //diag_log format ["DEBUG: Checking if Object: %1 is allowed published by %2", _object, _playername];
  80.  
  81. if ((typeOf _object) in dayz_allowedObjects) then {
  82. //diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername];
  83. _allowed = true;
  84. };
  85. _allowed
  86. };
  87.  
  88. //event Handlers
  89. eh_localCleanup = {
  90. private ["_object"];
  91. _object = _this select 0;
  92. _object addEventHandler ["local", {
  93. if(_this select 1) then {
  94. private["_type","_unit"];
  95. _unit = _this select 0;
  96. _type = typeOf _unit;
  97. _myGroupUnit = group _unit;
  98. _unit removeAllMPEventHandlers "mpkilled";
  99. _unit removeAllMPEventHandlers "mphit";
  100. _unit removeAllMPEventHandlers "mprespawn";
  101. _unit removeAllEventHandlers "FiredNear";
  102. _unit removeAllEventHandlers "HandleDamage";
  103. _unit removeAllEventHandlers "Killed";
  104. _unit removeAllEventHandlers "Fired";
  105. _unit removeAllEventHandlers "GetOut";
  106. _unit removeAllEventHandlers "GetIn";
  107. _unit removeAllEventHandlers "Local";
  108. clearVehicleInit _unit;
  109. deleteVehicle _unit;
  110. deleteGroup _myGroupUnit;
  111. _unit = nil;
  112. diag_log ("CLEANUP: DELETED A " + str(_type) );
  113. };
  114. }];
  115. };
  116.  
  117. server_hiveWrite = {
  118. private["_data"];
  119. //diag_log ("ATTEMPT WRITE: " + _this);
  120. _data = "HiveExt" callExtension _this;
  121. //diag_log ("WRITE: " +str(_data));
  122. };
  123.  
  124. server_hiveReadWrite = {
  125. private["_key","_resultArray","_data"];
  126. _key = _this;
  127. //diag_log ("ATTEMPT READ/WRITE: " + _key);
  128. _data = "HiveExt" callExtension _key;
  129. //diag_log ("READ/WRITE: " +str(_data));
  130. _resultArray = call compile format ["%1",_data];
  131. _resultArray
  132. };
  133.  
  134. server_characterSync = {
  135. private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"];
  136. _characterID = _this select 0;
  137. _playerPos = _this select 1;
  138. _playerGear = _this select 2;
  139. _playerBackp = _this select 3;
  140. _medical = _this select 4;
  141. _currentState = _this select 5;
  142. _currentModel = _this select 6;
  143.  
  144. _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];
  145. //diag_log ("HIVE: WRITE: "+ str(_key) + " / " + _characterID);
  146. _key call server_hiveWrite;
  147. };
  148.  
  149. //onPlayerConnected "[_uid,_name] spawn server_onPlayerConnect;";
  150. onPlayerDisconnected "[_uid,_name] call server_onPlayerDisconnect;";
  151.  
  152. // Setup globals allow overwrite from init.sqf
  153. if(isnil "dayz_MapArea") then {
  154. dayz_MapArea = 10000;
  155. };
  156. if(isnil "DynamicVehicleArea") then {
  157. DynamicVehicleArea = dayz_MapArea / 2;
  158. };
  159.  
  160. // Get all buildings and roads only once TODO: set variables to nil after done if nessicary
  161. MarkerPosition = getMarkerPos "center";
  162. RoadList = MarkerPosition nearRoads DynamicVehicleArea;
  163.  
  164. BuildingList = [];
  165. {
  166. if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then
  167. {
  168. BuildingList set [count BuildingList,_x];
  169. };
  170. } forEach (MarkerPosition nearObjects ["building",DynamicVehicleArea]);
  171.  
  172. spawn_vehicles = {
  173. private ["_weights","_isOverLimit","_isAbort","_counter","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"];
  174.  
  175. if (isDedicated) then {
  176. waituntil {!isnil "fnc_buildWeightedArray"};
  177.  
  178. _isOverLimit = true;
  179. _isAbort = false;
  180. _counter = 0;
  181. while {_isOverLimit} do {
  182.  
  183. waitUntil{!isNil "BIS_fnc_selectRandom"};
  184. _index = AllowedVehiclesList call BIS_fnc_selectRandom;
  185.  
  186. _vehicle = _index select 0;
  187. _velimit = _index select 1;
  188.  
  189. _qty = {_x == _vehicle} count serverVehicleCounter;
  190.  
  191. // If under limit allow to proceed
  192. if(_qty <= _velimit) then {
  193. _isOverLimit = false;
  194. };
  195.  
  196. // counter to stop after 5 attempts
  197. _counter = _counter + 1;
  198.  
  199. if(_counter >= 5) then {
  200. _isOverLimit = false;
  201. _isAbort = true;
  202. };
  203. };
  204.  
  205. if (_isAbort) then {
  206. diag_log("DEBUG: unable to find sutable vehicle to spawn");
  207. } else {
  208.  
  209. // add vehicle to counter for next pass
  210. serverVehicleCounter set [count serverVehicleCounter,_vehicle];
  211.  
  212. // Find Vehicle Type to better control spawns
  213. _isAir = _vehicle isKindOf "Air";
  214. _isShip = _vehicle isKindOf "Ship";
  215.  
  216. if(_isShip || _isAir) then {
  217. if(_isShip) then {
  218. // Spawn anywhere on coast on water
  219. waitUntil{!isNil "BIS_fnc_selectRandom"};
  220. _position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos;
  221. //diag_log("DEBUG: spawning boat near coast " + str(_position));
  222. } else {
  223. // Spawn air anywhere that is flat
  224. waitUntil{!isNil "BIS_fnc_selectRandom"};
  225. _position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos;
  226. //diag_log("DEBUG: spawning air anywhere flat " + str(_position));
  227. };
  228.  
  229.  
  230. } else {
  231. // Spawn around buildings and 50% near roads
  232. if((random 1) > 0.5) then {
  233.  
  234. waitUntil{!isNil "BIS_fnc_selectRandom"};
  235. _position = RoadList call BIS_fnc_selectRandom;
  236.  
  237. _position = _position modelToWorld [0,0,0];
  238.  
  239. waitUntil{!isNil "BIS_fnc_findSafePos"};
  240. _position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
  241.  
  242. //diag_log("DEBUG: spawning near road " + str(_position));
  243.  
  244. } else {
  245.  
  246. waitUntil{!isNil "BIS_fnc_selectRandom"};
  247. _position = BuildingList call BIS_fnc_selectRandom;
  248.  
  249. _position = _position modelToWorld [0,0,0];
  250.  
  251. waitUntil{!isNil "BIS_fnc_findSafePos"};
  252. _position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
  253.  
  254. //diag_log("DEBUG: spawning around buildings " + str(_position));
  255.  
  256. };
  257. };
  258. // only proceed if two params otherwise BIS_fnc_findSafePos failed and may spawn in air
  259. if ((count _position) == 2) then {
  260.  
  261. _dir = round(random 180);
  262.  
  263. _istoomany = _position nearObjects ["AllVehicles",50];
  264. if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); };
  265.  
  266. //place vehicle
  267. _veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"];
  268. _veh setdir _dir;
  269. _veh setpos _position;
  270.  
  271. if(DZEdebug) then {
  272. _marker = createMarker [str(_position) , _position];
  273. _marker setMarkerShape "ICON";
  274. _marker setMarkerType "DOT";
  275. _marker setMarkerText _vehicle;
  276. };
  277.  
  278. // Get position with ground
  279. _objPosition = getPosATL _veh;
  280.  
  281. clearWeaponCargoGlobal _veh;
  282. clearMagazineCargoGlobal _veh;
  283.  
  284. // Add 0-3 loots to vehicle using random cfgloots
  285. _num = floor(random 4);
  286. _allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"];
  287.  
  288. for "_x" from 1 to _num do {
  289. _iClass = _allCfgLoots call BIS_fnc_selectRandom;
  290.  
  291. _itemTypes = [] + ((getArray (configFile >> "cfgLoot" >> _iClass)) select 0);
  292. _index = dayz_CLBase find _iClass;
  293. _weights = dayz_CLChances select _index;
  294. _cntWeights = count _weights;
  295.  
  296. _index = floor(random _cntWeights);
  297. _index = _weights select _index;
  298. _itemType = _itemTypes select _index;
  299. _veh addMagazineCargoGlobal [_itemType,1];
  300. //diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType));
  301. };
  302.  
  303. [_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh;
  304. };
  305. };
  306. };
  307. };
  308.  
  309. spawn_roadblocks = {
  310. private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
  311. _WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"];
  312.  
  313. waitUntil{!isNil "BIS_fnc_selectRandom"};
  314. if (isDedicated) then {
  315.  
  316. _position = RoadList call BIS_fnc_selectRandom;
  317.  
  318. _position = _position modelToWorld [0,0,0];
  319.  
  320. waitUntil{!isNil "BIS_fnc_findSafePos"};
  321. _position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos;
  322.  
  323. if ((count _position) == 2) then {
  324. // Get position with ground
  325.  
  326. _istoomany = _position nearObjects ["All",5];
  327.  
  328. if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); };
  329.  
  330. if(DZEdebug) then {
  331. _marker = createMarker [str(_position) , _position];
  332. _marker setMarkerShape "ICON";
  333. _marker setMarkerType "DOT";
  334. };
  335.  
  336. waitUntil{!isNil "BIS_fnc_selectRandom"};
  337. _spawnveh = _WreckList call BIS_fnc_selectRandom;
  338.  
  339. //diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position));
  340. _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
  341. _veh enableSimulation false;
  342.  
  343. // Randomize placement a bit
  344. _veh setDir round(random 360);
  345. _veh setpos _position;
  346.  
  347. _veh setVariable ["ObjectID","1",true];
  348. };
  349.  
  350. };
  351.  
  352. };
  353.  
  354. if(isnil "DynamicVehicleDamageLow") then {
  355. DynamicVehicleDamageLow = 0;
  356. };
  357. if(isnil "DynamicVehicleDamageHigh") then {
  358. DynamicVehicleDamageHigh = 100;
  359. };
  360.  
  361. if(isnil "DynamicVehicleFuelLow") then {
  362. DynamicVehicleFuelLow = 0;
  363. };
  364. if(isnil "DynamicVehicleFuelHigh") then {
  365. DynamicVehicleFuelHigh = 100;
  366. };
  367.  
  368. // Damage generator function
  369. generate_new_damage = {
  370. private ["_damage"];
  371. _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
  372. _damage;
  373. };
  374.  
  375. // Damage generator fuction
  376. generate_exp_damage = {
  377. private ["_damage"];
  378. _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
  379.  
  380. // limit this to 85% since vehicle would blow up otherwise.
  381. //if(_damage >= 0.85) then {
  382. // _damage = 0.85;
  383. //};
  384. _damage;
  385. };
  386.  
  387. server_getDiff = {
  388. private["_variable","_object","_vNew","_vOld","_result"];
  389. _variable = _this select 0;
  390. _object = _this select 1;
  391. _vNew = _object getVariable[_variable,0];
  392. _vOld = _object getVariable[(_variable + "_CHK"),_vNew];
  393. _result = 0;
  394. if (_vNew < _vOld) then {
  395. //JIP issues
  396. _vNew = _vNew + _vOld;
  397. _object getVariable[(_variable + "_CHK"),_vNew];
  398. } else {
  399. _result = _vNew - _vOld;
  400. _object setVariable[(_variable + "_CHK"),_vNew];
  401. };
  402. _result
  403. };
  404.  
  405. server_getDiff2 = {
  406. private["_variable","_object","_vNew","_vOld","_result"];
  407. _variable = _this select 0;
  408. _object = _this select 1;
  409. _vNew = _object getVariable[_variable,0];
  410. _vOld = _object getVariable[(_variable + "_CHK"),_vNew];
  411. _result = _vNew - _vOld;
  412. _object setVariable[(_variable + "_CHK"),_vNew];
  413. _result
  414. };
  415.  
  416. dayz_objectUID = {
  417. private["_position","_dir","_key","_object"];
  418. _object = _this;
  419. _position = getPosATL _object;
  420. _dir = direction _object;
  421. _key = [_dir,_position] call dayz_objectUID2;
  422. _key
  423. };
  424.  
  425. dayz_objectUID2 = {
  426. private["_position","_dir","_key"];
  427. _dir = _this select 0;
  428. _key = "";
  429. _position = _this select 1;
  430. {
  431. _x = _x * 10;
  432. if ( _x < 0 ) then { _x = _x * -10 };
  433. _key = _key + str(round(_x));
  434. } forEach _position;
  435. _key = _key + str(round(_dir));
  436. _key
  437. };
  438.  
  439. dayz_objectUID3 = {
  440. private["_position","_dir","_key"];
  441. _dir = _this select 0;
  442. _key = "";
  443. _position = _this select 1;
  444. {
  445. _x = _x * 10;
  446. if ( _x < 0 ) then { _x = _x * -10 };
  447. _key = _key + str(round(_x));
  448. } forEach _position;
  449. _key = _key + str(round(_dir + time));
  450. _key
  451. };
  452.  
  453. dayz_recordLogin = {
  454. private["_key"];
  455. _key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2];
  456. _key call server_hiveWrite;
  457. };
  458.  
  459. MissionGo = 0;
  460. MissionGoMinor = 0;
  461. if (isServer) then {
  462. SMarray = ["SM1","SM2","SM3","SM4","SM5","SM6"];
  463. [] execVM "\z\addons\dayz_server\missions\major\SMfinder.sqf"; //Starts major mission system
  464. SMarray2 = ["SM1","SM2","SM3","SM4","SM5","SM6"];
  465. [] execVM "\z\addons\dayz_server\missions\minor\SMfinder.sqf"; //Starts minor mission system
  466. };
  467.  
  468. server_cleanDead = {
  469. private ["_objectPos","_noPlayerNear"];
  470. {
  471. if (_x isKindOf "zZombie_Base") then
  472. {
  473. deleteVehicle _x;
  474. };
  475. } forEach allDead;
  476. };
  477.  
  478. server_cleanLoot =
  479. {
  480. private ["_deletedLoot","_startTime","_looted","_objectPos","_noPlayerNear","_nearObj"];
  481.  
  482. _deletedLoot = 0;
  483. _startTime = diag_tickTime;
  484.  
  485. {
  486. _looted = (_x getVariable ["looted",-0.1]);
  487. if (_looted != -0.1) then
  488. {
  489. _objectPos = getPosATL _x;
  490. _noPlayerNear = {isPlayer _x} count (_objectPos nearEntities ["CAManBase",35]) == 0;
  491.  
  492. if (_noPlayerNear) then
  493. {
  494. _nearObj = nearestObjects [_objectPos,["ReammoBox","WeaponHolder","WeaponHolderBase"],((sizeOf (typeOf _x)) + 5)];
  495. {
  496. deleteVehicle _x;
  497. _deletedLoot = _deletedLoot + 1;
  498. } forEach _nearObj;
  499. _x setVariable ["looted",-0.1,true];
  500. };
  501. };
  502. } forEach BuildingList;
  503.  
  504. _endTime = diag_tickTime;
  505.  
  506. diag_log (format["CLEANUP: DELETED %1 ITEMS, RUNTIME: %2",_deletedLoot,(_endTime - _startTime)]);
  507. };
Advertisement
Add Comment
Please, Sign In to add comment