Advertisement
Guest User

Server_monitor.sqf

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