Цветное название сервера Killing Floor: ServerColor и ServerColorMut
В браузере серверов Killing Floor название сервера и карты можно раскрасить в любые цвета. Статья собрана по теме «Server Color (Цветное название сервера)» с форума killingfloor.ru (w.a.l, дополнения Flame, 2013), а раздел о русском тексте в сообщениях сервера - по теме «ServerAdsSE на выделенном сервере» (2011).
ServerColor
Мутатор состоит из трёх частей:
ServerColor.exe- программа, в которой набирается название и расставляются цвета;ServerColor.ini- настройки;ServerColor.u- сам пакет.
Порядок действий:
- Запустите
ServerColor.exeи наберите название сервера. Цветовой код можно ставить хоть перед каждой буквой: цвет действует на текст, который идёт после кода. - В
ServerColor.iniвсего две строки. ВServerName=вставьте название, скопированное из программы, а вMapColor=- любой код цвета из той же программы. Это цвет названия карты. - Подключите пакет как серверный актор: в
KillingFloor.ini, в секции[Engine.GameEngine], добавьте строку
ServerActors=ServerColor.ServerColor
Цветовые коды относятся к движку Unreal и работают в любой игре на нём. Их можно вставлять и в другие строки, которые показывает браузер серверов. Например, у автора цветным был AdminEmail= в KillingFloor.ini, а в ServerPerks он раскрасил строку в информации о сервере:
ServerState.ServerInfo.Length = l+1;
ServerState.ServerInfo[l].Key = "Veterancy Handler";
ServerState.ServerInfo[l].Value = "@шш[W.A.L]Perks";
Здесь @шш - цветовой код, набранный в ServerColor.exe; в обычном редакторе он выглядит как набор случайных символов.
Вариант «UT2004 Server Color»
В более ранней теме «colored HostName» на форуме killingfloor.ru (2010) был перевод гайда с форума Tripwire для сборки «UT2004 Server Color», где порядок действий немного другой (Terrorist495):
- Запустите
ServerColor.exe, нажмите кнопку Global в правом верхнем углу и введите имя сервера в текстовом поле ниже. - Выберите цвет на цветовой шкале в самом верху, затем цвет, который будет выставлен в имя сервера, и нажмите кнопку выбора справа от диаграммы цвета. Продолжайте вставлять цвета и нажимать Test - внизу появится предварительный просмотр, - пока не добьётесь нужного результата.
- Нажмите кнопку сохранения, а затем UFile в правом верхнем углу. В папку ServerColor сохранятся три файла:
ServerColor.u,ServerColor.uclиServerColor.ini. Положите все три в папкуSystemсервера. - В секцию
[Engine.GameEngine]файлаKillingFloor.iniдобавьте строку ниже (автор вставил её прямо надServerPackages=Core) и перезапустите сервер:
ServerActors=ServerColor.ServerColorActor
По словам участников, в «Избранном» название тоже отображается в цвете (almazhead), с отображением в Steam у kok-s тоже всё оказалось в порядке, а на GameTracker вместо цветов видны «кракозябры» (GreeN).
Как устроен цветовой код
Если нужного цвета нет в ServerColor.exe, код можно собрать вручную (пояснение Flame): сначала идёт символ с кодом 1B, затем три байта цвета R, G и B. Например, 1B 6D 3E D3 - это цвет с R=6D, G=3E, B=D3. Символы удобно подбирать в любом HEX-редакторе. Тот же приём для названий и описаний мутаторов разобран в статье Создание мутаторов.
ServerColorMut: волна, время и монстры в названии
Встречались серверы, у которых в названии видны время игры, номер волны и число монстров. По просьбе участников Flame написал мутатор ServerColorMut.ServerColorMut: он раскрашивает название сервера и карты и дописывает эту информацию. Переменные задаются в ServerColorMut.ini:
| Переменная | Что задаёт |
|---|---|
ServerName | Цвет и текст названия сервера |
MapColor | Цвет названия карты |
WaveColor | Цвет номера волны (если цвет не задан, номер волны не выводится) |
WavePrefix | Префикс перед номером волны, например Wave= |
TimeColor | Цвет времени с начала игры (если не задан, время не выводится) |
TimePrefix | Префикс перед временем, например Time= |
MonsterColor | Цвет числа оставшихся монстров (если не задан, не выводится) |
MonsterPrefix | Префикс перед числом монстров, например M= |
NotStartedColor | Цвет надписи до начала игры (если не задан, не выводится) |
NotStartedPrefix | Надпись до начала карты, например Waiting Players |
Если ServerName в ini пустой, выводится обычное ServerName из KillingFloor.ini белым цветом. Информация в браузере обновляется примерно раз в 10 секунд. Сам автор называл реализацию черновой: нюансы предлагалось править в классе ServerColorInfo.
Исходный код (три класса):
class ServerColorMut extends Mutator config(ServerColorMut);
var config string ServerName;
var config string MapColor;
var config string WaveColor;
var config string WavePrefix;
var config string TimeColor;
var config string TimePrefix;
var config string MonsterColor;
var config string MonsterPrefix;
var config string NotStartedColor;
var config string NotStartedPrefix;
var ServerColorActor SCA;
function PostBeginPlay()
{
SCA = Spawn(class'ServerColorActor');
}
class ServerColorActor extends Info;
var GameRules GRules;
function PostBeginPlay()
{
GRules = Spawn(class'ServerColorInfo');
if(Level.Game.GameRulesModifiers == none)
Level.Game.GameRulesModifiers = GRules;
else
Level.Game.GameRulesModifiers.AddGameRules(GRules);
super(Actor).PostBeginPlay();
}
class ServerColorInfo extends GameRules;
function GetServerDetails(out GameInfo.ServerResponseLine ServerState)
{
local string sTemp;
local int waveNum;
local int monsterNum;
local int elapsedTime;
local KFGameReplicationInfo KFGRI;
KFGRI=KFGameReplicationInfo(Level.GRI);
waveNum=KFGRI.WaveNumber + 1;
elapsedTime=KFGRI.ElapsedTime;
monsterNum=KFGRI.MaxMonsters;
// Название сервера: если в ini задано, берём цветное оттуда
if(class'ServerColorMut'.default.ServerName != "")
ServerState.ServerName = class'ServerColorMut'.default.ServerName;
else // иначе белым цветом ServerName из KillingFloor.ini
ServerState.ServerName = Level.Game.GameReplicationInfo.ServerName;
// Если задан цвет карты, красим название карты
if(class'ServerColorMut'.default.MapColor != "")
{
sTemp = ServerState.MapName;
if(Left(sTemp, 1) != "")
{
sTemp = class'ServerColorMut'.default.MapColor $ sTemp;
ServerState.MapName = sTemp;
}
}
// Номер волны: цвет + префикс + значение
if(class'ServerColorMut'.default.WaveColor != "")
{
sTemp = class'ServerColorMut'.default.WaveColor$class'ServerColorMut'.default.WavePrefix$waveNum;
if (Level.Game.GetStateName() == 'MatchInProgress')
ServerState.ServerName @=sTemp;
}
// Время с начала карты
if(class'ServerColorMut'.default.TimeColor != "")
{
sTemp = " " $ class'ServerColorMut'.default.TimeColor$class'ServerColorMut'.default.TimePrefix$GetTimeString(elapsedTime);
if (Level.Game.GetStateName() == 'MatchInProgress')
ServerState.ServerName @=sTemp;
}
// Число оставшихся монстров
if(class'ServerColorMut'.default.MonsterColor != "")
{
sTemp = " "$class'ServerColorMut'.default.MonsterColor$class'ServerColorMut'.default.MonsterPrefix$monsterNum;
if (Level.Game.GetStateName() == 'MatchInProgress')
ServerState.ServerName @=sTemp;
}
// Надпись, пока игра не началась
if (class'ServerColorMut'.default.NotStartedColor != "")
{
sTemp = " "$class'ServerColorMut'.default.NotStartedColor$class'ServerColorMut'.default.NotStartedPrefix;
if(Level.Game.GetStateName() != 'MatchInProgress')
ServerState.ServerName @=sTemp;
}
}
function string GetTimeString(int seconds)
{
local int cMinutes,cSeconds;
local string result;
cMinutes=seconds / 60;
cSeconds=seconds % 60;
if(cMinutes<10)
result$="0";
result$=string(cMinutes);
result$=":";
if(cSeconds<10)
result$="0";
result$=string(cSeconds);
return result;
}
Как добавить мутатор на сервер, описано в статье Как добавить мутатор на сервер.
Русский текст в сообщениях сервера (ServerAdsSE)
Мутатор ServerAdsSE выводит игрокам сообщения, например правила сервера. Если писать их в KillingFloor.ini по-русски, в игре вместо букв появляются «иероглифы». Решение из темы «ServerAdsSE на выделенном сервере» (LLIePLLIeHb):
- Сохраните
KillingFloor.iniв кодировке Unicode (UCS-2). - Поставьте файлу атрибут «только чтение». Без него сервер при запуске снова пересохраняет ini в ANSI, и русский текст ломается.
- Когда нужно добавить мутатор или карту, снимите атрибут, запустите сервер, чтобы он сам прописал изменения в ini, затем снова пересохраните файл в Unicode и верните «только чтение».
Изменения через WebAdmin при этом применяются, но после перезапуска сервера пропадают, потому что ini защищён от записи.
Цвет сообщений по центру экрана в ServerAdsSE задаёт строка вида cAdminMsgColor=(B=0,G=0,R=255,A=127).
Установка ServerAdsSE
По теме «Server Ads KF (Авто-сообщения в чате игры)» (kok-s). ServerAdsSE - чат-бот: выводит сообщения сервера в чат и админ-сообщения по центру экрана, настраивается и через веб-админку.
- Папки
ServerAdsSEиwebпереместите в корневую папку сервера,ServerAdsSE.u- вSystem. - В
KillingFloor.ini, секция[Engine.GameEngine], добавьтеServerActors=ServerAdsSE.ServerAdsSE. - В секции
[UWeb.WebServer]добавьте строки ниже. Индекс[2]ставится, если строкиApplicationsиApplicationPathsуже есть.
Applications[2]=ServerAdsSE.WebAdmin
ApplicationPaths[2]=/ServerAdsSE
- Добавьте в
KillingFloor.iniсекцию с сообщениями:
[ServerAdsSE.ServerAdsSE]
bEnabled=True
fDelay=20.000000
sLines[0]=This is the first message!
sLines[1]=And this is the second message!
sLines[2]=#This is an Admin Message in the center of the Screen!
iAdType=0
iGroupSize=1
bWrapAround=True
iAdminMsgDuration=5
cAdminMsgColor=(B=0,G=255,R=0)
Замечания автора: больше 24 сообщений вывести не получилось; админ-сообщения пишутся с символом # в начале; для русских букв KillingFloor.ini нужно сохранить в кодировке UCS-2 Little Endian (w.a.l добавляет, что UTF-8 работать не будет). Цветовые коды из ServerColor.exe (см. выше), по словам w.a.l, работают и в обычных сообщениях ServerAdsSE, но не в админ-сообщениях.