#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csstats>
#include <sqlx>
#pragma tabsize 0
#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
#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
new static color[10]
// prefix cucc
new g_prefix[33][100], bool:g_hasprefix[33], g_authid[33][100]
new Handle:g_SqlTuple
new const g_HOST[] = ""
new const g_USERNAME[] = ""
new const g_PASSWORD[] = ""
new const g_DATABASE[] = ""
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",
"Pokolfajzat",
"Őstag",
"Őskövület",
"LEGENDA"
}
#define size 18
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 /prefix", "chat_prefix", ADMIN_IMMUNITY, "Celpont Prefix")
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_concmd("amx_addprefix", "console_prefix", ADMIN_IMMUNITY, "Celpont Prefix")
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 plugin_cfg()
{
g_SqlTuple = SQL_MakeDbTuple(g_HOST, g_USERNAME, g_PASSWORD, g_DATABASE)
static Query[1024];
new Len;
Len += formatex(Query[Len], charsmax(Query), "CREATE TABLE IF NOT EXISTS `prefixek`");
Len += formatex(Query[Len], charsmax(Query)-Len, "(`steamid` varchar(40) NOT NULL, ");
Len += formatex(Query[Len], charsmax(Query)-Len, "`prefix` varchar(40) NOT NULL)");
SQL_ThreadQuery(g_SqlTuple, "sql_user_thr", Query);
}
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 = "^1*Él*"
}
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^3[Tulaj]^4[%s][%s] ^3%s:", alive, g_prefix[id], 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][%s] ^3%s:", alive, g_prefix[id], 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][%s] ^3%s:", alive, g_prefix[id], 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][%s] ^3%s:",alive, g_prefix[id], RANKS[PlayerRank[id]], name)
format (strText, 191, "^1%s", message)
}
else if(g_hasprefix[id])
{
getTeam(id)
format (strName, 191, "%s^4[%s][%s] ^3%s:",alive, g_prefix[id], 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*Él*"
}
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)^3[Tulaj]^3[%s][%s] ^3%s:",alive , playerTeamName, g_prefix[id], 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][%s] ^3%s:",alive , playerTeamName, g_prefix[id], 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][%s] ^3%s:",alive , playerTeamName, g_prefix[id], 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][%s] ^3%s:",alive ,playerTeamName, g_prefix[id], RANKS[PlayerRank[id]], name)
format (strText, 191, "^1%s", message)
}
else if(g_hasprefix[id])
{
getTeam(id)
format (strName, 191, "%s(%s)^4[%s][%s] ^3%s:",alive ,playerTeamName, g_prefix[id], 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)
{
g_bHud[ id ] = true;
set_task(HUD_INTERVAL, "setDisplay", id)
}
else
{
set_task(0.5, "remTask", id)
}
get_user_authid(id, g_authid[id], charsmax(g_authid))
sql_load_user(id)
return PLUGIN_CONTINUE
}
public client_disconnect(id)
{
if(is_user_bot(id))
return
g_hasprefix[id] = false
g_prefix[id] = ""
g_authid[id] = ""
}
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_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(random_num(15, 255), random_num(15, 255), random_num(15, 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", 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
}
public chat_prefix(id, lvl, cid)
{
if(!cmd_access(id, lvl, cid, 0))
return PLUGIN_HANDLED
new Arg1[40], Arg2[40]
read_argv(1, Arg1, charsmax(Arg1))
read_argv(2, Arg2, charsmax(Arg2))
new player = cmd_target(id, Arg1, 1)
if (!player)
return PLUGIN_HANDLED
if(g_hasprefix[player])
{
g_prefix[player] = Arg2
g_hasprefix[player] = true
sql_user(player, 0)
return PLUGIN_HANDLED
}
g_prefix[player] = Arg2
g_hasprefix[player] = true
sql_user(player, 1)
return PLUGIN_HANDLED
}
public console_prefix(id, lvl, cid)
{
if(!cmd_access(id, lvl, cid, 0))
return PLUGIN_HANDLED
new Arg1[40], Arg2[40]
read_argv(1, Arg1, charsmax(Arg1))
read_argv(2, Arg2, charsmax(Arg2))
new player = cmd_target(id, Arg1, 1)
if (!player)
return PLUGIN_HANDLED
if(g_hasprefix[player])
{
g_prefix[player] = Arg2
g_hasprefix[player] = true
sql_user(player, 0)
return PLUGIN_HANDLED
}
g_prefix[player] = Arg2
g_hasprefix[player] = true
sql_user(player, 1)
return PLUGIN_HANDLED
}
public sql_user(player, mode)
{
static Query[256]
if(mode == 0)
formatex(Query, charsmax(Query), "UPDATE `prefixek` SET `prefix` = '%s' WHERE `steamid` = '%s';", g_prefix[player], g_authid[player]);
else
formatex(Query, charsmax(Query), "INSERT INTO `prefixek` (`steamid`, `prefix`) VALUES ('%s', '%s');", g_authid[player], g_prefix[player]);
SQL_ThreadQuery(g_SqlTuple, "sql_user_thr", Query);
}
public sql_user_thr(FailState, Handle:Query, Error[], Errcode, DataSize, Float:Queuetime) {
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
log_amx("%s", Error);
return;
}
}
public sql_load_user(id)
{
static Query[512];
static szData[2]
szData[0] = id
szData[1] = get_user_userid(id)
formatex(Query, charsmax(Query), "SELECT * FROM `prefixek` WHERE `authid` = '%s';", g_authid[id])
SQL_ThreadQuery(g_SqlTuple, "sql_load_user_thr", Query, szData, 2)
}
public sql_load_user_thr(FailState, Handle:Query, Error[], Errcode, szData[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
log_amx("%s", Error);
return;
}
else
{
new id = szData[0]
if(szData[1] != get_user_userid(id))
return
if(SQL_NumRows(Query) > 0)
{
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "prefix"), g_prefix[id], charsmax(g_prefix[]))
g_hasprefix[id] = true
}
}
}
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();
}
}
}
}