Advertisement
Guest User

Untitled

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