Christmas Patriarch

Team Killer Kick Mutator. Мутатор Автокик за убийство игроков

Единственная переменная выведена в TeamKillerKickMut.ini файл

MaxAllowedToKill

Если в течении карты убито больше MaxAllowedToKill игроков - идёт кик на сессию

class TeamKillerKickMut extends Mutator config(TeamKillerKickMut);
struct killerStruct
{
    var PlayerController PC;
    var int killed;
};
var array<killerStruct> killers;
var config int MaxAllowedToKill;
function PostBeginPlay()
{
    local TKKickGameRules RulesMod;
    SaveConfig();
    if( RulesMod==None )
        RulesMod = Spawn(Class'TKKickGameRules');
    RulesMod.mut=self;
    if(KFGameType(Level.Game)==None) Destroyed();
    SetTimer(1.0,true);
    Super.PostBeginPlay();
}
function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
    local killerStruct ks;
    if( PlayerController(Other)!=None )
    {
        ks.PC=PlayerController(Other);
        killers[killers.Length]=ks;
    }
    return true;
}
function Timer()
{
    local int i;
    for(i=0;i<killers.Length;i++)
    {
        if(killers[i].killed>MaxAllowedToKill)
        {
            killers[i].killed=0;
            SessionKick(killers[i].PC);
        }
    }
}
function IncreaseKills(PlayerController PC)
{
    local int i;
    for(i=0;i<killers.Length;i++)
        if(killers[i].PC==PC)
            killers[i].killed++;
}
function SessionKick(PlayerController PC)
{
    local AccessControl Manager;
    if (Level.Game.AccessControl != None)
        Manager = Level.Game.AccessControl;
    Manager.BanPlayer(PC, true);
}
defaultproperties
{
    MaxAllowedToKill=5
    bAddToServerPackages=True
    GroupName="KF-TeamKillerKickMut"
    FriendlyName="TeamKillerKickMut"
    Description="TeamKillerKickMut"
}

Обновление 03.04.2014
Добавлен массив исключений
В ini файл добавлять элементы массива, типа

ExceptionList=7656119805137844
class TeamKillerKickMut extends Mutator config(TeamKillerKickMut);
struct killerStruct
{
    var PlayerController PC;
    var int killed;
};
var array<killerStruct> killers;
var config array<string> ExceptionList;
var config int MaxAllowedToKill;
function PostBeginPlay()
{
    local TKKickGameRules RulesMod;
    SaveConfig();
    if( RulesMod==None )
        RulesMod = Spawn(Class'TKKickGameRules');
    RulesMod.mut=self;
    if(KFGameType(Level.Game)==None) Destroyed();
    SetTimer(1.0,true);
    Super.PostBeginPlay();
}
function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
    local killerStruct ks;
    if( PlayerController(Other)!=None )
    {
        ks.PC=PlayerController(Other);
        killers[killers.Length]=ks;
    }
    return true;
}
function Timer()
{
    local int i;
    for(i=0;i<killers.Length;i++)
    {
        if(killers[i].killed>MaxAllowedToKill)
        {
            killers[i].killed=0;
            SessionKick(killers[i].PC);
        }
    }
}
function IncreaseKills(PlayerController PC)
{
    local int i;
    for(i=0;i<killers.Length;i++)
        if(killers[i].PC==PC)
            killers[i].killed++;
}
function SessionKick(PlayerController PC)
{
    local AccessControl Manager;
    if (Level.Game.AccessControl != None)
        Manager = Level.Game.AccessControl;
    if(!InList(PC.GetPlayerIDHash()))
        Manager.BanPlayer(PC, true);
}
function bool InList(string Hash)
{
    local int i;
    for(i=0;i<ExceptionList.Length;i++)
    {
        if(Hash~=ExceptionList[i])
            return true;
    }
    return false;
}
defaultproperties
{
    ExceptionList(0)=121
    MaxAllowedToKill=5
    bAddToServerPackages=True
    GroupName="KF-TeamKillerKickMut"
    FriendlyName="TeamKillerKickMut"
    Description="TeamKillerKickMut"
}

В список мутаторв добавляем: TeamKillerKickMut.TeamKillerKickMut