В те времена, когда мне оставалось еще несколько лет до окончания школы, а мой компьютер не тянул Counter-Strike: Source, я играл в CS 1.6. На deathmatch-серверах мне очень нравился один плагин - при убийстве экран на секунду вспыхивал прозрачно-синим цветом. Он был популярным, многие сервера его использовали.

Потом я стал играть в CS:S и обнаружил, что ни на одном сервере такого плагина нет. Это было грустно, но пришлось смириться. Ну а недавно я запустил собственный сервер и подумал, что неплохо было бы иметь у себя такой плагин. Поиск по Гуглу ничего не дал - либо он слишком непопулярный среди игроков в CS:S, либо его еще никто не написал. Поэтому мной было решено написать этот плагин для Sourcemod самостоятельно.

Я боялся, что придется тыкаться в языке SourcePawn, как слепой котенок, но, к счастью, все необходимые функции были найдены в мануалах для начинающих. Начал я с Введения в написание Sourcemod-плагинов, где рассказывается о структуре кода плагина и базовых командах, там же было обнаружено нужное мне событие для получения информации о смерти игрока. С помощью Аквы среди пользовательских сообщений была найдена функция для затемнения экрана пользователя выбранным цветом. Также она есть в библиотеке стоковых функций SMLIB, в идеале можно просто ее подключить и прописать в коде только вызов с параметрами, но у меня ничего не получилось - компилятор кушать этот вызов отказался напрочь. Да и тащить целую библиотеку на сервер ради одной простенькой функции в одном плагине немного слишком.

В общем, осталось только собрать все это дело вместе с параметрами.
#include <sourcemod>

public Plugin:myinfo =
{
name = "Blue Screen of Kill",
author = "johnspade",
description = "The plugin fades the screen to transparent blue for a second when you kill someone",
version = "1.0",
url = "http://johnspade.ru"
}
// Получение события смерти
public OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath);
}
// Функция затемнения
PerformFade(client, duration, const color[4]) {
new Handle:hFadeClient=StartMessageOne("Fade",client)
BfWriteShort(hFadeClient,duration)
BfWriteShort(hFadeClient,0)
BfWriteShort(hFadeClient,(0x0001))
BfWriteByte(hFadeClient,color[0])
BfWriteByte(hFadeClient,color[1])
BfWriteByte(hFadeClient,color[2])
BfWriteByte(hFadeClient,color[3])
EndMessage()
}
// Получение игрока-убийцы, применение к нему функции затемнения
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
new attacker_id = GetEventInt(event, "attacker");
new attacker = GetClientOfUserId(attacker_id);
PerformFade(attacker, 300, {0, 0, 200, 51});
// PerformFade(клиент, продолжительность, {красный, зеленый, синий, прозрачность})
}
Выглядит работа плагина так:
Увидеть эффект вживую можно на моем сервере. Для использования на своем сервере вы можете скачать готовый плагин (положите его в папку cstrike\addons\sourcemod\plugins). Если вас не устраивает цвет, продолжительность или прозрачность вспышки, вы можете отредактировать параметры вызова функции самостоятельно (я указал их в последнем комментарии в коде) и скомпилировать код в онлайн-компиляторе. Если что-то непонятно в коде, можно почитать статьи по ссылкам или задать вопрос в комментариях.

Поиск