Добавлен Артте,
опубликован
Содержание:
Для начала краткая инструкция по компилированию плагинов и список линков на полезные ресурсы:
Компиляция
Вы написали плагин и сохранили его. У вас есть файл *.sma. Есть 2 пути компиляции: ручками и через студию. Я предпочитаю студию: заходим в Tools>Settings> |- Compiler. В этой вкладке надо указать 2 пути. К компилятору amxxpc.exe и место, куда складывать готовые плагины; вот как стоит у меня:
****\hlds\cstrike\addons\amxmodx\plugins\ - куда складывать
****\hlds\cstrike\addons\amxmodx\scripting\amxxpc.exe - компилятор
Еще, для удобства, можно там же в настрйоках поставить исполняемый файл контр-страйка hlds.exe. В итоге нажав кнопочку Compile & Start HL через меню, мы поулчим скомпилировавшийся плагин в директорию плагинов, после этого запустится сервер. Минимум лишних движений. Не забудьте прописать свой плагин в addons\amxmodx\configs\plugins.ini
****\hlds\cstrike\addons\amxmodx\plugins\ - куда складывать
****\hlds\cstrike\addons\amxmodx\scripting\amxxpc.exe - компилятор
Еще, для удобства, можно там же в настрйоках поставить исполняемый файл контр-страйка hlds.exe. В итоге нажав кнопочку Compile & Start HL через меню, мы поулчим скомпилировавшийся плагин в директорию плагинов, после этого запустится сервер. Минимум лишних движений. Не забудьте прописать свой плагин в addons\amxmodx\configs\plugins.ini
Линки
Основной сайт со статьями
Раздел на англ. яз.
Раздел на русс. яз.
Содержимое разделов не идентичное!
Раздел на англ. яз.
Раздел на русс. яз.
Содержимое разделов не идентичное!
Для того, чтобы начать писать плагины вам нужно будет скачать вот это. Это - невероятно удобный текстовый редактор, специально оптимизированный под язык Pawn, на котором и пишутся плагины.
Скачав студию, заходим в нее и, если мы имеем представление о том, что такое язык C, открываем мой плагин HealthControl_onlyHG.sma, если нет, то сформируем представление о языке Pawn-бежим сюда и читаем всё от и до. Если не понимаете о чем там пишут ли не знаете английского-закройте эту страницу и откройте через пару лет, предварительно выучив чего не знали. Я буду считать, что вы ознакомились с вышепредложенной страницей и начну с подробного разбора примера, описанного на том же сайте. Вы спросите "зачем разбирать то, что уже там разобрано?", но я вам скажу, что когда читал тот пример, до многого пришлось додумываться самому, да и дальнейшее развитие там не описывается.
Чтож, начнем...
Чтож, начнем...
Весь плагин
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <csx>
#include <fun>
#pragma tabsize 0
#define PLUGIN "Health Control"
#define VERSION "1.0"
#define AUTHOR "Artte@xgm.ru(jabber)"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_hp", "cmd_hp", ADMIN_SLAY, "<target> <amount>")
register_concmd("amx_god", "cmd_god", ADMIN_SLAY, "<target> <0/1>")
}
public cmd_hp(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new Arg1[24]
new Arg2[4]
//Берем аргументы команды из консоли
read_argv(1, Arg1, 23)
read_argv(2, Arg2, 3)
//Конвертируем количество жизней из строки в число
new Health = str_to_num(Arg2)
//Является ли первый символ @ символом?
if (Arg1[0] == '@')
{
new Team = 0
if (equali(Arg1[1], "CT"))
{
Team = 2
} else if (equali(Arg1[1], "T")) {
Team = 1
}
new players[32], num
get_players(players, num)
new i
for (i=0; i<num; i++)
{
if (!Team)
{
set_user_health(players__, Health)
} else {
if (get_user_team(players__) == Team)
{
set_user_health(players__, Health)
}
}
}
} else {
new player = cmd_target(id, Arg1, 1)
if (!player)
{
console_print(id, "Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!", Arg1)
return PLUGIN_HANDLED
} else {
set_user_health(player, Health)
}
}
return PLUGIN_HANDLED
}
public cmd_god(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new Arg1[24]
new Arg2[2]
//Берем аргументы команды из консоли
read_argv(1, Arg1, 23)
read_argv(2, Arg2, 3)
//Является ли первый символ @ символом?
if (Arg1[0] == '@')
{
new Team = 0
if (equali(Arg1[1], "CT"))
{
Team = 2
} else if (equali(Arg1[1], "T")) {
Team = 1
}
new players[32], num
get_players(players, num)
new i
for (i=0; i<num; i++)
{
if (!Team)
{
set_user_godmode(players__, str_to_num(Arg2))
} else {
if (get_user_team(players__) == Team)
{
set_user_godmode(players__, str_to_num(Arg2))
}
}
}
} else {
new player = cmd_target(id, Arg1, 1)
if (!player)
{
console_print(id, "Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!", Arg1)
return PLUGIN_HANDLED
} else {
set_user_godmode(player, str_to_num(Arg2))
}
}
return PLUGIN_HANDLED
}
Разберем код небольшими кусками:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>| это всё включения,
#include <amxmisc> | позволяющие вызывать
#include <csx> | дополнительные функции,
#include <fun> | очень удобно
#pragma tabsize 0 | позволяет избежать некоторых ошибок при компиляции, т.к. сбрасывает все отступы к 0
#define PLUGIN "Health Control" | Имя плагина
#define VERSION "1.0" | Версия
#define AUTHOR "Artte@xgm.ru(jabber)" | Автор
public plugin_init() { | Функция, обязательная для всех плагинов
register_plugin(PLUGIN, VERSION, AUTHOR) | Регистрируем плагин - обязательная процедура
register_concmd("amx_hp", "cmd_hp", ADMIN_SLAY, "<target> <amount>") | а вот это уже наши функции,
register_concmd("amx_god", "cmd_god", ADMIN_SLAY, "<target> <0/1>") | регистрирующие команды для консоли
}
Рассмотрим действие
register_concmd("amx_hp", "cmd_hp", ADMIN_SLAY, "<target> <amount>")
Она регистрирует команду для чата, которая будет вызывать определенные действия:
register_concmd("Команда для чата", "Какую функцию плагина она вызывает", Уровень доступа для использования команды, "Описание команды")
Рассмотрим функцию для установления уровня жизни по частям:
public cmd_hp(id, level, cid)
{
//Тут мы проверяем уровень доступа и корректность введенной команды: cmd_access(id запустившего команду, уровень доступа требуемый, сам еще не разобрался=), число минимально требуемых параметров(САМА КОМАНДА amx_hp ТОЖЕ СЧИТАЕТСЯ ПАРАМЕТРОМ))
//Если проверка не пройдена-завершаем выполнение функции
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
//Создаем новые переменные-массивы, которые будут служить string-переменными дял аргументов
new Arg1[24]
new Arg2[4]
//Берем аргументы команды из консоли(нулевой аргумент-amx_hp)
read_argv(1, Arg1, 23)
read_argv(2, Arg2, 3)
//Конвертируем количество жизней из строки в число
new Health = str_to_num(Arg2)
Рассмотрим следующую часть, однако, я сразу скажу как мы имеем возможность благодаря этому коду задавать параметр кому установить хп: ALL CT T "Ник юзера"
//Является ли первый символ @ символом?
if (Arg1[0] == '@')
{
//Создаем переменную, в которой обозначим команду игроков
new Team = 0
if (equali(Arg1[1], "CT"))//Сравниваем содержимое массива со 2-го номера(0-первый номер) и до конца со строкой "CT"
{
Team = 2
} else if (equali(Arg1[1], "T")) //Аналогично вышесказанному
{
Team = 1
}
//Создаем массив целочисленных и одну целочисленную переменную. В них получаем id всех игроков в массив и кол-во игроков в переменную.
new players[32], num
get_players(players, num)
//Создаем переменную-индекс в технических целях-для цикла
new i
for (i=0; i<num; i++)
{
if (!Team) //Если переменная Team не задана, т.е. имеет стартовое значение-0, то устанавливаем хп всем игрокам(@ALL)
{
set_user_health(players__, Health)
} else {//Или же-проверяем команду, если она совпадает с нашей-выставляем хп
if (get_user_team(players__) == Team)
{
set_user_health(players__, Health)
}
}
}
}
Теперь разберем следующую часть:
else {//если у нас первый символ не @, то мы получаем ник игрока и, следовательно, получаем его id
new player = cmd_target(id, Arg1, 1)
if (!player)//Если игрок не получен
{
console_print(id, "Izvinite, igrok %s ne mojet bit naiden ili ispol'zovan v kachestve ob'ekta!", Arg1)//Пеачатем в консоли вызывавшего команду жалобное сообщение
return PLUGIN_HANDLED//Прекращаем выполение плагина
} else {//Если игрок найден..
set_user_health(player, Health)//Устанавливаем ему хп на значение, полученное из консоли.
}
}
return PLUGIN_HANDLED
}
Команда amx_god сделана ни чуть не сложнее, в ней вам разобраться не составит труда. Если вы с легкостью освоили этот материал-можете взглянуть на полную версию плагина с восстановлением хп при падении. В следующей части мы рассмотрим графические сообщения на экран и таймеры.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
Зевс
15 лет назад
0
маловато про кодинг... нужно побольше примеров... помнится был сервак, писал неплохие вещи =/
0
Артте
15 лет назад
0
ну как бы примеров пока да - мало, я плагин доработаю один и его опишу тут тоже, наверно
0
and_y87
14 лет назад
0
Блин примерчиков бы побольше и про функции побольше бы...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.