/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <colorchat>

#define PLUGIN "Frag Verseny"
#define VERSION "1.0"
#define AUTHOR "6almasok"

#define prefix "[.:#D.J.ZS#:.]"

new g_StartTime[33], g_EndTime[32], kill[33], bool:SwitchFrag, bool:FirstTask, x_tempid

new const view_hud[][] =
{
	"A Fragverseny vÃ©get Ã©rt!^nElsÅ‘: %s",
	"A Fragverseny vÃ©get Ã©rt!^nElsÅ‘: %s | MÃ¡sodik: %s",
	"A Fragverseny vÃ©get Ã©rt!^nElsÅ‘: %s | MÃ¡sodik: %s | Harmadik: %s",
	"Jelenleg Fragverseny van (%s-%s)^n1. %s - Ã–LÉS: %i",
	"Jelenleg Fragverseny van (%s-%s)^n1. %s - Ã–LÉS: %i | 2. %s - Ã–LÃ‰S: %i",
	"Jelenleg Fragverseny van (%s-%s)^n1. %s - Ã–LÉS: %i | 2. %s - Ã–LÃ‰S: %i | 3. %s - Ã–LÃ‰S: %i",
	"A Fragverseny elkezdÅ‘dik %s-kÃ¶r..."
}

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("say /fragmenu", "openMain")
	register_clcmd("say /kills", "openKillViewer")
	
	register_clcmd("START_TIME", "loadStart")
	register_clcmd("END_TIME", "loadEnd")
	register_clcmd("INDOK", "reset_kuld")
	
	register_event("DeathMsg","halal","a")
}
public halal()
{
	new attacker = read_data(1)
	new victim = read_data(2)
	
	if(!SwitchFrag) return PLUGIN_HANDLED
	if(attacker == victim || attacker == 0)
		return PLUGIN_HANDLED
		
	kill[attacker]++
	
	return PLUGIN_CONTINUE;
}
public loadStart(id)
{
	g_StartTime[id] = EOS
	read_args(g_StartTime, charsmax(g_StartTime))
	remove_quotes(g_StartTime)
	
	if(contain(g_StartTime, ":") != -1)
	{
		if((strlen(g_StartTime) != 5))
		{
			ColorChat(id, GREEN, "^4%s^1 HibÃ¡s idÅ‘ formÃ¡tum!", prefix)
			g_StartTime[id] = EOS
			return PLUGIN_HANDLED
		}
	}
	else
	{
		ColorChat(id, GREEN, "^4%s^1 HibÃ¡s idÅ‘ formÃ¡tum!", prefix)
		g_StartTime[id] = EOS
		return PLUGIN_HANDLED
	}
	
	openMain(id)
	return PLUGIN_HANDLED
}
public loadEnd(id)
{
	g_EndTime[id] = EOS
	read_args(g_EndTime, charsmax(g_EndTime))
	remove_quotes(g_EndTime)
	
	if(contain(g_EndTime, ":") != -1)
	{
		if((strlen(g_EndTime) != 5))
		{
			ColorChat(id, GREEN, "^4%s^1 HibÃ¡s idÅ‘ formÃ¡tum!", prefix)
			g_EndTime[id] = EOS
			return PLUGIN_HANDLED
		}
	}
	else
	{
		ColorChat(id, GREEN, "^4%s^1 HibÃ¡s idÅ‘ formÃ¡tum!", prefix)
		g_EndTime[id] = EOS
		return PLUGIN_HANDLED
	}
	
	openMain(id)
	return PLUGIN_HANDLED
}
public openMain(id)
{
	if(!(get_user_flags(id) & ADMIN_CFG)) return PLUGIN_HANDLED
	
	new szMenu[121],Time[10]
	get_time("%H:%M:%S", Time, charsmax(Time))
	
	format(szMenu, charsmax(szMenu), "\r%s \wVezÃ©rlÅ‘pult^n\dIdÅ‘: %s", prefix, Time)
	new menu = menu_create(szMenu, "main_handler")
	
	
	if(!SwitchFrag) formatex(szMenu, charsmax(szMenu), "KezdÃ©si IdÅ‘: \y[%s]", g_StartTime[id] == EOS ? "pl. 10:00" : g_StartTime)
	else formatex(szMenu, charsmax(szMenu), "A fragverseny elindÃºlt \y[%s-%s]^n", g_StartTime, g_EndTime)
	menu_additem(menu, szMenu, "0", 0)
	
	if(!SwitchFrag) formatex(szMenu, charsmax(szMenu), "VÃ©getÃ©rÃ©si IdÅ‘: \y[%s]^n", g_EndTime[id] == EOS ? "pl. 10:30" : g_EndTime)
	else formatex(szMenu, charsmax(szMenu), "\rBeÃ¡llitÃ¡sok")
	menu_additem(menu, szMenu, "1", 0)
	
	if(g_EndTime[id] != EOS && g_StartTime[id] != EOS && !SwitchFrag) menu_additem(menu, "\rVerseny elindÃ­tÃ¡sa!", "2", 0)
		
	menu_display(id, menu, 0)
	return PLUGIN_CONTINUE
}
public main_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}

	switch(item)
	{
		case 0:
		{
			if(!SwitchFrag) client_cmd(id, "messagemode START_TIME")
			openMain(id)
		}
		case 1:
		{
			if(!SwitchFrag)
			{
				client_cmd(id, "messagemode END_TIME")
				openMain(id)
			}
			else openSettings(id)
		}
		case 2:
		{
			FirstTask = true
			openTimeChecker(id)
			ColorChat(id, GREEN, "^4%s^1 A szÃ¡mlÃ¡ló elindÃ³lt!", prefix)
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public openSettings(id) {
	new szMenu[121]
	format(szMenu, charsmax(szMenu), "\r%s \wBeÃ¡llÃ­tÃ¡sok", prefix)
	new menu = menu_create(szMenu, "settings_handler");
	
	menu_additem(menu, "Verseny LeÃ¡llÃ­tÃ¡sa", "0",0)
	menu_additem(menu, "Ã–lés NullÃ¡zÃ¡sa", "1",0)
	menu_additem(menu, "JÃ¡tÃ©kosok Ã–lÃ©sei", "2",0)
		
	menu_display(id, menu, 0);
}
public settings_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}

	switch(item)
	{
		case 0: openSelect(id)
		case 1: openReseter(id)
		case 2: openKillViewer(id)
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public openKillViewer(id)
{	
	new szMenu[121], players[32], szTemp[10], pnum, Name[32]
	get_players(players, pnum)
	
	format(szMenu, charsmax(szMenu), "\r%s \wJÃ¡tÃ©kosok Ã–lÃ©sei", prefix)
	new menu = menu_create(szMenu, "viewer_handler")
 
	for(new i; i < pnum; i++)
	{
		get_user_name(players[i], Name, charsmax(Name))
		formatex(szMenu, charsmax(szMenu),"%s \d[\yÃ–LÃ‰S:\r %i\d]", Name, kill[players[i]])
		num_to_str(players[i], szTemp, charsmax(szTemp))
		menu_additem(menu, szMenu, szTemp)
	}
	
	menu_display(id, menu);
}
public viewer_handler(id,menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	openKillViewer(id)
	return PLUGIN_CONTINUE
}
public openSelect(id)
{
	new menu = menu_create("\rBiztosan leakarod Ã¡llitani a fragversenyt?", "select_handler");	
 
	menu_additem(menu, "Igen!", "0",0)
	menu_additem(menu, "Nem!", "1",0)
 
	menu_display(id, menu, 0);
}
public select_handler(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	switch(item)
	{
		case 0:
		{
			FirstTask = false
			SwitchFrag = false
			ColorChat(0, GREEN, "^4%s ^1Egy ^3ADMIN ^1leÃ¡llitotta a fragversenyt!", prefix)
		}
		case 1: openMain(id)
	}
	menu_destroy(menu)
	return PLUGIN_HANDLED
}
public openReseter(id) {
	new cim[121], players[32], pnum, Name[32], szTempid[10]
	get_players(players, pnum)
	
	format(cim, charsmax(cim), "\yJÃ¡tÃ©kos Ã¶lÃ©sÃ©nek nullÃ¡zÃ¡sa!")
	new menu = menu_create(cim, "reset_handler" )
	
	for( new i; i<pnum; i++ )
	{
		get_user_name(players[i], Name, charsmax(Name))
		num_to_str(players[i], szTempid, charsmax(szTempid))
		menu_additem(menu, Name, szTempid, 0)
	}
	menu_display(id, menu, 0)
}
public reset_handler(id, menu, item)
{
	if( item == MENU_EXIT ) {
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], szName[64], access, callback;
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
	
	x_tempid = str_to_num(data);
	client_cmd(id, "messagemode INDOK");
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public reset_kuld(id)
{
	new Msg[121], Name[32]
	read_args(Msg, charsmax(Msg))
	remove_quotes(Msg)
	get_user_name(x_tempid, Name, charsmax(Name))
 
	kill[x_tempid] = 0
	ColorChat(0, GREEN, "^4%s^3 %s^1 Ã¶lÃ©sei nullÃ¡zva lettek! Indok: ^4%s", prefix, Name, Msg)
	
	return PLUGIN_HANDLED;
}
public openTimeChecker(id)
{
	if(FirstTask) set_task(0.5, "openTimeChecker",id)
	
	new Time[10], SecSReset[10], SecEReset[10]
	get_time("%H:%M:%S", Time, charsmax(Time))
	formatex(SecSReset, charsmax(SecSReset), "%s:00", g_StartTime)
	formatex(SecEReset, charsmax(SecEReset), "%s:00", g_EndTime)
 
	if(!SwitchFrag)
	{
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 0.5)
		show_hudmessage(0, view_hud[6], g_StartTime)
	}
	else SeeBestPlayers(id)
 
	if(equal(Time, SecSReset))
	{
		server_cmd("sv_restart 1")
		SwitchFrag = true
	}
	if(equal(Time, SecEReset))
	{
		FirstTask = false
		SwitchFrag = false
		SeeBestPlayers(id)
	}
 
	return PLUGIN_CONTINUE;	
}
public SeeBestPlayers(id)
{
	new Players[32], Num;
	get_players(Players, Num);
	SortCustom1D(Players, Num, "sort_bestthree")
 
	new Top1 = Players[0]
	new Top2 = Players[1]
	new Top3 = Players[2]
 
	new TopName1[32], TopName2[32], TopName3[32]
	get_user_name(Top1, TopName1, charsmax(TopName1))
	get_user_name(Top2, TopName2, charsmax(TopName2))
	get_user_name(Top3, TopName3, charsmax(TopName3))
 
	if(!SwitchFrag)
	{
		set_hudmessage(0, 255, 0, -1.0, 0.10, 0, 6.0, 30.0)
		if(Num == 1) show_hudmessage(0, view_hud[0], TopName1)
		if(Num == 2) show_hudmessage(0, view_hud[1], TopName1, TopName2)
		if(Num >= 3) show_hudmessage(0, view_hud[2], TopName1, TopName2, TopName3)
	}
	else 
	{
		set_hudmessage(0, 127, 255, -1.0, 0.10, 0, 6.0, 0.5)
		if(Num == 1) show_hudmessage(0, view_hud[3], g_StartTime, g_EndTime, TopName1, kill[Top1])
		if(Num == 2) show_hudmessage(0, view_hud[4], g_StartTime, g_EndTime, TopName1, kill[Top1], TopName2, kill[Top2])
		if(Num >= 3) show_hudmessage(0, view_hud[5], g_StartTime, g_EndTime, TopName1, kill[Top1], TopName2, kill[Top2], TopName3, kill[Top3])
	}
}
public sort_bestthree(id1, id2)
{
	if(kill[id1] > kill[id2]) return -1
	else if(kill[id1] < kill[id2]) return 1
 
	return 0
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
