AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Restricting classes based on level. (https://forums.alliedmods.net/showthread.php?t=170811)

egbertjan 10-29-2011 06:16

Restricting classes based on level.
 
Hello,

I've been asking for this somewhere else, but no replies so I tried to work on it a little bit myself.

The idea is to restrict a class based on the total amount of levels all your classes got combined.

Currently I got it like this:
PHP Code:

/* ================================================================================ */
public select_class(id,lx[])
{
    if(
is_user_bot(id)) return
    
    
asked_klass[id]=0
    
    
new szText[555 char]
    new 
iCallBack menu_makecallback("CheclItemEnabled"); 
    new 
AllClasses lx[1] + lx[2] + lx[3] + lx[4] + lx[5] + lx[6] + lx[7] + lx[8] + lx[9] + lx[10] + lx[11] + lx[12];
    
    
    
formatex(szTextcharsmax(szText), "Select Class ^nTotal Levels: %d^nPage: ",AllClasses)
    new 
ClassMenu menu_create(szText"select_class_menu")
        
    
formatex(szTextcharsmax(szText), "Mage^t^tLevel: %d"lx[1])
    
menu_additem(ClassMenuszText"1", .callback iCallBack)
        
    
formatex(szTextcharsmax(szText), "Monk^t^tLevel: %d"lx[2])
    
menu_additem(ClassMenuszText"2", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Paladin^t^tLevel: %d"lx[3])
    
menu_additem(ClassMenuszText"3", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Assassin^t^tLevel: %d"lx[4])
    
menu_additem(ClassMenuszText"4", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Necromancer^t^tLevel: %d"lx[5])
    
menu_additem(ClassMenuszText"5", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Barbarian^t^tLevel: %d"lx[6])
    
menu_additem(ClassMenuszText"6", .callback iCallBack)

    
formatex(szTextcharsmax(szText), "Ninja^t^tLevel: %d"lx[7])
    
menu_additem(ClassMenuszText"7", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Demon Hunter^t^tLevel: %d"lx[8])
    
menu_additem(ClassMenuszText"8", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Pirate^t^tLevel: %d"lx[9])
    
menu_additem(ClassMenuszText"9", .callback iCallBack)

    
formatex(szTextcharsmax(szText), "Sniper^t^tLevel: %d"lx[11])
    
menu_additem(ClassMenuszText"11", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Priest^t^tLevel: %d"lx[12])
    
menu_additem(ClassMenuszText"12", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Stalker (Donator)^t^tLevel: %d"lx[10])
    
menu_additem(ClassMenuszText"10"ADMIN_LEVEL_F)    
  
            
    
menu_setprop(ClassMenuMPROP_EXIT MEXIT_NEVER);
    
menu_display(idClassMenu0);


/* ================================================================================ */
public CheclItemEnabled(idiMenuiItem)
{
    static 
diablo_classes
    
if( !diablo_classes )
    {
        
diablo_classes get_cvar_pointer("diablo_classes"// do this in plugin_init...
    
}
    new 
flags[13]
    
get_pcvar_string(diablo_classesflagscharsmax(flags))
    new 
Keys read_flags(flags)

    return 
Keys & (1<<iItem) ? ITEM_ENABLED ITEM_DISABLED // this will enable/disable the menu by disabling client keys and formatting with \d if disabled

/* ================================================================================ */
public select_class_menu(idClassMenuitem

    if(
item == MENU_EXIT)
    {
        
menu_destroy(ClassMenu);
        return 
PLUGIN_HANDLED;
    }
    
    new 
Data[7], Name[64];
    new 
AccessCallback;
    
menu_item_getinfo(ClassMenuitemAccessData,5Name63Callback);
    
    new 
Key str_to_num(Data);
    
g_haskit[id] = 0
    
    
switch(Key
    { 
        case 
1:
        {
            
player_class[id] = Mage
        
}
        case 
2
        {    
            
player_class[id] = Monk
        
}
        case 
3
        {    
            
player_class[id] = Paladin
            
            
for (new i=033i++){
                
count_jumps(i)
                
JumpsLeft[i]=JumpsMax[i]
            }
        }
        case 
4
        {    
            
player_class[id] = Assassin
        
}
        case 
5
        {    
            
player_class[id] = Necromancer
            g_haskit
[id] = 1
        
}
        case 
6
        {    
            
player_class[id] = Barbarian
        
}
        case 
7:
        {
            
player_class[id] = Ninja
        
}
        case 
8:
        {
            
player_class[id] = Demon_Hunter
            g_GrenadeTrap
[id] = 1
        
}
        case 
9:
        {
            
player_class[id] = Pirate
        
}
        case 
10:
        {
            
player_class[id] = Stalker
        
}    
        case 
11:
        {
            
player_class[id] = Sniper
        
}        
        case 
12:
        {
            
player_class[id] = Priest
        
}
    }
    if (
player_class[id] == Ninja || player_class[id] == Assassin) {
    
client_cmd(id,"_cl_autowepswitch 0")
    } else {
    
client_cmd(id,"_cl_autowepswitch 1")
    }
    
    
client_print(id,print_chat,"[Diablo Mod] Type /classinfo to get more information about your class!")
    
LoadXP(idplayer_class[id])
    
CurWeapon(id)
    
give_knife(id)
    
    return 
PLUGIN_HANDLED
}  
/* ================================================================================ */ 

As you could see I figured out how to select all levels together, but I would also like the make a restriction. When you are level 50 (or any other kind of level) there has to be a check if he has passed a certain amount of total level. So I tried to make this check, but I failed at it.

I was thinking to make a check for example:

PHP Code:

/* ================================================================================ */
public select_class(id,lx[])
{
    new 
boolpassedcheck[33
    new 
AllClasses lx[1] + lx[2] + lx[3] + lx[4] + lx[5] + lx[6] + lx[7] + lx[8] + lx[9] + lx[10] + lx[11] + lx[12];
    if(
is_user_bot(id)) return
    if (
AllClasses 100) {
    
passedcheck[id] = true
    
} else {
    
passedcheck[id] = false
    
}
    if (
player_lvl[id] > 50 && passedcheck[id]) {
    
asked_klass[id]=0
    
    
new szText[555 char]
    new 
iCallBack menu_makecallback("CheclItemEnabled"); 
    
    
    
    
formatex(szTextcharsmax(szText), "Select Class ^nTotal Levels: %d^nPage: ",AllClasses)
    new 
ClassMenu menu_create(szText"select_class_menu")
        
    
formatex(szTextcharsmax(szText), "Mage^t^tLevel: %d"lx[1])
    
menu_additem(ClassMenuszText"1", .callback iCallBack)
        
    
formatex(szTextcharsmax(szText), "Monk^t^tLevel: %d"lx[2])
    
menu_additem(ClassMenuszText"2", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Paladin^t^tLevel: %d"lx[3])
    
menu_additem(ClassMenuszText"3", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Assassin^t^tLevel: %d"lx[4])
    
menu_additem(ClassMenuszText"4", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Necromancer^t^tLevel: %d"lx[5])
    
menu_additem(ClassMenuszText"5", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Barbarian^t^tLevel: %d"lx[6])
    
menu_additem(ClassMenuszText"6", .callback iCallBack)

    
formatex(szTextcharsmax(szText), "Ninja^t^tLevel: %d"lx[7])
    
menu_additem(ClassMenuszText"7", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Demon Hunter^t^tLevel: %d"lx[8])
    
menu_additem(ClassMenuszText"8", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Pirate^t^tLevel: %d"lx[9])
    
menu_additem(ClassMenuszText"9", .callback iCallBack)

    
formatex(szTextcharsmax(szText), "Sniper^t^tLevel: %d"lx[11])
    
menu_additem(ClassMenuszText"11", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Priest^t^tLevel: %d"lx[12])
    
menu_additem(ClassMenuszText"12", .callback iCallBack)
    
    
formatex(szTextcharsmax(szText), "Stalker (Donator)^t^tLevel: %d"lx[10])
    
menu_additem(ClassMenuszText"10"ADMIN_LEVEL_F)    
      
    
menu_setprop(ClassMenuMPROP_EXIT MEXIT_NEVER);
    
menu_display(idClassMenu0);
    } else {
    
changerace(id)
    
client_print(id,print_chat,"[Diablo Mod] You have to level other classes before you can continue this class.")
    }


/* ================================================================================ */ 

But now it is setting the message upon trying to select the class all the time. I assume because he cannot select a class and so cannot load the level and so an endless loop.
Does anyone have a suggestion? Please tell me, I am really in need of this.


All times are GMT -4. The time now is 14:25.

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