You have to consider 2 cases, when happy hours are crossing midnight and when they are not.
Try this :
PHP Code:
#include < amxmodx >
#pragma semicolon 1
#define PLUGIN ""
#define VERSION "0.0.1"
new g_pCvarHappyHourStartHour;
new g_pCvarHappyHourStopHour;
new bool:g_bHappyHour;
public plugin_init()
{
register_plugin( PLUGIN, VERSION, "ConnorMcLeod" );
g_pCvarHappyHourStartHour = register_cvar("amx_happyhour_start", "22");
g_pCvarHappyHourStopHour = register_cvar("amx_happyhour_stop", "8");
register_event("HLTV", "Event_HLTV_New_Round", "a", "1=0", "2=0");
register_logevent("Event_Round_End", 2, "1=Round_End");
}
public plugin_cfg()
{
server_cmd("amx_cvar add %s", "amx_happyhour_start");
server_cmd("amx_cvar add %s", "amx_happyhour_stop");
}
public Event_HLTV_New_Round()
{
if( !g_bHappyHour )
{
new h, m, startHour = max(get_pcvar_num(g_pCvarHappyHourStartHour), 0), stopHour = max(get_pcvar_num(g_pCvarHappyHourStopHour), 0);
if( startHour > 24 )
{
startHour = 0;
}
if( stopHour > 24 )
{
stopHour = 0;
}
if( stopHour == startHour )
{
set_fail_state("Start and Stop hours are equal");
return;
}
time(h, m);
if( startHour < stopHour )
{
if( startHour <= h < stopHour )
{
StartHappyHour(stopHour);
}
else
{
HappyHourWaitTime(h, m, startHour);
}
}
else
{
if( startHour <= h || h < stopHour )
{
StartHappyHour(stopHour);
}
else
{
HappyHourWaitTime(h, m, startHour);
}
}
}
}
public Event_Round_End()
{
if( g_bHappyHour )
{
new h, m, startHour = max(get_pcvar_num(g_pCvarHappyHourStartHour), 0), stopHour = max(get_pcvar_num(g_pCvarHappyHourStopHour), 0);
if( startHour > 24 )
{
startHour = 0;
}
if( stopHour > 24 )
{
stopHour = 0;
}
if( stopHour == startHour )
{
set_fail_state("Start and Stop hours are equal");
return;
}
time(h, m);
if( startHour < stopHour )
{
if( h < startHour || h >= stopHour )
{
StopHappyHour();
HappyHourWaitTime(h, m, startHour);
}
}
else
{
if( stopHour <= h < startHour)
{
StopHappyHour();
HappyHourWaitTime(h, m, startHour);
}
}
}
}
StartHappyHour( stopHour )
{
g_bHappyHour = true;
client_print(0, print_chat, "Happy Hour started, gonna end at %s%d:00", stopHour > 9 ? "0" : "", stopHour);
}
StopHappyHour()
{
g_bHappyHour = false;
client_print(0, print_chat, "Happy Hour has ended");
}
HappyHourWaitTime(h, m, startHour)
{
if( h > startHour )
{
h -= 24;
}
if( m )
{
h += 1;
m = 60 - m;
}
h = startHour - h;
client_print(0, print_chat, "Happy Hour gonna start in %d hour%s and %d minute%s at %s%d:00", h, h > 1 ? "s" : "", m, m > 1 ? "s" : "", startHour > 9 ? "0" : "", startHour);
}
__________________