Меню сайта    
Главная страница Каталог файлов Каталог статей ЗАБИТЬ CW Cостав КлАнА Мониторинг Новости Форум Поиск Заявка на вступление в клан

Counter Strike 1.6

Cкачать Counter-Strike 1.6 Модели Игроков CS 1.6 Модели Оружия CS 1.6 Программы CS 1.6 Темы меню CS 1.6 Логотипы CS 1.6 Спрайты CS 1.6 Карты CS 1.6 Патчи CS 1.6 Боты CS 1.6 Моды CS 1.6 Читы CS 1.6

Сервер CS 1.6

Готовые сервера Программы Античиты Плагины Карты Боты Моды

Помощь по CS 1.6

Как создать сервер ? Как быть с динамическим IP ? Делаем плагин для AMXMods Установка плагинов Делаем демки HLTV
CW клана    
Победы
Победы(17)

Поражения
Поражения(2)


Забить cw

Реклама    



Делаем плагин для amxmodx

Итак, извлекаем содержимое архива 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 <amxmodx />
#include <amxmisc />
#include <fun />


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

Далее видим

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, добавив туда строку makeserv_plugin_me.amxx

Скачать с LEtitbit "makeserv_plugin_me.amxx"

Всё, можете запускать сервер и проверять работу своего плагина :)
Форма входа
Местное время
Поиск по сайту
Сервер КЛаНА
Мини-чат
Счетчик    
Graffiti Decorations(R) Studio (TM) Site Promoter

Счётчик тиц pr продвижение сайтов
BIGwebs.ru-ТОП раскрутка раскрутка сайтов. Все для CS сайтов и системы uCoz
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Comments: 294
Forum: 15/75
News: 3
Downloads: 73
Publisher: 2

Кто нас сегодня посетил
Design by Stalker
Все права защищены. При Коровании материалов, ссылка на сайт ОБЯЗАТЕЛЬНА! © 2024
Хостинг от uCoz