Advertisement
Guest User

server_monitor.sqf

a guest
Feb 18th, 2015
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.52 KB | None | 0 0
  1. private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_inventory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded","_ownerPUID"];
  2.  
  3. dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version");
  4. dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
  5.  
  6. _hiveLoaded = false;
  7.  
  8. waitUntil{initialized}; //means all the functions are now defined
  9.  
  10. diag_log "HIVE: Starting";
  11.  
  12. waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player)
  13. //Script enabling/disabling can be done here
  14. //Anti-thief
  15. StealerChecked = true;
  16. StolenFilesCheck = true;
  17. server_fucker_prevention = true;
  18. antitheft = true;
  19. fuckyou = false;
  20. RuslrPlsRuslrNoStahp = true;
  21. fuckshitup = false;
  22. //Siren script
  23. SirenScript = true;
  24. publicVariable "RuslrPlsRuslrNoStahp";
  25. publicVariable "StealerChecked";
  26. publicVariable "StolenFilesCheck";
  27. publicVariable "server_fucker_prevention";
  28. publicVariable "antitheft";
  29. publicVariable "SirenScript";
  30. publicVariable "fuckshitup";
  31. // Custom Configs
  32. if(isnil "MaxVehicleLimit") then {
  33. MaxVehicleLimit = 50;
  34. };
  35.  
  36. if(isnil "MaxDynamicDebris") then {
  37. MaxDynamicDebris = 100;
  38. };
  39. if(isnil "MaxAmmoBoxes") then {
  40. MaxAmmoBoxes = 3;
  41. };
  42. if(isnil "MaxMineVeins") then {
  43. MaxMineVeins = 50;
  44. };
  45. // Custon Configs End
  46.  
  47. if (isServer && isNil "sm_done") then {
  48.  
  49. serverVehicleCounter = [];
  50. _hiveResponse = [];
  51.  
  52. for "_i" from 1 to 5 do {
  53. diag_log "HIVE: trying to get objects";
  54. _key = format["CHILD:302:%1:", dayZ_instance];
  55. _hiveResponse = _key call server_hiveReadWrite;
  56. if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then {
  57. if ((_hiveResponse select 1) == "Instance already initialized") then {
  58. _superkey = profileNamespace getVariable "SUPERKEY";
  59. _shutdown = format["CHILD:400:%1:", _superkey];
  60. _res = _shutdown call server_hiveReadWrite;
  61. diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
  62. } else {
  63. diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
  64.  
  65. };
  66. _hiveResponse = ["",0];
  67. }
  68. else {
  69. diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
  70. _i = 99; // break
  71. };
  72. };
  73.  
  74. _BuildingQueue = [];
  75. _objectQueue = [];
  76.  
  77. if ((_hiveResponse select 0) == "ObjectStreamStart") then {
  78.  
  79. // save superkey
  80. profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)];
  81.  
  82. _hiveLoaded = true;
  83.  
  84. diag_log ("HIVE: Commence Object Streaming...");
  85. _key = format["CHILD:302:%1:", dayZ_instance];
  86. _objectCount = _hiveResponse select 1;
  87. _bQty = 0;
  88. _vQty = 0;
  89. for "_i" from 1 to _objectCount do {
  90. _hiveResponse = _key call server_hiveReadWriteLarge;
  91. //diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
  92. if ((_hiveResponse select 2) isKindOf "ModularItems") then {
  93. _BuildingQueue set [_bQty,_hiveResponse];
  94. _bQty = _bQty + 1;
  95. } else {
  96. _objectQueue set [_vQty,_hiveResponse];
  97. _vQty = _vQty + 1;
  98. };
  99. };
  100. diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles");
  101. };
  102.  
  103. // # NOW SPAWN OBJECTS #
  104. _totalvehicles = 0;
  105. {
  106. _idKey = _x select 1;
  107. _type = _x select 2;
  108. _ownerID = _x select 3;
  109.  
  110. _worldspace = _x select 4;
  111. _inventory = _x select 5;
  112. _hitPoints = _x select 6;
  113. _fuel = _x select 7;
  114. _damage = _x select 8;
  115.  
  116. _dir = 0;
  117. _pos = [0,0,0];
  118. _wsDone = false;
  119. if (count _worldspace >= 2) then
  120. {
  121.  
  122. if ((typeName (_worldspace select 0)) == "STRING") then {
  123. _worldspace set [0, call compile (_worldspace select 0)];
  124. _worldspace set [1, call compile (_worldspace select 1)];
  125. };
  126.  
  127. _dir = _worldspace select 0;
  128. if (count (_worldspace select 1) == 3) then {
  129. _pos = _worldspace select 1;
  130. _wsDone = true;
  131. }
  132. };
  133.  
  134. if (!_wsDone) then {
  135. if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
  136. _pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
  137. if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
  138. diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
  139. };
  140.  
  141. // Realign characterID to OwnerPUID - need to force save though.
  142.  
  143. if (count _worldspace < 3) then
  144. {
  145. _worldspace set [count _worldspace, "0"];
  146. };
  147. _ownerPUID = _worldspace select 2;
  148.  
  149. // diag_log format["Server_monitor: [ObjectID = %1] [ClassID = %2] [_ownerPUID = %3]", _idKey, _type, _ownerPUID];
  150.  
  151. if (_damage < 1) then {
  152. //diag_log format["OBJ: %1 - %2", _idKey,_type];
  153.  
  154. //Create it
  155. _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
  156. _object setVariable ["lastUpdate",time];
  157. _object setVariable ["ObjectID", _idKey, true];
  158. _object setVariable ["OwnerPUID", _ownerPUID, true];
  159.  
  160. _lockable = 0;
  161. if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
  162. _lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
  163. };
  164.  
  165. // fix for leading zero issues on safe codes after restart
  166. if (_lockable == 4) then {
  167. _codeCount = (count (toArray _ownerID));
  168. if(_codeCount == 3) then {
  169. _ownerID = format["0%1", _ownerID];
  170. };
  171. if(_codeCount == 2) then {
  172. _ownerID = format["00%1", _ownerID];
  173. };
  174. if(_codeCount == 1) then {
  175. _ownerID = format["000%1", _ownerID];
  176. };
  177. };
  178.  
  179. if (_lockable == 3) then {
  180. _codeCount = (count (toArray _ownerID));
  181. if(_codeCount == 2) then {
  182. _ownerID = format["0%1", _ownerID];
  183. };
  184. if(_codeCount == 1) then {
  185. _ownerID = format["00%1", _ownerID];
  186. };
  187. };
  188.  
  189. _object setVariable ["CharacterID", _ownerID, true];
  190.  
  191. clearWeaponCargoGlobal _object;
  192. clearMagazineCargoGlobal _object;
  193. // _object setVehicleAmmo DZE_vehicleAmmo;
  194.  
  195. _object setdir _dir;
  196. _object setposATL _pos;
  197. _object setDamage _damage;
  198.  
  199. if ((typeOf _object) in dayz_allowedObjects) then {
  200. if (DZE_GodModeBase) then {
  201. _object addEventHandler ["HandleDamage", {false}];
  202. } else {
  203. _object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
  204. };
  205. // Test disabling simulation server side on buildables only.
  206. _object enableSimulation false;
  207. // used for inplace upgrades && lock/unlock of safe
  208. _object setVariable ["OEMPos", _pos, true];
  209.  
  210. };
  211.  
  212. if (count _inventory > 0) then {
  213. /*ZSC*/
  214. if( count (_inventory) > 3)then{
  215. _object setVariable ["bankMoney", _inventory select 3, true];
  216. }else{
  217. _object setVariable ["bankMoney", 0, true];
  218. };
  219. /*ZSC*/
  220. if (_type in DZE_LockedStorage) then {
  221. // Fill variables with loot
  222. _object setVariable ["WeaponCargo", (_inventory select 0),true];
  223. _object setVariable ["MagazineCargo", (_inventory select 1),true];
  224. _object setVariable ["BackpackCargo", (_inventory select 2),true];
  225. } else {
  226.  
  227. //Add weapons
  228. _objWpnTypes = (_inventory select 0) select 0;
  229. _objWpnQty = (_inventory select 0) select 1;
  230. _countr = 0;
  231. {
  232. if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
  233. _x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
  234. };
  235. _isOK = isClass(configFile >> "CfgWeapons" >> _x);
  236. if (_isOK) then {
  237. _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
  238. };
  239. _countr = _countr + 1;
  240. } count _objWpnTypes;
  241.  
  242. //Add Magazines
  243. _objWpnTypes = (_inventory select 1) select 0;
  244. _objWpnQty = (_inventory select 1) select 1;
  245. _countr = 0;
  246. {
  247. if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
  248. if (_x == "ItemTent") then { _x = "ItemTentOld" };
  249. _isOK = isClass(configFile >> "CfgMagazines" >> _x);
  250. if (_isOK) then {
  251. _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
  252. };
  253. _countr = _countr + 1;
  254. } count _objWpnTypes;
  255.  
  256. //Add Backpacks
  257. _objWpnTypes = (_inventory select 2) select 0;
  258. _objWpnQty = (_inventory select 2) select 1;
  259. _countr = 0;
  260. {
  261. _isOK = isClass(configFile >> "CfgVehicles" >> _x);
  262. if (_isOK) then {
  263. _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
  264. };
  265. _countr = _countr + 1;
  266. } count _objWpnTypes;
  267. };
  268. };
  269.  
  270. if (_object isKindOf "AllVehicles") then {
  271. {
  272. _selection = _x select 0;
  273. _dam = _x select 1;
  274. if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
  275. [_object,_selection,_dam] call object_setFixServer;
  276. } count _hitpoints;
  277.  
  278. _object setFuel _fuel;
  279.  
  280. if (!((typeOf _object) in dayz_allowedObjects)) then {
  281.  
  282. //_object setvelocity [0,0,1];
  283. _object call fnc_veh_ResetEH;
  284.  
  285. if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then {
  286. _object setvehiclelock "locked";
  287. };
  288.  
  289. _totalvehicles = _totalvehicles + 1;
  290.  
  291. // total each vehicle
  292. serverVehicleCounter set [count serverVehicleCounter,_type];
  293. };
  294. };
  295.  
  296. //Monitor the object
  297. PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
  298. };
  299. } forEach (_BuildingQueue + _objectQueue);
  300. // # END SPAWN OBJECTS #
  301.  
  302. // preload server traders menu data into cache
  303. if !(DZE_ConfigTrader) then {
  304. {
  305. // get tids
  306. _traderData = call compile format["menu_%1;",_x];
  307. if(!isNil "_traderData") then {
  308. {
  309. _traderid = _x select 1;
  310.  
  311. _retrader = [];
  312.  
  313. _key = format["CHILD:399:%1:",_traderid];
  314. _data = "HiveEXT" callExtension _key;
  315.  
  316. //diag_log "HIVE: Request sent";
  317.  
  318. //Process result
  319. _result = call compile format ["%1",_data];
  320. _status = _result select 0;
  321.  
  322. if (_status == "ObjectStreamStart") then {
  323. _val = _result select 1;
  324. //Stream Objects
  325. //diag_log ("HIVE: Commence Menu Streaming...");
  326. call compile format["ServerTcache_%1 = [];",_traderid];
  327. for "_i" from 1 to _val do {
  328. _data = "HiveEXT" callExtension _key;
  329. _result = call compile format ["%1",_data];
  330. call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
  331. _retrader set [count _retrader,_result];
  332. };
  333. //diag_log ("HIVE: Streamed " + str(_val) + " objects");
  334. };
  335.  
  336. } forEach (_traderData select 0);
  337. };
  338. } forEach serverTraders;
  339. };
  340.  
  341. if (_hiveLoaded) then {
  342. // spawn_vehicles
  343. _vehLimit = MaxVehicleLimit - _totalvehicles;
  344. if(_vehLimit > 0) then {
  345. diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
  346. for "_x" from 1 to _vehLimit do {
  347. [] spawn spawn_vehicles;
  348. };
  349. } else {
  350. diag_log "HIVE: Vehicle Spawn limit reached!";
  351. };
  352. };
  353.  
  354. // spawn_roadblocks
  355. diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
  356. for "_x" from 1 to MaxDynamicDebris do {
  357. [] spawn spawn_roadblocks;
  358. };
  359. // spawn_ammosupply at server start 1% of roadblocks
  360. diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
  361. for "_x" from 1 to MaxAmmoBoxes do {
  362. [] spawn spawn_ammosupply;
  363. };
  364. // call spawning mining veins
  365. diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
  366. for "_x" from 1 to MaxMineVeins do {
  367. [] spawn spawn_mineveins;
  368. };
  369.  
  370. if(isnil "dayz_MapArea") then {
  371. dayz_MapArea = 10000;
  372. };
  373. if(isnil "HeliCrashArea") then {
  374. HeliCrashArea = dayz_MapArea / 2;
  375. };
  376. if(isnil "OldHeliCrash") then {
  377. OldHeliCrash = false;
  378. };
  379.  
  380. // [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
  381. if(OldHeliCrash) then {
  382. _nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite;
  383. };
  384. if (isDedicated) then {
  385. // Epoch Events
  386. _id = [] spawn server_spawnEvents;
  387. // server cleanup
  388. [] spawn {
  389. private ["_id"];
  390. sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart
  391. waitUntil {!isNil "server_spawnCleanAnimals"};
  392. _id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
  393. };
  394.  
  395. // spawn debug box
  396. _debugMarkerPosition = getMarkerPos "respawn_west";
  397. _debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition select 1),1];
  398. _vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
  399. _vehicle_0 setPos _debugMarkerPosition;
  400. _vehicle_0 setVariable ["ObjectID","1",true];
  401.  
  402. // max number of spawn markers
  403. if(isnil "spawnMarkerCount") then {
  404. spawnMarkerCount = 10;
  405. };
  406. actualSpawnMarkerCount = 0;
  407. // count valid spawn marker positions
  408. for "_i" from 0 to spawnMarkerCount do {
  409. if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then {
  410. actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
  411. } else {
  412. // exit since we did not find any further markers
  413. _i = spawnMarkerCount + 99;
  414. };
  415.  
  416. };
  417. diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
  418.  
  419. endLoadingScreen;
  420. };
  421.  
  422. allowConnection = true;
  423. sm_done = true;
  424. publicVariable "sm_done";
  425. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement