Advertisement
Guest User

server_monitor

a guest
Aug 8th, 2014
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.49 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. // Custom Configs
  15. if(isnil "MaxVehicleLimit") then {
  16.     MaxVehicleLimit = 50;
  17. };
  18.  
  19. if(isnil "MaxDynamicDebris") then {
  20.     MaxDynamicDebris = 100;
  21. };
  22. if(isnil "MaxAmmoBoxes") then {
  23.     MaxAmmoBoxes = 3;
  24. };
  25. if(isnil "MaxMineVeins") then {
  26.     MaxMineVeins = 50;
  27. };
  28. // Custon Configs End
  29.  
  30. if (isServer && isNil "sm_done") then {
  31.  
  32.     serverVehicleCounter = [];
  33.     _hiveResponse = [];
  34.  
  35.     for "_i" from 1 to 5 do {
  36.         diag_log "HIVE: trying to get objects";
  37.         _key = format["CHILD:302:%1:", dayZ_instance];
  38.         _hiveResponse = _key call server_hiveReadWrite;  
  39.         if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then {
  40.             if ((_hiveResponse select 1) == "Instance already initialized") then {
  41.                 _superkey = profileNamespace getVariable "SUPERKEY";
  42.                 _shutdown = format["CHILD:400:%1:", _superkey];
  43.                 _res = _shutdown call server_hiveReadWrite;
  44.                 diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
  45.             } else {
  46.                 diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
  47.            
  48.             };
  49.             _hiveResponse = ["",0];
  50.         }
  51.         else {
  52.             diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
  53.             _i = 99; // break
  54.         };
  55.     };
  56.    
  57.     _BuildingQueue = [];
  58.     _objectQueue = [];
  59.    
  60.     if ((_hiveResponse select 0) == "ObjectStreamStart") then {
  61.    
  62.         // save superkey
  63.         profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)];
  64.        
  65.         _hiveLoaded = true;
  66.    
  67.         diag_log ("HIVE: Commence Object Streaming...");
  68.         _key = format["CHILD:302:%1:", dayZ_instance];
  69.         _objectCount = _hiveResponse select 1;
  70.         _bQty = 0;
  71.         _vQty = 0;
  72.         for "_i" from 1 to _objectCount do {
  73.             _hiveResponse = _key call server_hiveReadWriteLarge;
  74.             //diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
  75.             if ((_hiveResponse select 2) isKindOf "ModularItems") then {
  76.                 _BuildingQueue set [_bQty,_hiveResponse];
  77.                 _bQty = _bQty + 1;
  78.             } else {
  79.                 _objectQueue set [_vQty,_hiveResponse];
  80.                 _vQty = _vQty + 1;
  81.             };
  82.         };
  83.         diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles");
  84.     };
  85.    
  86.     // # NOW SPAWN OBJECTS #
  87.     _totalvehicles = 0;
  88.     {
  89.         _idKey =        _x select 1;
  90.         _type =         _x select 2;
  91.         _ownerID =      _x select 3;
  92.  
  93.         _worldspace =   _x select 4;
  94.         _intentory =    _x select 5;
  95.         _hitPoints =    _x select 6;
  96.         _fuel =         _x select 7;
  97.         _damage =       _x select 8;
  98.        
  99.         _dir = 0;
  100.         _pos = [0,0,0];
  101.         _wsDone = false;
  102.         if (count _worldspace >= 2) then
  103.         {
  104.             _dir = _worldspace select 0;
  105.             if (count (_worldspace select 1) == 3) then {
  106.                 _pos = _worldspace select 1;
  107.                 _wsDone = true;
  108.             }
  109.         };         
  110.        
  111.         if (!_wsDone) then {
  112.             if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
  113.             _pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
  114.             if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
  115.             diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
  116.         };
  117.        
  118.  
  119.         if (_damage < 1) then {
  120.             //diag_log format["OBJ: %1 - %2", _idKey,_type];
  121.            
  122.             //Create it
  123.             _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
  124.             _object setVariable ["lastUpdate",time];
  125.             _object setVariable ["ObjectID", _idKey, true];
  126.  
  127.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvBLK_overlay.jpg''];';};
  128.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvDRST_overlay.jpg''];';};
  129.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvGRY_overlay.jpg''];';};
  130.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvKTY_overlay.jpg''];';};
  131.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvLF_overlay.jpg''];';};
  132.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvRED_overlay.jpg''];';};
  133.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suvUSA_overlay.jpg''];';};
  134.                 if (_type == "SUV_TK_CIV_EP1") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\suv_overlay.png''];';};
  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 && 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),true];
  192.                     _object setVariable ["MagazineCargo", (_intentory select 1),true];
  193.                     _object setVariable ["BackpackCargo", (_intentory select 2),true];
  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.                     } count _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.                     } count _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.                     } count _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 && _dam > 0.8) then {_dam = 0.8};
  244.                     [_object,_selection,_dam] call object_setFixServer;
  245.                 } count _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" && !(_object isKindOf "Bicycle")) then {
  255.                         _object setvehiclelock "locked";
  256.                         _object setVariable ["R3F_LOG_disabled",true,true];
  257.                     };
  258.                    
  259.                     _totalvehicles = _totalvehicles + 1;
  260.  
  261.                     // total each vehicle
  262.                     serverVehicleCounter set [count serverVehicleCounter,_type];
  263.                 };
  264.             };
  265.  
  266.             //Monitor the object
  267.             PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
  268.         };
  269.     } count (_BuildingQueue + _objectQueue);
  270.     // # END SPAWN OBJECTS #
  271.          
  272.          processInitCommands;
  273.  
  274.     // preload server traders menu data into cache
  275.     if !(DZE_ConfigTrader) then {
  276.         {
  277.             // get tids
  278.             _traderData = call compile format["menu_%1;",_x];
  279.             if(!isNil "_traderData") then {
  280.                 {
  281.                     _traderid = _x select 1;
  282.  
  283.                     _retrader = [];
  284.  
  285.                     _key = format["CHILD:399:%1:",_traderid];
  286.                     _data = "HiveEXT" callExtension _key;
  287.  
  288.                     //diag_log "HIVE: Request sent";
  289.            
  290.                     //Process result
  291.                     _result = call compile format ["%1",_data];
  292.                     _status = _result select 0;
  293.            
  294.                     if (_status == "ObjectStreamStart") then {
  295.                         _val = _result select 1;
  296.                         //Stream Objects
  297.                         //diag_log ("HIVE: Commence Menu Streaming...");
  298.                         call compile format["ServerTcache_%1 = [];",_traderid];
  299.                         for "_i" from 1 to _val do {
  300.                             _data = "HiveEXT" callExtension _key;
  301.                             _result = call compile format ["%1",_data];
  302.                             call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
  303.                             _retrader set [count _retrader,_result];
  304.                         };
  305.                         //diag_log ("HIVE: Streamed " + str(_val) + " objects");
  306.                     };
  307.  
  308.                 } forEach (_traderData select 0);
  309.             };
  310.         } forEach serverTraders;
  311.     };
  312.  
  313.     if (_hiveLoaded) then {
  314.         //  spawn_vehicles
  315.         _vehLimit = MaxVehicleLimit - _totalvehicles;
  316.         if(_vehLimit > 0) then {
  317.             diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
  318.             for "_x" from 1 to _vehLimit do {
  319.                 [] spawn spawn_vehicles;
  320.             };
  321.         } else {
  322.             diag_log "HIVE: Vehicle Spawn limit reached!";
  323.         };
  324.     };
  325.    
  326.     //  spawn_roadblocks
  327.     diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
  328.     for "_x" from 1 to MaxDynamicDebris do {
  329.         [] spawn spawn_roadblocks;
  330.     };
  331.     //  spawn_ammosupply at server start 1% of roadblocks
  332.     diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
  333.     for "_x" from 1 to MaxAmmoBoxes do {
  334.         [] spawn spawn_ammosupply;
  335.     };
  336.     // call spawning mining veins
  337.     diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
  338.     for "_x" from 1 to MaxMineVeins do {
  339.         [] spawn spawn_mineveins;
  340.     };
  341.  
  342.     if(isnil "dayz_MapArea") then {
  343.         dayz_MapArea = 10000;
  344.     };
  345.     if(isnil "HeliCrashArea") then {
  346.         HeliCrashArea = dayz_MapArea / 2;
  347.     };
  348.     if(isnil "OldHeliCrash") then {
  349.         OldHeliCrash = false;
  350.     };
  351.  
  352.     // [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
  353.     if(OldHeliCrash) then {
  354.         _nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite;
  355.     };
  356.     if (isDedicated) then {
  357.         // Epoch Events
  358.         _id = [] spawn server_spawnEvents;
  359.         // server cleanup
  360.         [] spawn {
  361.             private ["_id"];
  362.             sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart
  363.             waitUntil {!isNil "server_spawnCleanAnimals"};
  364.             _id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
  365.         };
  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.         actualSpawnMarkerCount = 0;
  379.         // count valid spawn marker positions
  380.         for "_i" from 0 to spawnMarkerCount do {
  381.             if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then {
  382.                 actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
  383.             } else {
  384.                 // exit since we did not find any further markers
  385.                 _i = spawnMarkerCount + 99;
  386.             };
  387.            
  388.         };
  389.         diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
  390.        
  391.         endLoadingScreen;
  392.     };
  393.    
  394.     [] ExecVM "\z\addons\dayz_server\EMS\DZMSInit.sqf";
  395.     allowConnection = true;
  396.     sm_done = true;
  397.     publicVariable "sm_done";
  398. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement