| 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(szText, charsmax(szText), "Select Class ^nTotal Levels: %d^nPage: ",AllClasses) new ClassMenu = menu_create(szText, "select_class_menu") formatex(szText, charsmax(szText), "Mage^t^tLevel: %d", lx[1]) menu_additem(ClassMenu, szText, "1", .callback = iCallBack) formatex(szText, charsmax(szText), "Monk^t^tLevel: %d", lx[2]) menu_additem(ClassMenu, szText, "2", .callback = iCallBack) formatex(szText, charsmax(szText), "Paladin^t^tLevel: %d", lx[3]) menu_additem(ClassMenu, szText, "3", .callback = iCallBack) formatex(szText, charsmax(szText), "Assassin^t^tLevel: %d", lx[4]) menu_additem(ClassMenu, szText, "4", .callback = iCallBack) formatex(szText, charsmax(szText), "Necromancer^t^tLevel: %d", lx[5]) menu_additem(ClassMenu, szText, "5", .callback = iCallBack) formatex(szText, charsmax(szText), "Barbarian^t^tLevel: %d", lx[6]) menu_additem(ClassMenu, szText, "6", .callback = iCallBack)
formatex(szText, charsmax(szText), "Ninja^t^tLevel: %d", lx[7]) menu_additem(ClassMenu, szText, "7", .callback = iCallBack) formatex(szText, charsmax(szText), "Demon Hunter^t^tLevel: %d", lx[8]) menu_additem(ClassMenu, szText, "8", .callback = iCallBack) formatex(szText, charsmax(szText), "Pirate^t^tLevel: %d", lx[9]) menu_additem(ClassMenu, szText, "9", .callback = iCallBack)
formatex(szText, charsmax(szText), "Sniper^t^tLevel: %d", lx[11]) menu_additem(ClassMenu, szText, "11", .callback = iCallBack) formatex(szText, charsmax(szText), "Priest^t^tLevel: %d", lx[12]) menu_additem(ClassMenu, szText, "12", .callback = iCallBack) formatex(szText, charsmax(szText), "Stalker (Donator)^t^tLevel: %d", lx[10]) menu_additem(ClassMenu, szText, "10", ADMIN_LEVEL_F) menu_setprop(ClassMenu, MPROP_EXIT , MEXIT_NEVER); menu_display(id, ClassMenu, 0);
} /* ================================================================================ */ public CheclItemEnabled(id, iMenu, iItem) { 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_classes, flags, charsmax(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(id, ClassMenu, item) { if(item == MENU_EXIT) { menu_destroy(ClassMenu); return PLUGIN_HANDLED; } new Data[7], Name[64]; new Access, Callback; menu_item_getinfo(ClassMenu, item, Access, Data,5, Name, 63, Callback); 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=0; i < 33; i++){ 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(id, player_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 bool: passedcheck[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(szText, charsmax(szText), "Select Class ^nTotal Levels: %d^nPage: ",AllClasses) new ClassMenu = menu_create(szText, "select_class_menu") formatex(szText, charsmax(szText), "Mage^t^tLevel: %d", lx[1]) menu_additem(ClassMenu, szText, "1", .callback = iCallBack) formatex(szText, charsmax(szText), "Monk^t^tLevel: %d", lx[2]) menu_additem(ClassMenu, szText, "2", .callback = iCallBack) formatex(szText, charsmax(szText), "Paladin^t^tLevel: %d", lx[3]) menu_additem(ClassMenu, szText, "3", .callback = iCallBack) formatex(szText, charsmax(szText), "Assassin^t^tLevel: %d", lx[4]) menu_additem(ClassMenu, szText, "4", .callback = iCallBack) formatex(szText, charsmax(szText), "Necromancer^t^tLevel: %d", lx[5]) menu_additem(ClassMenu, szText, "5", .callback = iCallBack) formatex(szText, charsmax(szText), "Barbarian^t^tLevel: %d", lx[6]) menu_additem(ClassMenu, szText, "6", .callback = iCallBack)
formatex(szText, charsmax(szText), "Ninja^t^tLevel: %d", lx[7]) menu_additem(ClassMenu, szText, "7", .callback = iCallBack) formatex(szText, charsmax(szText), "Demon Hunter^t^tLevel: %d", lx[8]) menu_additem(ClassMenu, szText, "8", .callback = iCallBack) formatex(szText, charsmax(szText), "Pirate^t^tLevel: %d", lx[9]) menu_additem(ClassMenu, szText, "9", .callback = iCallBack)
formatex(szText, charsmax(szText), "Sniper^t^tLevel: %d", lx[11]) menu_additem(ClassMenu, szText, "11", .callback = iCallBack) formatex(szText, charsmax(szText), "Priest^t^tLevel: %d", lx[12]) menu_additem(ClassMenu, szText, "12", .callback = iCallBack) formatex(szText, charsmax(szText), "Stalker (Donator)^t^tLevel: %d", lx[10]) menu_additem(ClassMenu, szText, "10", ADMIN_LEVEL_F) menu_setprop(ClassMenu, MPROP_EXIT , MEXIT_NEVER); menu_display(id, ClassMenu, 0); } 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.
|