Advertisement
Guest User

Untitled

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