Русское сообщество по скриптингу

[TUT] Создание меню для сервера

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

[TUT] Создание меню для сервера

Сообщение foxmits » 13 фев 2013, 20:52

И так, я читал очень много полезных статей по этой теме!

Вы должны зарегистрироваться, чтобы видеть ссылки.

Вы должны зарегистрироваться, чтобы видеть ссылки.

Но в этой теме, я попытаюсь дать все что нужно человеку (не знающем ничего по этой теме).

[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]
  1. #include <amxmodx>

  2. #include <cstrike>

  3. #include <colorchat>

  4.  

  5. #define PLUGIN "MyFirstMenu"

  6. #define VERSION "1.0"

  7. #define AUTHOR "foxmits"

  8.  

  9. public plugin_init()

  10. {

  11.     register_clcmd("server_menu", "server_menu")

  12. }

  13.  

  14. public server_menu(id)

  15. {

  16.     new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")

  17.  

  18.         menu_additem(i_Menu, "\wТекст", "1", 0)

  19.         menu_additem(i_Menu, "\wТекст", "2", 0)

  20.         menu_additem(i_Menu, "\wТекст", "3", 0)

  21.        

  22.         menu_addblank(i_Menu, 0)

  23.         menu_additem(i_Menu, "\wВыход", "0", 0)

  24.        

  25.     menu_setprop(i_Menu, MPROP_PERPAGE, 0)

  26.     menu_display(id, i_Menu, 0)

  27. }

  28.  

  29. public menu_handler(id, menu, item)

  30. {

  31.     if (item == MENU_EXIT)

  32.     {

  33.         menu_destroy(menu)

  34.         return PLUGIN_HANDLED

  35.     }

  36.     new s_Data[6], s_Name[64], i_Access, i_Callback

  37.     menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

  38.     new i_Key = str_to_num(s_Data)

  39.     switch(i_Key)

  40.     {

  41.                 case 1:

  42.         {

  43.            

  44.         }

  45.             case 2:

  46.         {

  47.            

  48.         }

  49.                 case 3:

  50.         {

  51.            

  52.         }

  53.                 case 0:

  54.         {

  55.             menu_destroy(menu)

  56.         }

  57.     }

  58.     menu_destroy(menu)

  59.     return PLUGIN_HANDLED

  60.  }
[/pawn]

[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]
  1. #include <amxmodx>

  2. #include <cstrike>

  3. #include <colorchat>

  4.  

  5. #define PLUGIN "MyFirstMenu"

  6. #define VERSION "1.0"

  7. #define AUTHOR "foxmits"

  8.  

  9. public plugin_init()

  10. {

  11.     register_clcmd("server_menu", "server_menu")

  12. }

  13.  

  14. public client_authorized(id)

  15. {

  16.  

  17. client_cmd(id, "bind ^"F3^" ^"server_menu^"")

  18.  

  19. }

  20.  

  21. public server_menu(id)

  22. {

  23.     new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")

  24.  

  25.         menu_additem(i_Menu, "\wНазвание Пункта", "1", 0)

  26.         menu_additem(i_Menu, "\wНазвание Пункта", "2", 0)

  27.         menu_additem(i_Menu, "\wНазвание Пункта", "3", 0)

  28.         menu_additem(i_Menu, "\wНазвание Пункта", "4", 0)

  29.         menu_additem(i_Menu, "\wНазвание Пункта", "5", 0)

  30.         menu_additem(i_Menu, "\wНазвание Пункта", "6", 0)

  31.         menu_additem(i_Menu, "\wНазвание Пункта", "7", 0)

  32.         menu_additem(i_Menu, "\wНазвание Пункта", "8", 0)

  33.         menu_additem(i_Menu, "\wНазвание Пункта", "9", 0)

  34.        

  35.         menu_addblank(i_Menu, 0)

  36.         menu_additem(i_Menu, "\wВыход", "0", 0)

  37.        

  38.     menu_setprop(i_Menu, MPROP_PERPAGE, 0)

  39.     menu_display(id, i_Menu, 0)

  40. }

  41.  

  42. public menu_handler(id, menu, item)

  43. {

  44.     if (item == MENU_EXIT)

  45.     {

  46.         menu_destroy(menu)

  47.         return PLUGIN_HANDLED

  48.     }

  49.     new s_Data[6], s_Name[64], i_Access, i_Callback

  50.     menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

  51.     new i_Key = str_to_num(s_Data)

  52.     switch(i_Key)

  53.     {

  54.                 case 1:

  55.         {

  56.             //Ваша Функция

  57.         }

  58.                 case 2:

  59.         {

  60.             //Ваша Функция

  61.         }

  62.                 case 3:

  63.         {

  64.             //Ваша Функция

  65.         }

  66.                 case 4:

  67.         {

  68.             //Ваша Функция

  69.         }              

  70.                 case 5:

  71.         {

  72.             //Ваша Функция

  73.         }              

  74.                 case 6:

  75.         {

  76.             //Ваша Функция

  77.         }              

  78.                 case 7:

  79.         {

  80.             //Ваша Функция

  81.         }              

  82.                 case 8:

  83.         {

  84.             //Ваша Функция

  85.         }              

  86.                 case 9:

  87.         {

  88.             //Ваша Функция

  89.         }

  90.                

  91.                 case 0:

  92.         {

  93.             menu_destroy(menu)

  94.         }

  95.     }

  96.     menu_destroy(menu)

  97.     return PLUGIN_HANDLED

  98.  }
[/pawn]

[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 - флаг обычного пользователя (который не является админом)


Для этого нужно всего лишь при "вызове меню" нужно проверь есть ли у игрока который пытается его открыть нужный флаг доступа, например t - произвольный уровень доступа H.
Чаще всего все вип меню и привилегии дают именно на это "флаг".

И так вот нужная нам функция

if(get_user_flags(id) & ADMIN_LEVEL_H)
{
//Показать игроку меню.
} else {
//Действия если нету нужного флага доступа.
}

Проверка "if(get_user_flags(id) & ADMIN_LEVEL_H)" смотрит есть ли у игрока "ADMIN_LEVEL_H". Если да, то делаются действия в скобках, если нет, то другое действие. Опять же, человек имеющей минимальные знания программирования поймет все очень быстро.

Ниже пример обычного меню, которое откроется только игроку с нужным флагом доступа.

[pawn]
  1. #include <amxmodx>

  2. #include <cstrike>

  3. #include <colorchat>

  4.  

  5. #define PLUGIN "MyFirstMenu"

  6. #define VERSION "1.0"

  7. #define AUTHOR "foxmits"

  8.  

  9. public plugin_init()

  10. {

  11.     register_clcmd("say /vipmenu", "vip_menu")

  12. }

  13.  

  14. public vip_menu(id)

  15. {

  16.         if(get_user_flags(id) & ADMIN_LEVEL_F)

  17.     {

  18.     new i_Menu = menu_create("\r[\wНазвание меню\r]", "menu_handler")

  19.  

  20.         menu_additem(i_Menu, "\wНазвание Пункта", "1", 0)

  21.         menu_additem(i_Menu, "\wНазвание Пункта", "2", 0)

  22.         menu_additem(i_Menu, "\wНазвание Пункта", "3", 0)

  23.         menu_additem(i_Menu, "\wНазвание Пункта", "4", 0)

  24.         menu_additem(i_Menu, "\wНазвание Пункта", "5", 0)

  25.         menu_additem(i_Menu, "\wНазвание Пункта", "6", 0)

  26.         menu_additem(i_Menu, "\wНазвание Пункта", "7", 0)

  27.         menu_additem(i_Menu, "\wНазвание Пункта", "8", 0)

  28.         menu_additem(i_Menu, "\wНазвание Пункта", "9", 0)

  29.        

  30.         menu_addblank(i_Menu, 0)

  31.         menu_additem(i_Menu, "\wВыход", "0", 0)

  32.        

  33.     menu_setprop(i_Menu, MPROP_PERPAGE, 0)

  34.     menu_display(id, i_Menu, 0)

  35.         } else

  36.         {

  37.         ColorChat(id,RED,"^1У тебя нету доступа для входу в ^4[ВИП] ^1меню")

  38.         }

  39. }

  40.  

  41. public menu_handler(id, menu, item)

  42. {

  43.     if (item == MENU_EXIT)

  44.     {

  45.         menu_destroy(menu)

  46.         return PLUGIN_HANDLED

  47.     }

  48.     new s_Data[6], s_Name[64], i_Access, i_Callback

  49.     menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

  50.     new i_Key = str_to_num(s_Data)

  51.     switch(i_Key)

  52.     {

  53.                 case 1:

  54.         {

  55.             //Ваша Функция

  56.         }

  57.                 case 2:

  58.         {

  59.             //Ваша Функция

  60.         }

  61.                 case 3:

  62.         {

  63.             //Ваша Функция

  64.         }

  65.                 case 4:

  66.         {

  67.             //Ваша Функция

  68.         }              

  69.                 case 5:

  70.         {

  71.             //Ваша Функция

  72.         }              

  73.                 case 6:

  74.         {

  75.             //Ваша Функция

  76.         }              

  77.                 case 7:

  78.         {

  79.             //Ваша Функция

  80.         }              

  81.                 case 8:

  82.         {

  83.             //Ваша Функция

  84.         }              

  85.                 case 9:

  86.         {

  87.             //Ваша Функция

  88.         }

  89.                

  90.                 case 0:

  91.         {

  92.             menu_destroy(menu)

  93.         }

  94.     }

  95.     menu_destroy(menu)

  96.     return PLUGIN_HANDLED

  97.  }
[/pawn]

Функциями может быть что угодно, выдача оружия, жизней, брони, гравитации и т.д.

Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Вы должны зарегистрироваться, чтобы видеть ссылки.

Про все остальные возможности можно узнать на Вы должны зарегистрироваться, чтобы видеть ссылки. - хороший сайт, есть примеры, все понятно объяснено [P.S. Это не реклама]

Всем "КулПрогерам" просьба не троллить и не говорить что это все гавно и ненужная информация, очень даже нужная, многие школьники понятия не имеют как это делать и платят левым людям деньги, по сути не за что. Моя первая статья, мог где то "накосячить" за это тоже просьба не ругать.

[align=center]Статья подготовлена специально для сайта amx-x.ru.
При копирование материала ссылка на сайт - обязательна![/align]
С уважением,
Иван Зимин
iwonz.ru
Аватара пользователя
foxmits
 
Сообщения: 110
Зарегистрирован: 13 фев 2013, 20:49
Откуда: Санкт-Петербург
Благодарил (а): 4 раз.
Поблагодарили: 15 раз.
Опыт программирования: Больше трех лет
Языки программирования: HTML, CSS, JS, PHP, PAWN

Re: [TUT] Создание меню для сервера

Сообщение Plrip » 13 фев 2013, 21:30

Как раз таки это всё Вы должны зарегистрироваться, чтобы видеть ссылки. есть.
Мог бы ещё добавить про переключатели, например.

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

Re: [TUT] Создание меню для сервера

Сообщение etkins » 14 мар 2013, 02:38

Здравствуйте сделал меню по вашему примеру.
1. смена карты
2. обнулить счет
3. забанить читера
а в 4 пункте хочу сделать "Меню для VIP". т.е если игрок с флагом t туда нажмет ему откроется другое меню с выбором разных плюшек))) подскажите пожалуйста как мне это реализовать.
Аватара пользователя
etkins
 
Сообщения: 3
Зарегистрирован: 30 мар 2012, 22:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: [TUT] Создание меню для сервера

Сообщение minionn » 18 окт 2013, 23:14

etkins писал(а):Здравствуйте сделал меню по вашему примеру.
1. смена карты
2. обнулить счет
3. забанить читера
а в 4 пункте хочу сделать "Меню для VIP". т.е если игрок с флагом t туда нажмет ему откроется другое меню с выбором разных плюшек))) подскажите пожалуйста как мне это реализовать.

в 4 case создавай новое меню и так же всё делай
Аватара пользователя
minionn
 
Сообщения: 35
Зарегистрирован: 18 авг 2013, 17:38
Благодарил (а): 5 раз.
Поблагодарили: 3 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: [TUT] Создание меню для сервера

Сообщение __valera__ » 21 окт 2013, 22:40

читать не очень удобно...
Лучший по моему мнению хостинг, регаться по реф. ссылке:) Мне за это бонусы дают =Р

Multi Play

IDEAL VIP v3.0
[spoiler]тема[/spoiler]
Аватара пользователя
__valera__
 
Сообщения: 444
Зарегистрирован: 05 сен 2011, 17:55
Благодарил (а): 205 раз.
Поблагодарили: 75 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: [TUT] Создание меню для сервера

Сообщение DeD_B_KeDaX » 25 окт 2013, 18:44

Код: Выделить всё
#include <colorchat>
а зачем он тут?
Furry
Уважаемые, не просите ставить себе спасибо, это ведь так низко.
Аватара пользователя
DeD_B_KeDaX
 
Сообщения: 96
Зарегистрирован: 30 сен 2013, 09:08
Благодарил (а): 8 раз.
Поблагодарили: 11 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: [TUT] Создание меню для сервера

Сообщение Touch Dev1l » 25 окт 2013, 19:37

DeD_B_KeDaX,

[pawn]
  1. ColorChat(id,RED,"^1У тебя нету доступа для входу в ^4[ВИП] ^1меню")

  2.  
[/pawn]
Аватара пользователя
Touch Dev1l
 
Сообщения: 1304
Зарегистрирован: 14 апр 2013, 13:50
Забанен
Благодарил (а): 126 раз.
Поблагодарили: 254 раз.

Re: [TUT] Создание меню для сервера

Сообщение DeD_B_KeDaX » 25 окт 2013, 19:40

Touch Dev1l, тут я видел а в server меню зачем?
Furry
Уважаемые, не просите ставить себе спасибо, это ведь так низко.
Аватара пользователя
DeD_B_KeDaX
 
Сообщения: 96
Зарегистрирован: 30 сен 2013, 09:08
Благодарил (а): 8 раз.
Поблагодарили: 11 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: [TUT] Создание меню для сервера

Сообщение trooooolll » 27 окт 2013, 16:49

Не читабельно
Аватара пользователя
trooooolll
 
Сообщения: 109
Зарегистрирован: 14 янв 2012, 16:55
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6


Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6