aelrond | Дата: Вторник, 11.10.2016, 21:37 | Сообщение # 1 |
- Сообщения: 29
- Награды: 0
- Замечания:
|
Всем привет! Smaster, можешь подсказать, как переделать старое меню в новое в данном случае? речь идёт о меню прокачки скилов.
Вот оригинальный код: Код public MENU_SelectSkill( idUser ) { if(p_data[idUser][P_RACE] == 0)return;
new iSkillsUsed = SM_TotalSkillPointsUsed(idUser); if (iSkillsUsed >= p_data[idUser][P_LEVEL])return; new szSkillName[64]; new iSkillCounter = 0, iSkillID = 0, iSkillLevel;
iSkillID = SM_GetSkillByPos(idUser, iSkillCounter);
while (iSkillID != -1) { iSkillLevel = SM_GetSkillLevel(idUser, iSkillID, 4); LANG_GetSkillName( iSkillID , idUser, szSkillName, 63, 1 );
if (SM_GetSkillType( iSkillID ) == SKILL_TYPE_TRAINABLE ) { if (iSkillLevel < MAX_SKILL_LEVEL) { if (p_data[idUser][P_LEVEL] <= 2 * iSkillLevel )pos += formatex( szMsg[pos], charsmax(szMsg)-pos, "\d"); else iKeys |= (1<<iSkillCounter); pos += formatex( szMsg[pos], charsmax(szMsg)-pos, "^n%d. %s %L %d\w", iSkillCounter+1, szSkillName, LANG_PLAYER, "WORD_LEVEL", iSkillLevel + 1 ); new str[10]; num_to_str(iSkillCounter+1,str,10); formatex(szMenuMulti,255, "\w%s %L %d", szSkillName, LANG_PLAYER, "WORD_LEVEL", iSkillLevel + 1); menu_additem(menu,szMenuMulti,str); } } else if ( SM_GetSkillType( iSkillID ) == SKILL_TYPE_ULTIMATE) { if ( iSkillLevel < MAX_ULTIMATE_LEVEL ) { if ( p_data[idUser][P_LEVEL] <= 5 )pos += formatex( szMsg[pos], charsmax(szMsg)-pos, "\d" ); else iKeys |= (1<<iSkillCounter); pos += formatex( szMsg[pos], charsmax(szMsg)-pos, "^n%d. %L: %s\w", iSkillCounter+1, LANG_PLAYER, "WORD_ULTIMATE", szSkillName ); } } iSkillCounter++; iSkillID = SM_GetSkillByPos( idUser, iSkillCounter ); } pos += formatex( szMsg[pos], charsmax(szMsg)-pos, "^n^n\d0. %L", LANG_PLAYER, "WORD_CANCEL" ); show_menu( idUser, iKeys, szMsg, -1 ); return; }
public _MENU_SelectSkill( idUser, iKey ) {
if (iKey == 9 )return PLUGIN_HANDLED; new iSkillID = SM_GetSkillByPos( idUser, iKey ); SM_SetSkill( idUser, iSkillID ); new iSkillsUsed = SM_TotalSkillPointsUsed( idUser ); if ( iSkillsUsed < p_data[idUser][P_LEVEL] )MENU_SelectSkill( idUser ); else WC3_ShowBar( idUser ); return PLUGIN_HANDLED; }
а вот мой код. суть в том, что если зайти на сервер, первый раз выбрать расу, то это меню появляется без ошибок (стартовый уровень 10 из 31) Но если сбросить скилы или получить новый уровень - меню появляется с ошибкой и роняет сервер, даже если прописан debug.
Код public MENU_SelectSkill(idUser) { if (p_data[idUser][P_RACE] > 0) { new iSkillsUsed = SM_TotalSkillPointsUsed(idUser); if (iSkillsUsed < p_data[idUser][P_LEVEL]) { new szMenuMulti[256]; formatex(szMenuMulti,255,"%L",idUser, "MENU_SELECT_SKILL"); new menu = menu_create(szMenuMulti,"HANDLER_SELECT_SKILL"); new szSkillName[64]; new iSkillCounter = 0, iSkillID = 0, iSkillLevel; iSkillID = SM_GetSkillByPos( idUser, iSkillCounter );
while (iSkillID != -1) { iSkillLevel = SM_GetSkillLevel(idUser, iSkillID,4); LANG_GetSkillName( iSkillID , idUser, szSkillName, 63, 1); // Add the trainable skills to the menu if (SM_GetSkillType(iSkillID) == SKILL_TYPE_TRAINABLE) { if (iSkillLevel < MAX_SKILL_LEVEL) { new str[10]; num_to_str(iSkillCounter+1,str,10); formatex(szMenuMulti,255, "\w%s %L %d", szSkillName, LANG_PLAYER, "WORD_LEVEL", iSkillLevel + 1); menu_additem(menu,szMenuMulti,str); } } else if (SM_GetSkillType( iSkillID ) == SKILL_TYPE_ULTIMATE) { if(iSkillLevel < MAX_ULTIMATE_LEVEL) { new str[10]; num_to_str(iSkillCounter+1,str,10); formatex(szMenuMulti,255, "%L: %s", LANG_PLAYER, "WORD_ULTIMATE", szSkillName); menu_additem(menu,szMenuMulti,str); } }
iSkillCounter++; iSkillID = SM_GetSkillByPos(idUser, iSkillCounter); } menu_setprop(menu,MPROP_PERPAGE,0); menu_display(idUser,menu,0); return; } } }
public HANDLER_SELECT_SKILL(idUser,menu,item) { new s_Data[6], s_Name[64], i_Access, i_Callback; menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback); new i_Key = str_to_num(s_Data); new iSkillID = SM_GetSkillByPos(idUser, i_Key-1); SM_SetSkill(idUser, iSkillID); new iSkillsUsed = SM_TotalSkillPointsUsed( idUser ); if(iSkillsUsed < p_data[idUser][P_LEVEL])MENU_SelectSkill( idUser ); else WC3_ShowBar(idUser); return PLUGIN_HANDLED; }
|
|
| |