#include <amxmodx>
#include <nvault_util>
#include <engine>
#include <ColorChat>
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxClients )
enum UserInfo {
LEVEL,
EXPERIENCE
}
new g_iMaxClients, g_iHudSync;
new g_iUserInfo[UserInfo][33];
new Float:g_fNextRefresh[33];
new g_nVault;
public plugin_init() {
register_plugin("Exp Mod", "0.1", "MarWit")
register_clcmd("say /top10", "cmdTop10")
register_event("DeathMsg", "eventDeathMsg", "a");
if((g_nVault = nvault_open("ExpMod")) == INVALID_HANDLE)
{
set_fail_state("[ExpMod] The error occurred when opening a file: ExpMod.nvault")
return PLUGIN_HANDLED_MAIN
}
g_iMaxClients = get_maxplayers()
g_iHudSync = CreateHudSyncObj()
return PLUGIN_CONTINUE
}
public plugin_end()
nvault_close(g_nVault)
public client_connect(id)
{
g_iUserInfo[LEVEL][id] = g_iUserInfo[EXPERIENCE][id] = 0
LoadPlayer(id)
}
public client_disconnect(id)
SavePlayer(id)
public client_PreThink(id)
{
if(g_fNextRefresh[id] >= get_gametime())
return PLUGIN_CONTINUE
set_hudmessage(255, 255, 255, 0.02, 0.2, 0, 0.0, 0.2, 0.1, 0.1)
ShowSyncHudMsg(id, g_iHudSync, "Poziom: %d^nDoswiadczenie: %d/%d", g_iUserInfo[LEVEL][id], g_iUserInfo[EXPERIENCE][id], ( power(g_iUserInfo[LEVEL][id]+1, 2) * 95 ))
g_fNextRefresh[id] = get_gametime() + 0.25
return PLUGIN_CONTINUE
}
public eventDeathMsg()
{
static iAttacker
static iVictim
iAttacker = read_data(1);
iVictim = read_data(2);
if(g_iUserInfo[LEVEL][iAttacker] >= 100 || !IsPlayer(iAttacker) || !IsPlayer(iVictim))
return PLUGIN_CONTINUE
if(read_data(3))
g_iUserInfo[EXPERIENCE][iAttacker] += 30 * g_iUserInfo[LEVEL][iAttacker]
else
g_iUserInfo[EXPERIENCE][iAttacker] += 25 * g_iUserInfo[LEVEL][iAttacker]
if(g_iUserInfo[EXPERIENCE][iAttacker] >= power(g_iUserInfo[LEVEL][iAttacker]+1, 2) * 95)
{
g_iUserInfo[LEVEL][iAttacker]++
g_iUserInfo[EXPERIENCE][iAttacker] = 0
ColorChat(iAttacker, RED, "[ExpMod]^x01 Gratulacje! Wbiles nastepny poziom!
")
}
return PLUGIN_CONTINUE
}
public cmdTop10(id)
{
new iHandle = nvault_util_open("ExpMod");
new Array:aBuffer = ArrayCreate(192, 1);
new szName[64], szData[192], szBuffer[2048];
new iTimeStamp, iNum;
for(new i=0; i<nvault_util_count(iHandle); i++)
{
iNum = nvault_util_read(iHandle, iNum, szName, 63, szData, 191, iTimeStamp)
format(szData, 191, "%s|;;|%s", szName, szData)
ArrayPushString(aBuffer, szData)
}
nvault_util_close(iHandle)
ArraySort(aBuffer, "ArraySort_Desc")
iNum = ArraySize(aBuffer) >= 10 ? 9 : ArraySize(aBuffer)-1
format(szBuffer, 2047, "<html><head><title>Top 10 || ExpMod by MarWit</title></head><body bgcolor=^"black^" text=^"white^">")
add(szBuffer, 2047, "<center><font color=^"green^" size=^"+2^">Top 10</font><br><br>")
add(szBuffer, 2047, "<table border=^"1^"><tr><th>Nick</th><th>Poziom</th></tr>")
for(new i=0; i<iNum; i++)
{
ArrayGetString(aBuffer, i, szData, 191)
split(szData, szName, 63, szData, 191, "|;;|")
add(szBuffer, 2047, "<tr><td>")
add(szBuffer, 2047, szName)
add(szBuffer, 2047, "</td><td>")
strtok(szData, szData, 191, szName, 63, '#')
add(szBuffer, 2047, szData)
add(szBuffer, 2047, "</td></tr>")
}
add(szBuffer, 2047, "</table></center><h6 align=^"right^">ExpMod by MarWit</font></body></html>")
ArrayDestroy(aBuffer)
show_motd(id, szBuffer, "Top 10")
}
public ArraySort_Desc(Array:aArray, iItem1, iItem2)
{
new szBuffer[2][192], szArgs[2][2][128];
ArrayGetString(aArray, iItem1, szBuffer[0], 191)
ArrayGetString(aArray, iItem2, szBuffer[1], 191)
split(szBuffer[0], szArgs[0][0], 127, szArgs[0][1], 127, "|;;|")
split(szBuffer[1], szArgs[1][0], 127, szArgs[1][1], 127, "|;;|")
strtok(szArgs[0][1], szArgs[0][0], 127, szArgs[0][1], 127, '#')
strtok(szArgs[1][1], szArgs[1][0], 127, szArgs[1][1], 127, '#')
if(str_to_num(szArgs[0][0]) < str_to_num(szArgs[1][0]))
return 1;
else
return -1;
return 0
}
public LoadPlayer(id)
{
new szName[64], szData[2][128];
get_user_name(id, szName, 63)
nvault_get(g_nVault, szName, szData[0], 127)
replace_all(szData[0], 127, "#", " ")
parse(szData[0], szData[0], 127, szData[1], 127)
g_iUserInfo[LEVEL][id] = str_to_num(szData[0])
g_iUserInfo[EXPERIENCE][id] = str_to_num(szData[1])
if(g_iUserInfo[LEVEL][id] <= 0) g_iUserInfo[LEVEL][id] = 1
}
public SavePlayer(id)
{
new szName[64], szData[128];
get_user_name(id, szName, 63)
format(szData, 127, "%d#%d%#", g_iUserInfo[LEVEL][id], g_iUserInfo[EXPERIENCE][id])
nvault_set(g_nVault, szName, szData)
}