Проблемы и оптимизация

Поддержка кириллицы в Killing Floor

Руководство по настройке отображения кириллицы (русского текста) в Killing Floor.

Проблема с отображением кириллицы

В некоторых версиях Killing Floor могут возникать проблемы с отображением кириллицы — вместо русского текста отображаются символы типа ~~~~~ или пустые места.

Решение проблемы

Способ 1: Использование готового патча

Самый простой способ — использовать готовый патч для поддержки кириллицы:

  1. Скачайте патч для вашей версии игры.
  2. Распакуйте файлы в папку System игры.
  3. Запустите игру.

Способ 2: Ручная настройка

Если вы хотите настроить поддержку кириллицы вручную:

  1. Установите язык игры на любой кроме русского в библиотеке Steam (например: правой кнопкой мыши по игре → Свойства → Язык → English).

  2. Откройте папку System клиента игры.

  3. Отредактируйте следующие файлы:

    • Engine.int
    • GUI2K4.int
    • KFMod.int
    • ROEngine.int
    • UnrealGame.int
    • XInterface.int
  4. В каждом файле найдите строки с настройками шрифтов и замените их согласно инструкциям для вашей версии игры.

Настройка шрифтов

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

  • Arial
  • Tahoma
  • Verdana

Проверка работы

После применения патча или настройки:

  1. Запустите игру.
  2. Проверьте отображение текста в меню.
  3. Проверьте отображение текста в игре.
  4. Если проблемы остались, проверьте, что все файлы были изменены правильно.

Важные замечания

  • Делайте резервные копии файлов перед изменением.
  • После обновления игры патч может потребоваться установить заново.
  • Некоторые серверные модификации могут влиять на отображение текста.

Кракозябры в русских никах на сервере (для админов)

По темам «Исправление русских имен» и «Фиксируем ники игроков» на форуме 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. После исправления всё заработало.