Свой сервер

Общая статистика ServerPerks для нескольких серверов Killing Floor (ServerPerksHost и FTP)

Почти все кастомные серверы Killing Floor 1 хранят прогресс перков через ServerPerks (мутатор Marco). У владельца нескольких серверов часто возникает задача: игрок прокачался на лёгком сервере и хочет продолжить на сложном с тем же уровнем. Или один сервер для перков 1-7, а второй для 8-40 с лучшим оружием, куда пускают только с 7-го уровня. Для этого у ServerPerks есть удалённая база статистики. Статья основана на руководстве w.a.l с форума killingfloor.ru (2013) с дополнениями Essence, Flame и Proton.

Как хранится статистика

У ServerPerks два файла настроек:

  • ServerPerks.ini — прокачка, магазин, скины, уровни, смайлики;
  • ServerPerksStat.ini — сама статистика игроков. Его мы и вынесем в общую базу.

Ещё два замечания с форума killingfloor.ru:

  • Linux, запуск от root. Если сервер запущен от root, статистика перков хранится в /root/.killingfloor/system/ServerPerksStat.ini. Чтобы не держать сервер под root, создайте отдельного пользователя и дайте ему права на каталог с игрой (Flack, тема «Мутатор ServerPerksV4»).
  • Перенос уровней вручную (например, игрок пришёл с другого сервера). Пусть игрок сначала немного поиграет на сервере, хотя бы карту или волну (зависит от MidGameSaveWaves в ServerPerks.ini), чтобы появилась его запись. Затем найдите её в ServerPerksStat.ini или, при удалённой базе, в Data.ini и впишите нужные значения. Искать лучше по ID, а не по нику: ники могут совпадать (тема «Перки»).

Способ 1: ServerPerksHost

ServerPerksHost — маленькая утилита Marco, которая держит базу статистики и отдаёт её серверам по сети. Есть две версии: консольная ServerPerksHost155.exe (окно видно, сразу понятно, запущена ли база) и ServerPerksHostNW.exe без окон (сделана прежде всего для запуска под Wine на Linux, где консольная версия не работает; останавливается через диспетчер задач). Если одна не запускается, пробуйте другую.

  1. Создайте на машине-хосте отдельную папку и положите туда ServerPerksHost.exe с его настройками.
  2. Перенесите (вырежьте) ServerPerksStat.ini из папки сервера в эту папку.
  3. Запустите утилиту с этим файлом в качестве параметра: проще всего перетащить ServerPerksStat.ini мышью на ServerPerksHost.exe. Появится файл Data.ini — новая база, с которой работает утилита. Внутри по одной записи на SteamID:
[76561199075808484]
ZomboUser=SRVetSupportSpec,28,0,22999,0,0,0,0,0,6,0,0,0,0,0,0,0,0,2,74,0,111,1028,0,0
  1. Настройте утилиту в её Host.ini (пароль обязательно в кавычках):
[General]
Port=6000
Password="5555"
  1. В ServerPerks.ini каждого сервера (этот файл никуда не переносится):
[ServerPerksMut.ServerPerksMut]
RemotePort=6000
bUseRemoteDatabase=True
RemoteDatabaseURL=192.168.0.1
RemotePassword=5555
  • RemotePort — тот же порт, что в Host.ini;
  • bUseRemoteDatabase=True — включить удалённую базу;
  • RemoteDatabaseURL — IP машины, где запущен ServerPerksHost (только IP, без протокола и порта);
  • RemotePassword — пароль из Host.ini.
  1. Удалите ServerPerksStat.ini у всех серверов, запустите ServerPerksHost, затем серверы.

Серверов на одну базу может быть сколько угодно: главное, чтобы параметры подключения во всех ServerPerks.ini совпадали. Чтобы вернуть Data.ini обратно в формат ServerPerksStat.ini, запустите ServerPerksHost.exe с параметром UNDO.

Способ 2: FTP (ServerPerks 7 и новее)

С седьмой версии ServerPerks умеет хранить статистику на обычном FTP-сервере, по файлу SteamID.txt на игрока:

[ServerPerksMut.ServerPerksMut]
bUseRemoteDatabase=True
bUseFTPLink=True
RemoteDatabaseURL=192.168.1.33
RemotePort=21
RemoteFTPUser=User
RemotePassword=Pass
RemoteFTPDir=
FTPKeepAliveSec=120
  • RemoteDatabaseURL — IP или доменное имя FTP-сервера;
  • RemoteFTPDir — пусто для корня или /имя_папки;
  • FTPKeepAliveSec — как часто сервер «пингует» FTP, чтобы держать соединение (рекомендуют 120).

Перенос старой статистики на FTP. Скопируйте ServerPerks, ServerPerks.ini и ServerPerksStat.ini себе в папку с игрой, в ServerPerksStat.ini поставьте bUploadAllStats=True, запустите одиночную игру с модификацией Server Veterancy Handler V7 и дождитесь, пока на FTP появятся файлы игроков. Обратного конвертера из .txt в ServerPerksStat.ini нет.

Исправления в коде FTP-режима

  • Сервер без Steam. Если на машине не запущен и не залогинен Steam, FTP-режим не работает: функция Open требует аутентификации Steam. В классе FTPTcpLink замените DataConnection.Open(A) на DataConnection.OpenNoSteam(A) и Open(SiteAddress) на OpenNoSteam(SiteAddress).
  • FileZilla Server. Статистика сначала пишется во временный файл и потом переименовывается в .txt. FileZilla не даёт переименовать поверх существующего файла и отвечает ошибкой 553. В FTPTcpLink, в обработке ответа 350, отправляйте перед RNTO команду DELE:
case 350: // Rename accepted.
    if( bPostUploadCheck )
    {
        SetTimer(5,false);
        SendFTPLine("DELE "$Left(TempFileName,Len(TempFileName)-4));
        SendFTPLine("RNTO "$Left(TempFileName,Len(TempFileName)-4));
    }

После правок пакет нужно перекомпилировать (см. ucc make) и сменить ему имя, чтобы не было конфликта версий у клиентов.

Дополнения

Веб-топ игроков (Frosty, тема «Топ пользователей»): PHP-скрипт, который показывает статистику из ServerPerksStat.ini на сайте. Настройка:

  1. В файле stats.php в строке 26 ($path = 'C:\KF\system\ServerPerksStat.ini';) укажите свой путь к ServerPerksStat.ini.
  2. В файле top.php в строке 28 (тег <iframe src=... width=1189 height=500 frameborder=0>) пропишите путь до stats.php.
  3. Если игроки не помещаются и появляется боковая полоса прокрутки, увеличьте в той же строке height=500.

Скрипт был незаконченным: у автора не работала сортировка. Для тех, кто хранит статистику в базе ServerPerksDataBase вместо ServerPerksStat.ini, готового варианта в теме не появилось.