Рейтинг темы:
  • 1 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Написание простого плагина под EventScripts 2.0+
#1
Когда-то играл в PointBlank и заметил интересную вещь - при попадании в голову противнику, выводилось сообщение в центре экрана и также сопровождалось это все голосовым сообщением. Недавно настраивал сервер Counter-Strike: Source и решил написать несложный плагин, который реализует практически идентичную тему. Почему практически, да потому что не нашел возможности вывода графики на экран (в PointBlank сообщение оформлено графически).

Для написания плагина нам потребуется EventScripts 2.0 (если вы скачивали готовый сервер, то он уже установлен и качать вам не понадобится), любой текстовый редактор с поддержкой сохранения файлов в кодировке UTF-8 без BOM. Безусловно, мой выбор пал на лучший редактор Notepad++, который справляется со всеми этими действиями.

Приступим к написанию. Первым делом нужно создать директорию плагина, сам плагин я обозвал как headshot, думаю самое разумное ему название. Создаем директорию по пути:

Цитата:cstrike\addons\eventscripts\headshot\

Теперь внутри директории headshot создайте текстовый файл es_headshot.txt, заметьте, что приставка es_ обязательна для основного файла плагина. Именно его и будет инициализировать сервер при запуске. Открываем es_headshot.txt текстовым редактором и приступаем к написанию необходимого нам события, а событие, которое происходит при попадании пулями по цели называется player_hurt. Описывается оно вот таким способом:

PHP код:
<?php 
// Плагин HeadShot
// Автор PROGRAMMATOR
// (c) 2010 www.zone-game.info

event player_hurt
{

}

Далее нам потребуется узнать куда мы попали, для этого есть константа hitgroup в которой содержится информация об частях тела, в которые попали пули. Ниже я опишу список этих групп:

PHP код:
<?php 
// 1 | голова, шея
// 2 | верхняя часть торса
// 3 | нижняя часть торса | таз
// 4 | левая рука и все ее части
// 5 | правая рука и все ее части
// 6 | левая нога и все ее части
// 7 | правая нога и все ее части

Для того, чтобы получить номер группы, нам необходимо обратиться к константе hitgroup, это все делается с помощью функции event_var(). Смотрим пример ниже:

PHP код:
<?php 
// Плагин HeadShot
// Автор PROGRAMMATOR
// (c) 2010 www.zone-game.info

event player_hurt
{
// проверяем, попали ли мы в голову цели
if (event_var(hitgroup) == 1) do
{

}
}

Как вы смогли заметить из описания групп, в первую входит также и шея, а как всем известно - в шею с одного выстрела не убить и появится некрасивый эффект, напишет что попадание в голову, а на самом деле его не было. Необходимо проверить какой уровень HP (жизней) у цели после попадания нашей пули. Для этого имеется еще одна константа health, в которой содержится информация об уровне жизней игрока. Пишем еще одну проверку:

PHP код:
<?php 
// Плагин HeadShot
// Автор PROGRAMMATOR
// (c) 2010 www.zone-game.info

event player_hurt
{
// проверяем, попали ли мы в голову цели
if (event_var(hitgroup) == 1) do
{
// проверим умерла ли цель от нашего попадания
if (event_var(health) < 1) do
{

}
}
}

Для вывода текста в центр экрана, необходимо использовать метод es_centertell, который позволяет указать кому мы направляем этот текст (в противном случае текст будет писаться у всех). Приводим наш плагин к такому виду:

PHP код:
<?php 
// Плагин HeadShot
// Автор PROGRAMMATOR
// (c) 2010 www.zone-game.info

event player_hurt
{
// проверяем, попали ли мы в голову цели
if (event_var(hitgroup) == 1) do
{
// проверим умерла ли цель от нашего попадания
if (event_var(health) < 1) do
{
// вывод сообщения в центре экрана, который показан только атакующему
es_centertell event_var(attacker) Попадание в голову!
}
}
}

Внимательный сразу заметит, что мы получаем значение константы attacker. В этой константе содержится информация об атакующем (в данном случае это вы). Таким образом, сообщение выводится только вам. Как я и говорил в самом начале темы, здесь мы также рассмотрим, как можно проиграть определенный звук при попадании жертве в голову. Нам потребуется метод es_cexec, позволяющий выполнять клиентские команды от идентификатора игрока и команда playgamesound, которая и проигрывает указанный звук. Пишем далее:

PHP код:
<?php 
// Плагин HeadShot
// Автор PROGRAMMATOR
// (c) 2010 www.zone-game.info

event player_hurt
{
// проверяем, попали ли мы в голову цели
if (event_var(hitgroup) == 1) do
{
// проверим умерла ли цель от нашего попадания
if (event_var(health) < 1) do
{
// вывод сообщения в центре экрана, который показан только атакующему
es_centertell event_var(attacker) Попадание в голову!

// проигрывание звука у определенного игрока (атакующего)
es_cexec event_var(attacker) playgamesound player/bhit_helmet-1.wav
}
}
}

В этом примере я взял стандартный звук, который проигрывается при пробивании защитного шлема. Естественно вы его можете заменить на любой другой, главное, что бы он был в формате .wav. Для загрузки нашего плагина HeadShot, откройте конфигурационный файл сервера server.cfg и впишите в него:

Цитата:es_load headshot

Перезапускайте сервер и тестируйте! Если есть вопросы по плагину или EventScripts в целом, то не стесняемся задаем их в этой теме.

[Изображение: thumb-046F_4BE1D56A.jpg]

Файлы вложений
.txt   es_headshot.txt (Размер: 748 байт / Загрузок: 10)
Ответ
#2
Ozzy предложил установить в качестве звука - голос из Unreal (HeadShot). Я экспортировал из Unreal этот звук, и подогнал его под нужный формат и битрейты. Не забывайте отредактировать сам плагин:

PHP код:
<?php 
// Плагин HeadShot
// Автор PROGRAMMATOR
// (c) 2010 www.zone-game.info

event player_hurt
{
// проверяем, попали ли мы в голову цели
if (event_var(hitgroup) == 1) do
{
// проверим умерла ли цель от нашего попадания
if (event_var(health) < 1) do
{
// вывод сообщения в центре экрана, который показан только атакующему
es_centertell event_var(attacker) Попадание в голову!

// проигрывание звука у определенного игрока (атакующего)
es_cexec event_var(attacker) playgamesound player/headshot.wav
}
}
}

Теперь, чтобы наш звук автоматически загружался каждому игроку, необходимо в секцию загрузок Main Admin Plugin добавить наш звук, в итоге файл cstrike\cfg\mani_admin_plugin\downloads.txt будет следующего содержания:

PHP код:
<?php 
"downloads.txt"
{
"downloads"
{
"HeadShot" "sound/player/headshot.wav"
}
}

Звук прикрепил к сообщению. После загрузки не забудьте разархивировать его в сервер, по пути:

Цитата:cstrike\sound\player\


Файлы вложений
.zip   headshot.zip (Размер: 50.73 KB / Загрузок: 9)
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)