Здравствуйте уважаемые пользователи, я сделал випменю, но там в логах сервера появляются ошибки
L 08/29/2014 - 21:02:52: Info (map "35hp_2") (file "addons/amxmodx/logs/error_20140829.log") L 08/29/2014 - 21:02:52: [AMXX] Displaying debug trace (plugin "vipmenu.amxx") L 08/29/2014 - 21:02:52: [AMXX] Run time error 4: index out of bounds L 08/29/2014 - 21:02:52: [AMXX] [0] colorchat.inc::ColorChat (line 74) L 08/29/2014 - 21:02:52: [AMXX] [1] vipmenu.sma::round_start6 (line 287) L 08/29/2014 - 21:14:22: [AMXX] Displaying debug trace (plugin "vipmenu.amxx") L 08/29/2014 - 21:14:22: [AMXX] Run time error 4: index out of bounds L 08/29/2014 - 21:14:22: [AMXX] [0] colorchat.inc::ColorChat (line 74) L 08/29/2014 - 21:14:22: [AMXX] [1] vipmenu.sma::round_start6 (line 287)
Как их исправить, ничего не получается. Вот исходник плагина:
menu_display(id, vipmenu, 0) }else { client_cmd(id,"mp3 play sound/vipmenu/not.mp3") ColorChat(id, RED, "^x04[%s] У вас недостаточно прав для использования этой команды", Prefix) } return PLUGIN_HANDLED }
public supervipmenu(id) { if(get_user_flags(id) & ADMIN_LEVEL_G) { new szMenu[650], len len = 0 new vipmenu = menu_create("\r[.:KP#:.]\y SUPER VIP Меню", "supervipmenu_handler" )
menu_display(id, vipmenu, 0) }else { client_cmd(id,"mp3 play sound/vipmenu/not.mp3") ColorChat(id, RED, "^x04[%s] У вас недостаточно прав для использования этой команды", Prefix) }
return PLUGIN_HANDLED }
public menu_render(id) { if(get_user_flags(id) & ADMIN_LEVEL_H) { new Render_Menu = menu_create("\r.:\wМеню Cвечения\r:.^n\d.:Выберете свечение:.", "menu_rendering")
public vipmenu_handler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu)
return PLUGIN_HANDLED } 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) switch(i_Key) { case 1: { money(id) } case 2: { respawn(id) } case 3: { menu_render(id) } case 4: { client_cmd(id, "svmenu") } } menu_destroy(menu) return PLUGIN_HANDLED }
public supervipmenu_handler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu)
return PLUGIN_HANDLED } 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) switch(i_Key) { case 1: { if (!is_user_alive(id)) { ColorChat(id, RED, "^x04[%s] Надо быть живым, чтобы использовать это", Prefix) }else{ speed(id) } } case 2: { if (!is_user_alive(id)) { ColorChat(id, RED, "^x04[%s] Надо быть живым, чтобы использовать это", Prefix) }else{ gravity(id) } } case 3: { if (!is_user_alive(id)) { ColorChat(id, RED, "^x04[%s] Надо быть живым, чтобы использовать это", Prefix) }else{ deagle(id) } } case 4: { Twojump[id] = Twojump[id] ? false : true supervipmenu(id) } case 5: { client_cmd(id, "vmenu") } } menu_destroy(menu) return PLUGIN_HANDLED }
public menu_rendering( id, menu, item ) { if( item == MENU_EXIT ) { menu_destroy( menu ); return PLUGIN_HANDLED; } new data[6], iName[64]; new access, callback;
new player_name[32] get_user_name(id, player_name, 31)
menu_item_getinfo( menu, item, access, data,5, iName, 63, callback ); new key = str_to_num( data ); switch( key ) { case 1: { set_user_rendering(id,kRenderFxGlowShell,255,0,0,kRenderNormal,80); ColorChat(0, RED, "^x04[%s] ^x03VIP игрок ^x04%s ^x03Взял свечение ^x04КРАСНОГО ЦВЕТА.", Prefix, player_name) } case 2: { set_user_rendering(id,kRenderFxGlowShell,0,255,0,kRenderNormal,80); ColorChat(0, RED, "^x04[%s] ^x03VIP игрок ^x04%s ^x03Взял свечение ^x04ЗЕЛЕНОГО ЦВЕТА.", Prefix, player_name) } case 3: { set_user_rendering(id,kRenderFxGlowShell,0,0,255,kRenderNormal,80); ColorChat(0, RED, "^x04[%s] ^x03VIP игрок ^x04%s ^x03Взял свечение ^x04СИНЕГО ЦВЕТА.", Prefix, player_name)
} case 4: { set_user_rendering(id,kRenderFxGlowShell,255,255,0,kRenderNormal,80); ColorChat(0, RED, "^x04[%s] ^x03VIP игрок ^x04%s ^x03Взял свечение ^x04ЖЕЛТОГО ЦВЕТА.", Prefix, player_name) } case 5: { set_user_rendering(id,kRenderFxGlowShell,128,0,255,kRenderNormal,80); ColorChat(0, RED, "^x04[%s] ^x03VIP игрок ^x04%s ^x03Взял свечение ^x04ФИОЛЕТОВОГО ЦВЕТА.", Prefix, player_name) } case 6: { set_user_rendering(id,kRenderFxGlowShell,255,120,0,kRenderNormal,80); ColorChat(0, RED, "^x04[%s] ^x03VIP игрок ^x04%s ^x03Взял свечение ^x04ОРАНЖЕВОГО ЦВЕТА.", Prefix, player_name) } case 7: { set_user_rendering(id); ColorChat(id, RED, "^x04[%s] Свечение отключенно", Prefix) } } menu_destroy( menu ); return PLUGIN_HANDLED; }
У тебя в инклюде colorchat.inc: ColorChat ( line 74 ) Ошибка Это и привело к выбиванию ошибки в плагине
Посмотрел в инклуде, там много че написано:
#if defined _colorchat_included #endinput #endif #define _colorchat_included
/* ColorChat Support */ #define NORMAL DontChange #define GREEN DontChange #define TEAM_COLOR DontChange #define RED Red #define BLUE Blue #define GREY Grey #define ColorChat client_print_color /* ColorChat Support */
stock client_print_color(id, iColor=DontChange, const szMsg[], any:...) { // check if id is different from 0 if( id && !is_user_connected(id) ) { return 0; }
// Send message to all players else { // Figure out if at least 1 player is connected // so we don't send useless message if not // and we gonna use that player as team reference (aka SayText message sender) for color change new iPlayers[32], iNum; get_players(iPlayers, iNum, "ch"); if( !iNum ) { return 0; }
new iFool = iPlayers[0];
new iMlNumber, i, j; new Array:aStoreML = ArrayCreate(); if( iParams >= 5 ) // ML can be used { for(j=4; j<iParams; j++) { // retrieve original param value and check if it's LANG_PLAYER value if( getarg(j) == LANG_PLAYER ) { i=0; // as LANG_PLAYER == -1, check if next parm string is a registered language translation while( ( szMessage[ i ] = getarg( j + 1, i++ ) ) ) {} if( GetLangTransKey(szMessage) != TransKey_Bad ) { // Store that arg as LANG_PLAYER so we can alter it later ArrayPushCell(aStoreML, j++);
// Update ML array saire so we'll know 1st if ML is used, // 2nd how many args we have to alterate iMlNumber++; } } } }
// If arraysize == 0, ML is not used // we can only send 1 MSG_BROADCAST message if( !iMlNumber ) { if( iParams == 3 ) { copy(szMessage[1], charsmax(szMessage)-1, szMsg); } else { vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4); }
// ML is used, we need to loop through all players, // format text and send a MSG_ONE_UNRELIABLE SayText message else { new szTeam[11], szFakeTeam[10];
for(j=0; j<iMlNumber; j++) { // Set all LANG_PLAYER args to player index ( = id ) // so we can format the text for that specific player setarg(ArrayGetCell(aStoreML, j), _, id); }
// format string for specific player vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
Во первых: Этот пример работать не будет iColor задан как DontChange Тебе нужно было задавать так iColors:iColor = DontChange Так как будет выбивать ошибку
Во вторых: Данная функция является нативом То есть берется из другого плагина уже установленного на сервере
Сообщение отредактировал nesquikroma - Четверг, 2014-09-04, 17:26