Общая статистика 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, где консольная версия не работает; останавливается через диспетчер задач). Если одна не запускается, пробуйте другую.
- Создайте на машине-хосте отдельную папку и положите туда
ServerPerksHost.exeс его настройками. - Перенесите (вырежьте)
ServerPerksStat.iniиз папки сервера в эту папку. - Запустите утилиту с этим файлом в качестве параметра: проще всего перетащить
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
- Настройте утилиту в её
Host.ini(пароль обязательно в кавычках):
[General]
Port=6000
Password="5555"
- В
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.
- Удалите
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 на сайте. Настройка:
- В файле
stats.phpв строке 26 ($path = 'C:\KF\system\ServerPerksStat.ini';) укажите свой путь кServerPerksStat.ini. - В файле
top.phpв строке 28 (тег<iframe src=... width=1189 height=500 frameborder=0>) пропишите путь доstats.php. - Если игроки не помещаются и появляется боковая полоса прокрутки, увеличьте в той же строке
height=500.
Скрипт был незаконченным: у автора не работала сортировка. Для тех, кто хранит статистику в базе ServerPerksDataBase вместо ServerPerksStat.ini, готового варианта в теме не появилось.