Okay my problem is that i cant make class names visible ingame. But it recognizes them.
If u try change twice to same class it says uve already that class in use.
So my problem is that I've managed to make individual xp for classes but it wont save them.
EDIT: Adding code in a moment... fixing couple things i found.
EDIT2: Added script. And it crashed on level up.
EDIT3: Found reason and fixed why crash. I used wrong way to check Level xp needing. Atm problem is doesn't show up class name and doesnt save xp. (There is individual xp but not saved)
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#define MAXCLASSES 5
enum _:Class
{
None,
Dog,
Cat,
Horse,
Cow
}
new const LEVELS[6] = {
100,
200,
400,
800,
1600,
3200
}
enum _:Data
{
Level,
EXP
}
new pInfo[33][Class][Data]
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
new XP_Kill,XP_Knife,XP_Hs,SaveXP,g_vault
public plugin_init()
{
register_plugin("XpMod", "1.0", "Fxfighter")
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("animod")
register_clcmd("say /class", "ChangeClass")
register_clcmd("say_team /class", "ChangeClass")
register_clcmd("say /xp", "ShowHud")
register_clcmd("say_team /xp", "ShowHud")
}
public eDeath( )
{
new attacker = read_data( 1 )
new iVictim = read_data( 2 )
if(attacker == iVictim || !is_user_connected(attacker) || get_user_team(attacker) == get_user_team(iVictim)) return;
new headshot = read_data( 3 )
new weapon[7]
read_data( 4, weapon, charsmax( weapon ) )
pInfo[attacker][PlayerClass[attacker]][EXP] += get_pcvar_num(XP_Kill);
if(headshot)
pInfo[attacker][PlayerClass[attacker]][EXP] += get_pcvar_num(XP_Hs)
if(equal(weapon, "knife"))
pInfo[attacker][PlayerClass[attacker]][EXP] += get_pcvar_num(XP_Knife)
while(pInfo[attacker][PlayerClass[attacker]][EXP] >= LEVELS[PlayerLevel[attacker]])
{
pInfo[attacker][PlayerClass[attacker]][Level] += 1
client_print(attacker, print_chat, "[Animal Mod] Congratulations! You are a level %i %s", pInfo[attacker][PlayerClass[attacker]][Level],pInfo[attacker][PlayerClass[attacker]])
}
ShowHud(attacker)
SaveData(attacker)
}
public ShowHud(id)
{
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",pInfo[id][PlayerClass[id]][Level],pInfo[id][PlayerClass[id]][EXP],pInfo[id][PlayerClass[id]])
}
public ChangeClass(id)
{
new menu = menu_create("Class Menu" , "Class_Handle");
menu_additem(menu ,"Dog", "1" , 0);
menu_additem(menu ,"Cat", "2" , 0);
menu_additem(menu ,"Horse", "3" , 0);
menu_additem(menu ,"Cow", "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)
{
SaveData(id)
PlayerClass[id] = i
client_print(id,print_chat,"You are now a %s",PlayerClass[id])
}
else
{
client_print(id,print_chat,"You are alredy a %s",PlayerClass[id])
}
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)
}
pInfo[id][PlayerClass[id]][EXP] = 0
pInfo[id][PlayerClass[id]][Level] = 0
}
public SaveData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",pInfo[id][PlayerClass[id]][EXP],pInfo[id][PlayerClass[id]][Level])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",pInfo[id][PlayerClass[id]][EXP],pInfo[id][PlayerClass[id]][Level])
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
pInfo[id][PlayerClass[id]][EXP] = str_to_num(playerxp)
pInfo[id][PlayerClass[id]][Level] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}