Поддержка кириллицы в Killing Floor
Руководство по настройке отображения кириллицы (русского текста) в Killing Floor.
Проблема с отображением кириллицы
В некоторых версиях Killing Floor могут возникать проблемы с отображением кириллицы — вместо русского текста отображаются символы типа ~~~~~ или пустые места.
Решение проблемы
Способ 1: Использование готового патча
Самый простой способ — использовать готовый патч для поддержки кириллицы:
- Скачайте патч для вашей версии игры.
- Распакуйте файлы в папку
Systemигры. - Запустите игру.
Способ 2: Ручная настройка
Если вы хотите настроить поддержку кириллицы вручную:
-
Установите язык игры на любой кроме русского в библиотеке Steam (например: правой кнопкой мыши по игре → Свойства → Язык → English).
-
Откройте папку
Systemклиента игры. -
Отредактируйте следующие файлы:
Engine.intGUI2K4.intKFMod.intROEngine.intUnrealGame.intXInterface.int
-
В каждом файле найдите строки с настройками шрифтов и замените их согласно инструкциям для вашей версии игры.
Настройка шрифтов
Для правильного отображения кириллицы необходимо использовать шрифты, поддерживающие кириллические символы. Обычно используются:
- Arial
- Tahoma
- Verdana
Проверка работы
После применения патча или настройки:
- Запустите игру.
- Проверьте отображение текста в меню.
- Проверьте отображение текста в игре.
- Если проблемы остались, проверьте, что все файлы были изменены правильно.
Важные замечания
- Делайте резервные копии файлов перед изменением.
- После обновления игры патч может потребоваться установить заново.
- Некоторые серверные модификации могут влиять на отображение текста.
Кракозябры в русских никах на сервере (для админов)
По темам «Исправление русских имен» и «Фиксируем ники игроков» на форуме killingfloor.ru. Flame выяснил своим мутатором, что из Steam в игру русские буквы ника приходят с другими кодами, и составил таблицу соответствия: например, «а» приходит как 176 и должна стать 224, «А» — 1106 и 192, «я» — 1039 и 255 (полная таблица в теме). Нужный символ получается из кода по таблице плюс сдвиг на 848. Чтобы не плодить мутаторы, он правил ServerPerks: в конце ServerPerksMut.ServerStStats.PostBeginPlay дописывается
PlayerOwner.PlayerReplicationInfo.PlayerName = ConvertSteamString(PlayerOwner.PlayerReplicationInfo.PlayerName);
и функция конвертации:
function string ConvertSteamString(string msg)
{
local int i;
local string tmp;
local string result;
local int code;
tmp=msg;
for(i=0; i<Len(msg); i++)
{
code=Asc(tmp);
if(code==1056 || code==1057)
{
tmp=Mid(tmp,1);
continue;
}
code=FixCode(code);
if(code>167)
code+=848;
if(i==0) result=Chr(code);
else result=result$Chr(code);
tmp=Mid(tmp,1);
}
return result;
}
FixCode(code) — это switch по той же таблице (case 176: return 224;, case 1106: return 192; и т.д.). khasky в той же теме выложил альтернативу — функцию GetLatinCharFromCyrillic, переводящую русские буквы в транслит (например, case 1920: case 1072: return "a";); по его предположению (сам он оговорился, что может ошибаться), на пиратских клиентах кодировка символов другая.
Ограничения из обсуждения: у kok-s ник игрока после захода сначала исправлялся на читаемый, а потом превращался в ~~~~~; на клиенте 1065 у одного админа конвертация не заработала (у Flame работала). Владельцам серверов с удалённой базой данных Flame отдельно предупреждает, что ServerPerksHost.exe не терпит кириллицу: зафиксированный кириллический ник при следующем заходе игрока превратится в кракозябру. Для них он сделал мутатор RestoreFixedNameMut (вместе с FixSteamRusNameMut): он фиксирует в RestoreFixedNameBase.ini на сервере ники всех, кто остался до конца карты.
Фиксация ника. Во второй теме Flame закреплял ник игрока навсегда: в ServerPerksMut.StatsObject добавляется var config string uname; (для удалённой базы данных поле uname нужно ещё дописать в GetSaveData() и разбор в SetSaveData()), а ник записывается после окончания карты (победы или поражения) только тем, кто в этот момент на сервере. Сменить зафиксированный ник может только админ в базе данных.
Дополнения
Кириллица в WebAdmin (тема «WebAdmin и кириллица», Flame). Мутатор WebAdminCyrillicMut подменяет пару классов веб-админки (XWebAdmin.UTServerAdmin получает свои QueryHandlerClasses[0] и SpectatorType), после чего по-русски можно и писать, и читать в веб-админке под Windows и Linux. Текст сдвигается на 848 кодов символов в зависимости от того, кто отправляет и кто получает сообщение. В ini одна настройка isWindows: true для сервера на Windows, иначе false. Мутатор настраивался под такую кодировку в UWeb.int:
[WebResponse]
CharSet="windows-1251"
У одного админа после установки всё стало кракозябрами; причина оказалась в опечатке в UWeb.int (CharSet="Windovs-1251"), из-за которой веб-админка откатывалась на кодировку по умолчанию iso-8859-1. После исправления всё заработало.