AMX MOD X
Среда, 11.12.2024, 12:26:53



Приветствую Вас Гость | RSS
[ Главная ] [ Системы меню - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Системы меню
ZETAДата: Вторник, 14.07.2009, 16:22:49 | Сообщение # 1
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Репутация: 21
Статус: Не в сети
Старая система меню

Хоть есть и более "универсальное меню", эта система меню осталась не менее актуальной, половина плагинов стандартного набора AMXX использует эту систему меню.

Code

/* Подключаем файл amxmodx.inc, необходимый для работы */
#include <amxmodx>

/* Пункты меню/ключи
MENU_KEY_1 (1<<0) - Пункт 1
MENU_KEY_2 (1<<1) - Пункт 2
MENU_KEY_3 (1<<2) - Пункт 3
MENU_KEY_4 (1<<3) - Пункт 4
MENU_KEY_5 (1<<4) - Пункт 5
MENU_KEY_6 (1<<5) - Пункт 6
MENU_KEY_7 (1<<6) - Пункт 7
MENU_KEY_8 (1<<7) - Пункт 8
MENU_KEY_9 (1<<8) - Пункт 9
MENU_KEY_0 (1<<9) - Пункт 0 */
#define Keys (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)

/* Главная функция */
public plugin_init() {
   /* Регистрируем плагин
   Формат: register_plugin(название плагина,версия,автор) */
   register_plugin("OldMenuSystem","1.0","ZETA [M|E|N]")
     
   /* Регистрируем команду menu_1   
   Формат: register_clcmd(команда, функция) */
   register_clcmd("menu_1","Showmenu_1")
     
   /* Регистрируем команду menu_2 */
   register_clcmd("menu_2","Showmenu_2")
     
   /* Перенаправляет на функцию Pressedmenu_1
   register_menucmd - перенаправляет на функцию при использовании   
   определенного меню с определенными ключами
   Формат: register_menucmd(id меню,ключи,функция)
   register_menuid - получает id меню
   Формат: register_menuid(название меню) */
   register_menucmd(register_menuid("menu_1"), Keys, "Pressedmenu_1")
     
   /* Перенаправляет на функцию Pressedmenu_2 */
   register_menucmd(register_menuid("menu_2"), Keys, "Pressedmenu_2")
}

/* Функция Showmenu_1 */
public Showmenu_1(id) {
   /* Показывает меню:
    1: SomeThing
    2: SomeThing
    3: SomeThing
    4: SomeThing
    5: SomeThing
    6: SomeThing
    7: SomeThing
    8: SomeThing
    9: SomeThing
    0: More
   Формат: show_menu(id игрока,ключи,меню,время,название меню) */
   show_menu(id, Keys, "1: SomeThing^n2: SomeThing^n3: SomeThing^n4: SomeThing^n5: SomeThing^n6: SomeThing^n7: SomeThing^n8: SomeThing^n9: SomeThing^n0: More^n^n", -1, "menu_1")
}

/* Функция Pressedmenu_1 */
public Pressedmenu_1(id, key) {
   /* Оператор switch передает управление оператору case при   
   совпадении значений switch и case. Например если key равен 3,
   то будет выполнятся четвертый пункт */
   switch (key) {
    case 0: {
    // Пункт 1 - SomeThing
    }
    case 1: {
    // Пункт 2 - SomeThing
    }
    case 2: {
    // Пункт 3 - SomeThing
    }
    case 3: {
    // Пункт 4 - SomeThing
    }
    case 4: {   
    // Пункт 5 - SomeThing
    }
    case 5: {
    // Пункт 6 - SomeThing
    }
    case 6: {
    // Пункт 7 - SomeThing
    }
    case 7: {
    // Пункт 8 - SomeThing
    }
    case 8: {
    // Пункт 9 - SomeThing
    }
    case 9: client_cmd(id,"menu_2") // Пункт 0 - More
   }
   return PLUGIN_HANDLED   
}

/* Функция Showmenu_2 */
public Showmenu_2(id) {
   /* Показывает меню:
    1: SomeThing
    2: SomeThing
    3: SomeThing
    4: SomeThing
    5: SomeThing
    6: SomeThing
    7: SomeThing
    8: SomeThing
    9: SomeThing
    0: Exit */
   show_menu(id, Keys, "1: SomeThing^n2: SomeThing^n3: SomeThing^n4: SomeThing^n5: SomeThing^n6: SomeThing^n7: SomeThing^n8: SomeThing^n9: SomeThing^n0: Exit^n", -1, "menu_2")
}

/* Pressedmenu_2 */
public Pressedmenu_2(id, key) {
   switch (key) {
    case 0: {
    // Пункт 1 - SomeThing
    }
    case 1: {
    // Пункт 2 - SomeThing
    }
    case 2: {
    // Пункт 3 - SomeThing
    }
    case 3: {
    // Пункт 4 - SomeThing
    }
    case 4: {   
    // Пункт 5 - SomeThing
    }
    case 5: {
    // Пункт 6 - SomeThing
    }
    case 6: {
    // Пункт 7 - SomeThing
    }
    case 7: {
    // Пункт 8 - SomeThing
    }
    case 8: {
    // Пункт 9 - SomeThing
    }
    case 9: {
    // Пункт 0 - Exit
    }
   }
   return PLUGIN_HANDLED   
}

Новая система меню

Без сомнения, эта система меню намного удобней старой системы, с ней удобно создавать динамические меню, но все же и у этой системы есть свои недостатки

Code

/* Подключаем файл amxmodx.inc, необходимый для работы */
#include <amxmodx>

/* Главная функция */
public plugin_init() {
  /* Регистрируем плагин
  Формат: register_plugin(название плагина,версия,автор) */
  register_plugin("NewMenuSystem","1.0","ZETA [M|E|N]")
   
  /* Регистрируем команду my_menu  
  Формат: register_clcmd(команда,функция) */
  register_clcmd("my_menu","AwesomeMenu");
}

/* Функция AwesomeMenu */
public AwesomeMenu(id) {
  /* Создаем переменную menu, которая будет "держать" меню
  Эта переменная будет своего рода id меню.
  Формат: menu_create(название меню,функция-обработчик) */
  new menu=menu_create("\rLook at this awesome Menu!:","menu_handler")
   
  /* Добавляем к меню пункт I'm Selection #1
  Формат: menu_additem(id меню,название пункта,данные пункта,доступ к пункту)
  Перед пунктом меню стоит операнда \w. Она обозначает белый цвет.
  Ниже приведет список всех цветов, которые можно использовать в меню.
  \y - желтый
  \r - красный
  \d - серый (гашеный)
  \w - белый */
  menu_additem(menu,"\wI'm Selection #1","1",0)
  /* Добавляем к меню пункт I'm Selection #2 */
  menu_additem(menu,"\wI'm Selection #2","2",0)
  /* Добавляем к меню пункт I'm Secret Selection #3.
  Доступ к пункту с флагом ADMIN_ADMIN */
  menu_additem(menu,"\wI'm Secret Selection #3","3",ADMIN_ADMIN)
   
  /* Добавляем к меню свойства  
  Формат: menu_setprop(id меню,свойства)
  Все свойства можно посмотреть в amxconst.inc */
  menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
   
  /* Покаызвает меню  
  Формат: menu_display(id игрока,меню,страница) */
  menu_display(id,menu,0)
}

/* Функия menu_handler, обработчик меню */
public menu_handler(id,menu,item) {
  /* Если пункт меню - пункт выхода, то выйти из обработчика */
  if(item==MENU_EXIT) {
   menu_destroy(menu) // закрыть меню
   return PLUGIN_HANDLED
  }
  new data[6], iName[64]
  new access, callback
   
  /* Оператор menu_item_getinfo собирает информацию о выбраных пунктах  
  Формат: menu_item_getinfo(id меню,пункт меню,доступ,информация пунктов,размер информации,текст пункта, длина текста, callback)  
  Можно работать и без функции menu_item_getinfo, это просто один из примеров */
  menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
   
  /* в key передан номер выбранного пункт */
  new key = str_to_num(data)
   
  /* Оператор switch передает управление оператору case при  
  совпадении значений switch и case. Например если key равен 2,
  то в чат выведется OH NO! You selected the Awesome 2nd Selection! BEWARE! */
  switch(key) {
   case 1: {
    client_print(id, print_chat, "Hooray! You selected the Awesome 1st Selection")
    menu_destroy(menu) // закрыть меню
    return PLUGIN_HANDLED
   }
   case 2: {
    client_print(id, print_chat, "OH NO! You selected the Awesome 2nd Selection! BEWARE!")
   }
   case 3: {
    client_print(id, print_chat, "You have selected the Awesome Admin Selection! Hail Teh Bail!")  
   }
  }
  menu_destroy(menu) // закрыть меню
  return PLUGIN_HANDLED
}

Материал был взят с офф. сайта AMX Mod X. Жду вашей критики, ну и поправок в перевод :)


Говори что думаешь и думай что говоришь...

Сообщение отредактировал ZETA - Среда, 15.07.2009, 13:03:32
 
PomanoBДата: Вторник, 14.07.2009, 16:30:06 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Молодец)
Вики бы ещё перевёл кто))


http://romanov4400.mybrute.com
 
VeteranДата: Вторник, 14.07.2009, 22:26:50 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 37
Репутация: 0
Статус: Не в сети
вот так по чуть чуть по переводите-и будет учебник! :)

СРОЧНО НУЖЕН СКРИПТЕР-УЧИТЕЛЬ!!!
 
godzillaДата: Воскресенье, 27.09.2009, 17:46:02 | Сообщение # 4
Лейтенант
Группа: Пользователи
Сообщений: 75
Репутация: 0
Статус: Не в сети
Как убрать кнопку exit??
 
ZETAДата: Воскресенье, 27.09.2009, 19:31:10 | Сообщение # 5
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Репутация: 21
Статус: Не в сети
Quote (godzilla)
Как убрать кнопку exit??

Ну кнопку exit ты никак не уберешь, разве что выдернешь у себя из клавы Esc :)
А вот пункт exit можно убить с помощью menu_setprop(menu,MPROP_EXIT,-1)


Говори что думаешь и думай что говоришь...

Сообщение отредактировал ZETA - Воскресенье, 27.09.2009, 19:41:37
 
godzillaДата: Воскресенье, 27.09.2009, 20:35:52 | Сообщение # 6
Лейтенант
Группа: Пользователи
Сообщений: 75
Репутация: 0
Статус: Не в сети
не убирается.... :(

Добавлено (27.09.2009, 20:35:52)
---------------------------------------------
Я уже всё перепробывал... ничего не помогает,я иссяк...

 
ZETAДата: Воскресенье, 27.09.2009, 21:04:11 | Сообщение # 7
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Репутация: 21
Статус: Не в сети
Скинь свой код, только скинь в раздел Помощь по скриптингу

Говори что думаешь и думай что говоришь...
 
ExtasyДата: Среда, 30.12.2009, 15:13:18 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 3
Статус: Не в сети
Мне интересно стало, а как можно в меню, вывести имя игрока? И чтобы в const info=[] подставлялся i

т.е. из этого

Code
new inum
new players[32],name[32]
get_players(players,inum)

for (new i=0; i < inum; ++i)
{
   get_user_name(i,name,31)
   menu_additem(menu,"Nick","Number",0)
}

Что-то подобного рода

Code
new inum
new players[32],name[32]
get_players(players,inum)

for (new i=0; i < inum; ++i)
{
   get_user_name(i,name,31)
   menu_additem(menu,"%s","%i",0,name[i],i)
}
 
ZETAДата: Среда, 30.12.2009, 15:27:25 | Сообщение # 9
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Репутация: 21
Статус: Не в сети
т.к info[] является строкой, то необходимо id преобразовать в строку...

Code
new players[32],info[10],num,i

get_players(players,num)

for(i=0;i<num;i++) {
  get_user_name(players[i],name,31)
  num_to_str(players[i],info,9)
   
  menu_additem(menu,name,info)
}


Говори что думаешь и думай что говоришь...
 
ExtasyДата: Суббота, 02.01.2010, 07:51:29 | Сообщение # 10
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 3
Статус: Не в сети
ZETA, оу)) спасибо

Добавлено (02.01.2010, 05:10:08)
---------------------------------------------
Еще вопросик возник, можно ли реализовать перечисление пользователей в старом методе? Причем на несколько страниц, если не вмещается. Пытался разобрать plmenu, но что-то, там уж сильно замудрено всё...
p.s. Сори, если вопросы не стоит тут задовать, а надо создавать новую тему, но думаю, что некоторым пользователям это может пригодиться

Добавлено (02.01.2010, 07:51:29)
---------------------------------------------
Извиняюсь, часть проблемы решил сам.
В старой версии, для вывода можно создавать меню использую format и add
Например

Code
new menu_msg[256]
format(menu_msg,255,"\ySelect:\R^n^n")
add(menu_msg,255,"\w1: One^n")
add(menu_msg,255,"2: Two^n^n")
add(menu_msg,255,"9: Back^n")
add(menu_msg,255,"0: Exit^n")
show_menu(id, Keys, menu_msg, -1, "menu_1")

Это будет равносильно коду, данному ниже

Code

show_menu(id, Keys, "\ySelect:\R^n^n\w1: One^n2: Two^n9: Back^n0: Exit^n", -1, "menu_1")
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024