Difference between revisions of "Ru Using New Menu System"

From AlliedModders Wiki
Jump to: navigation, search
 
Line 2: Line 2:
 
Напишите информацию тут
 
Напишите информацию тут
  
== Beginners Menu Tutorial ==
+
== Урок по созданию меню ==
 
Давайте попробуем воспользоваться новой системмой меню. Мы пройдем через этоу простую инструкцию и создадим простое голосование смены карты.
 
Давайте попробуем воспользоваться новой системмой меню. Мы пройдем через этоу простую инструкцию и создадим простое голосование смены карты.
  
=== Includes ===
+
=== Заголовочные файлы ===
 
Как обычно мы начинаем с добавления необходимых заголовочных файлов
 
Как обычно мы начинаем с добавления необходимых заголовочных файлов
 
<pawn>
 
<pawn>
Line 107: Line 107:
 
* item - тут выбор пункта меню пользователем
 
* item - тут выбор пункта меню пользователем
  
Now there are a few of special items like the Exit item.
+
Далее мы объявляем несколько специальных переменных таких как меню выхода.
 
<pawn>#define MENU_EXIT -3
 
<pawn>#define MENU_EXIT -3
 
#define MENU_BACK -2
 
#define MENU_BACK -2
 
#define MENU_MORE -1</pawn>
 
#define MENU_MORE -1</pawn>
  
So we must check at first if the item chosen was not one of the special ones.
+
Теперь нам надо проверить если пункт меню выбран и он не является специальной переменной
 
<pawn>if( item < 0 ) return PLUGIN_CONTINUE;</pawn>
 
<pawn>if( item < 0 ) return PLUGIN_CONTINUE;</pawn>
  
Next we must retrieve the item information. What we are looking for is the number we gave the item (Yes = 1, No = 2). And to do this we use menu_item_getinfo.
+
Слкдующим шагом мы получаем информацию о выбранном пункте меню. Все что мы ищем это номер пункта меню. (Да = 1, Нет = 2).
 +
Для этого надо использовать menu_item_getinfo.
 
<pawn>menu_item_getinfo ( menu, item, &access, command[], cmdlen, name[]="", namelen=0, &callback )</pawn>
 
<pawn>menu_item_getinfo ( menu, item, &access, command[], cmdlen, name[]="", namelen=0, &callback )</pawn>
* menu - the menu where the item exists.
+
* menu - меню в котором находится пункт меню.
 
* item - the item itself
 
* item - the item itself
 
* &access - (edit)
 
* &access - (edit)
* command[] - (edit)(this is where we stored our item identification numbers)
+
* command[] - (edit)(это то где сохраняются идентификационные номера меню)
* cmdlen - length of the command[]
+
* cmdlen - размер command[]
* name[] - items name
+
* name[] - имя пункта меню
* namelen - length of the name
+
* namelen - размер name[]
 
* &callback - (edit)
 
* &callback - (edit)
  
After we get our items info we will convert the command[] to a number (will either be a 1 or 2) and update the g_Votes array with the appropriate vote chosen.
+
После того как мы получили информацию о пуектах меню, надо взять из command[] номера выбранных меню(это должно быть 1 или 2).
Here is our finished handle function:
+
Теперь надо добавить в g_Votes теми голосами что были сделаны.
 +
Вот как завершонная функция должна выглядеть:
 
<pawn>public menu_handle(id, menu, item)
 
<pawn>public menu_handle(id, menu, item)
 
{
 
{
Line 147: Line 149:
  
 
=== Зевершение ===
 
=== Зевершение ===
The end. You have completed the Beginner's Menu Tutorial. Using the new menu system we have more control over the menu. In the next tutorial you will see how powerfull the new menu system is. The use of callbacks and destroying and creating menus.
+
Это конец. Вы завершили Урок по созданию меню. Используя новую систему меню можно создать более удобное управление.
Here is the completed code after the menu.
+
В следующем уроке вы увидите более сложную систему меню которая будет использовать callbacks, уничтожение меню и создание.
 +
Вот код который должен получится посли всех действий.
 
<pawn>#include <amxmodx>
 
<pawn>#include <amxmodx>
  
new g_Menu; // Main Menu handler
+
new g_Menu; // Переменная обработки главного меню
new g_Votes[3]; // Store Yes votes at 1, No at 2
+
new g_Votes[3]; // Сохраняем голосования Да как 1, No как 2
 +
 
  
 
public plugin_init()
 
public plugin_init()
 
{
 
{
// Register Our Plugin
+
// Регистрируем ваш плагин
 
register_plugin("Vote Menu","1.0","Freecode");
 
register_plugin("Vote Menu","1.0","Freecode");
 
 
// Register our Change Level vote menu
+
// Регистрируем меню смены карты
 
g_Menu = menu_create("Change Level?","menu_handle");
 
g_Menu = menu_create("Change Level?","menu_handle");
 
 
 
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
 
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
 
 
// Now we need to build our menu
+
// Теперь нам надо создать наше меню
 
build_menu();
 
build_menu();
 
}
 
}
Line 193: Line 197:
 
if( item < 0 ) return PLUGIN_CONTINUE;
 
if( item < 0 ) return PLUGIN_CONTINUE;
 
 
// Get item info
+
// Получаем информацию о пункте
 
new cmd[3];
 
new cmd[3];
 
new access, callback;
 
new access, callback;

Revision as of 04:15, 3 April 2006

Введение

Напишите информацию тут

Урок по созданию меню

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

Заголовочные файлы

Как обычно мы начинаем с добавления необходимых заголовочных файлов

#include <amxmodx>

Глобальные переменные

new g_Menu;	// Переменная обработки главного меню
new g_Votes[3];	// Сохраняем голосования Да как 1, No как 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();
}

Lets break this down.

  • Регистрирует ваш плагин
register_plugin("Vote Menu","1.0","Freecode");
  • g_Menu - Указатель на ваше меню. Это будет установлено после вызова menu_create.
g_Menu = menu_create("Change Level?","menu_handle");
 
//menu_create ( title[], handler[], 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);
}
  • Примечание
    • Как вы можете видеть вместо command[] я казал числа. Это необходимо для более простой идентификации пунктов меню.
    • Я так-же добавил menu_setprop. Это говорит нашему меню что оно не имеет страниц. Для дополнительной информации смотрите в amxconst.inc

Показывает меню голосования

Для того что-бы показать меню мы должны использовать menu_display.

menu_display ( id, menu, page )
  • id - id пользователя которому надо показать это меню.
  • menu - тут указываем хэндл меню которое показываем пользователю.
  • page - какая страница (номер страницы меню) с которой начинаем. Страницы меню начинаются с 0.

Ok теперь посмотрим на наш код.

public startvote(id)
{
	for(new i = 0; i < 33; i++)
	{
		if( is_user_alive(i) )
		{
			menu_display(i, g_Menu, 0);
		}
	}
 
	return PLUGIN_HANDLED;
}
  • Примечание:
    • Используем цыкл для прохождения по всем игрокам и показываем меню тем кто живой.

Обработка выборов меню

Последний этап заключается в обработке выбора меню. Это делается через функцию обработки. Она вызывается каждый раз когда пользователь сделал выбор. Вот 3 переменные которые передаются в функцию.

  • id - id пользователя
  • menu - открытое меню у пользователя
  • item - тут выбор пункта меню пользователем

Далее мы объявляем несколько специальных переменных таких как меню выхода.

#define MENU_EXIT	-3
#define	MENU_BACK	-2
#define MENU_MORE	-1

Теперь нам надо проверить если пункт меню выбран и он не является специальной переменной

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 - the item itself
  • &access - (edit)
  • command[] - (edit)(это то где сохраняются идентификационные номера меню)
  • cmdlen - размер command[]
  • name[] - имя пункта меню
  • namelen - размер name[]
  • &callback - (edit)

После того как мы получили информацию о пуектах меню, надо взять из command[] номера выбранных меню(это должно быть 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;
}

Зевершение

Это конец. Вы завершили Урок по созданию меню. Используя новую систему меню можно создать более удобное управление. В следующем уроке вы увидите более сложную систему меню которая будет использовать callbacks, уничтожение меню и создание. Вот код который должен получится посли всех действий.

#include <amxmodx>
 
new g_Menu;	// Переменная обработки главного меню
new g_Votes[3];	// Сохраняем голосования Да как 1, No как 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();
}
 
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;
 
	// Получаем информацию о пункте
	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;
}