|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Системы меню
|
|
ZETA | Дата: Вторник, 14.07.2009, 16:22:49 | Сообщение # 1 |
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Статус: Не в сети
| Старая система меню Хоть есть и более "универсальное меню", эта система меню осталась не менее актуальной, половина плагинов стандартного набора 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
Статус: Не в сети
| Молодец) Вики бы ещё перевёл кто))
http://romanov4400.mybrute.com
|
|
| |
Veteran | Дата: Вторник, 14.07.2009, 22:26:50 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 37
Статус: Не в сети
| вот так по чуть чуть по переводите-и будет учебник!
СРОЧНО НУЖЕН СКРИПТЕР-УЧИТЕЛЬ!!!
|
|
| |
godzilla | Дата: Воскресенье, 27.09.2009, 17:46:02 | Сообщение # 4 |
Лейтенант
Группа: Пользователи
Сообщений: 75
Статус: Не в сети
| Как убрать кнопку exit??
|
|
| |
ZETA | Дата: Воскресенье, 27.09.2009, 19:31:10 | Сообщение # 5 |
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Статус: Не в сети
| 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
Статус: Не в сети
| не убирается.... Добавлено (27.09.2009, 20:35:52) --------------------------------------------- Я уже всё перепробывал... ничего не помогает,я иссяк...
|
|
| |
ZETA | Дата: Воскресенье, 27.09.2009, 21:04:11 | Сообщение # 7 |
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Статус: Не в сети
| Скинь свой код, только скинь в раздел Помощь по скриптингу
Говори что думаешь и думай что говоришь...
|
|
| |
Extasy | Дата: Среда, 30.12.2009, 15:13:18 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Не в сети
| Мне интересно стало, а как можно в меню, вывести имя игрока? И чтобы в 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
Статус: Не в сети
| т.к 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
Статус: Не в сети
| 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")
|
|
| |
| AMX Mod X Russian Community © 2006-2024 | |
|
| |