Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Но в этой теме, я попытаюсь дать все что нужно человеку (не знающем ничего по этой теме).
[align=center]И так, для начала давайте разберем из чего же состоит само меню сервера.[/align]
#include <amxmodx>
#include <cstrike>
#include <colorchat>
#define PLUGIN "MyFirstMenu"
#define VERSION "1.0"
#define AUTHOR "foxmits"
public plugin_init()
{
register_clcmd("server_menu", "server_menu")
}
public server_menu(id)
{
new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")
menu_additem(i_Menu, "\wКоманда", "1", 0)
menu_additem(i_Menu, "\wКоманда", "2", 0)
menu_additem(i_Menu, "\wКоманда", "3", 0)
menu_addblank(i_Menu, 0)
menu_additem(i_Menu, "\wВыход", "0", 0)
menu_setprop(i_Menu, MPROP_PERPAGE, 0)
menu_display(id, i_Menu, 0)
}
public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Key = str_to_num(s_Data)
switch(i_Key)
{
case 1:
{
client_cmd(id, "Команда")
}
case 2:
{
client_cmd(id, "Команда")
}
case 3:
{
client_cmd(id, "Команда")
}
case 0:
{
menu_destroy(menu)
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
-------------------------------------------------------------------------------------------------------------------------------
ЦВЕТ - подключение нужных нам библиотек и регистрация автора и версии плагина.
ЦВЕТ - регистрация команды для вызова меню и функции в её вызова.
register_clcmd("server_menu", "server_menu") - команда для открытия меню
register_clcmd("server_menu", "server_menu") - название функции, отвечающей за отрисовку меню и регистрацию пунктов в меню (об этом далее)
ЦВЕТ - Регистрация самого меню, его название, кол-во пунктов, их значение и цвет.
ЦВЕТ - Описание функций меню, выполнение действий при выборе определенного пункта.
-------------------------------------------------------------------------------------------------------------------------------
[align=center]И так все что вам нужно чтобы создать меню это скопировать текст приведенный ниже[/align]
[pawn]
- #include <amxmodx>
- #include <cstrike>
- #include <colorchat>
- #define PLUGIN "MyFirstMenu"
- #define VERSION "1.0"
- #define AUTHOR "foxmits"
- public plugin_init()
- {
- register_clcmd("server_menu", "server_menu")
- }
- public server_menu(id)
- {
- new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")
- menu_additem(i_Menu, "\wТекст", "1", 0)
- menu_additem(i_Menu, "\wТекст", "2", 0)
- menu_additem(i_Menu, "\wТекст", "3", 0)
- menu_addblank(i_Menu, 0)
- menu_additem(i_Menu, "\wВыход", "0", 0)
- menu_setprop(i_Menu, MPROP_PERPAGE, 0)
- menu_display(id, i_Menu, 0)
- }
- public menu_handler(id, menu, item)
- {
- if (item == MENU_EXIT)
- {
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- new s_Data[6], s_Name[64], i_Access, i_Callback
- menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
- new i_Key = str_to_num(s_Data)
- switch(i_Key)
- {
- case 1:
- {
- }
- case 2:
- {
- }
- case 3:
- {
- }
- case 0:
- {
- menu_destroy(menu)
- }
- }
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
[align=center]Каркас меню готов, нужно всего лишь изменить значения на нужные вам[/align]
[align=center]1.)[/align]
register_clcmd("*", "server_menu")
* - команда, любая, на ваш выбор для вызова вашего меню. имеется ввиду команда, для вызова меню, т.е. та команда которую игроку нужно написать в консоле для вызова меню.
Выше, меню откроется только если команда написана в консоле, чтобы оно открывалось при написание текста в чате нужно сделать так:
register_clcmd("say *", "server_menu")
[align=center]2.)[/align]
new i_Menu = menu_create("*", "menu_handler")
* - название меню, любое. Название можно сделать цветным, как и пункты в меню (об этом ниже)
[align=center]3.)[/align]
menu_additem(i_Menu, "Текст", "1", 0)
menu_additem(i_Menu, "Текст", "2", 0)
menu_additem(i_Menu, "Текст", "3", 0)
Текст - Текст, который будет виден игроку, вообщем название вашего пункта
1 - Номер, пункта меню, у каждого пункта свой номер от 1 до 9.
0 - Если 0, то доступно всем пользователям, если 1, то только АДМИНИСТРАТОРАМ.
[align=center]4.)[/align]
case 1:
{
}
case 2:
{
}
case 3:
{
}
Кто хотя бы немного знает программирование, поймет, что case N { } - это оператор выбора.
case 1:
{
// Функция
}
Значит что при выборе пользователем первого пункта меню, произойдет
//Функция - любая операция на ваш выбор.
Мы рассмотрим на примере reset score.
case 1:
{
client_cmd(id, "say /rs")
}
id - Если 0, то команда обнуления счета произойдет у всех игроков на сервере.
Если id то у конкретного игрока, выбравшего данный пункт.
P.S. На сервер должен быть установлен плагин resetscore.amxx для работы команды /rs
Дальше, думаю понятно...
case 2:
{
// Что произойдет при выборе 2-го пункта меню
}
case 3:
{
// Что произойдет при выборе 3-го пункта меню
}
[align=center]Вот исходник готового меню на 9-ть пунктов, вам нужно будет только изменить значения.[/align]
[pawn]
- #include <amxmodx>
- #include <cstrike>
- #include <colorchat>
- #define PLUGIN "MyFirstMenu"
- #define VERSION "1.0"
- #define AUTHOR "foxmits"
- public plugin_init()
- {
- register_clcmd("server_menu", "server_menu")
- }
- public client_authorized(id)
- {
- client_cmd(id, "bind ^"F3^" ^"server_menu^"")
- }
- public server_menu(id)
- {
- new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")
- menu_additem(i_Menu, "\wНазвание Пункта", "1", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "2", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "3", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "4", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "5", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "6", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "7", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "8", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "9", 0)
- menu_addblank(i_Menu, 0)
- menu_additem(i_Menu, "\wВыход", "0", 0)
- menu_setprop(i_Menu, MPROP_PERPAGE, 0)
- menu_display(id, i_Menu, 0)
- }
- public menu_handler(id, menu, item)
- {
- if (item == MENU_EXIT)
- {
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- new s_Data[6], s_Name[64], i_Access, i_Callback
- menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
- new i_Key = str_to_num(s_Data)
- switch(i_Key)
- {
- case 1:
- {
- //Ваша Функция
- }
- case 2:
- {
- //Ваша Функция
- }
- case 3:
- {
- //Ваша Функция
- }
- case 4:
- {
- //Ваша Функция
- }
- case 5:
- {
- //Ваша Функция
- }
- case 6:
- {
- //Ваша Функция
- }
- case 7:
- {
- //Ваша Функция
- }
- case 8:
- {
- //Ваша Функция
- }
- case 9:
- {
- //Ваша Функция
- }
- case 0:
- {
- menu_destroy(menu)
- }
- }
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
[align=center]Вызов меню автоматически "биндится" клавишу F3, как только игрок заходит на сервер.[/align]
Клавишу можно изменить:
public client_authorized(id)
{
client_cmd(id, "bind ^"ТУТ ВАША КЛАВИША^" ^"server_menu^"")
}
-------------------------------------------------------------------------------------------------------------------------------
[align=center]Цвета в "Названии Меню" и "Пунктах Меню"[/align]
В системе создания меню существует 4-е цвета.
\r - красный
\w - белый
\d - серый
\y - обычный (стандартный цвет текста в CS)
[align=center]Как использовать?[/align]
new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler") - [Название меню]
menu_additem(i_Menu, "\rОбнулить счет", "1", 0) - Обнулить счет
menu_additem(i_Menu, "\wБан \rИгрока", "2", 0) - Бан Игрока
menu_additem(i_Menu, "\dСмена карты", "3", 0) - Смена карты
Из этого понятно, что бы использовать цвет нужно написать "\wТекст Пробел Ура" и весь текст будет белый
Если написать
"\wВОТ ТАКОЙ ВОТ \rКРАСНЫЙ \wЦвет"
то надпись "ВОТ ТАКОЙ ВОТ" будет белая
"КРАСНЫЙ " красная
"Цвет" сново белая
Надеюсь это понятно.
-------------------------------------------------------------------------------------------------------------------------------
[align=center]Создание Меню Для ВИП[/align]
Что же из себя представляет меню для ВИП, это тоже самое игровое меню, но открыть которое может только игрок с определенным флагом доступа.
a - этот флаг дает иммунитет (против человека с флагом а не могут быть использованы серверные команды kick, ban, slay, slap, он не может быть выкинут за флуд, за высокий пинг и так далее).
b - резервация слота, обычно дают уважаемым игрокам сервера.
c - amx_kick - доступ к команде amx_kick. Дает возможность кикать игроков.
d - amx_ban and amx_unban commands - доступ к команде amx_ban и amx_unban. Соответственно админ имеет возможность как ставить так и снимать баны.
e - amx_slay and amx_slap commands - флаг дает доступ к командам amx_slay и amx_slap. Убить игрока или "подергать" игрока в воздухе.
f - amx_map command - админ имеет доступ к команде amx_map - смена карты на сервере.
g - amx_cvar command - доступ к команде amx_cvar, менять переменные и настройки сервера (не все переменные могут быть доступны). Очень не советую давай этот доступ каждому встречному. Только проверенным людям!
h - amx_cfg command - флаг дает доступ к команде серверных настроек amx_cfg. Давать только проверенным людям!
i - amx_chat and other chat commands - доступ к команде amx_csay, администраторскому чату и другим командам, имеющим отношение к чату.
j - amx_vote and other vote commands - дает админу доступ к командам голосования, и команде amx_vote.k - access to sv_password cvar - доступ к серверной переменной sv_password (работает через команду amx_cvar). Этот флаг так же ставим исключительно проверенным админам.
l - access to amx_rcon command and rcon_password cvar - доступ к переменной RCON пароля amx_rcon и rcon_password (через команду amx_cvar). Управление паролем RCON - этот флаг не давать никому вообще кроме владельца сервера!
m - произвольный уровень доступа A (если на вашем сервере стоят какие-то нестандартные плагины amx, которые требуют эти уровни доступа)
n - произвольный уровень доступа B
o - произвольный уровень доступа C
p - произвольный уровень доступа D
q - произвольный уровень доступа E
r - произвольный уровень доступа F
s - произвольный уровень доступа G
t - произвольный уровень доступа H
u - админ получает доступ к меню управления amxmodmenu
z - флаг обычного пользователя (который не является админом)
b - резервация слота, обычно дают уважаемым игрокам сервера.
c - amx_kick - доступ к команде amx_kick. Дает возможность кикать игроков.
d - amx_ban and amx_unban commands - доступ к команде amx_ban и amx_unban. Соответственно админ имеет возможность как ставить так и снимать баны.
e - amx_slay and amx_slap commands - флаг дает доступ к командам amx_slay и amx_slap. Убить игрока или "подергать" игрока в воздухе.
f - amx_map command - админ имеет доступ к команде amx_map - смена карты на сервере.
g - amx_cvar command - доступ к команде amx_cvar, менять переменные и настройки сервера (не все переменные могут быть доступны). Очень не советую давай этот доступ каждому встречному. Только проверенным людям!
h - amx_cfg command - флаг дает доступ к команде серверных настроек amx_cfg. Давать только проверенным людям!
i - amx_chat and other chat commands - доступ к команде amx_csay, администраторскому чату и другим командам, имеющим отношение к чату.
j - amx_vote and other vote commands - дает админу доступ к командам голосования, и команде amx_vote.k - access to sv_password cvar - доступ к серверной переменной sv_password (работает через команду amx_cvar). Этот флаг так же ставим исключительно проверенным админам.
l - access to amx_rcon command and rcon_password cvar - доступ к переменной RCON пароля amx_rcon и rcon_password (через команду amx_cvar). Управление паролем RCON - этот флаг не давать никому вообще кроме владельца сервера!
m - произвольный уровень доступа A (если на вашем сервере стоят какие-то нестандартные плагины amx, которые требуют эти уровни доступа)
n - произвольный уровень доступа B
o - произвольный уровень доступа C
p - произвольный уровень доступа D
q - произвольный уровень доступа E
r - произвольный уровень доступа F
s - произвольный уровень доступа G
t - произвольный уровень доступа H
u - админ получает доступ к меню управления amxmodmenu
z - флаг обычного пользователя (который не является админом)
Для этого нужно всего лишь при "вызове меню" нужно проверь есть ли у игрока который пытается его открыть нужный флаг доступа, например t - произвольный уровень доступа H.
Чаще всего все вип меню и привилегии дают именно на это "флаг".
И так вот нужная нам функция
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
//Показать игроку меню.
} else {
//Действия если нету нужного флага доступа.
}
Проверка "if(get_user_flags(id) & ADMIN_LEVEL_H)" смотрит есть ли у игрока "ADMIN_LEVEL_H". Если да, то делаются действия в скобках, если нет, то другое действие. Опять же, человек имеющей минимальные знания программирования поймет все очень быстро.
Ниже пример обычного меню, которое откроется только игроку с нужным флагом доступа.
[pawn]
- #include <amxmodx>
- #include <cstrike>
- #include <colorchat>
- #define PLUGIN "MyFirstMenu"
- #define VERSION "1.0"
- #define AUTHOR "foxmits"
- public plugin_init()
- {
- register_clcmd("say /vipmenu", "vip_menu")
- }
- public vip_menu(id)
- {
- if(get_user_flags(id) & ADMIN_LEVEL_F)
- {
- new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")
- menu_additem(i_Menu, "\wНазвание Пункта", "1", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "2", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "3", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "4", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "5", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "6", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "7", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "8", 0)
- menu_additem(i_Menu, "\wНазвание Пункта", "9", 0)
- menu_addblank(i_Menu, 0)
- menu_additem(i_Menu, "\wВыход", "0", 0)
- menu_setprop(i_Menu, MPROP_PERPAGE, 0)
- menu_display(id, i_Menu, 0)
- } else
- {
- ColorChat(id,RED,"^1У тебя нету доступа для входу в ^4[ВИП] ^1меню")
- }
- }
- public menu_handler(id, menu, item)
- {
- if (item == MENU_EXIT)
- {
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- new s_Data[6], s_Name[64], i_Access, i_Callback
- menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
- new i_Key = str_to_num(s_Data)
- switch(i_Key)
- {
- case 1:
- {
- //Ваша Функция
- }
- case 2:
- {
- //Ваша Функция
- }
- case 3:
- {
- //Ваша Функция
- }
- case 4:
- {
- //Ваша Функция
- }
- case 5:
- {
- //Ваша Функция
- }
- case 6:
- {
- //Ваша Функция
- }
- case 7:
- {
- //Ваша Функция
- }
- case 8:
- {
- //Ваша Функция
- }
- case 9:
- {
- //Ваша Функция
- }
- case 0:
- {
- menu_destroy(menu)
- }
- }
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
Функциями может быть что угодно, выдача оружия, жизней, брони, гравитации и т.д.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Про все остальные возможности можно узнать на Вы должны зарегистрироваться, чтобы видеть ссылки. - хороший сайт, есть примеры, все понятно объяснено [P.S. Это не реклама]
Всем "КулПрогерам" просьба не троллить и не говорить что это все гавно и ненужная информация, очень даже нужная, многие школьники понятия не имеют как это делать и платят левым людям деньги, по сути не за что. Моя первая статья, мог где то "накосячить" за это тоже просьба не ругать.
[align=center]Статья подготовлена специально для сайта amx-x.ru.
При копирование материала ссылка на сайт - обязательна![/align]