Мутаторы и UnrealScript

Как узнать средний уровень перков всех игроков в игре

Арт перка Поддержка Поддержка (Support Specialist) — перк дробовиков и сварки.

function bool TeamIsStrong()
{
    local Controller C;
    local int levelSum;
    local int N;
    for( C = Level.ControllerList; C != None; C = C.nextController )
    {
        if( C.IsA('PlayerController') && C.Pawn!=None && C.PlayerReplicationInfo.PlayerID>0 && C.Pawn.Health>0)
        {
            levelSum+=KFPlayerReplicationInfo(C.PlayerReplicationInfo).ClientVeteranSkillLevel;
            N++;
        }
    }
    if(levelSum/N>=11) return true;
    return false;
}

Если на клиенте, то куда лучше использовать

var() array<PlayerReplicationInfo> PRIArray;

из GameReplicationInfo

Если это какой-то GUI элемент, то можно сделать так

local GameReplicationInfo GRI;
local PlayerReplicationInfo PRI;
GRI = PlayerController(PlayerOwner()).GameReplicationInfo;
for ( i = 0; i < GRI.PRIArray.Length; i++)
{
    PRI = GRI.PRIArray[i];
    ...
}

Если это SRScoreBoard, то там уже есть GRI (получено ещё от прапрапрародителя ScoreBoard из Engine)

Если не GUI, то локальный контроллер можно получить отсюда: Level.GetLocalPlayerController()

Почему на выделенном сервере получается 0.0

Из темы «KFPlayerReplicationInfo» на форуме killingfloor.ru. У Dr_Killjoy подсчёт работал на ждущем сервере, но на выделенном всегда показывал 0.0: функция вызывалась из скорборда, а выполнялась в геймтайпе. Flame пояснял, что если функция вызывается на сервере, а результат нужен клиенту, без репликации не обойтись; на клиенте же лучше брать данные из GRI.PRIArray. Итог, который Dr_Killjoy описал в конце темы: если функция реплицируется, она всегда возвращает нулевое значение, поэтому для вычислений нужно использовать только нереплицируемые функции.

Для справки цепочка наследования: Actor -> Info -> ReplicationInfo -> PlayerReplicationInfo -> TeamPlayerReplicationInfo -> xPlayerReplicationInfo -> KFPlayerReplicationInfo, то есть KFPlayerReplicationInfo — это Actor, и его можно перебирать через DynamicActors.