work...
every map.
PHP Code:
#include <amxmodx>
#include <nvault>
#include <nvault_util>
const MAXPLAYERS = 32;
new knife_kills[MAXPLAYERS + 1];
new top_player_kills[10];
new top_player_names[10][35];
new nvault_file;
new total_entries;
public plugin_init()
{
register_plugin("Knife Top 10", "1.0", "dnk.");
register_event("DeathMsg", "eventDeath", "a");
register_concmd("say /knife10", "commandTop10");
register_concmd("say_team /knife10", "commandTop10");
nvault_file = nvault_open("KnifeTop");
if( nvault_file == INVALID_HANDLE )
{
set_fail_state("Could not load nvault");
}
total_entries = loadTop();
}
public client_connect(id)
{
if( is_player(id) )
playerLoad(id);
}
public client_disconnect(id)
{
if( is_player(id) )
playerSave(id);
}
public eventDeath()
{
new killer = read_data(0);
new victim = read_data(1);
if( is_player(killer) && is_player(victim) )
{
new weapon[32];
read_data(4, weapon, charsmax(weapon));
if( equal(weapon, "knife") )
{
if( get_user_team(killer) != get_user_team(victim) )
{
knife_kills[killer]++;
}
}
}
}
public commandTop10(id)
{
new html[2500], len;
len = copy(html, charsmax(html), "<html><body><h2>Top 10</h2><br><table><tr><th>#.</th><th>Name</th><th>Kills</th></tr>");
for( new i = 0; i < 10; i++ )
{
if( i < total_entries )
{
len += formatex(html[len], charsmax(html) - len, "<tr><td>%i.</td><td>%s</td><td>%i</td></tr>", (i + 1), top_player_names[i], top_player_kills[i]);
}
else
{
len += copy(html[len], charsmax(html) - len, "<tr><td></td><td></td><td></td></tr>");
}
}
len += copy(html[len], charsmax(html) - len, "</table></body></html>");
show_motd(id, html, "Top 10");
return PLUGIN_HANDLED;
}
public loadTop()
{
new Array:array_kills = ArrayCreate(1);
new Array:array_names = ArrayCreate(35);
new vault_file = nvault_util_open("KnifeTop");
new vault_count = nvault_util_count(vault_file);
new position;
new steam[35], timestamp, data[128];
for( new i = 0; i < vault_count; i++ )
{
position = nvault_util_read(vault_file, position, steam, charsmax(steam), data, charsmax(data), timestamp);
new num[5];
strbreak(data, num, charsmax(num), data, charsmax(data));
ArrayPushCell(array_kills, str_to_num(num));
replace_all(data, charsmax(data), " ", "");
ArrayPushString(array_names, data);
}
nvault_util_close(vault_file);
new kills;
for( new i = 0, j; i < (vault_count - 1); i++ )
{
kills = ArrayGetCell(array_kills, i);
for( j = i + 1; j < vault_count; j++ )
{
if( kills < ArrayGetCell(array_kills, j) )
{
ArraySwap(array_kills, i, j);
ArraySwap(array_names, i, j);
i--;
break;
}
}
}
for( new i = 0; i < 10; i++ )
{
if( i < vault_count )
{
top_player_kills[i] = ArrayGetCell(array_kills, i);
new name[35];
ArrayGetString(array_names, i, name, charsmax(name));
top_player_names[i] = name;
}
}
return vault_count;
}
public playerSave(id)
{
new steamid[35], value[128], name[35];
get_user_authid(id, steamid, charsmax(steamid));
get_user_name(id, name, charsmax(name));
replace_all(name, charsmax(name), "&", "&");
replace_all(name, charsmax(name), "<", "<");
replace_all(name, charsmax(name), ">", ">");
formatex(value, charsmax(value), "%i %s", knife_kills[id], name);
nvault_set(nvault_file, steamid, value);
}
public playerLoad(id)
{
new steamid[35], data[128];
get_user_authid(id, steamid, charsmax(steamid));
if( nvault_get(nvault_file, steamid, data, charsmax(data)) )
{
static num[5];
strbreak(data, num, charsmax(num), data, charsmax(data));
knife_kills[id] = str_to_num(num);
}
else
{
knife_kills[id] = 0;
}
}
bool:is_player(id)
{
return (1 <= id <= MAXPLAYERS);
}