Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Доступ к меню только в первые 15 секунд

Статус пользователя Captain
сообщение 18.8.2017, 8:29
Сообщение #1
Стаж: 12 лет

Сообщений: 251
Благодарностей: 7
Полезность: < 0

Всем привет. Как сделать, чтобы меню доступно было в первые 15 секунд после начала раунда?

Пробовал таск ставить в начале раунда на 15 секунд. Но в имя функции ставить что ставить?

Код:
#define GTASK 	283

public plugin_init()
{
register_clcmd("knife", "knifemenu")
g_knife_menu = menu_create("\yВыбор ножей:", "menu_handle")
build_menu()
register_logevent("round_start", 2, "1=Round_Start")
register_logevent("round_end", 2, "1=Round_End")
register_logevent("round_end", 2, "1&Restart_Round_")
}

public round_start()
{
set_task(15.0, "тут вот имя функции должно быть как у меню ножей?", GTASK)
}

public round_end()
{
remove_task(GTASK)
}

build_menu()
{
menu_additem(g_knife_menu, "1 нож", "1")
menu_additem(g_knife_menu, "2 нож", "2")
menu_additem(g_knife_menu, "3 нож", "3")
menu_setprop(g_knife_menu, MPROP_PERPAGE, 0)
}

public knifemenu(id)
{
if(!is_user_alive(id))
{
return PLUGIN_HANDLED
}
menu_display(id, g_knife_menu, 0)
return PLUGIN_HANDLED
}

public menu_handle(id, menu, item)
{
if(item < 0) return PLUGIN_CONTINUE
new cmd[2], access, callback
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
new choice = str_to_num(cmd)
switch(choice)
{
case 1: buy_knife1(id)
case 2: buy_knife2(id)
case 3: buy_knife3(id)
}
return PLUGIN_HANDLED
}


Отредактировал: Captain, - 18.8.2017, 8:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 18.8.2017, 9:29
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

либо добавить булеву переменную и менять ее значения в начале раунды и через 15 секунд
после чего проверить значения переменной при вызове меню

либо просто записывать системное время в начале раунды, а при вызове меню проверять текущее время и сравнять с записанным+15s

так же стоит не забывать закрыть меню по истечению 15s, для этого вызывать "пустое" меню для каждого игрока либо сделать по аналогии в обработчике меню.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 18.8.2017, 13:48
Сообщение #3
Стаж: 12 лет

Сообщений: 251
Благодарностей: 7
Полезность: < 0

Legenda, а как сделать, чтобы после 15 секунд закрывалось только данное меню, а другие не закрывались?

Cкрытый текст
Код:
public round_start()
{
for(new id = 0; id <= get_maxplayers(); id++)
{
g_open_menu[id] = true
}
set_task(15.0, "openmenu", GTASK)
}

public openmenu()
{
for(new id = 0; id <= get_maxplayers(); id++)
{
g_open_menu[id] = false
show_menu(id, 0, "^n", 1)
}
}

public round_end()
{
remove_task(GTASK)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 18.8.2017, 14:48
Сообщение #4


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

1) теоретически нужно использовать menu_cancel(player) и get_user_menu
+ есть две системы меню
проще в обработчик меню добавить проверку, чем проверять и закрывать меню
2) цикл по игрокам не нужен, достаточно одной переменной для всех, а не массива
3) проще в обработчик меню добавить проверку.

Код:

new g_sys_time

public round_start()
{
g_sys_time = get_systime()
}

public knifemenu(id)
{
if(g_sys_time +15 < get_systime())
{
client_print(id,print_chat,"Меню не доступно")
return PLUGIN_HANDLED
}
if(!is_user_alive(id))
{
return PLUGIN_HANDLED
}
menu_display(id, g_knife_menu, 0)
return PLUGIN_HANDLED
}

public menu_handle(id, menu, item)
{
if(g_sys_time +15 < get_systime())
{
client_print(id,print_chat,"Меню не доступно")
return PLUGIN_HANDLED
}

if(item < 0) return PLUGIN_CONTINUE
new cmd[2], access, callback
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
new choice = str_to_num(cmd)
switch(choice)
{
case 1: buy_knife1(id)
case 2: buy_knife2(id)
case 3: buy_knife3(id)
}
return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: