Пятница, 13.02.2026, 19:59
Меню сайта
Категории раздела
Делаем плагин для AMXMods [1]
Мини-чат
200
Наш опрос
Чем вы предпочитаете обороняться?
Всего ответов: 5
Главная » Статьи » Делаем плагин для AMXMods

В разделе материалов: 1
Показано материалов: 1-1

так, извлекаем содержимое архива AMX Studio в папку scripting нашего AMXX-мода и запускаем AMXX-Studio.
Теперь необходимо настроить рабочую среду для себя как можно удобнее. Неплохим вариантом было бы сделать так, чтобы готовые плагины сразу помещались в папку 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...
}

Сразу следует пояснить что всё это значит. Начнём с первой строки - она ограничена символами /* */ - это символические скобки, в которые можно записывать комментарии. Комментарии сохраняются только в скрипте, а при компилировании они просто игнорируются. Следовательно от комментариев только польза.
Далее мы видим строки

#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)

смс внутри =)

Делаем плагин для AMXMods | Просмотров: 773 | Добавил: Tpon1k | Дата: 22.02.2010 | Комментарии (0)

Мій Профиль

Гость !



Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!
Поиск
Часи
Календарь
Наш баннер
Мы будем очень благодарны
если вы разместите нашу
кнопку у себя на сайте!


Стастистика
Зарег. на сайте
Всего: 130
Новых за месяц: 0
Новых за неделю: 0
Новых вчера: 0
Новых сегодня: 0
Из них
Администраторов: 3
Гл.Модераторов:
Модераторов: 2
Фотошоперов:
VIP: 0
Друзей: 0
Обычных юзеров: 125
Из них
Парней: 110
Девушек: 18




Онлайн:


Посетители за день:
Друзя сайта

Сайт ms-portal.org.ua



Game-CS-portal.at.ua  © Все права защищены  Бесплатный хостинг uCoz Сайт оптимизирован под разрешение экрана 1280х1024 и браузеры Mozila Firefox