#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <nvault>
new const PLUGIN_NAME[] = "Deathrun XP";
new const drxp_version[] = "2.0";
new const LEVELS[10] = {
50,
100,
150,
200,
250,
300,
350,
400,
450,
500
}
new drxp_playerxp[33], drxp_playerlevel[33];
new drxp_kill, drxp_knife, drxp_grenade, drxp_hs, drxp_savexp, g_drxp_vault;
public plugin_init()
{
register_plugin(PLUGIN_NAME, drxp_version, "KronoS");
RegisterHam(Ham_Spawn, "player", "drxp_spawn", 1);
register_event("DeathMsg", "drxp_death", "a");
drxp_savexp = register_cvar("drxp_savexp","1");
drxp_kill = register_cvar("drxp_kill", "10");
drxp_knife = register_cvar("drxp_knife","5");
drxp_grenade = register_cvar("drxp_grenade","15");
drxp_hs = register_cvar("drxp_hs","10");
g_drxp_vault = nvault_open("deathrun_xp");
register_concmd("amx_takexp", "cmd_take_exp", ADMIN_BAN, "<target> <amount>");
register_concmd("amx_givexp", "cmd_give_exp", ADMIN_BAN, "<target> <amount>");
}
public drxp_spawn(id)
{
if((drxp_playerlevel[id] < 10) && (drxp_playerxp[id] >= LEVELS[drxp_playerlevel[id]]))
{
client_print(id,print_chat,"[%s] Congratulations!You have gained a new level!", PLUGIN_NAME);
while(drxp_playerxp[id] >= LEVELS[drxp_playerlevel[id]])
{
drxp_playerlevel[id] += 1;
}
}
if(drxp_playerlevel[id] > 0)
set_user_health(id, get_user_health(id) + 5*drxp_playerlevel[id]);
}
public drxp_death()
{
new iVictim = read_data(2);
new weapon, hitplace, attacker = get_user_attacker(iVictim,weapon,hitplace);
new victimname[32], wvar[32];
get_user_name(iVictim,victimname,31);
read_data(4, wvar, 31);
if(equal(wvar, "world", 5))
return;
if(attacker < 1 || attacker > 32)
return;
drxp_playerxp[attacker] += get_pcvar_num(drxp_kill);
client_print(attacker,print_chat,"[%s] You have received %i XP for killing %s!", PLUGIN_NAME, get_pcvar_num(drxp_grenade), victimname);
if(hitplace == HIT_HEAD)
{
drxp_playerxp[attacker] += get_pcvar_num(drxp_hs);
client_print(attacker,print_chat,"[%s] You have received %i XP for killing %s with headshot!", PLUGIN_NAME, get_pcvar_num(drxp_hs), victimname);
}
if(weapon == CSW_KNIFE)
{
drxp_playerxp[attacker] += get_pcvar_num(drxp_knife);
client_print(attacker,print_chat,"[%s] You have received %i XP for killing %s with knife!", PLUGIN_NAME, get_pcvar_num(drxp_knife), victimname);
}
else if(weapon == CSW_HEGRENADE)
{
drxp_playerxp[attacker] += get_pcvar_num(drxp_grenade);
client_print(attacker,print_chat,"[%s] You have received %i XP for killing %s with HE!", PLUGIN_NAME, get_pcvar_num(drxp_grenade), victimname);
}
drxp_hudinfo(attacker);
}
public drxp_hudinfo(id)
{
set_hudmessage(255, 255, 255, 0.01, 0.2, 0, 3.0, 3.0);
if(drxp_playerlevel[id] < 10)
show_hudmessage(id, "Level: %i^nXP: %i / %i", drxp_playerlevel[id], drxp_playerxp[id], LEVELS[drxp_playerlevel[id] + 1]);
else
show_hudmessage(id, "Level: %i^nMax level reached!", drxp_playerlevel[id]);
set_task(2.0, "drxp_hudinfo", id);
}
public client_putinserver(id)
{
if(get_pcvar_num(drxp_savexp) == 1)
LoadData(id);
set_task(10.0, "drxp_hudinfo", id);
}
public client_disconnect(id)
{
if(get_pcvar_num(drxp_savexp) == 1)
SaveData(id);
drxp_playerxp[id] = 0;
drxp_playerlevel[id] = 0;
}
public SaveData(id)
{
new PlayerName[35];
get_user_name(id,PlayerName,34);
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",PlayerName);
format(vaultdata,255,"%i#%i#",drxp_playerxp[id],drxp_playerlevel[id]);
nvault_set(g_drxp_vault,vaultkey,vaultdata);
return PLUGIN_CONTINUE;
}
public LoadData(id)
{
new PlayerName[35];
get_user_name(id,PlayerName,34);
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",PlayerName);
format(vaultdata,255,"%i#%i#",drxp_playerxp[id],drxp_playerlevel[id]);
nvault_get(g_drxp_vault,vaultkey,vaultdata,255);
replace_all(vaultdata, 255, "#", " ");
new playerxp[32], playerlevel[32];
parse(vaultdata, playerxp, 31, playerlevel, 31);
drxp_playerxp[id] = str_to_num(playerxp);
drxp_playerlevel[id] = str_to_num(playerlevel);
return PLUGIN_CONTINUE;
}
public cmd_give_exp(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new target[32], amount[21], reason[21]
read_argv(1, target, 31)
read_argv(2, amount, 20)
read_argv(3, reason, 20)
new player = cmd_target(id, target, 8)
if(!player)
return PLUGIN_HANDLED
new admin_name[32], player_name[32]
get_user_name(id, admin_name, 31)
get_user_name(player, player_name, 31)
new expnum = str_to_num(amount)
client_print(0, print_chat, "ADMIN %s: give %s xp to %s", admin_name, amount, player_name)
drxp_playerxp[player] += expnum
SaveData(id)
return PLUGIN_CONTINUE
}
public cmd_take_exp(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new target[32], amount[21], reason[21]
read_argv(1, target, 31)
read_argv(2, amount, 20)
read_argv(3, reason, 20)
new player = cmd_target(id, target, 8)
if(!player)
return PLUGIN_HANDLED
new admin_name[32], player_name[32]
get_user_name(id, admin_name, 31)
get_user_name(player, player_name, 31)
new expnum = str_to_num(amount)
client_print(0, print_chat, "ADMIN %s: take %s xp from %s", admin_name, amount, player_name)
drxp_playerxp[player] -= expnum
SaveData(id)
return PLUGIN_CONTINUE
}