Проверенный
Участник
Пользователь
d3m37r4
111111
- Сообщения
- 1,451
- Реакции
- 1,175
- Помог
- 10 раз(а)
Имеется, к примеру, простое меню:
Хотелось бы реализовать закрытие меню при выходе из зоны закупки.
Чтобы отловить id меню воспользовался функцией get_user_menu, которая проверяет открыто ли меню. Появилась проблема в том, что при открытии меню, пишет id открытого меню 0, а при выходе из зоны закупки уже другое, скрины тут:
Но, если поверх этого открытого меню, вызвать команду /menu еще раз, то id меню перезапишется, например, как на скрине ниже:
И при выходе из зоны закупки, показывает этот же ид, соответственно, меню закрывается.
Хотелось бы узнать, почему при открытии меню в первый раз id меню различается, с id меню при выходе из бай зоны. Возможно ли как-то это исправить и в итоге сделать так, чтобы именно данное меню при выходе из зоны закупки закрывалось.
Код:
#include <amxmodx>
new const KEYS_MENU = (1<<0)|(1<<1)|(1<<2)|(1<<9)
new g_MenuId;
public plugin_init()
{
register_clcmd("say /menu", "Menu_Function")
register_clcmd("say_team /menu", "Menu_Function")
register_menucmd(register_menuid("Menu"), KEYS_MENU, "Menu_Handler")
register_event("StatusIcon", "Event_HideStatusIcon", "b", "1=0", "2=buyzone");
}
public Menu_Function(id)
{
static menu[512]
new len
new menuid, keysmenu
get_user_menu (id,menuid,keysmenu)
g_MenuId = menuid
client_print(id, print_chat, "MENU_ID: %d", g_MenuId)
len = formatex(menu[len], charsmax(menu) - len, "\yMenu^n^n")
len += formatex(menu[len], charsmax(menu) - len, "1. Первый пункт^n")
len += formatex(menu[len], charsmax(menu) - len, "2. Второй пункт^n")
len += formatex(menu[len], charsmax(menu) - len, "3. Третий пункт^n")
len += formatex(menu[len], charsmax(menu) - len, "0. Выход")
return show_menu(id, KEYS_MENU, menu, -1, "Menu")
}
public Menu_Handler(id, key)
{
switch(key)
{
case 0:client_print(id, print_chat, "Вы выбрали первый пункт.")
case 1:client_print(id, print_chat, "Вы выбрали второй пункт.")
case 2:client_print(id, print_chat, "Вы выбрали третий пункт.")
case 9:client_print(id, print_chat, "Вы вышли из меню.")
}
}
public Event_HideStatusIcon(id)
{
new ViewMenuId, ViewKeysMenu
get_user_menu (id, ViewMenuId, ViewKeysMenu)
client_print(id, print_chat, "VIEW_MENUID: %d", ViewMenuId)
if (ViewMenuId == g_MenuId)
{
menu_cancel(id)
show_menu(id, 0, "^n", 1)
}
}
Чтобы отловить id меню воспользовался функцией get_user_menu, которая проверяет открыто ли меню. Появилась проблема в том, что при открытии меню, пишет id открытого меню 0, а при выходе из зоны закупки уже другое, скрины тут:
Но, если поверх этого открытого меню, вызвать команду /menu еще раз, то id меню перезапишется, например, как на скрине ниже:
И при выходе из зоны закупки, показывает этот же ид, соответственно, меню закрывается.
Хотелось бы узнать, почему при открытии меню в первый раз id меню различается, с id меню при выходе из бай зоны. Возможно ли как-то это исправить и в итоге сделать так, чтобы именно данное меню при выходе из зоны закупки закрывалось.