Advertisement
Guest User

Untitled

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