Как создать плагин через Amxx Studio
Итак, извлекаем содержимое архива AMXX Studio в папку scripting нашего AMXX-мода и запускаем AMXX-Studio.
Теперь необходимо настроить рабочую среду для себя как можно удобнее. Неплохим вариантом было бы сделать так, чтобы готовые плагины сразу помещались в папку plugins. Для этого жмём Tools, затем Settings. В появившемся окне видим слева структурное дерево, в котором выбираем ветвь Compiller settings. В поле Compiller указываем путь к файлу amxxpc.exe (наш компилятор), который лежит в папке scripting. В Default Output Directory вписываем путь к папке plugins нашего AMXX мода. Настройка завершена, жмём Ок.
Теперь мы можем приступить к написанию скриптов будущих плагинов. Язык, используемый для написания AMX-скриптов, называется Pawn, именно с ним мы и будем работать. Жмём File, New, Plugin. На экране появляется окно для редактирования с текстом:
Сразу следует пояснить что всt это значит. Начнtм с первой строки она ограничена символами /* */ это символические скобки, в которые можно записывать комментарии. Комментарии сохраняются только в скрипте, а при компилировании они просто игнорируются. Следовательно от комментариев только польза.
Далее мы видим строки:
Директивой #include включается определённый модуль для работы с его объявлениями, как в С. Все эти модули хранятся в папке scripting/include. При использовании тех или иных модулей, нужно обязательно учесть, что получившийся в результате плагин будет требовать от пользователя включения этих модулей в файле modules.ini, который лежит в папке configs. Для включения модуля, достаточно раскомментировать соответствующую ему строку.
Следующие три строчки:
Сообщают информацию об имени будущего плагина, его версии и авторе в виде констант. Эти константы в дальнейшем могут использоваться, и далее мы видим:
Итак, мы подошли к первой функции нашего скрипта plugin_init(). Вы, возможно, уже заметили, что все модули, написанные на Pawn, не содержат классов. В тонкости языка мы углубляться не будем, но лишь отметим, что данный язык используется для написания высокопроизводительных и быстродействующих модулей с монолитной структурой. Эти модули затем компиллируются в бинарные файлы. Тем самым обеспечиваются все необходимые условия для максимального быстродействия.
Вернемся к нашей функции plugin_init(). Эту функцию исполняет сервер при старте, либо переходе на следующую карту. В теле функции обязательно должна присутствовать строка:
которая регистрирует плагин в памяти функцией уже другого модуля register_plugin()
О чём говорит строка // Add your code here..., я думаю догадаться можно легко :).
Итак, я пояснил некоторые особенности языка скриптинга амх-мода, теперь можно создать один простой плагин в качестве примера. Этот плагин будет делать игрока бессмертным, в какой-то степени, а именно будет давать 999999 HP к здоровью.
Начнем. Жмем File, New, Plugin.
Сразу после закрывшейся фигурной скобки функции plugin_init() создаем новую функцию:
id, level, cid аргументы функции (параметры), причём эти параметры уже имеет каждый клиент, поэтому их инициализация в теле функции не требуется (инициализация - присвоение начального значения переменной). Эти аргументы уже имеют свои значения, например человек, подключившийся к серверу получает на нем номер id, обычно соответствующий номеру занимаемого им слота (например id = 4), level - уровень привилегий (например level = ADMIN - уровень привилегий администратора), параметр cid нам не нужен, поэтому оставим его без внимания. Эти параметры понадобятся нам для того, чтобы ограничить доступ к функции бессмертия, предоставив его лишь администраторам сервера.
Используем эти параметры в следующей конструкции:
Эта запись читается так: Если игрок не имеет уровень привилегий ADMIN, то прерывание работы плагина и возврат в его начало.
Возврат в начало организуется строкой:
При этом весь код, расположенный ниже, не выполняется.
Применим эту конструкцию к нашей функции:
после строки:
пишем код, который будет выполняться в случае, если игрок - админ. А именно нам необходимо реализовать присвоение 999999 HP. Это делается следующим образом:
В результате мы будем иметь готовую функцию, которая присваивает очень много здоровья игроку
Теперь нужно пояснить все написанное:
Начнем со строки new health[32] - так задается строка в С (как массив из символов, где каждый символ - это его числовой код), имеющая длину 32 символа. Стоит отметить, что символы здесь нумеруются от 0 до 31, а не от 1 до 32. Следующая строка задается также.
Далее функцией read_argv(pos,output[],len) производим чтение данных при вводе с консоли, то есть наша функция будет выполняться консольной командой dodme (user) (health), которую мы позже зарегистрируем, а сейчас нужно понять лишь то, что в строке read_argv(1, name, 31) функция read_argv будет читать имя игрока (user) , распологающееся на первой позиции, которому мы хотим дать много здоровья и заносить его в строку name.
Дале читаем с консоли количество сообщаемого здоровья той же функцией, но уже в строку health и со второй позиции:
Далее видим:
player - это переменная, число неопределённого типа, компилятор сам подбирает для него тип, мы лишь задаем значение переменной. А значением для переменной player будет возвращаемое значение функции cmd_target(id, name, 5).
Эта функция имеет очень важное значение для управления командой. Он позволяет по отрезку из имени игрока определить его id. Например, если ник игрока -=~PRO100Otec ~=-, то достаточно будет написать в консоль godme otec 999999 для того, чтобы этому игроку присвоить много здоровья.
Id игрока, определённый данным методом помещается в переменную player.
Далее строка new hps = str_to_num(health) - тут задается новая переменная hps, которая будет содержать количество здоровья в виде числа (так как при чтении с консоли образуется строка, то её необходимо перевести в число для использования в функции set_user_health(player, health). Перевод строки в число производится функцией str_to_num(str), возвращающим значение строки в виде числа.
Теперь нам остается лишь сделать бессмертным нашего избранника функцией
В конце добавляем return PLUGIN_HANDLED, чтобы прекратилось выполнение плагина. В нашем случае он и без этой строки будет исправно работать, но во многих случаях следует использовать данную конструкцию.
Теперь необходимо зарегистрировать консольную команду godme, которой мы будем добавлять здоровье. Для этого в конец тела метода plugin_init() вписываем строку
название команды задается в кавычках на первой позиции после открытия скобок (оно не обязательно должно совпадать с именем функции, просто в качестве простого примера я решил сделать именно так), далее идет имя функции в кавычках, а затем уровень привилегий level, по которому и идет проверка в теле нашей функции. В нашем случае level = ADMIN_SLAY, то есть каждый админ, имеющий в своих правах директиву 'e' (имеется ввиду директива прав в файле users.ini например "botinok" "12345" "bcdefghijklmnopqrstuvwxy" "a"), отвевающую за slap и slay команды, может иметь право делать бессмертным любого другого игрока.
Осталось лишь подключить используемые модули. Помимо стандартных нужно подключить ещё 2 дополнительных модуля: fun и AMXXmisc, так как метод set_user_health() принадлежит модулю fun, а cmd_access() - AMXXmisc. Для этого запишем в самом верху скрипта
Все, скрипт готов, если вы все делали правильно, то он примет следующий вид:
Теперь жмем кнопку Compile, похожую на зелёный треугольник и наш скрипт превращается в откомпилированный готовый плагин и отправляется в папку plugins.
Нам остается лишь зарегистрировать его в файле plugins.ini, добавив туда строку moi_plugin.amxx
Скачать файл:
Теперь необходимо настроить рабочую среду для себя как можно удобнее. Неплохим вариантом было бы сделать так, чтобы готовые плагины сразу помещались в папку plugins. Для этого жмём Tools, затем Settings. В появившемся окне видим слева структурное дерево, в котором выбираем ветвь Compiller settings. В поле Compiller указываем путь к файлу amxxpc.exe (наш компилятор), который лежит в папке scripting. В Default Output Directory вписываем путь к папке plugins нашего AMXX мода. Настройка завершена, жмём Ок.
Теперь мы можем приступить к написанию скриптов будущих плагинов. Язык, используемый для написания AMX-скриптов, называется Pawn, именно с ним мы и будем работать. Жмём File, New, Plugin. На экране появляется окно для редактирования с текстом:
/* Plugin generated by AMXXX-Studio */
#include
#include
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
}Сразу следует пояснить что всt это значит. Начнtм с первой строки она ограничена символами /* */ это символические скобки, в которые можно записывать комментарии. Комментарии сохраняются только в скрипте, а при компилировании они просто игнорируются. Следовательно от комментариев только польза.
Далее мы видим строки:
#include
#include Директивой #include включается определённый модуль для работы с его объявлениями, как в С. Все эти модули хранятся в папке scripting/include. При использовании тех или иных модулей, нужно обязательно учесть, что получившийся в результате плагин будет требовать от пользователя включения этих модулей в файле modules.ini, который лежит в папке configs. Для включения модуля, достаточно раскомментировать соответствующую ему строку.
Следующие три строчки:
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Admin"Сообщают информацию об имени будущего плагина, его версии и авторе в виде констант. Эти константы в дальнейшем могут использоваться, и далее мы видим:
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
}Итак, мы подошли к первой функции нашего скрипта plugin_init(). Вы, возможно, уже заметили, что все модули, написанные на Pawn, не содержат классов. В тонкости языка мы углубляться не будем, но лишь отметим, что данный язык используется для написания высокопроизводительных и быстродействующих модулей с монолитной структурой. Эти модули затем компиллируются в бинарные файлы. Тем самым обеспечиваются все необходимые условия для максимального быстродействия.
Вернемся к нашей функции plugin_init(). Эту функцию исполняет сервер при старте, либо переходе на следующую карту. В теле функции обязательно должна присутствовать строка:
register_plugin(PLUGIN, VERSION, AUTHOR)которая регистрирует плагин в памяти функцией уже другого модуля register_plugin()
О чём говорит строка // Add your code here..., я думаю догадаться можно легко :).
Итак, я пояснил некоторые особенности языка скриптинга амх-мода, теперь можно создать один простой плагин в качестве примера. Этот плагин будет делать игрока бессмертным, в какой-то степени, а именно будет давать 999999 HP к здоровью.
Начнем. Жмем File, New, Plugin.
Сразу после закрывшейся фигурной скобки функции plugin_init() создаем новую функцию:
godme(id,level,cid){
}id, level, cid аргументы функции (параметры), причём эти параметры уже имеет каждый клиент, поэтому их инициализация в теле функции не требуется (инициализация - присвоение начального значения переменной). Эти аргументы уже имеют свои значения, например человек, подключившийся к серверу получает на нем номер id, обычно соответствующий номеру занимаемого им слота (например id = 4), level - уровень привилегий (например level = ADMIN - уровень привилегий администратора), параметр cid нам не нужен, поэтому оставим его без внимания. Эти параметры понадобятся нам для того, чтобы ограничить доступ к функции бессмертия, предоставив его лишь администраторам сервера.
Используем эти параметры в следующей конструкции:
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLEDЭта запись читается так: Если игрок не имеет уровень привилегий ADMIN, то прерывание работы плагина и возврат в его начало.
Возврат в начало организуется строкой:
return PLUGIN_HANDLEDПри этом весь код, расположенный ниже, не выполняется.
Применим эту конструкцию к нашей функции:
public godme(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
}после строки:
return PLUGIN_HANDLEDпишем код, который будет выполняться в случае, если игрок - админ. А именно нам необходимо реализовать присвоение 999999 HP. Это делается следующим образом:
new health[32]
new name[32]
read_argv(1, name, 31)
read_argv(2,health, 31)
new player = cmd_target(id, name, 5)
new hps = str_to_num(health)
set_user_health (player, hps)
return PLUGIN_HANDLED В результате мы будем иметь готовую функцию, которая присваивает очень много здоровья игроку
public godme(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new health[32]
new name[32]
read_argv(1, name, 31)
read_argv(2,health, 31)
new player = cmd_target(id, name, 5)
new hps = str_to_num(health)
set_user_health (player, hps)
return PLUGIN_HANDLED
}Теперь нужно пояснить все написанное:
Начнем со строки new health[32] - так задается строка в С (как массив из символов, где каждый символ - это его числовой код), имеющая длину 32 символа. Стоит отметить, что символы здесь нумеруются от 0 до 31, а не от 1 до 32. Следующая строка задается также.
Далее функцией read_argv(pos,output[],len) производим чтение данных при вводе с консоли, то есть наша функция будет выполняться консольной командой dodme (user) (health), которую мы позже зарегистрируем, а сейчас нужно понять лишь то, что в строке read_argv(1, name, 31) функция read_argv будет читать имя игрока (user) , распологающееся на первой позиции, которому мы хотим дать много здоровья и заносить его в строку name.
Дале читаем с консоли количество сообщаемого здоровья той же функцией, но уже в строку health и со второй позиции:
read_argv(2,health, 31)Далее видим:
new player = cmd_target(id, name, 5)player - это переменная, число неопределённого типа, компилятор сам подбирает для него тип, мы лишь задаем значение переменной. А значением для переменной player будет возвращаемое значение функции cmd_target(id, name, 5).
Эта функция имеет очень важное значение для управления командой. Он позволяет по отрезку из имени игрока определить его id. Например, если ник игрока -=~PRO100Otec ~=-, то достаточно будет написать в консоль godme otec 999999 для того, чтобы этому игроку присвоить много здоровья.
Id игрока, определённый данным методом помещается в переменную player.
Далее строка new hps = str_to_num(health) - тут задается новая переменная hps, которая будет содержать количество здоровья в виде числа (так как при чтении с консоли образуется строка, то её необходимо перевести в число для использования в функции set_user_health(player, health). Перевод строки в число производится функцией str_to_num(str), возвращающим значение строки в виде числа.
Теперь нам остается лишь сделать бессмертным нашего избранника функцией
set_user_health (player, hps) В конце добавляем return PLUGIN_HANDLED, чтобы прекратилось выполнение плагина. В нашем случае он и без этой строки будет исправно работать, но во многих случаях следует использовать данную конструкцию.
Теперь необходимо зарегистрировать консольную команду godme, которой мы будем добавлять здоровье. Для этого в конец тела метода plugin_init() вписываем строку
register_concmd("godme","godme",ADMIN_SLAY,"godme")название команды задается в кавычках на первой позиции после открытия скобок (оно не обязательно должно совпадать с именем функции, просто в качестве простого примера я решил сделать именно так), далее идет имя функции в кавычках, а затем уровень привилегий level, по которому и идет проверка в теле нашей функции. В нашем случае level = ADMIN_SLAY, то есть каждый админ, имеющий в своих правах директиву 'e' (имеется ввиду директива прав в файле users.ini например "botinok" "12345" "bcdefghijklmnopqrstuvwxy" "a"), отвевающую за slap и slay команды, может иметь право делать бессмертным любого другого игрока.
Осталось лишь подключить используемые модули. Помимо стандартных нужно подключить ещё 2 дополнительных модуля: fun и AMXXmisc, так как метод set_user_health() принадлежит модулю fun, а cmd_access() - AMXXmisc. Для этого запишем в самом верху скрипта
#include
#include
#include Все, скрипт готов, если вы все делали правильно, то он примет следующий вид:
/* Plugin generated by AMXXX-Studio */
#include
#include
#include
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("godme","godme",ADMIN_SLAY,"godme")
}
public godme(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new health[32]
new name[32]
read_argv(1, name, 31)
read_argv(2,health, 31)
new player = cmd_target(id, name, 5)
new hps = str_to_num(health)
set_user_health (player, hps)
return PLUGIN_HANDLED
}Теперь жмем кнопку Compile, похожую на зелёный треугольник и наш скрипт превращается в откомпилированный готовый плагин и отправляется в папку plugins.
Нам остается лишь зарегистрировать его в файле plugins.ini, добавив туда строку moi_plugin.amxx
Скачать файл:
Комментариев 0