программа Меню для Новичков
Поскольку всегда мы начнем, добавляя, что необходимое включает наш плагин
#include <amxmodx>
[редактирование] Глобальные Переменные
new g_Menu; // обработчик Главного меню
new g_Votes [3]; //Магазин Да 1, Нет 2
В здесь мы создали 2 глобальных вара. Один, чтобы считать, что наш маркер меню, и другой хранят наши голоса меню. 'Да' голоса будут сохранены в g_Votes [1] и голоса "Нет", будет сохранен в g_Votes [2].
[редактирование], Регистрирующее Дополнение к программе и Меню
public plugin_init()
{
//Регистрируйте Наше Дополнение к программе
register_plugin ("Vote Menu", "1.0"," Freecode");
//Регистрируйте наше меню голосования Уровня Изменения
g_Menu = menu_create ("Change Level?", "menu_handle"); register_clcmd ("amx_startvote", "startvote", ADMIN_CFG, "Gaben");
//Теперь мы должны построить свое меню
build_menu ();
}
Позволяет ломают это.
* Регистрирует наше дополнение к программе
register_plugin ("Vote Menu", "1.0"," Freecode");
* g_Menu - маркер меню Our. Это будет установлено после того, как menu_create называют.
g_Menu = menu_create ("Change Level?", "menu_handle");
//menu_create (заголовок [], обработчик [], ml=0)
//title[] - заголовок Меню
//handler[] - Это - функция, которую назвать, как только кто-то нажимает ключ на Вашем меню.
* Мы сделали эту команду клиента, таким образом мы можем запустить свой голос.
register_clcmd ("amx_startvote", "startvote", ADMIN_CFG, "Gaben");
* Это - функциональный запрос. build_menu () функция создаст наше меню голоса.
build_menu ();
[редактирование] Меню Построения
Построение меню только добавляет необходимые элементы к Вашему меню. Прежде, чем мы продолжим добавляющие элементы, мы должны смотреть на menu_additem .
menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )
* menu - маркер меню. Это говорит menu_additem меню, к которому мы добавляем свой элемент.
* const name[]- название элемента. Это - то, что отображено в меню.
* const command[] - информация элемента.
Теперь позволяет, входят в построение нашего меню. Как сказано, это - простое голосование для разнообразия Уровня. Таким образом мы будем только нуждаться в 2 элементах. "Да" и "Нет".
build_menu ()
{
menu_additem(g_Menu, "Yes", "1");
menu_additem(g_Menu, "No", "2"); menu_setprop (g_Menu, MPROP_PERPAGE, 0);
}
* Примечания
o Поскольку Вы можете видеть, что я устанавливаю команду константы [] к числам. Это для нас, чтобы идентифицировать легче элемент.
o Я также добавил menu_setprop. Это заставляет наше меню не иметь никаких страниц. Поскольку дополнительные свойства изучают newmenus.inc
[редактирование], Отображающее Меню Голосования
Чтобы отобразить наше меню, мы должны просто использовать menu_display.
menu_display ( id, menu, page )
* id - id пользователя Ваше меню показа для.
* menu- какое меню - Вы показывающий пользователю.
* page - что страница (меню), чтобы начаться на. Страница меню начинается в 0.
Хорошо позволяет, продолжаются к нашему коду.
public startvote(id)
{
for(new i = 0; i < 33; i++)
{
if( is_user_alive(i) )
{
menu_display(i, g_Menu, 0);
}
} return PLUGIN_HANDLED;
}
* Примечания:
o Для петли используется, чтобы циклически повториться через игроков и отобразить меню для игроков, которые живы.
[редактирование] Обрабатывающие Выборы Меню
Последний шаг - actualy обрабатывающий выборов меню. Это случается через функцию обработчика меню. Это назвать, как только кто-то выбирает элемент от меню. Есть 3 переменные, которые передают к функции.
* id - пользователи id
* menu - пользователь меню имел открытый
* item - и пользователь элемента выбрал
Теперь есть несколько из специальных элементов как элемент Выхода.
#define MENU_EXIT -3
#define MENU_BACK -2
#define MENU_MORE -1
Таким образом мы должны проверить сначала, если бы выбранный элемент не был одним из специальных. Отметьте, что единственный специальный элемент, который может заставить Ваш обработчик быть названным, является MENU_EXIT, потому что MENU_BACK и элементы MENU_MORE полностью обработаны в ядре AMXX (Вы не можете сцепить их).
if( item < 0 ) return PLUGIN_CONTINUE;
Затем мы должны отыскать информацию элемента. То, что мы ищем, является числом, которое мы дали элементу (Да = 1, Нет = 2). И сделать это мы используем menu_item_getinfo.
menu_item_getinfo ( menu, item, &access, command[], cmdlen, name[]="", namelen=0, &callback )
* menu - меню, где элемент существует.
* item - элемент непосредственно
* &access - (редактирование)
* command[] - (редактирование) (это - то, где мы хранили свои идентификационные номера элемента),
* cmdlen - длина команды []
* name[] - название элементов
* namelen - длина названия
* &callback - (редактирование)
После того, как мы получаем свою информацию элементов, мы преобразуем команду [] к числу (или будет 1 или 2), и обновите массив g_Votes с соответствующим выбранным голосованием. Вот наша законченная функция маркера:
public menu_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE; // Get item info
new cmd[3];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new iChoice = str_to_num(cmd);
g_Votes[iChoice]++;
return PLUGIN_HANDLED;
}
[редактирование] Fenito
Конец. Вы закончили Обучающую программу Меню Новичка. Используя новую систему меню мы имеем больше контроля над меню. В следующей обучающей программе Вы будете видеть, как powerfull новая система меню. Использование отзывов и разрушивших и создающих меню. Вот законченный код после меню.
Quote (Вот Что должно у нас получится)
#include <amxmodx> new g_Menu; // Main Menu handler
new g_Votes[3]; // Store Yes votes at 1, No at 2
public plugin_init()
{
// Register Our Plugin
register_plugin("Vote Menu","1.0","Freecode");
// Register our Change Level vote menu
g_Menu = menu_create("Change Level?","menu_handle");
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
// Now we need to build our menu
build_menu();
}
build_menu()
{
menu_additem(g_Menu, "Yes", "1");
menu_additem(g_Menu, "No", "2");
menu_setprop(g_Menu, MPROP_PERPAGE, 0);
}
public startvote(id)
{
for(new i = 0; i < 33; i++)
{
if( is_user_alive(i) )
{
menu_display(i, g_Menu, 0);
}
}
return PLUGIN_HANDLED;
}
public menu_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
// Get item info
new cmd[3];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new iChoice = str_to_num(cmd);
g_Votes[iChoice]++;
return PLUGIN_HANDLED;
}