Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Новые сообщения · Правила форума · Поиск]
  • Страница 1 из 1
  • 1
Csfull.Forum » Counter-Strike 1.6 » FAQ » Создание amxx плагина№2 (создаём меню)
Создание amxx плагина№2
-{:Gu$TaVS:}-Дата: Воскресенье, 2008-01-27, 7:55 PM | Сообщение # 1
Группа: Удаленные





программа Меню для Новичков

Поскольку всегда мы начнем, добавляя, что необходимое включает наш плагин

#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;
}

 
Csfull.Forum » Counter-Strike 1.6 » FAQ » Создание amxx плагина№2 (создаём меню)
  • Страница 1 из 1
  • 1
Поиск:

Товарищи если вы используете материалы нашего сайта не забывайте указывать источника //csfull.moy.su
Copyright MyCorp © 2006 - 2009 Csfull