SHARE
TWEET

server_monitor.sqf

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