#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1
#pragma ctrlchar '\'

new MaxClients;
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;
new color[10];
new RANKS[19][0];
new szamok[18] =
{
    80, 180, 250, 300, 450, 650, 800, 1000, 1200, 1400, 1700, 2000, 2500, 3000, 3600, 4500, 5500, 20000
}

bool:operator==(Float:,_:)(Float:oper1, oper2)
{
    return floatcmp(oper1, float(oper2)) == 0;
}

bool:operator!=(Float:,_:)(Float:oper1, oper2)
{
    return floatcmp(oper1, float(oper2)) != 0;
}

replace_all(String:string[], len, String:what[], String:with[])
{
    new pos = 0;
    new var1 = contain(string, what);
    pos = var1;
    if (var1 == -1)
    {
        return 0;
    }
    new total = 0;
    new with_len = strlen(with);
    new diff = strlen(what) - with_len;
    new total_len = strlen(string);
    new temp_pos = 0;
    while (replace(string[pos], len - pos, what, with))
    {
        total++;
        pos = with_len + pos;
        total_len -= diff;
        if (pos >= total_len)
        {
            return total;
        }
        else
        {
            temp_pos = contain(string[pos], what);
            if (temp_pos == -1)
            {
                return total;
            }
            else
            {
                pos = temp_pos + pos;
            }
            return total;
        }
        return total;
    }
    return total;
}
public plugin_init()
{
    register_plugin(3700, "1.5", "6lmasok,qKKKJ;>, RaZ_HU");
    register_clcmd("say /rang", "hud", -1, "", -1);
    register_clcmd("say rang", "hud", -1, "", -1);
    register_clcmd("say /rangok", "cmdRangs", -1, "", -1);
    register_clcmd("say /hud", "cmdHud", -1, "", -1);
    register_clcmd("say", "hook_say", -1, "", -1);
    register_clcmd("say_team", "hook_teamsay", -1, "", -1);
    register_cvar("sv_rankrendszer", "1", MaxClients, MaxClients);
    register_cvar("sv_rankrendszer_HUD", "1", MaxClients, MaxClients);
    sethudtime();
    sayText = get_user_msgid("SayText");
    teamInfo = get_user_msgid("TeamInfo");
    maxPlayers = get_maxplayers();
    set_task(160.00/*1126170624*/, "korUzenet", MaxClients, "", MaxClients, "b", MaxClients);
    register_message(sayText, "avoid_duplicated");
    return 0;
}

public cmdRangs(iPlayerId)
{
    static iMotdLen = 2047;
    static sMotd[2048];
    static iLen;
    iLen = formatex(sMotd, iMotdLen, 12872);
    new var1 = RANKS;
    iLen = formatex(sMotd[iLen], iMotdLen - iLen, "<tr><td>%s</td><td>0</td><tr>", var1[0][0][var1]) + iLen;
    new i = 0;
    while (i < 18)
    {
        iLen = formatex(sMotd[iLen], iMotdLen - iLen, "<tr><td>%s</td><td>%d</td><tr>", RANKS[i + 1][0][0], szamok[i]) + iLen;
        i++;
    }
    show_motd(iPlayerId, sMotd, "Rangrendszer info");
    return 0;
}

public cmdHud(iPlayerId)
{
    new var2 = g_bHud[iPlayerId];
    new var3 = var2[0][0] ^ true;
    var2 = var3;
    new var1;
    if (var3)
    {
        var1 = 14072;
    }
    else
    {
        var1 = 14084;
    }

/ * ERROR! Az objektum nem konvertálható "Lysis.DSentinel" típusról "Lysis.DReturn" típusra. * /
 function "cmdHud"
public cmdHud(iPlayerId)

public sethudtime()
{
    !!! Removed Phi
    new refreshtime = register_cvar("sv_rankrendszer_HUDtime", "0.9", MaxClients, MaxClients);
    if (0.90/*1063675494*/ == refreshtime)
    {
        HUD_INTERVAL = 0.90/*1063675494*/;
    }
    else
    {
        if (0.90/*1063675494*/ != refreshtime)
        {
            HUD_INTERVAL = get_pcvar_float(refreshtime);
        }
    }
    return 0;
}

public avoid_duplicated(msgId, msgDest, receiver)
{
    return 1;
}

public korUzenet()
{
    ColorChat(0, "\3Írd be \4/rang \3vagy \4rang \3hogy megnézd hány ölés kell a következő ranghoz.");
    return 1;
}

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][0][0]][0][0], stats);
    new var2 = PlayerRank;
    new var1;
    if (var2[id][0][0] == 18)
    {
        ColorChat(id, "\4Már elérted a legnagyobb \4rangot.");
        var1 = var2;
    }
    else
    {
        ColorChat(id, "\4Következő rang: \3%s \1| \4A következő szinthez kell még: \3%d", RANKS[PlayerRank[id][0][0] + 1][0][0], szamok[PlayerRank[id][0][0]][0][0] - stats[0]);
        var1 = Heap_-4;
    }
    return 0;
}

public hook_say(id)
{
    !!! Removed Phi
    if (message[0][0] == 64 || message[0][0] == 47 || message[0][0] == 33 || equal(message, "", MaxClients))
    {
        return 0;
    }
    new name[32];
    get_user_name(id, name, "");
    new isAlive = 0;
    new alive[32];
    if (is_user_alive(id))
    {
        isAlive = 1;
        alive[0] = 15128;
    }
    else
    {
        isAlive = 0;
        alive[0] = 15140;
    }
    if (get_user_flags(id, MaxClients) & 64)
    {
        getTeam(id);
        format(strName, "", 15184, alive, RANKS[PlayerRank[id][0][0]][0][0], name);
        format(strText, "", 15264, message);
    }
    else
    {
        if (get_user_flags(id, MaxClients) & 32)
        {
            getTeam(id);
            format(strName, "", 15280, alive, RANKS[PlayerRank[id][0][0]][0][0], name);
            format(strText, "", 15360, message);
        }
        if (get_user_flags(id, MaxClients) & 1048576)
        {
            getTeam(id);
            format(strName, "", 15376, alive, RANKS[PlayerRank[id][0][0]][0][0], name);
            format(strText, "", 15448, message);
        }
        if (get_user_flags(id, MaxClients) & 33554432)
        {
            getTeam(id);
            format(strName, "", 15464, alive, RANKS[PlayerRank[id][0][0]][0][0], name);
            format(strText, "", 15516, message);
        }
    }
    format(message, "", 15532, strName, strText);
    sendMessage(color, isAlive);
    return 0;
}

public hook_teamsay(id)
{
    !!! Removed Phi
    new playerTeam;
    new var2 = Heap_4;
    var2 = 15560;
    playerTeam = get_user_team(id, var2, MaxClients);
    new playerTeamName[19];
    switch (playerTeam)
    {
        case 1:
        {
            copy(playerTeamName, "", "Terrorista");
        }
        case 2:
        {
            copy(playerTeamName, "", "Anti-Terrorista");
        }
        default:
        {
            copy(playerTeamName, "", 15672);
        }
    }
    if (message[0][0] == 64 || message[0][0] == 47 || message[0][0] == 33 || equal(message, "", MaxClients))
    {
        return 0;
    }
    new isAlive = 0;
    new alive[32];
    if (is_user_alive(id))
    {
        isAlive = 1;
        alive[0] = 15704;
    }
    else
    {
        isAlive = 0;
        alive[0] = 15716;
    }
    new name[32];
    get_user_name(id, name, "");
    if (get_user_flags(id, MaxClients) & 64)
    {
        getTeam(id);
        format(strName, "", 15760, alive, playerTeamName, RANKS[PlayerRank[id][0][0]][0][0], name);
        format(strText, "", 15856, message);
    }
    else
    {
        if (get_user_flags(id, MaxClients) & 32)
        {
            getTeam(id);
            format(strName, "", 15872, alive, playerTeamName, RANKS[PlayerRank[id][0][0]][0][0], name);
            format(strText, "", 15968, message);
        }
        if (get_user_flags(id, MaxClients) & 1048576)
        {
            getTeam(id);
            format(strName, "", 15984, alive, playerTeamName, RANKS[PlayerRank[id][0][0]][0][0], name);
            format(strText, "", 16072, message);
        }
        if (get_user_flags(id, MaxClients) & 33554432)
        {
            getTeam(id);
            format(strName, "", 16088, alive, playerTeamName, RANKS[PlayerRank[id][0][0]][0][0], name);
            format(strText, "", 16156, message);
        }
    }
    format(message, "", 16172, strName, strText);
    sendTeamMessage(color, isAlive, playerTeam);
    return 0;
}

public sendMessage(String:color[], alive)
{
    !!! Removed Phi
    new teamName[10];
    new player = 1;
    while (player < maxPlayers)
    {
        if (is_user_connected(player))
        {
            if ((alive && is_user_alive(player)) || (!alive && !is_user_alive(player)) || (get_user_flags(player, MaxClients) && 256))
            {
                get_user_team(player, teamName, "");
                changeTeamInfo(player, color);
                writeMessage(player, message);
                changeTeamInfo(player, teamName);
            }
        }
        player++;
    }
    return 0;
}

public sendTeamMessage(String:color[], alive, playerTeam)
{
    !!! Removed Phi
    new teamName[10];
    new player = 1;
    while (player < maxPlayers)
    {
        if (is_user_connected(player))
        {
            if (playerTeam != get_user_team(player, var5, MaxClients) && get_user_flags(player, MaxClients) & 256)
            {
                if ((alive && is_user_alive(player)) || (!alive && !is_user_alive(player)) || get_user_flags(player, MaxClients) & 256)
                {
                    get_user_team(player, teamName, "");
                    changeTeamInfo(player, color);
                    writeMessage(player, message);
                    changeTeamInfo(player, teamName);
                }
            }
        }
        player++;
    }
    return 0;
}

public changeTeamInfo(player, String:team[])
{
    message_begin("", teamInfo, "", player);
    write_byte(player);
    write_string(team);
    message_end();
    return 0;
}

public writeMessage(player, String:message[])
{
    message_begin("", sayText, "", player);
    write_byte(player);
    write_string(message);
    message_end();
    return 0;
}

public client_putinserver(id)
{
    !!! Removed Phi
    if (get_cvar_num("sv_rankrendszer"))
    {
        if (get_cvar_num("sv_rankrendszer") == 1 && get_cvar_num("sv_rankrendszer_HUD") == 1)
        {
            g_bHud[id] = 1;
            set_task(HUD_INTERVAL, "setDisplay", id, "", MaxClients, "", MaxClients);
        }
        else
        {
            set_task(0.50/*1056964608*/, "remTask", id, "", MaxClients, "", MaxClients);
        }
        return 0;
    }
    return 1;
}

public remTask(id)
{
    remove_task(id, MaxClients);
    return 0;
}

public getTeam(id)
{
    get_user_team(id, color, "");
    return 0;
}


/ * ERROR! Az objektumhivatkozás nincs beállítva semmilyen objektumpéldányra. * /
 function "setDisplay"
public setDisplay(id)

ColorChat(id, String:input[])
{
    new count = 1;
    new players[32];
    static msg[191];
    vformat(msg, "", input, "");
    replace_all(msg, 190, "!g", "\4");
    replace_all(msg, 190, "!y", "\1");
    replace_all(msg, 190, "!t", "\3");
    if (id)
    {
        players[0] = id;
    }
    else
    {
        get_players(players, count, "ch", "");
    }
    new i = 0;
    while (i < count)
    {
        if (is_user_connected(players[i]))
        {
            message_begin("", get_user_msgid("SayText"), "", players[i]);
            write_byte(players[i]);
            write_string(msg);
            message_end();
            i++;
        }
        i++;
    }
    return 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1250\\ deff0\\ deflang1038{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
