Christmas Patriarch

Force Game Start Mutator - Принудительный старт игры

Мутатор автоматически стартует игру (не дожидаясь пока все нажмут “готов”) через определённый интервал времени.

Интервал настраивается в файле 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