Thank you for reply Bugsy but your code did not work for me ? (Nothing happens when i calle for it)
.. but it depends on the storage of data through the name.
And when I wanted to store it with SteamID .. the top 15 show SteamID only? Where is the problem ?
PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <nvault_util>
#define PLUGIN "[TUT]StatsNvault(amx-x)"
#define VERSION "1.0"
#define AUTHOR "BaJIeHoK"
new g_Vault
new iPlayerNum[33][3]
//new Trie:g_Name
//new Array:g_SteamID
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /set_num", "SetPlayerNum") //??????? ??? ?????????? ?????
register_clcmd("say /rank", "ShowRank") //??????? ??? ?????? ?????
register_clcmd("say", "handle_say") //??????? ??? ?????? ????
//g_SteamID = ArrayCreate(32, 1)
//g_Name = TrieCreate()
}
public SetPlayerNum(id){
new iPlayers[32] //???? ??????? ??? id ???????
new iPlayer, iNum //? ????? ????? ??????? ?????????? ?????? ? ???? ???????
get_players(iPlayers, iNum) //???????? ???????
for(new i; i < iNum; i++) //????????? ????? ????
{
iPlayer = iPlayers[i] //??? ????????? ?????????? ?????? ????????
iPlayerNum[iPlayer][1] += random_num(1, 5) //??????????? 1 ?????
iPlayerNum[iPlayer][2] += random_num(1, 5) //??????????? 2 ?????
}
}
public client_putinserver(id){
g_Vault = nvault_open("level_xp_rank") //????????? ????
if(g_Vault == INVALID_HANDLE) //???? ??????
{
set_fail_state("level_xp_rank") //?????? ?????, ????? ? ????????? ????
}
new szData[32] //??? ???????? ?????? ?? ????
new szName[32] //???? ??????? ???
//get_user_name(id, szName, charsmax( szName )) //???????? ???
get_user_authid(id, szName, charsmax(szName))
nvault_get(g_Vault, szName, szData, charsmax( szData )) //???????? ??????
nvault_close( g_Vault ) //????????? ????
replace_all(szData, charsmax( szData ), "#", " ") //???????? # ?? ??????(# - ????? ???????????? ??????)
new szParse[3][32] //????? ??????? ?????????? ?????
parse(szData, szParse[1], 31, szParse[2], 31)
iPlayerNum[id][1] = str_to_num( szParse[1] ) //??????????? 1 ????? ??????
iPlayerNum[id][2] = str_to_num( szParse[2] ) //??????????? 2 ????? ??????
}
public client_disconnect(id){
g_Vault = nvault_open("level_xp_rank")
if(g_Vault == INVALID_HANDLE)
{
set_fail_state("NVault Error")
}
new szData[32]
new szName[32]
//get_user_name(id, szName, charsmax( szName ))
get_user_authid(id, szName, charsmax(szName))
formatex(szData, charsmax( szData ), "%i#%i", iPlayerNum[id][1], iPlayerNum[id][2])
nvault_set(g_Vault, szName, szData)
nvault_close( g_Vault )
}
public ShowRank(id){
new iPlayers[32]
new iPlayer, iNum
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]
client_disconnect(iPlayer)
}
new Array:aNames = ArrayCreate(32)
new Array:aNums = ArrayCreate(1)
new iPos, iCount, iTime
g_Vault = nvault_util_open("level_xp_rank")
iCount = nvault_util_count( g_Vault )
for(new i; i < iCount; i++)
{
new szName[32], szData[10]
iPos = nvault_util_read(g_Vault, iPos, szName, charsmax( szName ), szData, charsmax( szData ), iTime)
ArrayPushString(aNames, szName)
ArrayPushCell(aNums, str_to_num( szData ))
}
nvault_util_close( g_Vault )
new iCheckNum
for(new i, j; i < ( iCount - 1 ); i++)
{
iCheckNum = ArrayGetCell(aNums, i)
for( j = i + 1; j < iCount; j++ )
{
if(iCheckNum < ArrayGetCell(aNums, j))
{
ArraySwap(aNames, i, j)
ArraySwap(aNums, i, j)
i--
break
}
}
}
new szName[32], szParseName[32]
get_user_name(id, szName, charsmax( szName ))
for(new i; i < iCount; i++)
{
ArrayGetString(aNames, i, szParseName, charsmax( szParseName ))
if(equal(szParseName, szName))
{
client_print(id, print_chat, "you rank %d %d", (i + 1), iCount)
break
}
}
ArrayDestroy(aNames)
ArrayDestroy(aNums)
return PLUGIN_HANDLED
}
public handle_say(id)
{
static args[32]
read_args(args, charsmax(args))
remove_quotes(args)
trim(args)
if(args[0] != '/')
return PLUGIN_CONTINUE
if(contain(args, "/top") != -1)
{
replace(args, charsmax(args), "/top", " ")
return handle_top(id, str_to_num(args))
}
return PLUGIN_CONTINUE
}
handle_top(id, topnum = 15)
{
new buffer[2048], buf[64]
topnum = ShowTop(id, buffer, topnum)
formatex(buf, charsmax(buf), "Zobmbie Infection - Top %d", topnum)
show_motd(id, buffer, buf)
return PLUGIN_CONTINUE
}
ShowTop(id, szMotd[2048], topnum){
new iPlayers[32]
new iPlayer, iNum
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]
client_disconnect(iPlayer)
}
new Array:g_SteamID = ArrayCreate(32, 1)
new Trie: g_Name = TrieCreate()
//new Array:aNames = ArrayCreate(32)
new Array:aNum1 = ArrayCreate(1)
new Array:aNum2 = ArrayCreate(1)
new iPos, iCount, iTime
g_Vault = nvault_util_open("level_xp_rank")
iCount = nvault_util_count( g_Vault )
for(new i; i < iCount; i++)
{
new szName[32], szData[10]
iPos = nvault_util_read(g_Vault, iPos, szName, charsmax( szName ), szData, charsmax( szData ), iTime)
replace_all(szData, charsmax( szData ), "#", " ")
new szParseNum1[32], szParseNum2[32]
parse(szData, szParseNum1, charsmax( szParseNum1 ), szParseNum2, charsmax( szParseNum2 ))
ArrayPushString(g_SteamID, szName)
ArrayPushCell(aNum1, str_to_num( szParseNum1 ))
ArrayPushCell(aNum2, str_to_num( szParseNum2 ))
}
nvault_util_close( g_Vault )
new iCheckNum
for(new i, j; i < ( iCount - 1 ); i++)
{
iCheckNum = ArrayGetCell(aNum1, i)
for( j = i + 1; j < iCount; j++ )
{
if(iCheckNum < ArrayGetCell(aNum1, j))
{
ArraySwap(g_SteamID, i, j)
ArraySwap(aNum1, i, j)
ArraySwap(aNum2, i, j)
i--
break
}
}
}
new szName[32], szParseName[32], SteamID[32]
new iParseNum[3]
new iLen, size, Position
iLen += formatex(szMotd[iLen], charsmax( szMotd ) - iLen,"%5s %30s %25s %25s %25s" , "Rank", "Name", "XP", "Level", "Contry");
size = min(ArraySize(g_SteamID), topnum)
//for (Position = 0, Size = min(ArraySize(aNames), topnum); Position < Size; Position++)
//{
for(Position = size - 15 < 0 ? 0 : size - 15; Position < size && charsmax(szMotd) - iLen > 0; Position++)
{
ArrayGetString(g_SteamID , Position, SteamID, charsmax( SteamID ))
//ArrayGetString(aNames, Position, szParseName, charsmax( szParseName ))
TrieGetString(g_Name, SteamID, szParseName, charsmax(szParseName));
//get_user_name(id, szParseName, charsmax( szParseName )) //???????? ???
iParseNum[1] = ArrayGetCell(aNum1, Position)
iParseNum[2] = ArrayGetCell(aNum2, Position)
iLen += formatex(szMotd[iLen], charsmax( szMotd ) - iLen, "^n%5d %25s %6.0d/%d", (Position + 1), szParseName, iParseNum[1], iParseNum[2])
}
return size
}