{$VERSION 2.6.0}
const
UNP_CNTDOWNLENGTH = 5; //-- /unpause: countdown length in seconds
var
iUnpauseTarget: integer; //-- /unpause
inpause,startunpause: boolean;
procedure DoUnpause;
begin
//Command('/pause');
if (inpause AND NOT startunpause) then
begin
command('/say unpausing server in '+IntToStr(UNP_CNTDOWNLENGTH)+' seconds');
startunpause := true;
iUnpauseTarget := StrToInt(FormatDate('ss'))+ UNP_CNTDOWNLENGTH;
if (iUnpauseTarget > 59) then iUnpauseTarget := iUnpauseTarget-60;
end;
//Command('/pause');
ThreadFunc([],'PauseBack')
end;
procedure PauseBack;
var
i: Integer;
begin
Command('/pause');
for i:=0 to 25 do begin
Sleep(1);
Command('/pause');
end;
end;
procedure DoPause(const ID:integer);
begin
if (NOT inpause) then
begin
command('/say PAUSED ');
inpause := true;
end
else
begin
SayToID(ID,'Its already paused. Use /unp to unpause');
//command('/pause');
end;
end;
procedure DoUnpauseCountdown;
var
secleft,secnow:integer;
begin
Command('/pause');
SayToID(1,':O');
secnow :=StrToInt(FormatDate('ss'));
if (secnow <> iUnpauseTarget) then
begin
// countdown output
secleft := iUnpauseTarget - secnow;
if (secleft<0) then secleft := iUnpauseTarget - secnow + 60;
command('/say '+IntToStr(secleft));
end
else
begin
// unpausing
command('/say Go!');
command('/unpause');
inpause := false;
startunpause := false;
end;
end;
procedure AppOnIdle(Ticks: integer);
begin
if (startunpause) then DoUnpauseCountdown;
end;
function OnCommand(ID: Byte; Text: string): boolean;
begin
//NOTE: This function will be called when an admin types a / command.
Result := false; // Return true if you want to ignore the command typed.
if (Copy(Text,1,6) = '/pause') then DoPause(ID)
else if (Copy(Text,1,4) = '/unp') then DoUnpause
else if ((Copy(Text,1,8) = '/restart') or (Copy(Text,1,8) = '/nextmap') or (Copy(Text,1,5) = '/map ')) then
begin
inpause:= false;
startunpause:=false;
end;
end;
procedure OnPlayerSpeak(ID: byte; Text: string);
begin
Text:= Lowercase(Text);
if (MaskCheck(Text,'pause*') or MaskCheck(Text,'stop*')) and (ServerPort = 23073) then begin command('/pause'); DoPause(ID); end
else ThreadFunc([ID,Text],'CheckBadWords');
end;