Advertisement
Guest User

mission.sqf

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