PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <jctf>
#include <fvault>
#define PLUGIN "Rank -- Pega Bandeira"
#define VERSION "2.0"
#define AUTHOR "yRestrict"
// Player Vars
new g_flagcaptured[MAX_PLAYERS + 1];
new g_flagreturned[MAX_PLAYERS + 1];
new g_szMotd[1536];
new bool: g_bPlayerName[32][MAX_PLAYERS + 1]
new const RANK_BANDEIRAS[] = "capb_ranks_bandeiras"
new const g_sPrefix[] = "!t[!FlaG Hunters!t]"
enum _: Bkrank_APdata { sz_Conta[35], szPoints[128] }
/*-----------0--[ PLUGINS ]-------------*/
public plugin_init()
{
// Register Plugin
register_plugin(PLUGIN, VERSION, AUTHOR)
// EVEMTS
register_event("HLTV", "round_start", "a", "1=0", "2=0")
// PLAYER COMANDS
register_clcmd("say /crank", "SkillRank")
register_clcmd("say /ctop", "top10_flags")
}
stock xIsUserNoSxe(id)
{
// ID
new xGetAuth[64]
// ID
get_user_authid(id, xGetAuth, charsmax(xGetAuth))
// True
if(equal(xGetAuth, "VALVE_4:4", 9))
return true
// Return
return false
}
stock skvd_chat_collor(target, const message[], any:...)
{
static buffer[650], i, argscount
argscount = numargs()
// Replace Caracter Special
// Send to everyone
if(!target)
{
static player
for (player = 1; player <= get_maxplayers(); player++)
{
// Not connected
if (!is_user_connected(player))
continue;
// Remember changed arguments
static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
changedcount = 0
// Replace LANG_PLAYER with player id
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
replace_all(buffer, charsmax(buffer),"!g","^4");// green
replace_all(buffer, charsmax(buffer),"!n","^1");// normal
replace_all(buffer, charsmax(buffer),"!y","^1");// normal
replace_all(buffer, charsmax(buffer),"!t","^3");// team
replace_all(buffer, charsmax(buffer),"x04","^4");// green
replace_all(buffer, charsmax(buffer),"x03","^3");// normal
replace_all(buffer, charsmax(buffer),"x01","^1");// normal
// Send it
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, player)
write_byte(player)
write_string(buffer)
message_end()
// Replace back player id's with LANG_PLAYER
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
// Send to specific target
else
{
if(!is_user_connected(target))
return;
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
replace_all(buffer, charsmax(buffer),"!g","^4");// green
replace_all(buffer, charsmax(buffer),"!n","^1");// normal
replace_all(buffer, charsmax(buffer),"!y","^1");// normal
replace_all(buffer, charsmax(buffer),"!t","^3");// team
replace_all(buffer, charsmax(buffer),"x04","^4");// green
replace_all(buffer, charsmax(buffer),"x03","^3");// team
replace_all(buffer, charsmax(buffer),"x01","^1");// normal
// Send it
message_begin(MSG_ONE, get_user_msgid("SayText"), _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
// Drop primary/secondary weapons
public client_putinserver(id)
{
// Nome
get_user_name(id, g_bPlayerName[id], charsmax(g_bPlayerName[]))
// Vars
g_flagcaptured[id] = 0;
g_flagreturned[id] = 0;
// Hud
set_task(1.0, "team_menu", id)
// Save Rank Bandeira
if(!xIsUserNoSxe(id))
{
// ID
new xGetAuth[64], szData[250], Pontos[32], Capturadas[32], Recuperadas[32], Nick[32];
// ID
get_user_authid(id, xGetAuth, charsmax(xGetAuth))
// Dados
if(fvault_get_data(RANK_BANDEIRAS, xGetAuth, szData, charsmax(szData)))
{
// Bugs Remove
replace_all(Pontos, charsmax(Pontos), "'", "") // Pra nao buga o html da motd
replace_all(Capturadas, charsmax(Capturadas), "'", "") // Pra nao buga o html da motd
replace_all(Recuperadas, charsmax(Recuperadas), "'", "") // Pra nao buga o html da motd
// Points
g_flagcaptured[id] = str_to_num(Capturadas)
g_flagreturned[id] = str_to_num(Recuperadas)
// Parse
parse(szData, Pontos, charsmax(Pontos), Capturadas, charsmax(Capturadas), Recuperadas, charsmax(Recuperadas), Nick, charsmax(Nick))
}
}
}
public jctf_flag(iEvent, id, iFlagTeam, bool:bAssist)
{
switch(iEvent)
{
case FLAG_RETURNED:
{
if(!bAssist)
{
g_flagreturned[ id ]++
}
}
case FLAG_CAPTURED:
{
if(!bAssist)
{
g_flagcaptured[ id ]++
}
}
}
}
public client_disconnected(id)
{
// Save Rank Bandeira
if(!xIsUserNoSxe(id))
{
// ID
new xGetAuth[64], szData[250], szNick[64]
// ID
get_user_authid(id, xGetAuth, charsmax(xGetAuth))
// Formatex
formatex(szNick, charsmax(szNick), "%s", g_bPlayerName[id])
// Bugs
replace_all(szNick, charsmax(szNick), " ", "") // Pra nao buga o html da motd
replace_all(szNick, charsmax(szNick), "'", "") // Pra nao buga o html da motd
// Data
formatex(szData, charsmax(szData), "'%d' '%d' '%d' '%s'", g_flagcaptured[id] + g_flagreturned[id], g_flagcaptured[id], g_flagreturned[id], szNick)
// Salvar
fvault_set_data(RANK_BANDEIRAS, xGetAuth, szData)
}
// RANK
g_flagcaptured[id] = 0;
g_flagreturned[id] = 0;
}
/*--------------------------------------*/
/*----------[ RANK BANDEIRA ]-----------*/
public top10_flags(id)
{
// Len
new iLen = formatex(g_szMotd, charsmax(g_szMotd),
"<body bgcolor=#A4BED6>\
<table width=100%% cellpadding=2 cellspacing=0 border=0>\
<tr align=center bgcolor=#52697B>\
<th width=20%%>Posicao\
<th width=20%% align=left>Nome\
<th width=20%%>Bandeiras Capturadas\
<th width=20%%>Bandeiras Recuperadas");
// Arrays
new Array: aKey = ArrayCreate(35)
new Array: aData = ArrayCreate(128)
new Array: aAll = ArrayCreate(Bkrank_APdata)
// Load
fvault_load(RANK_BANDEIRAS, aKey, aData)
// Vars
new iArraySize = ArraySize(aKey), Data[Bkrank_APdata], i;
// Countsa
for(i = 0; i < iArraySize; i++)
{
// String
ArrayGetString(aKey, i, Data[sz_Conta], sizeof Data[sz_Conta] - 1)
ArrayGetString(aData, i, Data[szPoints], sizeof Data[szPoints] - 1)
// Data
ArrayPushArray(aAll, Data)
}
// Sort
ArraySort(aAll, "SortData")
// Vars
new szName[32], iSize = clamp(iArraySize, 0, 10), j, Pontos[32], Capturadas[32], Recuperadas[32], Nick[32];
new PCapuradas, PRecuperadas;
// Itens
for(j = 1; j < iSize; j++)
{
// Array
ArrayGetArray(aAll, j, Data)
// Get Data
fvault_get_data(RANK_BANDEIRAS, Data[sz_Conta], szName, charsmax(szName))
// Espaços
replace_all(szName, charsmax(szName), "<", " ")
replace_all(szName, charsmax(szName), ">", " ") // Pra nao buga o html da motd
replace_all(szName, charsmax(szName), "%", " ")
replace_all(szName, charsmax(szName), " ", "")
// Parse
parse(Data[szPoints], Pontos, charsmax(Pontos), Capturadas, charsmax(Capturadas), Recuperadas, charsmax(Recuperadas), Nick, charsmax(Nick))
// Bugs Remove
replace_all(Pontos, charsmax(Pontos), "'", "") // Pra nao buga o html da motd
replace_all(Capturadas, charsmax(Capturadas), "'", "") // Pra nao buga o html da motd
replace_all(Recuperadas, charsmax(Recuperadas), "'", "") // Pra nao buga o html da motd
replace_all(Nick, charsmax(Nick), " ", "") // Pra nao buga o html da motd
replace_all(Nick, charsmax(Nick), "'", "") // Pra nao buga o html da motd
// Pontos
PCapuradas = str_to_num(Capturadas)
PRecuperadas = str_to_num(Recuperadas)
// Len
iLen += formatex(g_szMotd[iLen], charsmax(g_szMotd) - iLen, "<tr align=center>");
iLen += formatex(g_szMotd[iLen], charsmax(g_szMotd) - iLen, "<td>%d", j);
iLen += formatex(g_szMotd[iLen], charsmax(g_szMotd) - iLen, "<td align=left>%s", Nick);
iLen += formatex(g_szMotd[iLen], charsmax(g_szMotd) - iLen, "<td>%d", PCapuradas);
iLen += formatex(g_szMotd[iLen], charsmax(g_szMotd) - iLen, "<td>%d", PRecuperadas);
}
// Len
iLen += formatex(g_szMotd[iLen], charsmax(g_szMotd) - iLen, "</body></table>")
// Destroy Array
ArrayDestroy(aKey)
ArrayDestroy(aData)
ArrayDestroy(aAll)
// Make
show_motd(id, g_szMotd, "[CAPB] Rank de Bandeiras:")
}
public SkillRank(id)
{
// Arrays
new Array:aKey = ArrayCreate(35)
new Array:aData = ArrayCreate(128)
new Array:aAll = ArrayCreate(Bkrank_APdata)
// Load
fvault_load(RANK_BANDEIRAS, aKey, aData)
// Vars
new iArraySize = ArraySize(aKey), Data[Bkrank_APdata], i
// Load
for (i = 0; i < iArraySize; i++)
{
ArrayGetString(aKey, i, Data[sz_Conta], sizeof Data[sz_Conta] - 1)
ArrayGetString(aData, i, Data[szPoints], sizeof Data[szPoints] - 1)
ArrayPushArray(aAll, Data)
}
// Sort
ArraySort(aAll, "SortData")
// Vars
new szAuthIdFromArray[35], j
// Itens
for (j = 0; j < iArraySize; j++)
{
// String
ArrayGetString(aAll, j, szAuthIdFromArray, charsmax(szAuthIdFromArray))
// Conta
new xGetAuth[40]; get_user_authid(id, xGetAuth, charsmax(xGetAuth))
// ID
if(equal(szAuthIdFromArray, xGetAuth))
break
}
// Array Destroy
ArrayDestroy(aKey)
ArrayDestroy(aData)
ArrayDestroy(aAll)
// Chat
skvd_chat_collor(id, "!g%s!y %L", g_sPrefix, id, "RANK_BANDEIRAS", j + 1, iArraySize, g_flagcaptured, g_flagreturned[id])
// Return
return PLUGIN_CONTINUE
}
public SortData(Array:aArray, iItem1, iItem2, iData[], iDataSize)
{
// Vars
new Data1[Bkrank_APdata], Data2[Bkrank_APdata]
ArrayGetArray(aArray, iItem1, Data1)
ArrayGetArray(aArray, iItem2, Data2)
// Points
new szPoints_1[7]
parse(Data1[szPoints], szPoints_1, charsmax(szPoints_1))
// Points
new szPoints_2[7]
parse(Data2[szPoints], szPoints_2, charsmax(szPoints_2))
// Count
new iCount1 = str_to_num(szPoints_1)
new iCount2 = str_to_num(szPoints_2)
// Return
return (iCount1 > iCount2) ? -1 : ((iCount1 < iCount2) ? 1 : 0)
}