dongtianbao 发表于 2020-3-18 13:47:33

求助:菜单一页不能全部显示问题

public MENU_ChangeRace( id, iRaceXP )
{
       
        new szRaceName, i, pos, iKeys = 0, szMenu, szXP, num;

        // Get our race names
        for ( i = 0; i < get_pcvar_num( CVAR_wc3_races ) ); i++ )
        {
                lang_GetRaceName( i + 1, id, szRaceName, 63 );
        }

        pos += formatex( szMenu, 512-pos, "%L", id, "MENU_SELECT_RACE" );

如何让菜单一页显示8个选项
1:xxx
2:xxx
3:xxx
4:xxx
5:xxx
6:xxx
7:xxx
8:xxx

然后显示
9:next
0:exit

下一页显示
1:xxx
2:xxx
3:xxx


9:back
0:exit

k1nader 发表于 2020-3-19 02:07:18

话说不是有 menu 的现成封装吗。比这个方便多了呀

dongtianbao 发表于 2020-3-19 22:21:27

k1nader 发表于 2020-3-19 02:07
话说不是有 menu 的现成封装吗。比这个方便多了呀

nwb13创作的那个吧,那是单独插件,这个是别的文件里的一段,所以不能单独做个插件,帮助我一下,自己试着弄了几个小时总是出错,要不就是显示的位置不对,反正不能翻页显示,没办法了

k1nader 发表于 2020-3-20 05:54:43

dongtianbao 发表于 2020-3-19 22:21
nwb13创作的那个吧,那是单独插件,这个是别的文件里的一段,所以不能单独做个插件,帮助我一下,自己试 ...

我说的是 newmenus.inc 这个
给你一段参考代码

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

new m_iMenu = 205;

public DisplayPlayers(id)
{
        new menu = menu_create("玩家列表", "players_menu_handler"); // 创建个菜单句柄,并且指定 回调函数
       
        new szName, sztargetId;
       
        for(new i = 1; i < get_maxplayers(); i++)
        {
                if (is_user_connected(i))
                {
                        get_user_name(i, szName, charsmax(szName)); // 获取玩家名称
                        num_to_str(i, sztargetId, charsmax(sztargetId)); // 将玩家Id转为字符串
                        menu_additem(menu, szName, sztargetId); // 添加Item到菜单 (菜单句柄, 显示的内容, 数据)
                }
        }
        menu_setprop(menu, MPROP_BACKNAME, "上一页"); // 指定上一页字符串
        menu_setprop(menu, MPROP_NEXTNAME, "下一页"); // 指定下一页字符串
        menu_setprop(menu, MPROP_EXITNAME, "退出"); // 指定退出字符串
       
        set_pdata_int(id, m_iMenu, 0); // 用于修复 cs 菜单的bug
        menu_display(id, menu, 0); // 开始显示
        return PLUGIN_HANDLED;
}

public players_menu_handler(id, menu, item)
{
        if(item == MENU_EXIT ) // 如果回调item为退出
        {
                menu_destroy(menu); //销毁菜单
                return;
        }
       
        new sztargetId, szItemName;
        new access, callback;
       
        menu_item_getinfo(menu, item, access, sztargetId, charsmax(sztargetId), szItemName, charsmax(szItemName), callback); //获取菜单数据
       
        new targetId = str_to_num(sztargetId);
       
        if (is_user_connected(targetId)
        {
                new szName;
                get_user_name(targetId, szName, charsmax(szName));
                client_print(id, print_chat, "你选择的玩家是 %s, %s", szName, szItemName);
        }
       
        menu_destroy(menu); // 销毁菜单
       
}

amxmodx\scripting\testsuite\menutest.sma
这个源码里面有详细的使用测试代码
页: [1]
查看完整版本: 求助:菜单一页不能全部显示问题