Force Game Start Mutator - Принудительный старт игры
Мутатор автоматически стартует игру (не дожидаясь пока все нажмут "готов") через определённый интервал времени.
Сетка выбора персонажа в Killing Floor.
Интервал настраивается в файле ForceGameStartMut.ini
(параметр waitingInterval в секундах)
Добавлять в виде ForceGameStartMut.ForceGameStartMut
class ForceGameStartMut extends Mutator config(ForceGameStartMut);
var config int waitingInterval;
var int startWaiting;
var bool firstPlayerArrived;
function PostBeginPlay()
{
startWaiting = Level.TimeSeconds;
firstPlayerArrived = false;
SetTimer(5.0, true);
}
function Timer()
{
local int playersN;
// Проверяем состояние игры. Если мы не находимся в ожидании старта, то выходим.
if (!Level.Game.bWaitingToStartMatch)
return;
// Проверим, не появились ли игроки. При появлении одного игрока таймер сбрасывается.
playersN = PlayersNumber();
if (playersN == 0)
return;
if (playersN > 0 && !firstPlayerArrived)
{
firstPlayerArrived = true;
startWaiting = Level.TimeSeconds;
return;
}
// Ждём, пока не пройдёт waitingInterval секунд после появления первого игрока.
if (Level.TimeSeconds - startWaiting < waitingInterval)
return;
// Начинаем игру
Level.Game.StartMatch();
}
function int PlayersNumber()
{
local int N;
local Controller C;
N = 0;
for (C = Level.ControllerList; C != None; C = C.nextController)
{
if (C.IsA('PlayerController') && C.PlayerReplicationInfo.PlayerID > 0 && C.PlayerReplicationInfo.bWaitingPlayer)
N++;
}
return N;
}
defaultproperties
{
waitingInterval=60
bAddToServerPackages=True
GroupName="ForceGameStartMut"
FriendlyName="ForceGameStartMut"
Description="Forces game start if some players are not ready for a long period of time"
}
Автор: Flame
Скомпилированная версия: https://yadi.sk/d/giSP0sgucjCuF
Переписанная версия: отсчёт после первого «готов»
В теме «Принудительный старт игры» на форуме killingfloor.ru Flame позже переписал мутатор. Главное изменение: обратный отсчёт начинается только тогда, когда хотя бы один игрок нажал «готов». Настройка одна - TimeToWait (время в секундах): если хоть один игрок готов и прошло TimeToWait секунд, игра начинается. По умолчанию 180. Добавлять так же: ForceGameStartMut.ForceGameStartMut.
class ForceGameStartMut extends Mutator config(ForceGameStartMut);
var config int TimeToWait;
var float StartWaiting;
var bool bStartCountDown;
function PostBeginPlay()
{
SetTimer(1.0,true);
SaveConfig();
}
function Timer()
{
local bool bWeHaveReadyPlayers;
//Если игра началась - отключаем таймер
if(!Level.Game.bWaitingToStartMatch)
SetTimer(0.0,false);
//Получим количество готовых к игре игроков
bWeHaveReadyPlayers=WeHaveReadyPlayers();
if(!bWeHaveReadyPlayers)
return;
//Хотя бы один игрок готов играть? Запускаем обратный отсчёт
if(bWeHaveReadyPlayers && !bStartCountDown)
{
bStartCountDown=true;
StartWaiting=Level.TimeSeconds;
return;
}
if(Level.TimeSeconds-StartWaiting>=TimeToWait)
Level.Game.StartMatch();
}
function bool WeHaveReadyPlayers()
{
local Controller C;
for(C=Level.ControllerList;C!=None;C=C.nextController)
{
if (
C.IsA('PlayerController')
&& C.PlayerReplicationInfo.PlayerID>0
&& C.PlayerReplicationInfo.bReadyToPlay
)
{
return true;
}
}
return false;
}
defaultproperties
{
TimeToWait=180
GroupName="ForceGameStartMut"
FriendlyName="ForceGameStartMut"
Description="Forces game start if some players are still not ready for a time period"
}