Here is the plugin with no errors, and only 1 warning I still don't really get, but I'll try to fix.
NOTE: I tried my best to add as much comments to let you know what you did wrong, or what I tried to make more efficient, didn't add comments on some things that were not necessary and were just indentation errors.
Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <vault>
//#define PLUGIN "my xp" // Absolutely no reason for this, considering you don't use PLUGIN[], VERSION[] and AUTHOR[] in your register_plugin()
//#define VERSION "1.0"
//#define AUTHOR "*<3*"
#define CLASS_NONE 0 // Changed CLASS_NORACE to CLASS_NONE for simplicity reasons
#define CLASS_GOD 1
#define CLASS_DEVIL 2 // Changed CLASS_THE_DEVEIL to CLASS_DEVIL for simplicity reasons
#define MAXCLASSES 3
new PlayerClass[33]
new PlayerXP[33]
new PlayerLevel[33]
new const CLASSES[MAXCLASSES][] =
{
"None",
"GOD",
"THE DEVIL" // Changed "THE DEVIL", to "THE DEVIL" because you don't need an extra comma after the last line
}
new msgtext
new const LEVELS[8] =
{
100,
200,
400,
800,
1600,
3200,
6400,
12800
}
public plugin_init()
{
register_plugin("My Xp", "1.0", "*<3*")
register_event("DeathMsg", "DeathMsg", "a")
register_event("ResetHUD", "ResetHud", "be") // Changed "b" flag to "be", needed to work properly on a new round
register_cvar("sv_myxp", "1")
register_cvar("xp_per_kill", "20")
register_cvar("SaveXP", "1")
register_clcmd("say /changeClass", "ChangeClass")
register_clcmd("say_team /changeClass", "ChangeClass")
register_menucmd(register_menuid("menu_ChooseClass"), 1023, "DoChooseClass")
msgtext = get_user_msgid("StatusText")
}
public SaveXP(id)
{
new authid[32]
get_user_authid(id, authid, 31)
new vaultkey[64], vaultdata[64]
format(vaultkey, 63, "Class-%s", authid)
format(vaultdata, 63, "%d", PlayerClass[id])
set_vaultdata(vaultkey, vaultdata)
format(vaultkey, 63, "Class-%s-xp", authid)
format(vaultdata, 63, "%d", PlayerXP[id])
set_vaultdata(vaultkey, vaultdata)
format(vaultkey, 63, "Class-%s-level", authid)
format(vaultdata,63, "%d", PlayerLevel[id])
set_vaultdata(vaultkey, vaultdata)
}
public LoadXP(id)
{
new authid[32]
get_user_authid(id,authid,31)
new vaultkey[64], vaultdata[64]
format(vaultkey, 63, "Class-%s", authid)
get_vaultdata(vaultkey, vaultdata, 63)
PlayerClass[id] = str_to_num(vaultdata)
format(vaultkey, 63, "Class-%s-xp", authid)
get_vaultdata(vaultkey, vaultdata, 63)
PlayerXP[id] = str_to_num(vaultdata)
format(vaultkey,63, "Class-%s-level", authid)
get_vaultdata(vaultkey, vaultdata, 63)
PlayerLevel[id] = str_to_num(vaultdata)
}
public client_connect(id)
{
if(get_cvar_num("SaveXP") == 1)
{
LoadXP(id)
client_print(id, print_chat, "[My Xp] XP Loaded!")
client_print(id, print_chat, "[My Xp] You are %s with level %s and %s XP", PlayerClass[id], PlayerLevel[id], PlayerXP[id])
}
}
public client_disconnect(id)
{
if(get_cvar_num("SaveXP") == 1)
{
SaveXP(id)
}
}
stock ChooseClass(id)
{
new menu[192]
new keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2
format(menu, 191, "My Xp: Choose Class^n^n1. God^n2. Devil^n3. Exit") // Added Devil option, new line maybe messed up
show_menu(id, keys, menu, -1, "menu_ChooseClass")
return PLUGIN_CONTINUE
}
public DoChooseClass(id, key)
{
switch(key) // Changed if(key==0,1,2,etc) to switch_key & cases, works better
{
case 0:
{
if(PlayerClass[id] == CLASS_GOD)
{
ChooseClass(id)
// Removed return_PLUGIN_HANDLED, not needed in each case
}
PlayerClass[id] = CLASS_GOD
client_print(id, print_chat, "[My Xp] You are now GOD, have fun !")
}
case 1:
{
if(PlayerClass[id] == CLASS_DEVIL)
{
ChooseClass(id)
}
PlayerClass[id] = CLASS_DEVIL
client_print(id, print_chat, "[My Xp] You are now THE DEVIL, have fun !")
}
}
ShowHUD(id)
return PLUGIN_HANDLED
}
public ResetHUD(id)
{
if(get_cvar_num("sv_myxp") == 0)
{
return PLUGIN_HANDLED
}
if(PlayerClass[id] == CLASS_NONE)
{
ChooseClass(id)
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public DeathMsg()
{
if(get_cvar_num("sv_myxp") == 0)
{
return PLUGIN_HANDLED
}
new attacker = read_data(0)
if(PlayerClass[attacker] == CLASS_NONE)
{
return PLUGIN_HANDLED
}
if(PlayerLevel[attacker] == 8)
{
return PLUGIN_HANDLED
}
PlayerXP[attacker] += get_cvar_num("XP_per_kill")
if(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{
PlayerLevel[attacker] += 1
if(get_cvar_num("SaveXP") == 1)
{
SaveXP(attacker)
}
ShowHUD(attacker)
}
ShowHUD(attacker)
return PLUGIN_CONTINUE
}
public ShowHUD(id)
{
new HUD[51]
format(HUD, 50, "[%s]Level: %i XP: %i", PlayerClass[id], PlayerLevel[id], PlayerXP[id])
message_begin(MSG_ONE, msgtext, {0,0,0}, id)
write_byte(0)
write_string(HUD)
message_end()
return
}