Инфо Меню

  • Автор темы Автор темы Mizer
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Сообщения
15
Реакции
0
Баллы
1
Ошибка
-
AMX Mod X
-
Билд сервера
-
ReGameDLL
-
Metamod версия
-
Metamod плагины
-
Список плагинов
-
Исходный код плагина
C-подобный:
#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 КБ · Просмотры: 153
Решение
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;
}
 
Решение
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх