mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
add call and spawn support
also added append usage to inject events into the scheduler
This commit is contained in:
parent
10530e04e2
commit
67b8d6711f
@ -31,7 +31,7 @@ link15[] = {8,2};
|
|||||||
link16[] = {9,2};
|
link16[] = {9,2};
|
||||||
link17[] = {10,2};
|
link17[] = {10,2};
|
||||||
globals[] = {0.000000,0,0,0,0,640,480,1,3,6316128,1,275.180084,1161.319580,208.497711,-659.879456,898,884,1};
|
globals[] = {0.000000,0,0,0,0,640,480,1,3,6316128,1,275.180084,1161.319580,208.497711,-659.879456,898,884,1};
|
||||||
window[] = {2,-1,-1,-1,-1,968,208,1500,208,3,916};
|
window[] = {2,-1,-1,-1,-1,838,78,1370,78,3,916};
|
||||||
*//*%FSM</HEAD>*/
|
*//*%FSM</HEAD>*/
|
||||||
class FSM
|
class FSM
|
||||||
{
|
{
|
||||||
@ -353,11 +353,20 @@ class FSM
|
|||||||
condition=/*%FSM<CONDITION""">*/"((diag_tickTime - _pvehTime) > 20)"/*%FSM</CONDITION""">*/;
|
condition=/*%FSM<CONDITION""">*/"((diag_tickTime - _pvehTime) > 20)"/*%FSM</CONDITION""">*/;
|
||||||
action=/*%FSM<ACTION""">*/"// Epoch Events" \n
|
action=/*%FSM<ACTION""">*/"// Epoch Events" \n
|
||||||
"_pvehTime = diag_tickTime;" \n
|
"_pvehTime = diag_tickTime;" \n
|
||||||
|
"_events append _injectedEvents;" \n
|
||||||
|
"_injectedEvents = [];" \n
|
||||||
"_newEvents = [];" \n
|
"_newEvents = [];" \n
|
||||||
"{" \n
|
"{" \n
|
||||||
" _x params [""_time"", ""_scriptName"", [""_runAtStart"",0], [""_usePrePostfix"",1], [""_runNumTimes"",-1], [""_input"",[]], [""_disallowedWorlds"",[]] ];" \n
|
" _x params [""_time"", ""_scriptName"", [""_runAtStart"",0], [""_usePrePostfix"",1], [""_runNumTimes"",-1], [""_input"",[]], [""_disallowedWorlds"",[]] ];" \n
|
||||||
" _eventKey = format[""EPOCH_EVENT_%1"", _forEachIndex];" \n
|
" _scriptParams = [];" \n
|
||||||
" _eventCounter = format[""EPOCH_EVENT_COUNTER_%1"", _forEachIndex];" \n
|
" _scriptcmdMode = ""execVM"";" \n
|
||||||
|
" if (_scriptName isEqualType []) then {" \n
|
||||||
|
" _scriptParams = _scriptName param [0,[]];" \n
|
||||||
|
" _scriptcmdMode = _scriptName param [1,""call""];" \n
|
||||||
|
" _scriptName = _scriptName param [2,""""];" \n
|
||||||
|
" };" \n
|
||||||
|
" _eventKey = format[""EPOCH_EVENT_%1"", _scriptName];" \n
|
||||||
|
" _eventCounter = format[""EPOCH_EVENT_COUNTER_%1"", _scriptName];" \n
|
||||||
" _lastTime = missionNamespace getVariable _eventKey;" \n
|
" _lastTime = missionNamespace getVariable _eventKey;" \n
|
||||||
" _counter = missionNamespace getVariable [_eventCounter,0];" \n
|
" _counter = missionNamespace getVariable [_eventCounter,0];" \n
|
||||||
" if (isNil ""_lastTime"") then {" \n
|
" if (isNil ""_lastTime"") then {" \n
|
||||||
@ -370,6 +379,8 @@ class FSM
|
|||||||
" };" \n
|
" };" \n
|
||||||
" if ((_counter >= _runNumTimes && _runNumTimes != -1) || worldName in _disallowedWorlds) then {" \n
|
" if ((_counter >= _runNumTimes && _runNumTimes != -1) || worldName in _disallowedWorlds) then {" \n
|
||||||
" diag_log format[""DEBUG: server event removed %1"", _scriptName];" \n
|
" diag_log format[""DEBUG: server event removed %1"", _scriptName];" \n
|
||||||
|
" missionNamespace setVariable[_eventKey, nil];" \n
|
||||||
|
" missionNamespace setVariable[_eventCounter, nil];" \n
|
||||||
" } else {" \n
|
" } else {" \n
|
||||||
" _newEvents pushBack _x;" \n
|
" _newEvents pushBack _x;" \n
|
||||||
" if ((diag_tickTime - _lastTime) >= _time) then {" \n
|
" if ((diag_tickTime - _lastTime) >= _time) then {" \n
|
||||||
@ -384,7 +395,20 @@ class FSM
|
|||||||
" _preFix = ""\epoch_server_events\EpochEvents\"";" \n
|
" _preFix = ""\epoch_server_events\EpochEvents\"";" \n
|
||||||
" _postFix = "".sqf"";" \n
|
" _postFix = "".sqf"";" \n
|
||||||
" };" \n
|
" };" \n
|
||||||
|
" switch (_scriptcmdMode) do {" \n
|
||||||
|
" case (""call""): {" \n
|
||||||
|
" // call" \n
|
||||||
|
" _scriptParams call (missionNamespace getVariable [_scriptName, {}]);" \n
|
||||||
|
" };" \n
|
||||||
|
" case (""spawn""): {" \n
|
||||||
|
" // spawn" \n
|
||||||
|
" _scriptParams spawn (missionNamespace getVariable [_scriptName, {}]);" \n
|
||||||
|
" };" \n
|
||||||
|
" default {" \n
|
||||||
|
" // execVM" \n
|
||||||
" _handle = _input execVM format[""%1%2%3"",_preFix,_scriptName,_postFix];" \n
|
" _handle = _input execVM format[""%1%2%3"",_preFix,_scriptName,_postFix];" \n
|
||||||
|
" };" \n
|
||||||
|
" };" \n
|
||||||
" _counter = _counter + 1;" \n
|
" _counter = _counter + 1;" \n
|
||||||
" missionNamespace setVariable[_eventCounter, _counter];" \n
|
" missionNamespace setVariable[_eventCounter, _counter];" \n
|
||||||
" diag_log format[""DEBUG: server event %1"", _scriptName];" \n
|
" diag_log format[""DEBUG: server event %1"", _scriptName];" \n
|
||||||
|
100
Tools/SQF/scratch.sqf
Normal file
100
Tools/SQF/scratch.sqf
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
// Epoch Events
|
||||||
|
_pvehTime = diag_tickTime;
|
||||||
|
_newEvents = [];
|
||||||
|
{
|
||||||
|
_x params ["_time", "_scriptName", ["_runAtStart",0], ["_usePrePostfix",1], ["_runNumTimes",-1], ["_input",[]], ["_disallowedWorlds",[]] ];
|
||||||
|
_scriptParams = [];
|
||||||
|
if (_scriptName isEqualType []) then {
|
||||||
|
_scriptParams = _scriptName param [0,[]];
|
||||||
|
_scriptcmdMode = _scriptName param [1,"call"];
|
||||||
|
_scriptName = _scriptName param [2,""];
|
||||||
|
};
|
||||||
|
_eventKey = format["EPOCH_EVENT_%1", _scriptName];
|
||||||
|
_eventCounter = format["EPOCH_EVENT_COUNTER_%1", _scriptName];
|
||||||
|
_lastTime = missionNamespace getVariable _eventKey;
|
||||||
|
_counter = missionNamespace getVariable [_eventCounter,0];
|
||||||
|
if (isNil "_lastTime") then {
|
||||||
|
_startTime = diag_tickTime;
|
||||||
|
if (_runAtStart isEqualTo 1) then {
|
||||||
|
_startTime = diag_tickTime - _time;
|
||||||
|
};
|
||||||
|
missionNamespace setVariable[_eventKey, _startTime];
|
||||||
|
_lastTime = _startTime;
|
||||||
|
};
|
||||||
|
if ((_counter >= _runNumTimes && _runNumTimes != -1) || worldName in _disallowedWorlds) then {
|
||||||
|
diag_log format["DEBUG: server event removed %1", _scriptName];
|
||||||
|
missionNamespace setVariable[_eventKey, nil];
|
||||||
|
missionNamespace setVariable[_eventCounter, nil];
|
||||||
|
} else {
|
||||||
|
_newEvents pushBack _x;
|
||||||
|
if ((diag_tickTime - _lastTime) >= _time) then {
|
||||||
|
missionNamespace setVariable[_eventKey, diag_tickTime];
|
||||||
|
_preFix = "";
|
||||||
|
_postFix = "";
|
||||||
|
if (_usePrePostfix == 1) then {
|
||||||
|
_preFix = "\epoch_server_settings\EpochEvents\";
|
||||||
|
_postFix = ".sqf";
|
||||||
|
};
|
||||||
|
if (_usePrePostfix == 2) then {
|
||||||
|
_preFix = "\epoch_server_events\EpochEvents\";
|
||||||
|
_postFix = ".sqf";
|
||||||
|
};
|
||||||
|
switch (_scriptcmdMode) do {
|
||||||
|
case ("call"): {
|
||||||
|
// call
|
||||||
|
_handle = _scriptParams call (missionNamespace getVariable [_scriptName, {}]);
|
||||||
|
};
|
||||||
|
case ("spawn"): {
|
||||||
|
// spawn
|
||||||
|
_handle = _scriptParams spawn (missionNamespace getVariable [_scriptName, {}]);
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
// execVM
|
||||||
|
_handle = _input execVM format["%1%2%3",_preFix,_scriptName,_postFix];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_counter = _counter + 1;
|
||||||
|
missionNamespace setVariable[_eventCounter, _counter];
|
||||||
|
diag_log format["DEBUG: server event %1", _scriptName];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} forEach _events;
|
||||||
|
// remove expired events
|
||||||
|
_events = _newEvents;
|
||||||
|
|
||||||
|
// restart script
|
||||||
|
if (_scriptBasedRestart) then {
|
||||||
|
if (diag_tickTime >= _forceRestartTimeWarning) then {
|
||||||
|
if (!_serverLocked) then {
|
||||||
|
diag_log "server shutdown: locked";
|
||||||
|
_serverLocked = true;
|
||||||
|
["lock"] call EPOCH_serverCommand;
|
||||||
|
} else {
|
||||||
|
if (allPlayers isEqualTo []) then {
|
||||||
|
["shutdown"] call EPOCH_serverCommand;
|
||||||
|
diag_log "server shutdown: now";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_restartIn = round((_forceRestartTime-diag_tickTime)/60);
|
||||||
|
if (_prevRestartIn != _restartIn) then {
|
||||||
|
_prevRestartIn = _restartIn;
|
||||||
|
if (_restartIn > 1) then {
|
||||||
|
["message", format["Server restart in %1 minutes",_restartIn]] call EPOCH_serverCommand;
|
||||||
|
} else {
|
||||||
|
["message", format["Server restart in %1 minute",1]] call EPOCH_serverCommand;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
// kick all remaining players before shutdown to force player save
|
||||||
|
if (diag_tickTime >= _forceRestartTime) then {
|
||||||
|
if (_serverRestarting) then {
|
||||||
|
["shutdown"] call EPOCH_serverCommand;
|
||||||
|
diag_log "server shutdown: now";
|
||||||
|
} else {
|
||||||
|
{
|
||||||
|
["kick", _x , "Server Restarting"] call EPOCH_serverCommand;
|
||||||
|
} forEach allPlayers;
|
||||||
|
_serverRestarting = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user