#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csstats>
 
#pragma tabsize 1
 
#define PLUGIN "Rankrendszer (HUD + prefix)"
#define VERSION "1.5"
#define AUTHOR "6lmasok,qKKKJ;>, RaZ_HU" ///Szerk:. Jucika
 
#define ACCESS_LEVEL ADMIN_CHAT
#define ADMIN_LISTEN ADMIN_CHAT
 
#define RANK_SILVER 0
#define RANK_SILVER2 1
#define RANK_SILVER3 2
#define RANK_SILVER4 3
#define RANK_SILVERE 4
#define RANK_SILVEREM 5
#define RANK_NOVA 6
#define RANK_NOVA2 7
#define RANK_NOVA3 8
#define RANK_NOVAM 9
#define RANK_AK 10
#define RANK_AK2 11
#define RANK_DAK 12
#define RANK_SHERIFF 13
#define RANK_SAS 14
#define RANK_SASM 15
#define RANK_SUPREME 16
#define RANK_GLOBAL 17
#define RANK_UBER 18
 
#pragma tabsize 0
 
#define MAXRANKS 19
 
new message[192]
 
new strName[191]
new strText[191]
new sayText
new teamInfo
new maxPlayers
new PlayerRank[33]
new bool: g_bHud[ 33 ]
new Float:HUD_INTERVAL
 
static color[10]
#define size 18
new const RANKS[MAXRANKS][] =
{
"Újonc",
"Amatőr",
"Haladó",
"Tud valamit",
"Tag",
"Gyilkos",
"Vérbeli gyilkos",
"Alázó",
"Profi",
"Őrűlt",
"Kíméletlen",
"Legyőzhetetlen",
"Psychopata",
"Fél Isten",
"Radioaktív állat",
"Mester",
"Őstag",
"Őskövület",
"LEGENDA"
};
new const szamok[size] =
{
150,
300,
450,
550,
700,
800,
1250,
1500,
1700,
1950,
2300,
2550,
2600,
2900,
3300,
3600,
4100,
8000,
}
 
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /rang", "hud")
    register_clcmd("say rang", "hud")
    register_clcmd( "say /rangok", "cmdRangs" );
    register_clcmd( "say /hud", "cmdHud" );
    register_clcmd ("say", "hook_say")
    register_clcmd ("say_team", "hook_teamsay")
    //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 cmdRangs( iPlayerId )
{
    static iLen = 0, sMotd[ 2048 ], iMotdLen = charsmax( sMotd );
    
    iLen = formatex( sMotd, iMotdLen, "<meta charset=utf-8><style>table{color:#FFB000;} td,th{border:1px solid #666;text-align:center;}</style><body bgcolor=#000000><center><table width='400'><tr><th>Rang</th><th>Ölés</th><tr>" );
    iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr><td>%s</td><td>0</td><tr>", RANKS[ 0 ] );
    
    for ( new i; i < size; ++i )
        iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr><td>%s</td><td>%d</td><tr>", RANKS[ i + 1 ], szamok[ i ] );
    
    show_motd( iPlayerId, sMotd, "Rangrendszer infó" );
}
 
public cmdHud( iPlayerId )
{
    ColorChat( iPlayerId, "^1A hud kijelző ^3%skapcsolva^1!", ( g_bHud[ iPlayerId ] ^= true ) ? "be" : "ki" );
    
    if ( !g_bHud[ iPlayerId ] ) remove_task( iPlayerId );
    else 
    { 
        if ( !task_exists( iPlayerId ) ) set_task( HUD_INTERVAL, "setDisplay", iPlayerId ); 
    }
}
 
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, "^3Írd be ^4/rang ^3vagy ^4rang ^3hogy 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ések: ^3%d",RANKS[PlayerRank[id]], stats[0])
    
    if(PlayerRank[id] == MAXRANKS-1)
    {
        //client_print(id, print_chat, "^4Rangod: ^3%s ^1| ^4Ölések: ^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ések: ^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 = "^x01"
    }
    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]^4[%s] ^3%s^1:", 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^1:", 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^1:", 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[Játékos][%s] ^3%s^1:",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 name[32]
    get_user_name (id, name, 31)
    
    new isAlive, alive[32]
    
    if (is_user_alive (id))
    {
        isAlive = 1
        alive = "^x01"
    }
    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(%s)^4[Tulaj]^4[%s] ^3%s^1:", 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^1:", 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^1:", 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[Játékos][%s] ^3%s^1:",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 getTeam(id)
{
    get_user_team (id, color, 9)
}
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)
    {
        g_bHud[ id ] = true;
        set_task(HUD_INTERVAL, "setDisplay", id)
    }
    else
    {
        set_task(0.5, "remTask", id)
    }
    
    return PLUGIN_CONTINUE
}
 
public remTask(id)
{
    remove_task(id, 0)
}
 
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_SILVER
    }
    else if(stats[0] >= 50 && stats[0] < 200)
    {
        PlayerRank[id] = RANK_SILVER2
    }
    else if(stats[0] >= 200 && stats[0] < 350)
    {
        PlayerRank[id] = RANK_SILVER3
    }
    else if(stats[0] >= 350 && stats[0] < 450)
    {
        PlayerRank[id] = RANK_SILVER4
    }
    else if(stats[0] >= 450 && stats[0] < 600)
    {
        PlayerRank[id] = RANK_SILVERE
    }
    else if(stats[0] >= 600 && stats[0] < 800)
    {
        PlayerRank[id] = RANK_SILVEREM
    }
    else if(stats[0] >= 800 && stats[0] < 1150)
    {
        PlayerRank[id] = RANK_NOVA
    }
    else if(stats[0] >= 1150&& stats[0] < 1400)
    {
        PlayerRank[id] = RANK_NOVA2
    }
    else if(stats[0] >= 1400 && stats[0] < 1600)
    {
        PlayerRank[id] = RANK_NOVA3
    }
    else if(stats[0] >= 1600 && stats[0] < 1850)
    {
        PlayerRank[id] = RANK_NOVAM
    }
    else if(stats[0] >= 1850 && stats[0] < 2200)
    {
        PlayerRank[id] = RANK_AK
    }
    else if(stats[0] >= 2200 && stats[0] < 2450)
    {
        PlayerRank[id] = RANK_AK2
    }
    else if(stats[0] >= 2450 && stats[0] < 2600)
    {
        PlayerRank[id] = RANK_DAK
    }
    else if(stats[0] >= 2600 && stats[0] < 2800)
    {
        PlayerRank[id] = RANK_SHERIFF
    }
    else if(stats[0] >= 2800 && stats[0] < 3200)
    {
        PlayerRank[id] = RANK_SAS
    }
    else if(stats[0] >= 3200 && stats[0] < 3500)
    {
        PlayerRank[id] = RANK_SASM
    }
    else if(stats[0] >= 3500 && stats[0] < 4000)
    {
        PlayerRank[id] = RANK_SUPREME
    }
    else if(stats[0] >= 4000 && stats[0] < 4500)
    {
        PlayerRank[id] = RANK_GLOBAL
    }
    else if(stats[0] >= 4500)
    {
        PlayerRank[id] = RANK_UBER
    }
    
    set_hudmessage(255, 0, 255, 0.01, 0.20, 0, 6.0, 1.0, 0.0, 0.0, -1)
    show_hudmessage(id, "^nÖléseid: %i^nRangod: %s^nParancsok: /rang, /rangok, /hud^nJó Játékot", stats[0], RANKS[PlayerRank[id]])
    //show_hudmessage(id, "%s ^nÖlések: %i ^nRang: %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();
        }
    }
}
}
stock print_color(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!t", "^3")
    replace_all(msg, 190, "? "á")
    replace_all(msg, 190, "? "é")
    replace_all(msg, 190, "? "í")
    replace_all(msg, 190, "??"ó")
    replace_all(msg, 190, "??"ö")
    replace_all(msg, 190, "??"ő")
    replace_all(msg, 190, "??"ú")
    replace_all(msg, 190, "??"ü")
    replace_all(msg, 190, "??"ű")
    replace_all(msg, 190, "b, "Á")
    replace_all(msg, 190, "?, "É")
    replace_all(msg, 190, "?, "Í")
    replace_all(msg, 190, "?, "Ó")
    replace_all(msg, 190, "?, "Ö")
    replace_all(msg, 190, "?, "Ő")
    replace_all(msg, 190, "?, "Ú")
    replace_all(msg, 190, "?, "Ü")
    replace_all(msg, 190, "?, "Ű")
    
}