PDA

View Full Version : Updated Flyen's EXP Tutorial (Fixed Errors)


qlail
08-30-2010, 12:26
Hey guys, I read through Flyen's thread about his old EXP tutorial, seen that a LOT of people were having trouble and not understanding why they were getting errors... WELL, I'll post a working tutorial.

First: Include Your Modules

#include <amxmodx>
#include <amxmisc>
#include <nvault>
Then Define your classes, simply like this

#define MAXCLASSES 5
Now we have to create the EXP, Levels, and Class Variables.


new PlayerXP,PlayerLevel,PlayerClass[33]
//These are for your special kills
new XP_Kill,XP_Knife,XP_Hs
//This is for the vault, so your EXP saves to the server
new g_vault
This is where your Maxclasses comes in

new const CLASSES[MAXCLASSES][] {
"None",
"Rifle Specialist",
"Sniper Specialist",
"Pistol Specialist",
"Machine Gun Specialist"
}
Now we will make the Levels with the Exp you desire

new const LEVELS[10] = {
"100",
"200",
"400",
"800",
"1600",
"3200",
"6400",
"12800",
"25600",
"51200"
}Now we create the plugin_init

public plugin_init()
{
register_plugin("Simple EXP Mod", "1.0", "Thelius") // Registers the Plugin to the ModName, Version, and Creator
register_event("DeathMsg", "eDeath", "a") // This is the death event
SaveXP = register_cvar("SaveXP", "1") // This is to make sure that Saving XP is enabled
XP_Kill = register_cvar("XP_per_kill", "40") // This defines the amount of EXP you gain per kill
XP_Hs = register_cvar("XP_hs_bonus", "50") // This defines the amount of exp gained per headshot
XP_Knife = register_cvar("XP_knife_bonus", "20") // This defines the amount of Exp gained per Knife Kill
g_vault = nvault_open("XPMod") // This opens the nvault so it can save the exp

register_clcmd("say /class", "ChangeClass") // Saying /class will open the class menu
register_clcmd("say_team /class", "ChangeClass") // Team saying /class will open the class menu
register_clcmd("say /xp", "ShowHud") // Saying /xp will show your EXP
register_clcmd("say_team /xp", "ShowHud") // Team Saying /xp will show your EXP
}
Now we create the Death event, so it will keep your levels and exp, remember we called it eDeath, Let's begin.


public eDeath( )
{
new headshot,attacker = read_data( 1 )
new weapon = get_user_weapon(attacker,headshot,headshot)
headshot = read_data( 3 )

PlayerXP[attacker] += get_pcvar_num(XP_Kill)

if(PlayerClass[attacker] == 0)

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] Congratulations you are now level %i %s!");
PlayerLevel[attacker] += 1
}
ShowHud(attacker)
SaveData(attacker)
}We set the Hud to show the EXP and all that fun stuff
public ShowHud(id)
{
set_hudmessage(0, 255, 0, 0.28, 0.88, 0, 6.0, 12.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s", PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}Now we create the Change Class Menu
public ChangeClass(id)
{
new menu = menu_create("Class Menu", "Class_Handle");

menu_additem(menu ,"Rifle Specialist", "1" , 0);
menu_additem(menu ,"Sniper Specialist", "2" , 0);
menu_additem(menu ,"Pistol Specialist", "3" , 0);
menu_additem(menu ,"Machine Gun Specialist", "4" , 0);

menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);

menu_display(id , menu , 0);

return PLUGIN_CONTINUE;
}Now we create the Menu Handler for the Class Menu


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, "[XP Mod] You are now a %s", CLASSES[i])
}
else
{
client_print(id,print_chat, "[XP Mod] You are already a %s",CLASSES[i]
}

menu_destroy(menu);
return PLUGIN_CONTINUE
}
Now we set the Exp to load on someone who joins and has saved EXP


public client_connect(id)
{
if(get_pcvar_num(SaveXP) == 1)
{

LoadData(id)
}
}Now we set the Exp To save on someone who disconnects from the server


public client_disconnect(id)
{
if(get_pcvar_num(SaveXP) == 1)
{

SaveData(id)
}
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerClass[id] = 0
}
Now we set the exp to save to the Clients steam id


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#",PlayerXP[id],PlayerLevel[id])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
Now we set it to Load the Clients Exp Based on his Steam ID


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#",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
}
And we're Finished :D

This is what it looks like all together

#include <amxmodx>
#include <amxmisc>
#include <nvault>

new PlayerXP,PlayerLevel,PlayerClass[33]
//These are for your special kills
new XP_Kill,XP_Knife,XP_Hs
//This is for the vault, so your EXP saves to the server
new g_vault

new const CLASSES[MAXCLASSES][] {
"None",
"Rifle Specialist",
"Sniper Specialist",
"Pistol Specialist",
"Machine Gun Specialist"
}

new const LEVELS[10] = {
"100",
"200",
"400",
"800",
"1600",
"3200",
"6400",
"12800",
"25600",
"51200"
}

public plugin_init()
{
register_plugin("Simple EXP Mod", "1.0", "Thelius") // Registers the Plugin to the ModName, Version, and Creator
register_event("DeathMsg", "eDeath", "a") // This is the death event
SaveXP = register_cvar("SaveXP", "1") // This is to make sure that Saving XP is enabled
XP_Kill = register_cvar("XP_per_kill", "40") // This defines the amount of EXP you gain per kill
XP_Hs = register_cvar("XP_hs_bonus", "50") // This defines the amount of exp gained per headshot
XP_Knife = register_cvar("XP_knife_bonus", "20") // This defines the amount of Exp gained per Knife Kill
g_vault = nvault_open("XPMod") // This opens the nvault so it can save the exp

register_clcmd("say /class", "ChangeClass") // Saying /class will open the class menu
register_clcmd("say_team /class", "ChangeClass") // Team saying /class will open the class menu
register_clcmd("say /xp", "ShowHud") // Saying /xp will show your EXP
register_clcmd("say_team /xp", "ShowHud") // Team Saying /xp will show your EXP
}

public eDeath( )
{
new headshot,attacker = read_data( 1 )
new weapon = get_user_weapon(attacker,headshot,headshot)
headshot = read_data( 3 )

PlayerXP[attacker] += get_pcvar_num(XP_Kill)

if(PlayerClass[attacker] == 0)

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] Congratulations you are now level %i %s!");
PlayerLevel[attacker] += 1
}
ShowHud(attacker)
SaveData(attacker)
}

public ShowHud(id)
{
set_hudmessage(0, 255, 0, 0.28, 0.88, 0, 6.0, 12.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s", PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}

public ChangeClass(id)
{
new menu = menu_create("Class Menu", "Class_Handle");

menu_additem(menu ,"Rifle Specialist", "1" , 0);
menu_additem(menu ,"Sniper Specialist", "2" , 0);
menu_additem(menu ,"Pistol Specialist", "3" , 0);
menu_additem(menu ,"Machine Gun Specialist", "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, "[XP Mod] You are now a %s", CLASSES[i])
}
else
{
client_print(id,print_chat, "[XP Mod] You are already a %s",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)
}
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerClass[id] = 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#",PlayerXP[id],PlayerLevel[id])
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#",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
}
To add HP every 5 levels or however you want it. simply do all these things :)

#include <fun> // Not sure if this is needed or not, but couldn't get mine to work without.
#include <fakemeta> // Will use for a future update, already used, just trying to get someone to help me with testing.

public plugin_init()
//[....]

register_event("ResetHUD", "on_spawn", "be")

//[....]
}
YOU WILL NEED TO CREATE THIS WITHIN THE .SMA THIS IS NOT IN THE ORIGINAL!


public on_spawn(id)
{
if (PlayerLevel[id] <= 5) // The number 5 Decides which levels are included, and Hopefully you know simple math to know what the <= means..
{
set_user_health(id, 150);
}
}

GXLZPGX
08-30-2010, 17:00
Why are there six ft indentations

Kreation
08-30-2010, 18:15
Why are there six ft indentations

AMXX Studio.

qlail
08-31-2010, 03:03
Just for all those people that actually are going to use this Tutorial, I WILL update it and by that I mean, I'll continue to add little snippets to it. So, I will eventually show you guys, how to make choosing a class give that client something, But I will have to get the time for it.

qlail
08-31-2010, 23:47
Right now, Currently working on making the clients get more hp per every 5 levels Will Add the code to the bottom of the segments of code in the tut.

r14170
09-02-2010, 06:00
Nice tut

else if (PlayerLevel[id] <= 4)
{
set_user_armor(id, 100);
}

For armor :D

Kreation
09-02-2010, 18:18
new const LEVELS[10] {
"100",
"200",
"400",
"800",
"1600",
"3200",
"6400",
"12800",
"25600",
"51200"
}

Isn't there supposed to be an equal sign? Or is it not necessary, never saw that one before.

qlail
09-10-2010, 22:01
Ohhh, maybe I forgot that, I was curious Why I wouldn't gain any levels.. Lol, just stay at 0 :P thx

RedRobster
09-10-2010, 23:12
You posted something for beginners without making it work properly first?

Erox902
12-22-2010, 06:12
hey could anyone here help with a little problem in my xp base?... I dont want people to choose what class they should be
I want them to change classname after they level up so if the player for exaple is lvl 1 his classname will be "new here"
lvl 3 "Learning"... and so on... what i tried to do now didn't work but I'll show u what i did:

I still made a variable for the classname
new UserXp, UserLevel, UserClassname[33]

I added the Classnames
new const Classname[] =
{
"None",
"New here",
"Learning",
"School Boy",
"Trainee",
"Master"
}

Now here is where I need help I,ve tried to add it to the deathmsg like this:
while(UserXp[attacker] >= LEVELS[UserLevel[attacker]])
{
client_print(attacker, print_chat, "[Hxp Mod] Congratulation you have finnally reached level %i %s!");
UserLevel[attacker] += 1

new UserClassname

if(UserLevel += 1 == 1)
{
UserClassname = "New Here"
}

}
ShowHud(attacker)
SaveXp(attacker)

I also have another problem I want all players to get a little more xp if they kill with a hegrenade and dont know what read_data(?) that will be?:)

liinuus
01-04-2011, 05:52
@qlail why are u giving them hp if theyre level 5 or lower instead of 5 or higher?

@Erox902 try this for message

client_print(attacker, print_chat, "[Hxp Mod] Congratulation you have finnally reached level %i!", UserLevel[attacker]);

for the grenade part just copy the check for if the attacker had knife but make it check for grenade instead if( weapon == CSW_the weapon u wanna check for)
code for extra xp

Blunr552
01-04-2011, 09:08
@ qlail, how about you test ur code urself before calling it working.

So lets begin to fix your mistakes:
In you full code which you said should work without any errors, there you simply forgot to write:

#define MAXCLASSES 5

Then you made these mistakes:

new PlayerXP,PlayerLevel,PlayerClass[33]
//These are for your special kills
new XP_Kill,XP_Knife,XP_Hs
//This is for the vault, so your EXP saves to the server
new g_vault

Here you forgot to add:
new SaveXP

and you shouldnt write this:
new PlayerXP,PlayerLevel,PlayerClass[33]

Else you would get an error.

This should be right:

new PlayerXP[33],PlayerLevel[33],PlayerClass[33]


Next Error:
new const CLASSES[MAXCLASSES][] {
"None",
"Rifle Specialist",
"Sniper Specialist",
"Pistol Specialist",
"Machine Gun Specialist"
}

Should be


new const CLASSES[MAXCLASSES][] = {
"None",
"Rifle Specialist",
"Sniper Specialist",
"Pistol Specialist",
"Machine Gun Specialist"
}

Dont forget the "=" :/


This is wrong again:

new const LEVELS[10] = {
"100",
"200",
"400",
"800",
"1600",
"3200",
"6400",
"12800",
"25600",
"51200"
}


Change it to:


new const LEVELS[10] = {
100,
200,
400,
800,
1600,
3200,
6400,
12800,
25600,
51200
}


At last, go to your Class_Handle. There you can find this:


client_print(id,print_chat, "[XP Mod] You are already a %s",CLASSES[i]

please dont forget to add the ")" at the end....

like this:


client_print(id,print_chat, "[XP Mod] You are already a %s",CLASSES[i])



Here is the real non error Code.

#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define MAXCLASSES 5

new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
//These are for your special kills
new XP_Kill,XP_Knife,XP_Hs
//This is for the vault, so your EXP saves to the server
new g_vault
//This is for the SaveXP command
new SaveXP

new const CLASSES[MAXCLASSES][] = {
"None",
"Rifle Specialist",
"Sniper Specialist",
"Pistol Specialist",
"Machine Gun Specialist"
}

new const LEVELS[10] = {
100,
200,
400,
800,
1600,
3200,
6400,
12800,
25600,
51200
}

public plugin_init()
{
register_plugin("Simple EXP Mod", "1.0", "Thelius") // Registers the Plugin to the ModName, Version, and Creator
register_event("DeathMsg", "eDeath", "a") // This is the death event
SaveXP = register_cvar("SaveXP", "1") // This is to make sure that Saving XP is enabled
XP_Kill = register_cvar("XP_per_kill", "40") // This defines the amount of EXP you gain per kill
XP_Hs = register_cvar("XP_hs_bonus", "50") // This defines the amount of exp gained per headshot
XP_Knife = register_cvar("XP_knife_bonus", "20") // This defines the amount of Exp gained per Knife Kill
g_vault = nvault_open("XPMod") // This opens the nvault so it can save the exp

register_clcmd("say /class", "ChangeClass") // Saying /class will open the class menu
register_clcmd("say_team /class", "ChangeClass") // Team saying /class will open the class menu
register_clcmd("say /xp", "ShowHud") // Saying /xp will show your EXP
register_clcmd("say_team /xp", "ShowHud") // Team Saying /xp will show your EXP
}

public eDeath( )
{
new headshot,attacker = read_data( 1 )
new weapon = get_user_weapon(attacker,headshot,headshot)
headshot = read_data( 3 )

PlayerXP[attacker] += get_pcvar_num(XP_Kill)

if(PlayerClass[attacker] == 0)

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] Congratulations you are now level %i %s!", PlayerLevel[attacker], CLASSES[PlayerClass[attacker]]);
PlayerLevel[attacker] += 1
}
ShowHud(attacker)
SaveData(attacker)
}

public ShowHud(id)
{
set_hudmessage(0, 255, 0, 0.28, 0.88, 0, 6.0, 12.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s", PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}

public ChangeClass(id)
{
new menu = menu_create("Class Menu", "Class_Handle");

menu_additem(menu ,"Rifle Specialist", "1" , 0);
menu_additem(menu ,"Sniper Specialist", "2" , 0);
menu_additem(menu ,"Pistol Specialist", "3" , 0);
menu_additem(menu ,"Machine Gun Specialist", "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, "[XP Mod] You are now a %s", CLASSES[i])
}
else
{
client_print(id,print_chat, "[XP Mod] You are already a %s",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)
}
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerClass[id] = 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#",PlayerXP[id],PlayerLevel[id])
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#",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
}



So please do us newbies the favor and check if your code works or not :) We get confused and dont know what to do when it doesnt work ^^

liinuus
01-04-2011, 11:00
blunr dont u have to specify the %i and %s?
this

client_print(attacker, print_chat, "[XP Mod] Congratulations you are now level %i %s!");

to this?

client_print(attacker, print_chat, "[XP Mod] Congratulations you are now level %i %s!", PlayerLevel[attacker], CLASSES[PlayerClass[attacker]]);

bboygrun
01-04-2011, 12:18
Copy & paste ? Exactly the same code for loading and saving XP etc .. : http://forums.alliedmods.net/showthread.php?t=132916&highlight=surf
.... If you do a tutorials, never copy and past other plugins :nono:.

Blunr552
01-04-2011, 14:06
Copy & paste ? Exactly the same code for loading and saving XP etc .. : http://forums.alliedmods.net/showthread.php?t=132916&highlight=surf
.... If you do a tutorials, never copy and past other plugins :nono:.


Its from the old XP tutorial. Accually he just renewved the code. I fixed the errors i could find and that was all about it ^^


@ linuss, didnt see sowy D:

Blunr552
01-04-2011, 14:25
delete plz,

monsterlag...

Blunr552
01-04-2011, 14:30
delete plz,

monsterlag...

bboygrun
01-04-2011, 15:16
Pfiou, sorry, i tought he did what i said.

Blunr552
01-04-2011, 15:17
Pfiou, sorry, i tought he did what i said.

NP :)

Erox902
01-10-2011, 14:58
@qlail why are u giving them hp if theyre level 5 or lower instead of 5 or higher?

@Erox902 try this for message

client_print(attacker, print_chat, "[Hxp Mod] Congratulation you have finnally reached level %i!", UserLevel[attacker]);

for the grenade part just copy the check for if the attacker had knife but make it check for grenade instead if( weapon == CSW_the weapon u wanna check for)
code for extra xp

Thx man the messege wasn't really what i asked for but noticed that it was wrong :D....

@qlail:
you said you were working on giving them some more hp every 5th level...
crist dude it's easily done the same way you did the more hp for thoose below level 5
public on_spawn
{
if ( is_user_alive( id ) && !is_user_bot( id )
{
switch( PlayerLevel[id] )
{
case 5 .. 9: set_user_health( id, 105 )
case 10 .. 14: set_user_health(id, 110)
//and so on
}
(if you want bots to be able to get more hp too then just remove that check)

and i know it's old but register_event("ResetHUD", "on_spawn", "be")
is not the right way to detect a players spawn
include hamsandwich is the easiest way
#include <hamsandwich>

public plugin_init()
{
RegisterHam(Ham_Spawn, "player", "on_spawn", 1)
}

Paradox.
06-10-2013, 12:43
You are having a lot of errors:

1.new const CLASSES[MAXCLASSES][] { must be new const CLASSES[MAXCLASSES][] = {
2.SaveXP is not make,you didn't put new Savexp so you are registering something that didn't exist.

mottzi
06-24-2013, 18:03
From what ive seen there are several logic errors in this tutorial. For example you do compare Strings with Integer values in eDeath()

Row
07-14-2013, 11:10
Awesome , you are the best :)

Baws
10-06-2013, 16:55
I fixed this line:

new const CLASSES[MAXCLASSES][] =
{
"None",
"Rifle Specialist",
"Sniper Specialist",
"Pistol Specialist",
"Machine Gun Specialist"
}

Update your post :3