#include <amxmodx>
    #include <amxmisc> 
    #include <cstrike>
    #include <csstats>
 
    #pragma tabsize 0
 
    #define PLUGIN "Rankrendszer (HUD + prefix)"
    #define VERSION "1.5"
    #define AUTHOR "6lmasok,qKKKJ;>, RaZ_HU"
 
    #define ACCESS_LEVEL ADMIN_CHAT
    #define ADMIN_LISTEN ADMIN_CHAT
 
    #define RANK_HONVED 0
    #define RANK_ORVEZETO 1
    #define RANK_TIZEDES 2 
    #define RANK_SZAKASZV 3
    #define RANK_ORMESTER 4
    #define RANK_TORMESTER 5
    #define RANK_FTORMESTER 6
    #define RANK_ZASZLOS 7
    #define RANK_TZASZLOS 8
    #define RANK_FTZASZLOS 9
    #define RANK_HADNAGY 10
    #define RANK_FOHADNAGY 11
    #define RANK_SZAZADOS 12
    #define RANK_ORNAGY 13
    #define RANK_ALEZREDES 14
    #define RANK_EZREDES 15
    #define RANK_DANDARTABORNOK 16
    #define RANK_VEZERORNAGY 17
    #define RANK_ALTABORNAGY 18
    #define RANK_VEZEREZREDES 19
 
    #define MAXRANKS 19
 
    new message[192]
 
    new strName[191]
    new strText[191]
    new sayText
    new teamInfo
    new maxPlayers
    new PlayerRank[33]
    new Float:HUD_INTERVAL
 
    new static color[10]
 
    new const RANKS[MAXRANKS][] = 
    { 
    	"Honvéd",
    	"Őrvezető",
    	"Tizedes",
    	"Szakaszvezető",
    	"Őrmester",
    	"Törzsőrmester",
    	"Főtörzsőrmester",
    	"Zászlós",
    	"Törzszászlós",
    	"Főtörzszászlós",
    	"Hadnagy",
    	"Főhadnagy",
    	"Százados",
    	"Őrnagy",
    	"Alezredes",
    	"Ezredes",
    	"Dandártábornok",
    	"Vezérőrnagy",
    	"Altábornagy",
      "Vezérezredes"
    }
 
    #define size 18
 
    new const szamok[size] =
    {
    	50,
    	100,
    	200,
    	300,
    	450,
    	650,
    	800,
    	1000,
    	1200,
    	1400,
    	1700,
    	2000,
    	2500,
    	3000,
    	3600,
    	4500,
    	5500,
    	20000,
      20100
    }
 
    public plugin_init()
    {
    	register_plugin(PLUGIN, VERSION, AUTHOR)
    	register_clcmd("say /rang", "hud")
    	register_clcmd("say rang", "hud")
    	register_clcmd ("say", "hook_say")
    	register_clcmd ("say_team", "hook_teamsay")
 
    	register_cvar("sv_rankrendszer","1") // A plugin be- illetve kikapcsolása
    	register_cvar("sv_rankrendszer_HUD","1") // A HUD-ra való kijelzés be- illetve kikapcsolása
    	sethudtime()
 
    	sayText = get_user_msgid ("SayText")
    	teamInfo = get_user_msgid ("TeamInfo")
    	maxPlayers = get_maxplayers()
 
    	set_task(160.0, "korUzenet", 0, _, _, "b")
 
    	register_message (sayText, "avoid_duplicated")
    }
 
    public sethudtime()
    {
    	new refreshtime = register_cvar("sv_rankrendszer_HUDtime","0.9") // A HUD-ra való kijelzés frissítési ideje másodpercben
    	if (refreshtime == 0.9)
    	{
    		HUD_INTERVAL = 0.9
    	}
    	else if (refreshtime != 0.9)
    	{
    		HUD_INTERVAL = get_pcvar_float(refreshtime)
    	}
 
    	return PLUGIN_CONTINUE
    }
 
    public avoid_duplicated (msgId, msgDest, receiver)
    {
    	return PLUGIN_HANDLED
    }
 
    public korUzenet()
    {
    	ColorChat( 0, "^1Írd be ^4/rang ^1vagy ^4rang ^1hogy megnézd hány ölés kell a következő ranghoz.")
    	return PLUGIN_HANDLED;
    }
 
    public hud(id)
    {
    	new stats[8]
	new bodyhits[8]
    	get_user_stats(id, stats, bodyhits)
 
    	ColorChat( id, "^4Rangod: ^3%s ^1| ^4Öléseid: ^3%d",RANKS[PlayerRank[id]], stats[0])
 
    	if(PlayerRank[id] == MAXRANKS-1)
    	{
    		//client_print(id, print_chat, "^4Rangod: ^3%s ^1| ^4Öléseid: ^3%d ^n^4A következő szinthez kell még: ^3%d",RANKS[PlayerRank[id]], stats[0],szamok[PlayerRank[id]]-stats[0])
    		ColorChat( id, "^4Már elérted a legnagyobb ^4rangot.")
    	}
    	else
    	{
    		//client_print(id, print_chat, "^4Rangod: ^3%s ^1| ^4Öléseid: ^3%d ^n^4Már elérted a legnagyobb rangot.",RANKS[PlayerRank[id]], stats[0])
    		ColorChat( id, "^4Következő rang: ^3%s ^1| ^4A következő szinthez kell még: ^3%d",RANKS[PlayerRank[id]+1], szamok[PlayerRank[id]]-stats[0])
    	}
    }
 
    public hook_say(id)
    {
    	read_args (message, 191)
    	remove_quotes (message)
 
    	if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, "")) // Ignores Admin Hud Messages, Admin Slash commands,
    	return PLUGIN_CONTINUE
 
    	new name[32]
    	get_user_name (id, name, 31)
 
    	new isAlive, alive[32]
 
    	if (is_user_alive (id))
    	{
    		isAlive = 1
    		alive = "^1 "
    	}
    	else
    	{
    		isAlive = 0
    		alive = "^1*HALOTT* "
    	}
 
    	//static color[10]
 
    	if(get_user_flags(id)&ADMIN_CVAR)
    	{
    		//get_user_team (id, color, 9)
    		getTeam(id)
    		format (strName, 191, "%s^4[TULAJ][%s] ^3%s:", alive, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^4%s", message)
    	} 	
 
    	else if(get_user_flags(id)&ADMIN_MAP)
    	{
    		getTeam(id)
    		format (strName, 191, "%s^4[ADMIN][%s] ^3%s:", alive, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^4%s", message)
    	}	  
 
    	else if(get_user_flags(id)&ADMIN_MENU)
    	{
    		getTeam(id)
    		format (strName, 191, "%s^4[VIP][%s] ^3%s:", alive, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^4%s", message)
    	}
 
    	else if(get_user_flags(id)&ADMIN_USER)
    	{
    		getTeam(id)
    		format (strName, 191, "%s^4[%s] ^3%s:",alive, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^1%s", message)
    	}
 
    	format (message, 191, "%s ^1%s", strName, strText)
    	sendMessage (color, isAlive)
 
    	return PLUGIN_CONTINUE
    }
 
    public hook_teamsay(id)
    {
    	new playerTeam = get_user_team(id)
    	new playerTeamName[19]
 
    	switch (playerTeam) 
    	{
    		case 1:
    		copy (playerTeamName, 11, "Terrorista")
 
    		case 2:
    		copy (playerTeamName, 18, "Anti-Terrorista")
 
    		default:
    		copy (playerTeamName, 9, "Néző")
    	}
 
    	read_args (message, 191)
    	remove_quotes (message)
 
    	if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, "")) 
    	return PLUGIN_CONTINUE
 
    	new isAlive, alive[32]
 
    	if (is_user_alive (id))
    	{
    		isAlive = 1
    		alive = "^1 "
    	}
    	else
    	{
    		isAlive = 0
    		alive = "^1*HALOTT* "
    	}
 
    	new name[32]
    	get_user_name (id, name, 31) 
 
    	//static color[10]
 
    	if(get_user_flags(id)&ADMIN_CVAR)
    	{
    		//get_user_team (id, color, 9)
    		getTeam(id)
    		format (strName, 191, "%s(%s)^4[TULAJ][%s] ^3%s:",alive , playerTeamName, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^4%s", message)
    	} 	
 
    	else if(get_user_flags(id)&ADMIN_MAP)
    	{
    		getTeam(id)
    		format (strName, 191, "%s(%s)^4[ADMIN][%s] ^3%s:",alive , playerTeamName, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^4%s", message)
    	}	  
 
    	else if(get_user_flags(id)&ADMIN_MENU)
    	{
    		getTeam(id)
    		format (strName, 191, "%s(%s)^4[VIP][%s] ^3%s:",alive , playerTeamName, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^4%s", message)
    	}
 
    	else if(get_user_flags(id)&ADMIN_USER)
    	{
    		getTeam(id)
    		format (strName, 191, "%s(%s)^4[%s] ^3%s:",alive ,playerTeamName, RANKS[PlayerRank[id]], name)
    		format (strText, 191, "^1%s", message)
    	}
 
    	format (message, 191, "%s ^1%s", strName, strText)
    	sendTeamMessage (color,isAlive, playerTeam)	
 
    	return PLUGIN_CONTINUE	
    }
 
    public sendMessage (color[], alive)
    {
    	new teamName[10]
 
    	for (new player = 1; player < maxPlayers; player++)
    	{
    	if (!is_user_connected(player))
    		continue
    	if((alive && is_user_alive(player)) || (!alive && !is_user_alive(player)) || (get_user_flags(player) && ADMIN_LISTEN))
    		{
    			get_user_team (player, teamName, 9)
    			changeTeamInfo (player, color)
    			writeMessage (player, message)
    			changeTeamInfo (player, teamName)
    		}
    	}
    }
 
    public sendTeamMessage (color[], alive, playerTeam)
    {
    	new teamName[10]
 
    	for (new player = 1; player < maxPlayers; player++)
    	{
    	if (!is_user_connected(player))
    		continue
 
    	if (get_user_team(player) == playerTeam || get_user_flags(player) & ADMIN_LISTEN)
    		{
    			if (alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_user_flags(player) & ADMIN_LISTEN)
    			{
    				get_user_team (player, teamName, 9)
    				changeTeamInfo (player, color)
    				writeMessage (player, message)
    				changeTeamInfo (player, teamName)
    			}
    		}
    	}
    }
 
    public changeTeamInfo (player, team[])
    {
    	message_begin (MSG_ONE, teamInfo, _, player)	
    	write_byte (player)	
    	write_string (team)	
    	message_end()	
    }
 
    public writeMessage (player, message[])
    {
    	message_begin (MSG_ONE, sayText, {0, 0, 0}, player)	
    	write_byte (player)
    	write_string (message)
    	message_end ()
    }
 
    stock bool:is_user_steam(id)
    {
    	static dp_pointer;
 
    	if (dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
    	{
    		server_cmd("dp_clientinfo %d", id);
    		server_exec();
    		return (get_pcvar_num(dp_pointer) == 2) ? true : false;
    	}
 
    	return false;
    }
 
    public client_putinserver(id)
    {
    	if(get_cvar_num("sv_rankrendszer")==0)
    	{
    		return PLUGIN_HANDLED
    	}
    	else if (get_cvar_num("sv_rankrendszer")==1 && get_cvar_num("sv_rankrendszer_HUD")==1)
    	{
    		set_task(HUD_INTERVAL, "setDisplay", id)
    	}
    	else
    	{
    		set_task(0.5, "remTask", id)
    	}
 
    	return PLUGIN_CONTINUE
    }
 
    public remTask(id)
    {
    	remove_task(id, 0)
    }
 
    public getTeam(id)
    {
    	get_user_team (id, color, 9)
    }
 
    public setDisplay(id) 
    {
    	if(!is_user_connected(id))
    		return PLUGIN_CONTINUE
 
	new stats[8]
	new bodyhits[8]
    	get_user_stats(id, stats, bodyhits)	
 
    	if(stats[0] < 50)
    	{
    		PlayerRank[id] = RANK_HONVED
    	}
    	else if(stats[0] >= 50 && stats[0] < 100)
    	{
    		PlayerRank[id] = RANK_ORVEZETO
    	}
    	else if(stats[0] >= 100 && stats[0] < 200)
    	{
    		PlayerRank[id] = RANK_TIZEDES
    	}
    	else if(stats[0] >= 200 && stats[0] < 300)
    	{
    		PlayerRank[id] = RANK_SZAKASZV
    	}
    	else if(stats[0] >= 300 && stats[0] < 450)
    	{
    		PlayerRank[id] = RANK_ORMESTER
    	}
    	else if(stats[0] >= 450 && stats[0] < 650)
    	{
    		PlayerRank[id] = RANK_TORMESTER
    	}
    	else if(stats[0] >= 650 && stats[0] < 800)
    	{
    		PlayerRank[id] = RANK_FTORMESTER
    	}
    	else if(stats[0] >= 800 && stats[0] < 1000)
    	{
    		PlayerRank[id] = RANK_ZASZLOS
    	}
    	else if(stats[0] >= 1000 && stats[0] < 1200)
    	{
    		PlayerRank[id] = RANK_TZASZLOS
    	}
    	else if(stats[0] >= 1200 && stats[0] < 1400)
    	{
    		PlayerRank[id] = RANK_FZASZLOS
    	}
    	else if(stats[0] >= 1400 && stats[0] < 1700)
    	{
    		PlayerRank[id] = RANK_HADNAGY
    	}
    	else if(stats[0] >= 1700 && stats[0] < 2000)
    	{
    		PlayerRank[id] = RANK_FOHADNAGY
    	}
    	else if(stats[0] >= 2000 && stats[0] < 2500)
    	{
    		PlayerRank[id] = RANK_SZAZADOS
    	}
    	else if(stats[0] >= 2500 && stats[0] < 3000)
    	{
    		PlayerRank[id] = RANK_ORNAGY
    	}
    	else if(stats[0] >= 3000 && stats[0] < 3600)
    	{
    		PlayerRank[id] = RANK_ALEZREDES
    	}
    	else if(stats[0] >= 3600 && stats[0] < 4500)
    	{
    		PlayerRank[id] = RANK_EZREDES
    	}
    	else if(stats[0] >= 4500 && stats[0] < 5500)
    	{
    		PlayerRank[id] = RANK_DANDARTABORNOK
    	}
    	else if(stats[0] >= 5500 && stats[0] < 20000)
    	{
    		PlayerRank[id] = RANK_VEZERORNAGY
    	}
    	else if(stats[0] >= 20000) && stats[0] < 20100)
    	{
    		PlayerRank[id] = RANK_ALTABORNAGY
 
      else if(stats[0] >= 20100) && stats[0] < 20200)
 
            PlayerRank[id] = RANK_VEZEREZREDES
    	}
 
    	set_hudmessage(142, 239, 39, 0.01, 0.20, 0, 6.0, 1.0, 0.0, 0.0, -1)
    	show_hudmessage(id, "^nÖléseid: %i ^nRangod: %s", stats[0], RANKS[PlayerRank[id]])
    	//show_hudmessage(id, "%s ^nÖléseid: %i ^nRangod: %s", name, stats[0], RANKS[PlayerRank[id]])
 
    	set_task(HUD_INTERVAL, "setDisplay", id)
 
    	return PLUGIN_CONTINUE
    }
 
    stock ColorChat(const id, const input[], any:...)
    {
    	new count = 1, players[32];
    	static msg[191];
    	vformat(msg, 190, input, 3);
 
    	replace_all(msg, 190, "!g", "^4"); // Green Color
    	replace_all(msg, 190, "!y", "^1"); // Default Color
    	replace_all(msg, 190, "!t", "^3"); // Team Color
 
    	if (id) players[0] = id; else get_players(players, count, "ch");
    	{
    		for (new i = 0; i < count; i++)
    		{
    			if (is_user_connected(players[i]))
    			{
    				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
    				write_byte(players[i]);
    				write_string(msg);
    				message_end();
    			}
    		}
    	}
    }