Дата: 2014-02-07, 11:44:21
Создание меню. 3 відповідей
  • Група: Користувачі
  • Повідомлень: 10
  • Реєстрація: 2014-02-07
#3774
2014-02-07, 11:44:21


И так начнем:

1) Открываем свой файловый менеджер (Total Commander, Мой Компьютер и тд)
2) Находим нашу игру (допустим C:/Program Files/Games/Valve/CS)
3) Заходим в директорию cstrike/addons/amxmodx/scripting
(Если у вас нет таких папок - установите amxmodx)
4) Создаем новый текстовый файл .sma формата.
5) Открываем (Лучше всего Notepad ++) и начинаем создавать меню:

Первое что понадобится в любом плагине, это подключение библиотек.
1) Пишем на первой строчке:
Код:
#include <"amxmodx"> без кавычек (")
Библиотека "amxmodx" это ядро.

Вторым пунктом мы подключим первую функцию в нашем плагине.
2) Пишем ниже нашей подключенной библиотеки следующее:
Код:
public plugin_init()
{
}
Это функция запускается при старте/рестарте сервера, смене карты.
Т.е все что будет находится в промежутке {....} (от скобки до скобки),
будет выполнятся при старте/рестарте сервера, смене карты.

Третьим пунктом мы создадим функию, которая будет запускатся при входе игрока на сервер.
3) После функции plugin_init пишем следующее:
Код:
public client_putinserver(id)
{
}
Это функция вызывается при входе игрока на сервер.

Четвертым шагом мы создадим функцию для нашего меню.
4) Пишем ниже:
Код:
public new_menu(id)
{
}
То, что выделено красным, можно менять на что вздумается, но слова не должны разделятся пробелом, ставьте нижнее подчеркивание.

Пятый шаг, мы создадим исполняющую функцию для нашего меню
5) Пишем еще ниже:
Код:
public menu_handler(id, menu, item)
{
}
Здесь будут функции к нашим пунктам.

Мы написали все основные функции для нашего меню.
Переходим к заполнению функции.

Находим функцию plugin_init, между скобок делаем пробел:
Код:
public plugin_init()
{

}
Пишем между скобок следующее:
Код:
register_plugin("НАЗВАНИЕ МЕНЮ", "ВЕРСИЯ", "АВТОР")
register_clcmd("menu", "new_menu")
1 командой мы регистрируем меню в моде amxmodx
2 командой мы указываем команду, на которую будет открыватся наше меню
Синим выделена команда, на которую откроется наше меню.
Красным выделена функция нашего меню.

Следующим шагом будет автобинд на кнопку.
Ищем функцию public client_putinserver(id) и пишем между скобок:
Код:
client_cmd(id, "bind ^"F3^" ^"menu^"")
Поясняем:
client_cmd - команда выплнения на стороне клиента
id - выполнение только у того, кто зашел (0 - у всех сразу)
bind F3 menu - команда, которая посылается клиенту
Красным выделена команда, которую можно менять на ту, которую указали в register_clcmd

А теперь самое "вкусное", создаем пункты меню:
Ищем нашу функцию, у меня это public new_menu(id) (у вас может быть другое)
И начинаем писать:
Код:
new menu = menu_create("\rМеню сервера", "menu_handler")

menu_additem(menu, "\wПункт 1","1")
menu_additem(menu, "\wПункт 2","2")
menu_additem(menu, "\wПункт 3","3")

menu_setprop(menu, MPROP_EXITNAME, "Выход")
menu_setprop(menu, MPROP_EXIT,MEXIT_ALL)

menu_display(id,menu,0)
return PLUGIN_HANDLED
1 строкой мы создаем переменную "menu" и указываем Титул меню, а так же указываем функцию, к которой меню будет обращатся при нажатии на пункт.
Синим указана эта команда.

\w - Белый
\r - Красный
\y - Желтый
\g - Серый

2-4 строчками мы указываем пункты в меню. Всего на 1 странице может быть до 7 пунктов. 8 - назад, 9 - вперед, 0 - выход

5-6 строчками мы это и указываем.

Создаем функционал к нашим пунктам.
Ищем функцию menu_handler(id, menu, item)
И заполняем:
Код:
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)

new key = str_to_num(data)

switch(key)
{
case 1:
{
//тут функция к пункту 1
}
case 2:
{
//тут функция к пункту 2
}
case 3:
{
//тут функция к пункту 3
}
}
return PLUGIN_HANDLED
1 строкой мы указываем, что если выбрано "0", то меню нужно закрыть
2,3,4 строки мы регистрируем переменные
А дальше мы указываем наши действия.
Вместо надписей "//тут функция к пунтку N", вы должны написать свою функцию.

Вроде как все.
Сохраняем файл в кодировке UTF-8 без BOM
Запускаем compiler.exe (в папке scripting), ждем, и получаем файл .amxx в папке compiled.

Проверьте свой код:
Код:
#include <amxmodx>

public plugin_init()
{
register_plugin("Name", "Version", "Author")
register_clcmd("menu", "new_menu")
}

public client_putinserver(id)
{
client_cmd(id, "bind ^"F3^" ^"menu^"")
}

public new_menu(id)
{
new menu = menu_create("\rМеню сервера", "menu_handler")

menu_additem(menu, "\wПункт 1","1")
menu_additem(menu, "\wПункт 2","2")
menu_additem(menu, "\wПункт 3","3")

menu_setprop(menu, MPROP_EXITNAME, "Выход")
menu_setprop(menu, MPROP_EXIT,MEXIT_ALL)

menu_display(id,menu,0)
return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)

new key = str_to_num(data)

switch(key)
{
case 1:
{
client_cmd(id, "1")
}
case 2:
{
client_cmd(id, "2")
}
case 3:
{
client_cmd(id, "3")
}

}
return PLUGIN_HANDLED
}
Update:

Если нам захотелось сделать надпись сверху, делаем следующее:

После всех #include пишем new cvar_showhudmsg
Это мы зарегистрировали новую переменную (в данном случае новый квар)

Ищем функцию public plugin_init()
Добавляем в нее следующую строку:
cvar_showhudmsg = register_cvar("show_hudmsg", "1");
Этой строчкой мы сделали новый квар, тоесть команду в консоли (1 - включено, 0 - выключено)

Теперь ищем функцию public client_putinserver(id)
После добавляем следующее:

if(get_pcvar_num(cvar_showhudmsg))
set_task(1.0, "task_hudmsg", id, _, _, "b")

Тут мы задаем, что если квар (show_hudmsg) равен 1, то идет активация task через 1 секунду
Красным выделено время, через которое появится наша надпись.

И теперь заключительный шаг:
Делаем новую функцию:
public task_hudmsg(id)
{
}

В ней пишем следующее:

set_hudmessage(0, 255, 0, 0.75, 0.0, 0, 6.0, 12.0)
show_hudmessage(id, "Тут наш текст")

Поясняем:
Red - Это кол-во красного цвета в сообщении (от 0 до 255)
Green - Это кол-во зеленого цвета в сообщении (от 0 до 255)
Blue - Это кол-во синего цвета в сообщении (от 0 до 255)
Yellow - Это позиция X (Горизонталь)
Orange - Это позиция Y (Вертикаль)

После этого у нас появится надпись.
  • Група: Користувачі
  • Повідомлень: 1
  • Реєстрація: 2013-04-27
#3814
2014-02-16, 14:27:15
Спасибо, пригодится)) Выложи еще пару статей на тему скриптинга
  • Група: Клієнти
  • Повідомлень: 147
  • Реєстрація: 2012-05-20
#3820
2014-02-17, 17:46:15
Вылаживай когда обновят хостинг до v3.
Сейчас ничего не понятно.

Увійдіть або зареєструйтесь для спілкування на форумі

Вгору