AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Plugin working on 1.8.2 but not on 1.9 (https://forums.alliedmods.net/showthread.php?t=325500)

supertrio17 06-24-2020 12:23

Plugin working on 1.8.2 but not on 1.9
 
Hey, so I have my test server where I tested this plugin, and it worked just fine, I tried it with 3 players and it works. But when my friend tried this, he couldn't get it to work, plugin should give you menu for classes when you hit Lvl 10 with OciXCrom's XP plugin, and other menu on Lvl 20. When you join his server you automatically have class even tho you are not Lvl 10, and you get random class every time you join

Here is my code:
PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
#include <crxranks>
#include <nvault>
#include <CromChat>
#include <hamsandwich>

new g_Vault;
new 
g_szAuthID[33][35];
new 
g_Class[33];

const 
Float:DEFAULT_GRAVITY_I        800.0

// LEVEL 10
#define C_ONE_TEN           "\wRogue"           //Change name for first class
#define C_RG_HP             90                    //Rogue HP
#define C_RG_MS             75.0                 //Rogue Added Movespeed || MAX SPEED MUST BE FLOAT!
#define C_RG_GV             750.0                 //Rogue Gravity

#define C_TWO_TEN           "\wDark Knight"     //Change name for second class
#define C_DK_HP             135
#define C_DK_MS             0.0
#define C_DK_GV             800.0

#define C_THREE_TEN         "\wWizard"          //Change name for third class
#define C_WZ_HP             100
#define C_WZ_MS             15.0
#define C_WZ_GV             650.0

// LEVEL 20
#define C_ONE_TW           "\wTrickster"        //Change name for first class
#define C_TK_HP             115
#define C_TK_MS             150.0
#define C_TK_GV             650.0

#define C_TWO_TW            "\wBlade Knight"    //Change name for second class
#define C_BK_HP             185
#define C_BK_MS             35.0
#define C_BK_GV             700.0

#define C_THREE_TW          "\wSoul Master"     //Change name for third class
#define C_SM_HP             125
#define C_SM_MS             50.0
#define C_SM_GV             350.0

public plugin_init()
{
    
register_plugin("Class Menu for CRX""2.0""Mr. Boopsy");
    
register_clcmd("amx_resetclassID",    "reset_id");
    
RegisterHam(Ham_Spawn"player""OnPlayerSpawn"1);
}

public 
plugin_cfg()
{
    new 
g_Vault nvault_open"ClassIdByBoopsys" );

    if ( 
g_Vault == INVALID_HANDLE )
        
set_fail_state"Error opening nVault" );
}

public 
plugin_end()
{
    
nvault_closeg_Vault );
}

public 
client_authorized(id)
{
    
get_user_authid(idg_szAuthID[id], charsmax(g_szAuthID[]));
}

public 
OnPlayerSpawn(id)
{
    if(
is_user_alive(id))
    {
        
LoadClass_Spawn(id);
        
LoadClass_Has(id);
    }
}

public 
crxranks_user_level_updated(idlevelbool:levelup)
{
    new 
cLevel crxranks_get_user_level(id);
    if(
is_user_alive(id))
    {
        if( 
cLevel == 10 )
        {
            
rank_ten(id);
        }
        else if( 
cLevel == 20 )
        {
            
rank_tw(id);
        }
    }
}

public 
rank_ten(id)
{
    new 
menu_ten menu_create("\r[\wChoose Class\r]\r""menu_ten_f")

    
menu_additem(menu_tenC_ONE_TEN"1"0)
    
menu_additem(menu_tenC_TWO_TEN"2"0)
    
menu_additem(menu_tenC_THREE_TEN"3"0)

    
menu_setprop(menu_tenMPROP_EXITMEXIT_ALL)

    
menu_display(idmenu_ten0)
}

public 
rank_tw(id)
{
    new 
menu_tw menu_create("\r[\wChoose Class\r]\r""menu_tw_f")

    
menu_additem(menu_twC_ONE_TW"1"0)
    
menu_additem(menu_twC_TWO_TW"2"0)
    
menu_additem(menu_twC_THREE_TW"3"0)

    
menu_setprop(menu_twMPROP_EXITMEXIT_ALL)

    
menu_display(idmenu_tw0)
}

public 
menu_ten_f(idmenu_tenitem_ten)
{
    if (
item_ten == MENU_EXIT)
    {
        
menu_destroy(menu_ten)
        return 
PLUGIN_HANDLED
    
}
    new 
data_ten[6], iName_ten[64]
    new 
acces_tencallback_ten
    menu_item_getinfo
(menu_tenitem_tenacces_tendata_ten,5iName_ten63callback_ten)

    new 
key_ten str_to_num(data_ten)

    switch(
key_ten)
    {
       case 
1:
       {
           
g_Class[id] = 1;
           
rank_ten_c_one(id);
           
CC_SendMessage(id"&x01>> &x04You choosed &x07Rogue&x04!");
       }
       case 
2:
       {
           
g_Class[id] = 2;
           
rank_ten_c_two(id);
           
CC_SendMessage(id"&x01>> &x04You choosed &x07Dark Knight&x04!");
       }
       case 
3:
       {
           
g_Class[id] = 3;
           
rank_ten_c_three(id);
           
CC_SendMessage(id"&x01>> &x04You choosed &x07Wizard&x04!");
       }
    }

    
menu_destroy(menu_ten)
    return 
PLUGIN_HANDLED
}

public 
menu_tw_f(idmenu_twitem_tw)
{
    if (
item_tw == MENU_EXIT)
    {
        
menu_destroy(menu_tw)
        return 
PLUGIN_HANDLED
    
}

    new 
data_tw[6], iName_tw[64]
    new 
acces_twcallback_tw

    menu_item_getinfo
(menu_twitem_twacces_twdata_tw,5iName_tw63callback_tw)

    new 
key_tw str_to_num(data_tw)

    switch(
key_tw)
    {
       case 
1:
       {
           
g_Class[id] = 4;
           
rank_tw_c_one(id);
           
CC_SendMessage(id"&x01>> &x04You choosed &x07Trickster&x04!");
       }
       case 
2:
       {
           
g_Class[id] = 5;
           
rank_tw_c_two(id);
           
CC_SendMessage(id"&x01>> &x04You choosed &x07Blade Knight&x04!");
       }
       case 
3:
       {
           
g_Class[id] = 6;
           
rank_tw_c_three(id);
           
CC_SendMessage(id"&x01>> &x04You choosed &x07Soul Master&x04!");
       }
    }

    
menu_destroy(menu_tw)
    return 
PLUGIN_HANDLED
}

public 
rank_ten_c_one(id// Rogue
{
    new 
szClass[20];
    new 
szKey[40];

    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    
formatex(szClasscharsmaxszClass ), "%d"g_Class[id]); // Rogue

    
nvault_set(g_VaultszKeyszClass);

    
set_user_health(idC_RG_HP);
    
set_user_maxspeed(idget_user_maxspeedid ) + C_RG_MS);
    
set_user_gravity(id, ((C_RG_GV) / DEFAULT_GRAVITY_I));
}

public 
rank_ten_c_two(id// Dark Knight
{
    new 
szClass[20];
    new 
szKey[40];

    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    
formatex(szClasscharsmaxszClass ), "%d"g_Class[id]); // Dark Knight

    
nvault_set(g_VaultszKeyszClass);

    
set_user_health(idC_DK_HP);
    
set_user_maxspeed(idget_user_maxspeedid ) + C_DK_MS);
    
set_user_gravity(id, ((C_DK_GV) / DEFAULT_GRAVITY_I));
}

public 
rank_ten_c_three(id// Wizard
{
    new 
szClass[20];
    new 
szKey[40];

    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    
formatex(szClasscharsmaxszClass ), "%d"g_Class[id]); // Wizard

    
nvault_set(g_VaultszKeyszClass);

    
set_user_health(idC_WZ_HP);
    
set_user_maxspeed(idget_user_maxspeedid ) + C_WZ_MS);
    
set_user_gravity(id, ((C_WZ_GV) / DEFAULT_GRAVITY_I));
}

// LEVEL 20
public rank_tw_c_one(id// Trickster
{
    new 
szClass[20];
    new 
szKey[40];

    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    
formatex(szClasscharsmaxszClass ), "%d"g_Class[id]); // Trickster

    
nvault_set(g_VaultszKeyszClass);

    
set_user_health(idC_TK_HP);
    
set_user_maxspeed(idget_user_maxspeedid ) + C_TK_MS);
    
set_user_gravity(id, ((C_TK_GV) / DEFAULT_GRAVITY_I));
}

public 
rank_tw_c_two(id// Blade Knight
{
    new 
szClass[20];
    new 
szKey[40];

    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    
formatex(szClasscharsmaxszClass ), "%d"g_Class[id]); // Blade Knight

    
nvault_set(g_VaultszKeyszClass);

    
set_user_health(idC_BK_HP);
    
set_user_maxspeed(idget_user_maxspeedid ) + C_BK_MS);
    
set_user_gravity(id, ((C_BK_GV) / DEFAULT_GRAVITY_I));
}

public 
rank_tw_c_three(id// Soul Master
{
    new 
szClass[20];
    new 
szKey[40];

    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    
formatex(szClasscharsmaxszClass ), "%d"g_Class[id]); // Soul Master

    
nvault_set(g_VaultszKeyszClass);

    
set_user_health(idC_SM_HP);
    
set_user_maxspeed(idget_user_maxspeedid ) + C_SM_MS);
    
set_user_gravity(id, ((C_SM_GV) / DEFAULT_GRAVITY_I));
}

public 
LoadClass_Has(id)
{
    new 
szKey[40];
    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    new 
iClass nvault_get(g_VaultszKey );
    new 
cLevel crxranks_get_user_level(id);
    if( 
iClass != && iClass != && iClass != && iClass != && iClass != && iClass != 6)
    {
        if( 
cLevel >= 10 && cLevel 20 )
        {
            
rank_ten(id);
        }
        if(
cLevel >= 20)
        {
            
rank_tw(id);
        }
    }
}

public 
LoadClass_Spawn(id)
{
    new 
szKey[40];
    
formatex(szKeycharsmaxszKey ), "%sCLASS"g_szAuthID[id]);
    new 
iClass nvault_get(g_VaultszKey );
    if( 
iClass )
    {
        switch(
iClass)
        {
            case 
1:
            {
                
set_user_health(idC_RG_HP);
                
set_user_maxspeed(idget_user_maxspeedid ) + C_RG_MS);
                
set_user_gravity(id, ((C_RG_GV) / DEFAULT_GRAVITY_I));
                
CC_SendMessage(id"&x01>> &x04Your class was updated to &x07Rogue&x04!");
            }
            case 
2:
            {
                
set_user_health(idC_DK_HP);
                
set_user_maxspeed(idget_user_maxspeedid ) + C_DK_MS);
                
set_user_gravity(id, ((C_DK_GV) / DEFAULT_GRAVITY_I));
                
CC_SendMessage(id"&x01>> &x04Your class was updated to &x07Dark Knight&x04!");
            }
            case 
3:
            {
                
set_user_health(idC_WZ_HP);
                
set_user_maxspeed(idget_user_maxspeedid ) + C_WZ_MS);
                
set_user_gravity(id, ((C_WZ_GV) / DEFAULT_GRAVITY_I));
                
CC_SendMessage(id"&x01>> &x04Your class was updated to &x07Wizard&x04!");
            }
            case 
4:
            {
                
set_user_health(idC_TK_HP);
                
set_user_maxspeed(idget_user_maxspeedid ) + C_TK_MS);
                
set_user_gravity(id, ((C_TK_GV) / DEFAULT_GRAVITY_I));
                
CC_SendMessage(id"&x01>> &x04Your class was updated to &x07Trickster&x04!");
            }
            case 
5:
            {
                
set_user_health(idC_BK_HP);
                
set_user_maxspeed(idget_user_maxspeedid ) + C_BK_MS);
                
set_user_gravity(id, ((C_BK_GV) / DEFAULT_GRAVITY_I));
                
CC_SendMessage(id"&x01>> &x04Your class was updated to &x07Blade Knight&x04!");
            }
            case 
6:
            {
                
set_user_health(idC_SM_HP);
                
set_user_maxspeed(idget_user_maxspeedid ) + C_SM_MS);
                
set_user_gravity(id, ((C_SM_GV) / DEFAULT_GRAVITY_I));
                
CC_SendMessage(id"&x01>> &x04Your class was updated to &x07Soul Master&x04!");
            }
        }
    }
}

public 
reset_id(id)
{
    if(
has_flag(id"m"))
    {
        
nvault_prune(g_Vault0get_systime());
        
server_cmd("restart");
    }



OciXCrom 06-24-2020 14:17

Re: Plugin working on 1.8.2 but not on 1.9
 
Because you're not resetting the class anywhere in the code when the player connect/disconnects. The class is stored in the g_Class variable associated with the player's index from 0 to 32. When a player disconnects and another one joins, he can receive the same index that the previous one had so he will inherit the g_Class value for that index.

This has nothing to do with the AMXX version. It's related to the number of people currently in the server and improper loading/saving.

supertrio17 06-24-2020 15:16

Re: Plugin working on 1.8.2 but not on 1.9
 
Oh yeah. I totally forgot about that. I will keep this thread unsolved until he can test it. Thanks OciXCrom

supertrio17 06-24-2020 19:39

Re: Plugin working on 1.8.2 but not on 1.9
 
@OciXCrom I'm sorry, but do I use
Code:

client_disconnect(id);
or
Code:

client_disconnected(id);
When I searched the first one it said
Code:

This function has been deprecated, do NOT use it

Reason: This function does not catch all cases.


fysiks 06-24-2020 23:23

Re: Plugin working on 1.8.2 but not on 1.9
 
If using 1.8.2 you have to use client_disconnect(). If you're only using 1.9 then you can and should use client_disconnected().

If you want to support both and your code is not affected by the issues related to client_disconnect() you can either just use it as-is or you can use preprocessor code to switch between them.

Deprecated means that it still works but it's not recommended (and my be removed in a future release but I doubt that will ever happen for AMX Mod X considering how slow development is).

Bugsy 06-24-2020 23:57

Re: Plugin working on 1.8.2 but not on 1.9
 
Remove 'new' before g_Vault since you have already defined this variable globally.
PHP Code:

public plugin_cfg()
{
    new 
g_Vault nvault_open"ClassIdByBoopsys" );

    if ( 
g_Vault == INVALID_HANDLE )
        
set_fail_state"Error opening nVault" );


It is correctly defined here.
PHP Code:

#include <CromChat>
#include <hamsandwich>

new g_Vault;
new 
g_szAuthID[33][35]; 


supertrio17 06-25-2020 07:48

Re: Plugin working on 1.8.2 but not on 1.9
 
Quote:

Originally Posted by fysiks (Post 2707170)
If using 1.8.2 you have to use client_disconnect(). If you're only using 1.9 then you can and should use client_disconnected().

If you want to support both and your code is not affected by the issues related to client_disconnect() you can either just use it as-is or you can use preprocessor code to switch between them.

Deprecated means that it still works but it's not recommended (and my be removed in a future release but I doubt that will ever happen for AMX Mod X considering how slow development is).

So something like this?
PHP Code:

#if(get_amxx_verstring <= 1.8.2)
public client_disconnect(id)
{
    
g_Class[id] = 0;
}
#endif

#if(get_amxx_verstring > 1.8.2)
public client_disconnected(id)
{
    
g_Class[id] = 0;
}
#endif 


alferd 06-25-2020 07:56

Re: Plugin working on 1.8.2 but not on 1.9
 
Code:
#if AMXX_VERSION_NUM < 190 public client_disconnect(id) #else public client_disconnected(id) #endif {         g_Class[id] = 0; }


All times are GMT -4. The time now is 16:50.

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