#include <amxmodx>
#pragma semicolon 1
new const szPluginInfo[][] = {"GFonTime", "1.2", "ApXuTekToR"};
enum _:CVARS {
NIGHTMODE[64],
SHOW_TYPE,
HUD_SETTINGS[64],
RELOAD_FLAGS
};
new Float:g_posX, Float:g_posY, Float:g_Update;
new g_rgbR, g_rgbG, g_rgbB, g_Effect;
new bool:gNight_Mode;
new g_pCvars[CVARS];
new Night_Start[8], Night_End[8], Night_Flag[64], iStartHour, iStartMinutes, iEndHour, iEndMinutes;
new hudInfo, g_Current, g_Holiday_StartNum, Holiday_Start[384], Holiday_End[384], Holiday_Flag[16];
new g_bMode_Holiday;
new Array:g_StartTime, Array:g_EndTime, Array:g_Flag;
public plugin_init() {
register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
register_logevent("spawn_show", 2, "1=Round_End");
register_srvcmd("flags_holiday", "setholiday");
register_cvar("GFoT_Set_Flags_Night", "23:00 09:00 t");
register_cvar("GFoT_Set_Info_Mode", "1");
register_cvar("GFoT_Set_Info_Settings", "255 0 0 -1.0 0.0 1 1.0");
register_cvar("GFoT_Set_Reload_Flags", "1");
g_StartTime = ArrayCreate(384);
g_EndTime = ArrayCreate(384);
g_Flag = ArrayCreate(16);
new cfgFilePath[PLATFORM_MAX_PATH];
new const fileName[64] = "/SevCorp/GFoT_Configuration.cfg";
get_localinfo("amxx_configsdir", cfgFilePath, charsmax(cfgFilePath));
add(cfgFilePath, charsmax(cfgFilePath), fileName);
if(file_exists(cfgFilePath)) {
server_cmd("exec %s", cfgFilePath);
server_exec();
} else {
server_print("[%s] File '%s' not found. Plugin Stoped", szPluginInfo[0], cfgFilePath);
plugin_print(false, "[%s] File '%s' not found. Plugin Stoped", szPluginInfo[0], cfgFilePath);
}
initCvars();
hudInfo = CreateHudSyncObj(3);
register_dictionary("GFoT_Dictionary.txt");
}
public plugin_cfg() {
TaskCheck_Night();
TaskCheck_Holiday();
LoadSettings();
}
public initCvars() {
get_cvar_string("GFoT_Set_Flags_Night", g_pCvars[NIGHTMODE], charsmax(g_pCvars[NIGHTMODE]));
get_cvar_string("GFoT_Set_Info_Settings", g_pCvars[HUD_SETTINGS], charsmax(g_pCvars[HUD_SETTINGS]));
g_pCvars[SHOW_TYPE] = get_cvar_num("GFoT_Set_Info_Mode");
g_pCvars[RELOAD_FLAGS] = get_cvar_num("GFoT_Set_Reload_Flags");
}
public LoadSettings() {
static szRgbRRR[8], szRgbGGG[8], szRgbBBB[8], szPosX[8], szPosY[8], szEffect[8], szUpdate[8];
parse(g_pCvars[HUD_SETTINGS], szRgbRRR, charsmax(szRgbRRR), szRgbGGG, charsmax(szRgbGGG), szRgbBBB, charsmax(szRgbBBB),
szPosX, charsmax(szPosX), szPosY, charsmax(szPosY), szEffect, charsmax(szEffect), szUpdate, charsmax(szUpdate));
g_rgbR = str_to_num(szRgbRRR);
g_rgbG = str_to_num(szRgbGGG);
g_rgbB = str_to_num(szRgbBBB);
g_posX = str_to_float(szPosX);
g_posY = str_to_float(szPosY);
g_Effect = str_to_num(szEffect);
g_Update = str_to_float(szUpdate);
}
public client_connect(id) {
TaskCheck_Night();
TaskCheck_Holiday();
}
public spawn_show(id) {
TaskCheck_Night();
TaskCheck_Holiday();
}
public setholiday() {
read_argv(1, Holiday_Start, charsmax(Holiday_Start));
read_argv(2, Holiday_End, charsmax(Holiday_End));
read_argv(3, Holiday_Flag, charsmax(Holiday_Flag));
g_Holiday_StartNum++;
ArrayPushString(g_StartTime, Holiday_Start);
ArrayPushString(g_EndTime, Holiday_End);
ArrayPushString(g_Flag, Holiday_Flag);
return PLUGIN_HANDLED;
}
public TaskCheck_Night() {
if(!g_pCvars[NIGHTMODE])
return;
parse(g_pCvars[NIGHTMODE], Night_Start, charsmax(Night_Start), Night_End, charsmax(Night_End), Night_Flag, charsmax(Night_Flag));
get_int_time(Night_Start, iStartHour, iStartMinutes);
get_int_time(Night_End, iEndHour, iEndMinutes);
new iCurHour, iCurMinutes; time(iCurHour, iCurMinutes);
if(iStartHour != iEndHour && (iStartHour == iCurHour && iCurMinutes >= iStartMinutes || iEndHour == iCurHour && iCurMinutes < iEndMinutes)) {
gNight_Mode = true;
}else if(iStartHour == iEndHour && iStartMinutes <= iCurMinutes < iEndMinutes) {
gNight_Mode = true;
}else if(iStartHour > iEndHour && (iStartHour < iCurHour < 24 || 0 <= iCurHour < iEndHour)) {
gNight_Mode = true;
}else if(iStartHour < iCurHour < iEndHour) {
gNight_Mode = true;
}else{
gNight_Mode = false;
}
if(gNight_Mode) {
server_cmd("amx_default_access %s", Night_Flag);
if(g_pCvars[RELOAD_FLAGS])
server_cmd("amx_reloadadmins");
}
if(gNight_Mode && g_pCvars[SHOW_TYPE])
set_task(g_Update, "TaskInfo_Night", .flags="a", .repeat=10);
}
public TaskCheck_Holiday() {
if (g_Current >= g_Holiday_StartNum)
g_Current = 0;
if (g_Holiday_StartNum == 0) {
return;
}
ArrayGetString(g_StartTime, g_Current, Holiday_Start, charsmax(Holiday_Start));
ArrayGetString(g_EndTime, g_Current, Holiday_End, charsmax(Holiday_End));
ArrayGetString(g_Flag, g_Current, Holiday_Flag, charsmax(Holiday_Flag));
new bOldMode_Holiday = g_bMode_Holiday;
if(parse_time(Holiday_Start, "%d.%m.%y %H:%M") != parse_time(Holiday_End, "%d.%m.%y %H:%M") && (parse_time(Holiday_Start, "%d.%m.%y %H:%M") == get_systime() && parse_time(Holiday_End, "%d.%m.%y %H:%M") == get_systime())) {
g_bMode_Holiday = true;
} else if(parse_time(Holiday_Start, "%d.%m.%y %H:%M") == parse_time(Holiday_End, "%d.%m.%y %H:%M")) {
g_bMode_Holiday = true;
} else if(parse_time(Holiday_Start, "%d.%m.%y %H:%M") > parse_time(Holiday_End, "%d.%m.%y %H:%M") && (parse_time(Holiday_Start, "%d.%m.%y %H:%M") < get_systime() < parse_time(Holiday_End, "%d.%m.%y %H:%M"))) {
g_bMode_Holiday = true;
} else if(parse_time(Holiday_Start, "%d.%m.%y %H:%M") < get_systime() < parse_time(Holiday_End, "%d.%m.%y %H:%M")) {
g_bMode_Holiday = true;
} else {
g_bMode_Holiday = false;
++g_Current;
}
if(g_bMode_Holiday && !bOldMode_Holiday){
server_cmd("amx_default_access %s", Holiday_Flag);
if(g_pCvars[RELOAD_FLAGS])
server_cmd("amx_reloadadmins");
}
if(g_bMode_Holiday && g_pCvars[SHOW_TYPE])
set_task(g_Update, "StartHolidayShow", .flags="a", .repeat=10);
}
public TaskInfo_Night(id) {
if(g_pCvars[SHOW_TYPE] == 1) {
set_hudmessage(g_rgbR, g_rgbG, g_rgbB, g_posX, g_posY, g_Effect, 6.0, 10.0);
ShowSyncHudMsg(id, hudInfo, "%L", LANG_PLAYER, "LANG_NIGHT_MODE_START_HUD");
} else if(g_pCvars[SHOW_TYPE] == 2) {
set_dhudmessage(g_rgbR, g_rgbG, g_rgbB, g_posX, g_posY, g_Effect, 6.0, 10.0);
show_dhudmessage(id, "%L", LANG_PLAYER, "LANG_NIGHT_MODE_START_HUD");
}
}
public StartHolidayShow(id) {
ArrayGetString(g_StartTime, g_Current, Holiday_Start, charsmax(Holiday_Start));
if(g_pCvars[SHOW_TYPE] == 1) {
set_hudmessage(g_rgbR, g_rgbG, g_rgbB, g_posX, g_posY, g_Effect, 6.0, 10.0);
ShowSyncHudMsg(id, hudInfo, "%L", LANG_PLAYER, "FLAGS_HOLIDAY_START_HUD", Holiday_Start, Holiday_End);
} else {
set_dhudmessage(g_rgbR, g_rgbG, g_rgbB, g_posX, g_posY, g_Effect, 6.0, 10.0);
show_dhudmessage(id, "%L", LANG_PLAYER, "FLAGS_HOLIDAY_START_HUD", Holiday_Start, Holiday_End);
}
return PLUGIN_HANDLED;
}
public plugin_end() {
ArrayDestroy(g_StartTime);
ArrayDestroy(g_EndTime);
ArrayDestroy(g_Flag);
}
get_int_time(string[], &hour, &minutes) {
new left[4], right[4]; strtok(string, left, charsmax(left), right, charsmax(right), ':');
hour = str_to_num(left);
minutes = str_to_num(right);
}
plugin_print(bool:bBlock, const szMessage[], any:...) {
new szMsg[128];
vformat(szMsg, charsmax(szMsg), szMessage, 3);
switch(bBlock) {
case false: log_amx(szMsg);
case true: set_fail_state(szMsg);
}
}