Инфо Меню

  • Автор темы Автор темы Mizer
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Сообщения
15
Реакции
0
Баллы
1
Ошибка
-
AMX Mod X
-
Билд сервера
-
ReGameDLL
-
Metamod версия
-
Metamod плагины
-
Список плагинов
-
Исходный код плагина
#include <amxmodx>
enum _:DATA { Name[64], Cmd[32], Flags }

#define ADMIN_LOADER // Выводить срок до конца админки с Admin Loader by Neugomon
new g_szDefaultItems[][DATA] = // Стандартные пункты в меню | { "название пункта", "команда", "флаг доступа" }
{
{ "\wКикнуть", "amx_kickmenu", ADMIN_KICK },
{ "\wЗабанить", "amx_banmenu", ADMIN_BAN },
{ "\wУдарить\w/\wУбить", "amx_slapmenu", ADMIN_SLAY },
{ "\wКоманда игрока", "amx_teammenu", ADMIN_KICK },
{ "\wСмена карты", "amx_mapmenu", ADMIN_MAP },
{ "\wГолосование за карту", "amx_votemapmenu", ADMIN_VOTE },
{ "\wЗаткнуть игрока", "gag_menu", ADMIN_KICK },
{ "\wНаказать Читера", "amx_sbmenu", ADMIN_BAN },
{ "\wОтключить Невидимость", "amx_spectate", ADMIN_BAN },
{ "\wСделать Скрины", "amx_screenmenu", ADMIN_BAN },

}

new g_iNumItems;
new g_szMenuData[128][DATA];
new g_iMenuPage[33];
#if defined ADMIN_LOADER
native admin_expired(index);
#endif
public plugin_init()
{
register_plugin("Menus Front-End", "1.5", "neugomon");

register_clcmd("amxmodmenu", "clcmdAdminMenu", ADMIN_MENU);
register_srvcmd("amx_addmenuitem", "SrvAddMenuItems");

register_menucmd(register_menuid("AMX Menu"), 1023, "amxx_handler");

MenuDefaultLoad();
}

public clcmdAdminMenu(id, flags)
{
if(get_user_flags(id) & flags)
{
g_iMenuPage[id] = 0;
BuildMenu(id, g_iMenuPage[id]);
}
else console_print(id, "* Вы не имеете доступа к этой команде");
return PLUGIN_HANDLED;
}

public SrvAddMenuItems()
{
if(read_argc() >= 3)
{
new ItemName[64], ItemCmd[32], ItemFlags[30];
read_argv(1, ItemName, charsmax(ItemName));
read_argv(2, ItemCmd, charsmax(ItemCmd));
read_argv(3, ItemFlags, charsmax(ItemFlags));

copy(g_szMenuData[g_iNumItems][Name], charsmax(g_szMenuData[][Name]), ItemName);
copy(g_szMenuData[g_iNumItems][Cmd], charsmax(g_szMenuData[][Cmd]), ItemCmd);
g_szMenuData[g_iNumItems][Flags] = read_flags(ItemFlags);
g_iNumItems++;
}
else server_print("[Menus Front-End by Neugomon] Item not added! Syntax: ^"Item name^" ^"Item command^" ^"Item access^"");
return PLUGIN_HANDLED;
}

MenuDefaultLoad()
{
for(new i; i < sizeof g_szDefaultItems; i++)
{
copy(g_szMenuData[g_iNumItems][Name], charsmax(g_szMenuData[][Name]), g_szDefaultItems[i][Name]);
copy(g_szMenuData[g_iNumItems][Cmd], charsmax(g_szMenuData[][Cmd]), g_szDefaultItems[i][Cmd]);
g_szMenuData[g_iNumItems][Flags] = g_szDefaultItems[i][Flags];
g_iNumItems++;
}
}

BuildMenu(id, pos)
{
new szMenu[512];
new len
new start = pos * 8;
new end = start + 8;
new keys = MENU_KEY_0;

if(start >= g_iNumItems)
start = pos = g_iMenuPage[id] = 0;
if(g_iNumItems == 9 || end > g_iNumItems)
end = g_iNumItems;
#if defined ADMIN_LOADER
new exp = admin_expired(id);
if(exp > 0)
{
new systime = get_systime();
if(exp - systime > 0)
{
if((exp - systime) / 86400 > 0)
len = formatex(szMenu, charsmax(szMenu), "\rАдмин меню^n\wОсталось \r%d \wдней^n^n", ((exp - systime) / 86400));
else len = formatex(szMenu, charsmax(szMenu), "\rАдмин меню^n\yПоследний \wдень^n^n");
}
}
else if(exp == 0) len = formatex(szMenu, charsmax(szMenu), "\rАдмин меню^n\yПрава \yне ограничены^n^n");
#else
len = formatex(szMenu, charsmax(szMenu), "\rАдмин меню^n\wВыберите действие^n^n");
#endif
for(new i = start, flags = get_user_flags(id), a; i < end; i++)
{
if(flags & g_szMenuData[i][Flags])
{
keys |= (1 << a);
len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \w%s^n", ++a, g_szMenuData[i][Name]);
}
else len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \d%s^n", ++a, g_szMenuData[i][Name]);
}

if(end != g_iNumItems)
{
formatex(szMenu[len], charsmax(szMenu) - len, "^n\r9. \wДалее^n\r0. \w%s", pos ? "Назад" : "Выход");
keys |= MENU_KEY_9;
}
else formatex(szMenu[len], charsmax(szMenu) - len, "^n\r0. \w%s", pos ? "Назад" : "Выход");

return show_menu(id, keys, szMenu, -1, "AMX Menu");
}

public amxx_handler(id, key)
{
switch(key)
{
case 9: if(g_iMenuPage[id]) BuildMenu(id, --g_iMenuPage[id]);
default:
{
if(key == 8 && g_iNumItems > 10)
BuildMenu(id, ++g_iMenuPage[id]);
else
{
new pos = g_iMenuPage[id] * 8 + key;
if(g_szMenuData[pos][Cmd][0] == 's' && g_szMenuData[pos][Cmd][1] == 'v' && g_szMenuData[pos][Cmd][2] == '_')
server_cmd(g_szMenuData[pos][Cmd]);
else client_cmd(id, g_szMenuData[pos][Cmd]);
}
}
}
return PLUGIN_HANDLED;
}
Плагин отображает криво как исправить?
 

Вложения

  • 20250927181847_1.jpg
    20250927181847_1.jpg
    15,6 КБ · Просмотры: 93
Решение
Update menu handler function like this
C++:
public amxx_handler(id, key)
{
    if (key == 9) {
        if (g_iMenuPage[id] > 0) {
            BuildMenu(id, --g_iMenuPage[id]);
        }
        return PLUGIN_HANDLED;
    }

    if (key == 8) {
        BuildMenu(id, ++g_iMenuPage[id]);
        return PLUGIN_HANDLED;
    }

    new pos = g_iMenuPage[id] * 8 + key;
    if (pos < g_iNumItems) {
        new cmd[32];
        copy(cmd, charsmax(cmd), g_szMenuData[pos][Cmd]);
        if (cmd[0] == 's' && cmd[1] == 'v' && cmd[2] == '_') {
            server_cmd(cmd);
        } else {
            client_cmd(id, cmd);
        }
    }

    return PLUGIN_HANDLED;
}
Update menu handler function like this
C++:
public amxx_handler(id, key)
{
    if (key == 9) {
        if (g_iMenuPage[id] > 0) {
            BuildMenu(id, --g_iMenuPage[id]);
        }
        return PLUGIN_HANDLED;
    }

    if (key == 8) {
        BuildMenu(id, ++g_iMenuPage[id]);
        return PLUGIN_HANDLED;
    }

    new pos = g_iMenuPage[id] * 8 + key;
    if (pos < g_iNumItems) {
        new cmd[32];
        copy(cmd, charsmax(cmd), g_szMenuData[pos][Cmd]);
        if (cmd[0] == 's' && cmd[1] == 'v' && cmd[2] == '_') {
            server_cmd(cmd);
        } else {
            client_cmd(id, cmd);
        }
    }

    return PLUGIN_HANDLED;
}
 
Решение
Статус
Закрыто для дальнейших ответов.

Кто просматривает тему

Назад
Верх