Raised This Month: $12 Target: $400
 3% 

Updated Flyen's EXP Tutorial (Fixed Errors)


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
qlail
Member
Join Date: Aug 2009
Old 08-30-2010 , 12:26   Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #1

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
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <nvault> 
Then Define your classes, simply like this
PHP Code:
#define MAXCLASSES 5 
Now we have to create the EXP, Levels, and Class Variables.

PHP Code:
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
PHP Code:
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
PHP Code:
new const LEVELS[10] = {
             
"100",
             
"200",
             
"400",
             
"800",
             
"1600",
             
"3200",
             
"6400",
             
"12800",
             
"25600",
             
"51200"

Now we create the plugin_init
PHP Code:
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.

PHP Code:
public eDeath( )
{
        new 
headshot,attacker read_data)
        new 
weapon get_user_weapon(attacker,headshot,headshot)
        
headshot read_data)

        
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(attackerprint_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
PHP Code:
public ShowHud(id)
{
            
set_hudmessage(025500.280.8806.012.0)
            
show_hudmessage(id"Level: %i^nXP: %i^nClass: %s"PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])

Now we create the Change Class Menu
PHP Code:
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

PHP Code:
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 szName 63 callback);

         new 
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

PHP Code:
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

PHP Code:
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

PHP Code:
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

PHP Code:
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(vaultdata255"#"" ")

         new 
playerxp[32], playerlevel[32]

         
parse(vaultdataplayerxp31playerlevel31)

         
PlayerXP[id] = str_to_num(playerxp)
         
PlayerLevel[id] = str_to_num(playerlevel)

         return 
PLUGIN_CONTINUE

And we're Finished

This is what it looks like all together
PHP Code:
#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)
        new 
weapon get_user_weapon(attacker,headshot,headshot)
        
headshot read_data)

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

public 
ShowHud(id)
{
            
set_hudmessage(025500.280.8806.012.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 szName 63 callback);

         new 
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(vaultdata255"#"" ")

         new 
playerxp[32], playerlevel[32]

         
parse(vaultdataplayerxp31playerlevel31)

         
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
PHP Code:
#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!

PHP Code:
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(id150);
        }


Last edited by qlail; 09-10-2010 at 22:02. Reason: Had an update
qlail is offline
GXLZPGX
Veteran Member
Join Date: Sep 2009
Old 08-30-2010 , 17:00   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #2

Why are there six ft indentations
__________________
Currently accepting payment US DOLLARS ONLY for custom plugins, contact me through PM.

Last edited by GXLZPGX; 08-30-2010 at 17:03.
GXLZPGX is offline
Kreation
Veteran Member
Join Date: Jan 2010
Location: Illinois
Old 08-30-2010 , 18:15   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #3

Quote:
Originally Posted by GXLZPGX View Post
Why are there six ft indentations
AMXX Studio.
__________________
Hi.
Kreation is offline
qlail
Member
Join Date: Aug 2009
Old 08-31-2010 , 03:03   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #4

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 is offline
qlail
Member
Join Date: Aug 2009
Old 08-31-2010 , 23:47   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #5

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.
qlail is offline
r14170
Veteran Member
Join Date: Dec 2009
Old 09-02-2010 , 06:00   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #6

Nice tut
Code:
   else if (PlayerLevel[id] <= 4)
    {
        set_user_armor(id, 100);
    }
For armor
r14170 is offline
Kreation
Veteran Member
Join Date: Jan 2010
Location: Illinois
Old 09-02-2010 , 18:18   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #7

Code:
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.
__________________
Hi.
Kreation is offline
qlail
Member
Join Date: Aug 2009
Old 09-10-2010 , 22:01   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #8

Ohhh, maybe I forgot that, I was curious Why I wouldn't gain any levels.. Lol, just stay at 0 thx
qlail is offline
RedRobster
Veteran Member
Join Date: Apr 2010
Location: Your Closet
Old 09-10-2010 , 23:12   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #9

You posted something for beginners without making it work properly first?
__________________
RedRobster is offline
Erox902
Veteran Member
Join Date: Jun 2009
Location: Never Never Land
Old 12-22-2010 , 06:12   Re: Updated Flyen's EXP Tutorial (Fixed Errors)
Reply With Quote #10

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
Code:
new UserXp, UserLevel, UserClassname[33]
I added the Classnames
Code:
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:
Code:
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?
Erox902 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 00:45.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode