228 lines
6.7 KiB
SourcePawn
228 lines
6.7 KiB
SourcePawn
#pragma semicolon 1
|
|
#pragma newdecls required
|
|
|
|
#include <sourcemod>
|
|
#include <cstrike>
|
|
#include <zombiereloaded>
|
|
|
|
/* INTS */
|
|
int g_iBreak = 0;
|
|
|
|
/* BOOLS */
|
|
bool g_bBreak = false;
|
|
|
|
/* HANDLES */
|
|
Handle g_hBreak = null;
|
|
|
|
/* FORWARDS */
|
|
GlobalForward g_hFwd_OnBreakStarted = null;
|
|
GlobalForward g_hFwd_OnBreakFinished = null;
|
|
GlobalForward g_hFwd_OnBreakCancelled = null;
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Plugin myinfo =
|
|
{
|
|
name = "Break",
|
|
author = "zaCade",
|
|
description = "Allows for making breaks during events ect.",
|
|
version = "1.0.0"
|
|
};
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int iErrorSize)
|
|
{
|
|
CreateNative("Break_IsBreakActive", Native_IsBreakActive);
|
|
|
|
RegPluginLibrary("Break");
|
|
return APLRes_Success;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnPluginStart()
|
|
{
|
|
g_hFwd_OnBreakStarted = new GlobalForward("Break_OnBreakStarted", ET_Ignore);
|
|
g_hFwd_OnBreakFinished = new GlobalForward("Break_OnBreakFinished", ET_Ignore);
|
|
g_hFwd_OnBreakCancelled = new GlobalForward("Break_OnBreakCancelled", ET_Ignore);
|
|
|
|
RegAdminCmd("sm_break", Command_InitiateBreak, ADMFLAG_BAN);
|
|
RegAdminCmd("sm_cancelbreak", Command_CancelBreak, ADMFLAG_BAN);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnMapEnd()
|
|
{
|
|
ResetVariables();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action Command_InitiateBreak(int iClient, int iArgs)
|
|
{
|
|
if (iArgs < 1)
|
|
{
|
|
ReplyToCommand(iClient, "[SM] Usage: sm_break <time>");
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
if (g_bBreak)
|
|
{
|
|
ReplyToCommand(iClient, "[SM] Break already in progress.");
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
char sArgs[16];
|
|
GetCmdArg(1, sArgs, sizeof(sArgs));
|
|
|
|
int iDuration;
|
|
if (!StringToIntEx(sArgs, iDuration) || iDuration <= 0)
|
|
{
|
|
ReplyToCommand(iClient, "[SM] Invalid duration specified.");
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
InitiateBreak(iDuration);
|
|
|
|
LogAction(iClient, -1, "\"%L\" initiated a \"%d\" minutes break.", iClient, iDuration);
|
|
PrintToChatAll("[SM] %N: Initiated a %d minutes break.", iClient, iDuration);
|
|
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action Command_CancelBreak(int iClient, int iArgs)
|
|
{
|
|
if (!g_bBreak)
|
|
{
|
|
ReplyToCommand(iClient, "[SM] No break in progress.");
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
CancelBreak();
|
|
|
|
LogAction(iClient, -1, "\"%L\" cancelled the break.", iClient);
|
|
PrintToChatAll("[SM] %N: Cancelled the break.", iClient);
|
|
|
|
return Plugin_Handled;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
stock void ResetVariables()
|
|
{
|
|
g_iBreak = 0;
|
|
g_bBreak = false;
|
|
|
|
if (g_hBreak != null)
|
|
{
|
|
KillTimer(g_hBreak);
|
|
g_hBreak = null;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
stock void InitiateBreak(int iLength = 0)
|
|
{
|
|
ResetVariables();
|
|
|
|
g_bBreak = true;
|
|
g_hBreak = CreateTimer(1.0, OnBreakTimer, iLength * 60, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
|
|
|
|
Call_StartForward(g_hFwd_OnBreakStarted);
|
|
Call_Finish();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
stock void CancelBreak()
|
|
{
|
|
ResetVariables();
|
|
|
|
Call_StartForward(g_hFwd_OnBreakCancelled);
|
|
Call_Finish();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action OnBreakTimer(Handle hTimer, int iLength)
|
|
{
|
|
if (g_iBreak >= iLength)
|
|
{
|
|
ResetVariables();
|
|
|
|
Call_StartForward(g_hFwd_OnBreakFinished);
|
|
Call_Finish();
|
|
|
|
CS_TerminateRound(1.0, CSRoundEnd_GameStart, false);
|
|
|
|
return Plugin_Stop;
|
|
}
|
|
else
|
|
{
|
|
g_iBreak++;
|
|
|
|
float flTimeLeft = float(iLength - g_iBreak);
|
|
if (flTimeLeft > 60)
|
|
PrintCenterTextAll("Break ends in %d minutes.", RoundToCeil(flTimeLeft / 60));
|
|
else
|
|
PrintCenterTextAll("Break ends in %d seconds.", RoundToCeil(flTimeLeft));
|
|
|
|
return Plugin_Continue;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action CS_OnTerminateRound(float &flDelay, CSRoundEndReason &iRoundEndReason)
|
|
{
|
|
if(g_bBreak)
|
|
return Plugin_Handled;
|
|
|
|
return Plugin_Continue;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action ZR_OnInfectCountdown()
|
|
{
|
|
if(g_bBreak)
|
|
return Plugin_Handled;
|
|
|
|
return Plugin_Continue;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action ZR_OnClientInfect(int &iClient, int &iAttacker, bool &bMotherInfect, bool &bRespawnOverride, bool &bRespawn)
|
|
{
|
|
if(g_bBreak)
|
|
return Plugin_Handled;
|
|
|
|
return Plugin_Continue;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public int Native_IsBreakActive(Handle hPlugin, int iNumParams)
|
|
{
|
|
return g_bBreak;
|
|
} |