mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2026-04-16 09:23:23 +03:00
Server_monitor.sqf with new object stream method
Allows server to use either legacy loading method by itterating
callExtension (using _legacyStreamingMethod = true). Otherwise, the
hive will dump objects to a file, write the filename to the server's
profile and it is deleted next restart, each filename is unique every
startup.
Associated hive commit:
bc5d5c56a8
This commit is contained in:
@@ -6,12 +6,14 @@ waitUntil {!isNil "BIS_MPF_InitDone" && initialized};
|
|||||||
if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player)
|
if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player)
|
||||||
sm_done = false;
|
sm_done = false;
|
||||||
|
|
||||||
|
_legacyStreamingMethod = false; //use old object streaming method, more secure but will be slower and subject to the callExtension return size limitation.
|
||||||
|
|
||||||
dayz_serverIDMonitor = [];
|
dayz_serverIDMonitor = [];
|
||||||
_DZE_VehObjects = [];
|
_DZE_VehObjects = [];
|
||||||
dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version");
|
dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version");
|
||||||
dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
|
dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
|
||||||
_hiveLoaded = false;
|
_hiveLoaded = false;
|
||||||
_serverVehicleCounter = [];
|
_serverVehicleCounter = 0;
|
||||||
_tempMaint = DayZ_WoodenFence + DayZ_WoodenGates;
|
_tempMaint = DayZ_WoodenFence + DayZ_WoodenGates;
|
||||||
_respawnPos = getMarkerpos "respawn_west";
|
_respawnPos = getMarkerpos "respawn_west";
|
||||||
diag_log "HIVE: Starting";
|
diag_log "HIVE: Starting";
|
||||||
@@ -39,26 +41,39 @@ if (_outcome == "PASS") then {
|
|||||||
/* STREAM OBJECTS */
|
/* STREAM OBJECTS */
|
||||||
//Send the key
|
//Send the key
|
||||||
_timeStart = diag_tickTime;
|
_timeStart = diag_tickTime;
|
||||||
_key = format["CHILD:302:%1:",dayZ_instance];
|
_key = format["CHILD:302:%1:%2:",dayZ_instance, _legacyStreamingMethod];
|
||||||
_result = _key call server_hiveReadWrite;
|
_result = _key call server_hiveReadWrite;
|
||||||
|
|
||||||
diag_log "HIVE: Request sent";
|
diag_log "HIVE: Request sent";
|
||||||
_myArray = [];
|
_myArray = [];
|
||||||
_val = 0;
|
_val = 0;
|
||||||
_status = _result select 0; //Process result
|
_status = _result select 0; //Process result
|
||||||
if (_status == "ObjectStreamStart") then {
|
if (_legacyStreamingMethod) then {
|
||||||
_hiveLoaded = true;
|
if (_status == "ObjectStreamStart") then {
|
||||||
_val = _result select 1;
|
_hiveLoaded = true;
|
||||||
//Stream Objects
|
_val = _result select 1;
|
||||||
diag_log ("HIVE: Commence Object Streaming...");
|
//Stream Objects
|
||||||
for "_i" from 1 to _val do {
|
diag_log ("HIVE: Commence Object Streaming...");
|
||||||
_result = _key call server_hiveReadWriteLarge;
|
for "_i" from 1 to _val do {
|
||||||
_status = _result select 0;
|
_result = _key call server_hiveReadWriteLarge;
|
||||||
_myArray set [count _myArray,_result];
|
_status = _result select 0;
|
||||||
|
_myArray set [count _myArray,_result];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
_fileName = _key call server_hiveReadWrite;
|
||||||
|
_lastFN = profileNamespace getVariable["lastFN",""];
|
||||||
|
profileNamespace setVariable["lastFN",_fileName];
|
||||||
|
saveProfileNamespace;
|
||||||
|
if (_status == "ObjectStreamStart") then {
|
||||||
|
_myArray = Call Compile PreProcessFile _fileName;
|
||||||
|
_key = format["CHILD:302:%1:%2:",_lastFN, _legacyStreamingMethod];
|
||||||
|
_result = _key call server_hiveReadWrite; //deletes previous object data dump
|
||||||
};
|
};
|
||||||
diag_log ("HIVE: Streamed " + str(_val) + " objects");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
diag_log ("HIVE: Streamed " + str(_val) + " objects");
|
||||||
|
|
||||||
{
|
{
|
||||||
private ["_object"];
|
private ["_object"];
|
||||||
//Parse Array
|
//Parse Array
|
||||||
@@ -236,7 +251,7 @@ if (_status == "ObjectStreamStart") then {
|
|||||||
_DZE_VehObjects set [count _DZE_VehObjects,_object];
|
_DZE_VehObjects set [count _DZE_VehObjects,_object];
|
||||||
_object call fnc_veh_ResetEH;
|
_object call fnc_veh_ResetEH;
|
||||||
if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
|
if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
|
||||||
_serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle
|
_serverVehicleCounter = _serverVehicleCounter + 1; // total each vehicle
|
||||||
} else {
|
} else {
|
||||||
_object enableSimulation true;
|
_object enableSimulation true;
|
||||||
};
|
};
|
||||||
@@ -429,7 +444,7 @@ if (_hiveLoaded) then {
|
|||||||
} count (dayz_centerMarker nearObjects ["building",DynamicVehicleArea]);
|
} count (dayz_centerMarker nearObjects ["building",DynamicVehicleArea]);
|
||||||
_roadList = dayz_centerMarker nearRoads DynamicVehicleArea;
|
_roadList = dayz_centerMarker nearRoads DynamicVehicleArea;
|
||||||
|
|
||||||
_vehLimit = MaxVehicleLimit - (count _serverVehicleCounter);
|
_vehLimit = MaxVehicleLimit - _serverVehicleCounter;
|
||||||
if (_vehLimit > 0) then {
|
if (_vehLimit > 0) then {
|
||||||
diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
|
diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
|
||||||
for "_x" from 1 to _vehLimit do {call spawn_vehicles;};
|
for "_x" from 1 to _vehLimit do {call spawn_vehicles;};
|
||||||
|
|||||||
Reference in New Issue
Block a user