<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/index.php?action=history&amp;feed=atom&amp;title=Ru%3AUsing_New_Menu_System</id>
	<title>Ru:Using New Menu System - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/index.php?action=history&amp;feed=atom&amp;title=Ru%3AUsing_New_Menu_System"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Using_New_Menu_System&amp;action=history"/>
	<updated>2026-07-08T14:14:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Ru:Using_New_Menu_System&amp;diff=6380&amp;oldid=prev</id>
		<title>Simon Logic: New page: Category:Russian Category:Ru:Scripting (AMX Mod X)  = Введение = Это статья поможет вам разобраться в новой системе меню.  = ...</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Ru:Using_New_Menu_System&amp;diff=6380&amp;oldid=prev"/>
		<updated>2008-11-06T10:30:21Z</updated>

		<summary type="html">&lt;p&gt;New page: &lt;a href=&quot;/Category:Russian&quot; title=&quot;Category:Russian&quot;&gt;Category:Russian&lt;/a&gt; &lt;a href=&quot;/Category:Ru:Scripting_(AMX_Mod_X)&quot; title=&quot;Category:Ru:Scripting (AMX Mod X)&quot;&gt;Category:Ru:Scripting (AMX Mod X)&lt;/a&gt;  = Введение = Это статья поможет вам разобраться в новой системе меню.  = ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Russian]]&lt;br /&gt;
[[Category:Ru:Scripting (AMX Mod X)]]&lt;br /&gt;
&lt;br /&gt;
= Введение =&lt;br /&gt;
Это статья поможет вам разобраться в новой системе меню.&lt;br /&gt;
&lt;br /&gt;
= Урок по созданию меню =&lt;br /&gt;
Давайте попробуем воспользоваться новой системмой меню. Мы пройдем через этоу простую инструкцию и создадим простое голосование смены карты.&lt;br /&gt;
&lt;br /&gt;
=== Заголовочные файлы ===&lt;br /&gt;
Как обычно мы начинаем с добавления необходимых заголовочных файлов&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Глобальные переменные ===&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
new g_Menu;	// Переменная обработки главного меню&lt;br /&gt;
new g_Votes[3];	// Сохраняем голосования Да как 1, No как 2&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы создали 2 глобальные переменные. Одна будет содержать указатель на ваше меню, другая будет хранить результаты голосования. Голоса 'За' будут сохранены в g_Votes[1], а 'Против' - в g_Votes[2]. g_Votes[0] - не используется(?).&lt;br /&gt;
&lt;br /&gt;
=== Регистрируем Плагин и Меню ===&lt;br /&gt;
&amp;lt;pawn&amp;gt;&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	// Регистрируем ваш плагин&lt;br /&gt;
	register_plugin(&amp;quot;Vote Menu&amp;quot;,&amp;quot;1.0&amp;quot;,&amp;quot;Freecode&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	// Регистрируем меню смены карты&lt;br /&gt;
	g_Menu = menu_create(&amp;quot;Change Level?&amp;quot;,&amp;quot;menu_handle&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	register_clcmd(&amp;quot;amx_startvote&amp;quot;,&amp;quot;startvote&amp;quot;,ADMIN_CFG,&amp;quot;Gaben&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	// Теперь нам надо создать наше меню&lt;br /&gt;
	build_menu();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lets break this down. &lt;br /&gt;
&lt;br /&gt;
*Регистрирует ваш плагин&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_plugin(&amp;quot;Vote Menu&amp;quot;,&amp;quot;1.0&amp;quot;,&amp;quot;Freecode&amp;quot;);&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*g_Menu - Указатель на ваше меню. Это будет установлено после вызова menu_create.&lt;br /&gt;
&amp;lt;pawn&amp;gt;g_Menu = menu_create(&amp;quot;Change Level?&amp;quot;,&amp;quot;menu_handle&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//menu_create ( title[], handler[], ml=0 )&lt;br /&gt;
//title[] - Заголовок меню&lt;br /&gt;
//handler[] - Эта функция будет вызвана когда будет нажата клавиша в вашем меню.&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Мы добавили эту команду. Она начинает ваше голосование.&lt;br /&gt;
&amp;lt;pawn&amp;gt;register_clcmd(&amp;quot;amx_startvote&amp;quot;,&amp;quot;startvote&amp;quot;,ADMIN_CFG,&amp;quot;Gaben&amp;quot;);&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Это вызов функции. build_menu() функция создает ваше меню.&lt;br /&gt;
&amp;lt;pawn&amp;gt;build_menu();&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создение меню ===&lt;br /&gt;
Конструирование заключается в добавлении пунктов в ваше меню. Прежде чем начали добавлять пункты, мы должны взглянуть на &lt;br /&gt;
menu_additem .&lt;br /&gt;
&amp;lt;pawn&amp;gt;menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )&amp;lt;/pawn&amp;gt;&lt;br /&gt;
* menu - указатель на меню. Это указывает menu_additem меню к которому нужно добавить пункты.&lt;br /&gt;
* const name[] - имя пункта меню. Это то что будет показано в меню.&lt;br /&gt;
* const command[] - информация пункта меню.&lt;br /&gt;
&lt;br /&gt;
Теперь давайте приступим к созданию нашего меню. Как уже говорилось, это простое голосование смены карты. Так что нам надо всего 2 пункта меню. А именно &amp;quot;Да&amp;quot; и &amp;quot;Нет&amp;quot;.&lt;br /&gt;
&amp;lt;pawn&amp;gt;build_menu()&lt;br /&gt;
{&lt;br /&gt;
	menu_additem(g_Menu, &amp;quot;Yes&amp;quot;, &amp;quot;1&amp;quot;);&lt;br /&gt;
	menu_additem(g_Menu, &amp;quot;No&amp;quot;, &amp;quot;2&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	menu_setprop(g_Menu, MPROP_PERPAGE, 0);&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;Примечание&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Как вы можете видеть вместо command[] я указал числа. Это необходимо для более простой идентификации пунктов меню.&lt;br /&gt;
** Я так-же добавил menu_setprop. Это говорит нашему меню что оно не имеет страниц. Для дополнительной информации смотрите в amxconst.inc&lt;br /&gt;
&lt;br /&gt;
=== Показывает меню голосования ===&lt;br /&gt;
Для того что-бы показать меню мы должны использовать menu_display.&lt;br /&gt;
&amp;lt;pawn&amp;gt;menu_display ( id, menu, page )&amp;lt;/pawn&amp;gt;&lt;br /&gt;
* id - id пользователя которому надо показать это меню.&lt;br /&gt;
* menu - тут указываем хэндл меню которое показываем пользователю.&lt;br /&gt;
* page - какая страница (номер страницы меню) с которой начинаем. Страницы меню начинаются с 0.&lt;br /&gt;
&lt;br /&gt;
Ok теперь посмотрим на наш код.&lt;br /&gt;
&amp;lt;pawn&amp;gt;public startvote(id)&lt;br /&gt;
{&lt;br /&gt;
	for(new i = 0; i &amp;lt; 33; i++)&lt;br /&gt;
	{&lt;br /&gt;
		if( is_user_alive(i) )&lt;br /&gt;
		{&lt;br /&gt;
			menu_display(i, g_Menu, 0);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return PLUGIN_HANDLED;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;Примечание:&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Используем цыкл для прохождения по всем игрокам и показываем меню тем кто живой.&lt;br /&gt;
&lt;br /&gt;
=== Обработка выборов меню ===&lt;br /&gt;
Последний этап заключается в обработке выбора меню. Это делается через функцию обработки.&lt;br /&gt;
Она вызывается каждый раз когда пользователь сделал выбор.&lt;br /&gt;
Вот  &amp;lt;b&amp;gt;3&amp;lt;/b&amp;gt; переменные которые передаются в функцию.&lt;br /&gt;
* id - id пользователя&lt;br /&gt;
* menu - открытое меню у пользователя&lt;br /&gt;
* item - тут выбор пункта меню пользователем&lt;br /&gt;
&lt;br /&gt;
Далее мы объявляем несколько специальных переменных таких как меню выхода.&lt;br /&gt;
&amp;lt;pawn&amp;gt;#define MENU_EXIT	-3&lt;br /&gt;
#define	MENU_BACK	-2&lt;br /&gt;
#define MENU_MORE	-1&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нам надо проверить если пункт меню выбран и он не является специальной переменной&lt;br /&gt;
&amp;lt;pawn&amp;gt;if( item &amp;lt; 0 ) return PLUGIN_CONTINUE;&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующим шагом мы получаем информацию о выбранном пункте меню. Все что мы ищем это номер пункта меню. (Да = 1, Нет = 2).&lt;br /&gt;
Для этого надо использовать menu_item_getinfo.&lt;br /&gt;
&amp;lt;pawn&amp;gt;menu_item_getinfo ( menu, item, &amp;amp;access, command[], cmdlen, name[]=&amp;quot;&amp;quot;, namelen=0, &amp;amp;callback )&amp;lt;/pawn&amp;gt;&lt;br /&gt;
* menu - меню в котором находится пункт меню.&lt;br /&gt;
* item - the item itself&lt;br /&gt;
* &amp;amp;access - (edit)&lt;br /&gt;
* command[] - (edit)(это то где сохраняются идентификационные номера меню)&lt;br /&gt;
* cmdlen - размер command[]&lt;br /&gt;
* name[] - имя пункта меню&lt;br /&gt;
* namelen - размер name[]&lt;br /&gt;
* &amp;amp;callback - (edit)&lt;br /&gt;
&lt;br /&gt;
После того как мы получили информацию о пуектах меню, надо взять из command[] номера выбранных меню(это должно быть 1 или 2). &lt;br /&gt;
Теперь надо добавить в g_Votes теми голосами что были сделаны.&lt;br /&gt;
Вот как завершонная функция должна выглядеть:&lt;br /&gt;
&amp;lt;pawn&amp;gt;public menu_handle(id, menu, item)&lt;br /&gt;
{&lt;br /&gt;
	if( item &amp;lt; 0 ) return PLUGIN_CONTINUE;&lt;br /&gt;
	&lt;br /&gt;
	// Get item info&lt;br /&gt;
	new cmd[3];&lt;br /&gt;
	new access, callback;&lt;br /&gt;
	&lt;br /&gt;
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);&lt;br /&gt;
	&lt;br /&gt;
	new iChoice = str_to_num(cmd);&lt;br /&gt;
	&lt;br /&gt;
	g_Votes[iChoice]++;&lt;br /&gt;
	&lt;br /&gt;
	return PLUGIN_HANDLED;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pawn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Завершение ===&lt;br /&gt;
Ну вот и все. Вы завершили Урок по созданию меню. Используя новую систему меню, можно создать более удобное управление. В следующем уроке вы увидите более сложную систему меню, которая будет использовать callbacks, уничтожение меню и его создание. Вот итоговый код, который должен получиться у вас после выполнения всех действий урока.&lt;br /&gt;
&amp;lt;pawn&amp;gt;#include &amp;lt;amxmodx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
new g_Menu;	// Переменная обработки главного меню&lt;br /&gt;
new g_Votes[3];	// Сохраняем голосования Да как 1, No как 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public plugin_init()&lt;br /&gt;
{&lt;br /&gt;
	// Регистрируем ваш плагин&lt;br /&gt;
	register_plugin(&amp;quot;Vote Menu&amp;quot;,&amp;quot;1.0&amp;quot;,&amp;quot;Freecode&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	// Регистрируем меню смены карты&lt;br /&gt;
	g_Menu = menu_create(&amp;quot;Change Level?&amp;quot;,&amp;quot;menu_handle&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	register_clcmd(&amp;quot;amx_startvote&amp;quot;,&amp;quot;startvote&amp;quot;,ADMIN_CFG,&amp;quot;Gaben&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	// Теперь нам надо создать наше меню&lt;br /&gt;
	build_menu();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build_menu()&lt;br /&gt;
{&lt;br /&gt;
	menu_additem(g_Menu, &amp;quot;Yes&amp;quot;, &amp;quot;1&amp;quot;);&lt;br /&gt;
	menu_additem(g_Menu, &amp;quot;No&amp;quot;, &amp;quot;2&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	menu_setprop(g_Menu, MPROP_PERPAGE, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public startvote(id)&lt;br /&gt;
{&lt;br /&gt;
	for(new i = 0; i &amp;lt; 33; i++)&lt;br /&gt;
	{&lt;br /&gt;
		if( is_user_alive(i) )&lt;br /&gt;
		{&lt;br /&gt;
			menu_display(i, g_Menu, 0);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return PLUGIN_HANDLED;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public menu_handle(id, menu, item)&lt;br /&gt;
{&lt;br /&gt;
	if( item &amp;lt; 0 ) return PLUGIN_CONTINUE;&lt;br /&gt;
	&lt;br /&gt;
	// Получаем информацию о пункте&lt;br /&gt;
	new cmd[3];&lt;br /&gt;
	new access, callback;&lt;br /&gt;
	&lt;br /&gt;
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);&lt;br /&gt;
	&lt;br /&gt;
	new iChoice = str_to_num(cmd);&lt;br /&gt;
	&lt;br /&gt;
	g_Votes[iChoice]++;&lt;br /&gt;
	&lt;br /&gt;
	return PLUGIN_HANDLED;&lt;br /&gt;
}&amp;lt;/pawn&amp;gt;&lt;/div&gt;</summary>
		<author><name>Simon Logic</name></author>
		
	</entry>
</feed>