#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define TULAJ ADMIN_LEVEL_H
#define ADMIN ADMIN_LEVEL_D
#define VIP ADMIN_LEVEL_E
#define FOADMIN ADMIN_LEVEL_G
#define KONFIG ADMIN_LEVEL_F
#define HIRDETO ADMIN_LEVEL_C

#define ASD 15

new PLUGIN[] = "Rangok";
new VERSION[] = "1.0";
new AUTHOR[] = "asdasdasd";

new PREFIX[] = "Rang";
new message[192], nev[32], chat[192], g_vault, olesek[33], szint[33];
static color[10];

new const szamok[ASD] = {
	15,
	20,
	30,
	45,
	55,
	65,
	75,
	85,
	90,
	105,
	115,
	120,
	125,
	135,
	140
}

new const rangok[ASD+1][] = {
	"Újonc",
	"Lelkes",
	"Tag",
	"Beavatott",
	"Tud valamit",
	"Fanatikus",
	"Senior Tag",
	"Jómunkásember",
	"Nagyúr",
	"Félisten",
	"Östag",
	"Veterán",
	"Őskövület",
	"Minden6ó",
	"ISTEN",
	"Kezetlen Bajnok"
}
public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	//Parancsok
	register_clcmd("say /rang", "showrang");
	register_clcmd("say", "sayhook");
	//Event
	register_event("DeathMsg", "halal", "a")
	//Mentés
	g_vault = nvault_open("rangok")
}
public halal(id)
{
	new killer = read_data(1)
	new victim = read_data(2)
	
	if(killer != victim)
		olesek[killer]++
	
	while(olesek[killer] >= szamok[szint[killer]])
	{
		szint[killer]++
	}
}
public showrang(id)
{
	if(szint[id] != ASD+1)
	{
		ChatColor(id, "^4[%s] ^3Rang: ^4%s ^1| ^3Ölések: ^4%d ^1| ^3Kell még: ^4%d", PREFIX, rangok[szint[id]], olesek[id], szamok[szint[id]]-olesek[id]);
	}
	else
	{
		ChatColor(id, "^4[%s] ^3Rang: ^4%s ^1| ^3Ölések: ^4%d", PREFIX, rangok[szint[id]], olesek[id]);
		ChatColor(id, "^4[%s] ^1Elérted a legmagasabb ^3Rangot.", PREFIX);
	}
	return PLUGIN_HANDLED;
}
public sayhook(id)
{
	read_args (message, 191)
	remove_quotes (message)
	if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, ""))
	{
		return PLUGIN_CONTINUE
	}
	get_user_name(id, nev, 31);
	if(is_user_alive(id))
	{
		get_user_team(id, color, 9)
		if(get_user_flags(id) & TULAJ)
		{
			formatex(chat, 191, "^x04[TULAJ][%s]^3%s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & FOADMIN)
		{
			formatex(chat, 191, "^x04[FŐADMIN][%s]^3%s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & ADMIN)
		{
			formatex(chat, 191, "^x04[ADMIN][%s]^3%s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & KONFIG)
		{
			formatex(chat, 191, "^x04[KONFIGOS][%s]^3%s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & VIP)
		{
			formatex(chat, 191, "^x04[VIP][%s]^x03%s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & HIRDETO)
		{
			formatex(chat, 191, "^x04[HÍRDETŐ][%s]^x03%s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(is_user_alive(id))
		{
			formatex(chat, 191, "^x04[%s]^x03%s^x01: %s", rangok[szint[id]], nev, message);
		}
	}
	else 
	{
		get_user_team(id, color, 9)
		if(get_user_flags(id) & TULAJ)
		{
			formatex(chat, 191, "^x01*Halott*^x04[TULAJ][%s]^3 %s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & FOADMIN)
		{
			formatex(chat, 191, "^x01*Halott*^x04[FŐADMIN][%s]^3 %s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & ADMIN)
		{
			formatex(chat, 191, "^x01*Halott*^x04[ADMIN][%s]^x03 %s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & KONFIG)
		{
			formatex(chat, 191, "^x01*Halott*^x04[KONFIGOS][%s]^x03 %s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & VIP)
		{
			formatex(chat, 191, "^x01*Halott*^x04[VIP][%s]^x03 %s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(get_user_flags(id) & HIRDETO)
		{
			formatex(chat, 191, "^x01*Halott*^x04[HÍRDETŐ][%s]^x03 %s^x04: %s", rangok[szint[id]], nev, message);
		}
		else if(!is_user_alive(id))
		{
			formatex(chat, 191, "^x01*Halott*^x04[%s]^x03 %s^x01: %s", rangok[szint[id]], nev, message);
		}
	}
	sendmessage(color)
	return PLUGIN_HANDLED;
}
public sendmessage(color[])
{
	new teamName[10];
	for(new player = 1; player < get_maxplayers(); player++)
	{
		get_user_team (player, teamName, 9);
		teamf (player, color);
		elkuldes(player, chat);
		teamf(player, teamName);
	}
}
public teamf(player, team[])
{
	message_begin(MSG_ONE, get_user_msgid("TeamInfo"), _, player);
	write_byte(player);
	write_string(team);
	message_end();
}
public elkuldes(player, Temp[])
{
	message_begin( MSG_ONE, get_user_msgid( "SayText" ), _, player);
	write_byte( player );
	write_string( Temp );
	message_end();
}
public client_connect(id)
{
	LoadData(id);
}
public client_disconnect(id)
{
	SaveData(id);
}
public SaveData(id)
{
	new name[32]
	get_user_name(id, name, 31)
	
	new vaultkey[64],vaultdata[256]
	format(vaultkey,63,"%s-rang", name)
	format(vaultdata,255,"%i#%i#",olesek[id],szint[id])
	
	
	nvault_set(g_vault,vaultkey,vaultdata)
	return PLUGIN_CONTINUE;
}
public LoadData(id)
{
	new name[32]
	get_user_name(id, name, 31)
	new vaultkey[64],vaultdata[256]
	
	format(vaultkey,63,"%s-rang", name)
	format(vaultdata,255,"%i#%i#",olesek[id],szint[id])
	
	nvault_get(g_vault,vaultkey,vaultdata,255)
	replace_all(vaultdata, 255, "#", " ")
	new oles[32], level[32]
	parse(vaultdata, oles, 31, level, 31)
	olesek[id] = str_to_num(oles)
	szint[id] = str_to_num(level)
	return PLUGIN_CONTINUE;
}
stock ChatColor(const id, const szMessage[], any:...) 
{
	static pnum, players[32], szMsg[190], IdMsg; 
	vformat(szMsg, charsmax(szMsg), szMessage, 3);
	
	if(!IdMsg) IdMsg = get_user_msgid("SayText");
	
	if(id) 
	{ 
		if(!is_user_connected(id)) return;
		players[0] = id;
		pnum = 1; 
	} 
	else get_players(players, pnum, "c");
	
	for(new i; i < pnum; i++) 
	{
		message_begin(MSG_ONE, IdMsg, .player = players[i]);
		write_byte(players[i]);
		write_string(szMsg);
		message_end();
	}
}