Настройка песочницы Killing Floor
Настройки находятся в файле KillingFloor.ini в секции [KFmod.KFGameType].
Орда мутантов выходит из темноты.
# Основные параметры
- KFGameLength — количество волн:
0— 4 волны;1— 7;2— 10;3— своё число волн - StartingCash — количество денег при заходе на карту (учитывается только при
KFGameLength=3) - MinRespawnCash — минимальное количество денег при возрождении после смерти (учитывается только при
KFGameLength=3) - bUseEndGameBoss —
trueвключает патриарха в конце игры,falseотключает - LobbyTimeout — время (в секундах) задержки в меню перед началом карты
- bEnemyHealthBars —
trueвключает отображение полосок здоровья мобов для всех игроков (учитывается только приKFGameLength=3) - MaxZombiesOnce — максимально возможное число мобов, одновременно находящихся на карте (учитывается только при
KFGameLength=3) - InitialWave — номер конфигурации волны, с которой начнётся игра (учитывается только при
KFGameLength=3) - FinalWave — номер конфигурации волны, которой завершится игра (учитывается только при
KFGameLength=3) - FriendlyFireScale — величина урона игрокам друг другу. Проценты в числовом выражении. Например 100% —
1.0, 10% —0.1
# Дополнительные строки при KFGameLength=3
# MonsterClasses
Мутанты оригинального мода Killing Floor: Клот, Сталкер, Ползун, Блоат, Горфаст, Скрейк, Флешпаунд.
MonsterClasses=(MClassName="KFChar.ZombieClot",Mid="A") — каждая строка описывает монстра, которого можно задействовать в игре:
- MClassName — «имя» моба. Подробнее можно прочитать в соответствующем разделе («Мутанты»)
- Mid — буквенный индекс (регистр значения не имеет), условное обозначение моба в настройках (см. ниже)
# MonsterSquad
MonsterSquad=4A1G — мобы в игре респаунятся группами. Каждая строка определяет состав одной группы. Например 4A1G означает, что в группу входят 4 монстра с индексом «A» и один с индексом «G».
# Waves
Waves[0]=(WaveMask=196611,WaveMaxMonsters=20,WaveDuration=255,
WaveDifficulty=0.000000) — каждая строка задаёт конфигурацию волны.
- [0] — номер волны. Используется в
InitialWaveиFinalWave - WaveMaxMonsters — количество мобов в волне на каждого игрока
text
MonsterSquad=4A
MonsterSquad=4A1G
MonsterSquad=2B
text
0 MonsterSquad=4A
1 MonsterSquad=4A1G
1 MonsterSquad=2B
text
110
Получилось число. Представив, что это двоичное число и преобразовав его в десятичное, мы получим нужное значение WaveMask для конфигурации волны.
Для преобразования систем счисления может быть использован обычный калькулятор Windows:
- Запускаем программу и переходим в режим «инженерный» (Scientific)
- Устанавливаем переключатель на двоичную систему счисления (Bin) и вводим наше число
110 - Устанавливаем переключатель в десятичную систему счисления (Dec) и получаем нужное значение
6. Его и следует записать в WaveMask
Пример: флешпаунды на первой волне
Разбор v_e_r_s_u_s с форума killingfloor.ru (тема «Настройка песочницы», 2011). В стандартном списке флешпаунд есть только в одном отряде, MonsterSquad=1F, 24-м по счёту. Чтобы он появился на волне, этот отряд нужно включить в её WaveMask. Отмечаем единицами нужные отряды (первый отряд — правая цифра): 1-й 4A (четыре клота) и 24-й 1F. Получается двоичное 100000000000000000000001, в десятичной системе 8388609:
Waves[0]=(WaveMask=8388609,WaveMaxMonsters=20,WaveDuration=255,WaveDifficulty=0.000000)
На первой волне пойдут только клоты и флешпаунды в соотношении 4:1. Если после включения песочницы с мутатором вроде FakedPlayers пропали флешпаунды, проверьте, есть ли бит отряда 1F в масках нужных волн.
WaveMask через степени двойки и другие советы
Из тем форума killingfloor.ru «Гейм Тайп или почему бы не воспользоваться поиском», «Песочница на Дедике» и «Песочница»:
- Подсчёт WaveMask. Пронумеруйте строки
MonsterSquadс нуля, как в массиве. Для каждого отряда, который должен идти на волне, возьмите 2 в степени его номера и сложите. Например, чтобы на первой волне шли только отряды 0, 3, 4 и 7: 2^0 + 2^3 + 2^4 + 2^7 = 153, то естьWaves[0]=(WaveMask=153,WaveMaxMonsters=20,WaveDuration=255,WaveDifficulty=0.000000). Стандартная маска первой волны196611= 2^0 + 2^1 + 2^16 + 2^17, то есть отряды 0, 1, 16 и 17. По словам siriushard, в стандартном конфиге можно прописать всего 32 отряда. - В записи
MonsterSquad=4Aчисло - количество мутантов в отряде, буква -MidизMonsterClasses. Вместо буквы можно использовать и символы вроде$или&. - Включение на выделенном сервере. В WebAdmin откройте Default > Game и в Game Length выберите custom: именно custom включает песочницу. Нажмите Accept и перезапустите сервер. Сама песочница настраивается в
killingfloor.ini, WebAdmin только дублирует эти настройки. - Нет хасков. По умолчанию хаска в списке
MonsterClassesпесочницы может не оказаться, его нужно дописать самому:MonsterClasses=(MClassName="KFChar.ZombieHusk",Mid="I"). - Свой геймтайп. Если перенести настройки с клиента на выделенный сервер, а волны не считываются (хотя мобы и отряды читаются), проверьте секцию: при собственном геймтайпе настройки нужно копировать в его секцию, а не в
KFGameType(совет Flame, после него проблема решилась). - В ini нет секции [KFMod.KFGameType]. Из темы «Количество волн - как увеличить ?» на форуме killingfloor.ru: в
KillingFloor.iniсервера (и вDefault.ini) не было ни строкиKFGameLength, ни секции[KFMod.KFGameType]. По словам Flame, у сервера, скачанного через SteamCMD под Linux, эта секция есть вDefault.ini, а под Windows её может не быть; решение — дописать секцию с нужными строками (KFGameLength,FinalWave,Waves[...]и т. д.) вKillingFloor.iniсамому. Там же: если нужно больше волн, чем позволяет песочница (около 15), попробуйте мутатор Survival Endless. - Песочница с клиента на сервер. Из темы «Хорошие хардкорные настройки песочницы»: настройте песочницу в игре через создание сервера, затем найдите в
killingfloor.iniклиента секцию[KFmod.KFGameType](KFGameLength=3,WaveStartSpawnPeriod,StartingCash,MinRespawnCash,bUseEndGameBoss, строкиMonsterSquad=...и т. д.) и замените ею то же самое в серверном конфиге (совет -SR-). Через меню игры в одном отряде нельзя задать больше 9 однотипных мобов; для большего правьте ini. - Порядок отрядов.
MonsterSquad=4E2G— отряд, в котором сразу появляются 4 моба с индексом E и 2 с индексом G и идут к игрокам. Отряды волны появляются по порядку сверху вниз, начиная с первого (верхнего); когда респнутся все, снова с первого (Proton). - Один отряд на большую волну и свой респаун. Из темы «Ограничение групп\монстров\оружия»: если в волне, допустим, 200 мобов, а в отрядах всего один сквад с 5 клотами, этот сквад так и будет ресаться, пока не будут выбиты все 200 (Dr_Killjoy). kok-s предупреждал, что спавн сразу 100-200 клотов на один респ приведёт к вылету игры с ошибкой. Кто хочет полностью настроить респаун мобов, по совету Dr_Killjoy декомпилирует
KFMod, находитkfgametype.uc(класс, отвечающий за тип игры, респаун мобов тоже там) и создаёт на его основе свой геймтайп, где сам прописывает, как ресаются мобы; песочница тогда не нужна. Новый геймтайп указывается в батнике сервера как тип игры вместо старого. - Брут и другие добавленные мобы на версии 1046. Из-за новой системы респавна мутаторы, добавляющие мобов в классическую игру, перестали работать: по словам Dr_Killjoy, Брута теперь можно добавить только через песочницу. В теме «Не возможно поставить custom мобов на v1046» новый класс, вписанный в песочницу через меню, не появлялся в списке для добавления в отряды; Titanishu прописал моба через
KillingFloor.ini: в настройках песочницы он так и не отображался, но всё работало. Dr_Killjoy предлагал также мутатор MonsterConfig.
Песочница во время ивентов
Во время сезонных ивентов (например, Halloween 2013) стандартные зеды в песочнице, прописанные как KFChar.Clot и т.д., не заменялись ивентовыми моделями. На форуме killingfloor.ru для этого использовали мутатор HalloweenFixMut.HalloweenFixMut (Flame): классы в песочнице менять не нужно, KFChar.Clot остаётся как есть.
Рождественских мутантов можно включать и выключать в любое время, прописав их классы в песочнице в KillingFloor.ini (папка System) сервера (форум killingfloor.ru, тема «Старый Новый год в KF»). Новогодние классы:
MonsterClasses=(MClassName="KFChar.ZombieClot_XMas",Mid="A")
MonsterClasses=(MClassName="KFChar.ZombieCrawler_XMas",Mid="B")
MonsterClasses=(MClassName="KFChar.ZombieGoreFast_XMas",Mid="C")
MonsterClasses=(MClassName="KFChar.ZombieStalker_XMas",Mid="D")
MonsterClasses=(MClassName="KFChar.ZombieScrake_XMas",Mid="E")
MonsterClasses=(MClassName="KFChar.ZombieFleshpound_XMas",Mid="F")
MonsterClasses=(MClassName="KFChar.ZombieBloat_XMas",Mid="G")
MonsterClasses=(MClassName="KFChar.ZombieSiren_XMas",Mid="H")
MonsterClasses=(MClassName="KFChar.ZombieHusk_XMas",Mid="I")
Чтобы вернуть обычных, уберите _XMas из имён классов (KFChar.ZombieClot, KFChar.ZombieCrawler и т.д.).
Во время новогоднего ивента та же проблема выглядела так (форум killingfloor.ru, темы «Проблема с запуском песочницы» и «Песочница»): с началом волны лог сервера заполнялся строками ZombieClot playanim with no mesh!, после чего сервер падал, либо мобы не появлялись вовсе (на тестовой карте они были невидимыми и не могли атаковать). Помогла установка на сервер мутатора XMASZombieFixMut (в теме «Песочница» - вместе с KFCharFix). Автор первой темы конфликтов с другими мутаторами не заметил и предупредил: если подключить мутатор к игре со стандартными мобами, вдобавок к ним появятся новогодние зомби.
Стартовые деньги и время торговца без песочницы
Из темы «Настройка сервера» (форум killingfloor.ru, 2013).
В обычном режиме (не песочница) стартовые деньги, минимум денег при возрождении и время между волнами заданы отдельно для каждой сложности:
StartingCashBeginner=300
StartingCashNormal=250
StartingCashHard=250
StartingCashSuicidal=200
StartingCashHell=100
MinRespawnCashBeginner=250
MinRespawnCashNormal=200
MinRespawnCashHard=200
MinRespawnCashSuicidal=150
MinRespawnCashHell=100
TimeBetweenWavesBeginner=90
TimeBetweenWavesNormal=60
TimeBetweenWavesHard=60
TimeBetweenWavesSuicidal=60
TimeBetweenWavesHell=60
Чтобы задать свои значения без песочницы, Flame написал мутатор CashConfigMut (CashConfigMut.CashConfigMut). Значения прописываются в CashConfigMut.ini и действуют на любой сложности:
NewStartingCash- стартовые деньги;NewMinRespawnCash- минимум денег при возрождении;NewTimeBetweenWaves- время торговца.
Мутатор меняет значения через Tick: присвоение через default не срабатывает, потому что KFGameType берёт эти переменные из ini, и ini приоритетнее. Автор проверял его на выделенном сервере и предупреждал, что в одиночной игре он, скорее всего, не сработает.
class CashConfigMut extends mutator Config(CashConfigMut);
var globalconfig int NewStartingCash,NewMinRespawnCash,NewTimeBetweenWaves;
event Tick(float delta)
{
if (
KFGameType(Level.Game)!=none ||
KFGameType(Level.Game).StartingCash>0 ||
KFGameType(Level.Game).MinRespawnCash>0 ||
KFGameType(Level.Game).TimeBetweenWaves>0
)
{
KFGameType(Level.Game).StartingCash=NewStartingCash;
KFGameType(Level.Game).MinRespawnCash=NewMinRespawnCash;
KFGameType(Level.Game).TimeBetweenWaves=NewTimeBetweenWaves;
Disable('Tick');
}
}
defaultproperties
{
NewStartingCash=300
NewMinRespawnCash=250
NewTimeBetweenWaves=90
GroupName="KF-CashConfig"
FriendlyName="CashConfigMut"
Description="CashConfigMut"
bAddToServerPackages=True
}
Если на сервере стоит ServerPerks и нужна своя стартовая сумма, Flame предлагал другой путь: задавать её в классах перков (SRVet* или SRVeterancyTypes), в функции AddDefaultInventory, строкой вида P.PlayerReplicationInfo.Score=2013;.
Патроны на карте сервер не настраивает. Коробки с патронами (KFMod.KFAmmoPickup) расставляет автор карты в редакторе. Во время игры, в зависимости от сложности, часть коробок случайным образом скрывается (переходит в состояние Sleeping), и видимость периодически пересматривается.