#include <amxmodx> 
#include <amxmisc>
#include <nvault>
 
#define MAXCLASSES 4               
 
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
new XP_Kill,XP_Knife,XP_Hs,SaveXP
new g_vault 
 
new const CLASSES[MAXCLASSES][] = {
    "M4A1",
    "AK47",
    "AWP",
    "Deagle"
}
 
new const LEVELS[7] = {
0,
100,
200,
400,
800,
1600,
3200
}
 
public plugin_init()
{
    register_plugin("XP Mod", "1.0", "N/A")
    register_event("DeathMsg", "eDeath", "a") 
    SaveXP = register_cvar("SaveXP","1")  
    XP_Kill=register_cvar("XP_per_kill", "20")  
    XP_Hs=register_cvar("XP_hs_bonus","20") 
    XP_Knife=register_cvar("XP_knife_bonus","20") 
    g_vault = nvault_open("animalmod") 
 
    register_clcmd("say /faj", "ChangeClass") 
    register_clcmd("say_team /faj", "ChangeClass") 
    register_clcmd("say /xp", "ShowHud") 
    register_clcmd("say_team /xp", "ShowHud")
}
 
public eDeath( ) 
{ 
 
    new attacker = read_data( 1 )
    new iVictim = read_data( 2 )  
    new headshot = read_data( 3 )
 
    if(PlayerClass[attacker] == 0) 
         return PLUGIN_CONTINUE
 
    new clip, ammo, weapon = get_user_weapon(attacker,clip,ammo); 
 
    PlayerXP[attacker] += get_pcvar_num(XP_Kill) 
 
 
    if(headshot)  
        PlayerXP[attacker] += get_pcvar_num(XP_Hs)  
 
    if(weapon == CSW_KNIFE) 
        PlayerXP[attacker] += get_pcvar_num(XP_Knife)  
 
    while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) 
    {  
        client_print(attacker, print_chat, "[XP-Mod] Grat! Te egy %i szintu %s vagy!", PlayerLevel[attacker],CLASSES[PlayerClass[attacker]]) 
 
        PlayerLevel[attacker] += 1  
    } 
 
    ShowHud(attacker) 
} 
 
public ShowHud(id) 
{ 
    set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0) 
    show_hudmessage(id, "Szinted: %i^nXP-d: %i^nFegyver: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]]) 
}
 
public ChangeClass(id) 
{
    new menu = menu_create("Fegyver:" , "Class_Handle");
    menu_additem(menu ,"M4A1", "1" , 0); 
    menu_additem(menu ,"AK47", "2" , 0); 
    menu_additem(menu ,"AWP", "3" , 0); 
    menu_additem(menu ,"Deagle", "4" , 0);
    menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
    menu_display(id , menu , 0); 
    return PLUGIN_CONTINUE; 
} 
 
public Class_Handle(id , menu , item) 
{ 
    if(item == MENU_EXIT) 
    { 
        menu_destroy(menu); 
    } 
    new szCommand[6] , szName[64]; new access , callback; 
    menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback); 
    new i = str_to_num(szCommand) 
    if(PlayerClass[id] != i)  
    { 
        PlayerClass[id] = i; client_print(id,print_chat,"A te uj fegyvered: %s",CLASSES[i]) 
    }
    else 
    { 
        client_print(id,print_chat,"Eddig is egy %s voltal",CLASSES[i]) 
    } 
    menu_destroy(menu); 
    return PLUGIN_CONTINUE 
} 
 
public client_connect(id) 
{
    if(get_pcvar_num(SaveXP) == 1) 
    { 
        LoadData(id) 
    } 
}
 
public client_disconnect(id) 
{ 
     if(get_pcvar_num(SaveXP) == 1) 
     { 
          SaveData(id) 
     } 
}
 
public SaveData(id) 
{ 
    new name[32] 
    get_user_name(id, name, 31) 
 
    new vaultkey[64],vaultdata[256]
    format(vaultkey,63,"%sANIMALMOD", name) 
    format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
 
    nvault_set(g_vault,vaultkey,vaultdata) 
    return PLUGIN_CONTINUE 
}
 
public LoadData(id) 
{ 
    new name[32]
    get_user_name(id, name, 31) 
    new vaultkey[64],vaultdata[256] 
    format(vaultkey,63,"%sANIMALMOD", name) 
    format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) 
    nvault_get(g_vault,vaultkey,vaultdata,255) 
    replace_all(vaultdata, 255, "#", " ") 
    new playerxp[32], playerlevel[32] 
    parse(vaultdata, playerxp, 31, playerlevel, 31) 
    PlayerXP[id] = str_to_num(playerxp) 
    PlayerLevel[id] = str_to_num(playerlevel) 
    return PLUGIN_CONTINUE 
}