Автокик за убийство игроков

Тема в разделе "Общего назначения", создана пользователем Flame, 19 мар 2013.

Метки:
  1. Proton

    Proton Игровой администратор

    Их, под их админкой, вроде не должно кикнуть.
     
  2. HATAXA

    HATAXA Солдат

    Пересмотреть систему наказания как таковую. У нас кикает только после третьего убийства. А админов наказывать нужно наравне с игроками)))
     
  3. denfil777

    denfil777 Капо

    Как наказать админов не проблема, дело в том что их иногда подставляют просто, чтоб потом после кика не кто им "не мешал" творить то что захотят. Все элементарно, админ подрывник кинул мину, встали на нее трое игроков и ждут мобов, мина сработала и отправился админ в режим ожидания.
    Как это ни странно, кикает.
     
  4. Flame

    Flame -Заслуженый кодер форума-

    Да я там кик в обход стандартного сделал, небось ))
    Накидаю сегодня версию с ID )
     
  5. denfil777

    denfil777 Капо

    Буду очень благодарен! :8m:
     
  6. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Ну про админов это правильно. Я думал там каким-то левым челам будет раздаваться "привилегия", поэтому так и написал. А вообще да, кик стандартный не кикает залогинившихся админов.
     
  7. MaThreeX

    MaThreeX Солдат

    вполне реально осуществить даже самому, смотри схожие темы, где используеться SteamID пользователя.
     
  8. denfil777

    denfil777 Капо

    У нас кикает, возможно это как связано с админконтролом или еще с чем то, факт то что кикает, сам проверял вчера. :unsure2:


    Не настолько понимаю код, шарил бы - не стал спрашивать...
     
  9. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Это не связано с админконтролом.

    P.S. Флейм, может сделаешь тогда уж опцию, чтобы можно было отключить кик админов?
     
  10. Flame

    Flame -Заслуженый кодер форума-

    Я поздно эт увидел )
    Уже сделал просто массив (см. первый пост темы)

    Вот только я не делал там обход стандартного кика)
    У меня админы не кикаются
    Так что мистика
    Ну можно написать
    Код:
    if(!PC.PlayerReplicationInfo.bAdmin)
    	Manager.BanPlayer(PC, true);
    
    Если кому надо именно админов

    А вообще корявенький мутатор)
    В плане реализации. Можно улучшить по мелочам
    Если кто сформулирует более общий мутатор на данную тему - сделаю
     
    denfil777 нравится это.
  11. kok-s

    kok-s Консильери

    Да можно вообще объединить парочку мутов в один.
    На пример объединить:
    1) http://killingfloor.ru/forum/index.php?/topic/3202-avtokik-za-ubiistvo-igrokov/
    2) http://killingfloor.ru/forum/index.php?/topic/3260-avtokik-za-0-id-i-za-nekorrektnyi-nik/
    3) http://killingfloor.ru/forum/index.php?/topic/1930-anti-afk/
    4) http://killingfloor.ru/forum/index.php?/topic/2313-ffpenalty/

    Меньше подгружаемых пакетов + отличный функционал.
     
  12. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Я уже говорил о том что проще сделать тогда пак вообще из большого количества мутаторов, я потихоньку начал делать это но не знаю когда закончу. А если есть минимальные познания в кодинге то не проблема самому зашить те мутаторы которые тебе нужны.
     
  13. kok-s

    kok-s Консильери

    Да как бы зашить эти муты не проблема. Я хотел бы чтоб это был один хороший (функциональный) мутатор, а не пакет с кучей разных мутов.
     
  14. warpel

    warpel Солдат

    Вот пробуй, я правда не тестил.
    Собрал 4 мутатора в 1 единый с конфигом.


    Upd.Ссылка

    Лучше наверное отдельную тему сделать, если потребуется
     
  15. denfil777

    denfil777 Капо

    а ссылки поправить можно?
     
  16. Essence

    Essence Moderator Команда форума

    Оптимизировал код.

    Настройки в .ini файле:
    ExceptionList - список исключений.
    bAdminIsImmune - Если нарушитель - админ, то ничего не предпринимаем.

    Код с комментариями:
    Код:
    class TKKickMut extends Mutator
        config(TKKickMut);
    
    struct KillerStruct
    {
        var PlayerController PC;
        var int Killed;
    };
    var array<KillerStruct> Killers;
    var config int MaxAllowedToKill;
    
    var config array<string> ExceptionList;
    var config bool bAdminIsImmune;
    
    // Спавним правила
    function PostBeginPlay()
    {
        local TKKickGameRules RulesMod;
        if(RulesMod==None) RulesMod=Spawn(Class'TKKickGameRules');
        RulesMod.Mut=Self;
    }
    
    // Отлавливаем игроков и заносим их в список
    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 IncreaseKills(PlayerController PC)
    {
        local int i;
        for(i=0; i<Killers.Length; i++)
        {
            if(Killers[i].PC==PC)
            {
                Killers[i].Killed++;
                // Если игрок превысил лимит убийств, то кикаем его
                if(Killers[i].Killed>MaxAllowedToKill)
                {
                    SessionKick(Killers[i].PC); // Кикаем нарушителя
                    Killers.Remove(i,1); // Чистим список, во время карты игрок уже не зайдет
                }
                Return; // Выходим из цикла, нет смысла бегать дальше
            }
        }
    }
    
    // Кикаем, в течение текущей карты игрок зайти не сможет
    function SessionKick(PlayerController PC)
    {
        local AccessControl Manager;
        if(Level.Game.AccessControl!=None)
            Manager=Level.Game.AccessControl;
        // Если игрок в списке исключений или в настройках задан иммунитет для админов, то ничего не предпринимаем
        if(!InExceptionList(PC))
            Manager.BanPlayer(PC, True);
    }
    
    // Проверяем, включен ли игрок в список исключений
    function bool InExceptionList(PlayerController PC)
    {
        local string Hash;
        local int i;
        if(bAdminIsImmune && PC.PlayerReplicationInfo.bAdmin) Return True;
        Hash=PC.GetPlayerIDHash();
        for(i=0; i<ExceptionList.Length; i++) if(ExceptionList[i]~=Hash) Return True;
        Return False;
    }
    
    defaultproperties
    {
        bAdminIsImmune=True
        MaxAllowedToKill=3
        GroupName="KF-TeamKillerKickMut"
        FriendlyName="TeamKillerKick"
        Description="TeamKillerKick"
    }
    Код:
    class TKKickGameRules extends GameRules;
    
    var TKKickMut Mut;
    
    function PostBeginPlay()
    {
        if(Level.Game.GameRulesModifiers==None) Level.Game.GameRulesModifiers=Self;
        else Level.Game.GameRulesModifiers.AddGameRules(Self);
    }
    
    function AddGameRules(GameRules GR)
    {
        if(GR!=Self) Super.AddGameRules(GR);
    }
    
    // Отлавливаем убийство игрока другим игроком
    function bool PreventDeath(Pawn Killed, Controller Killer, class<DamageType> DamageType, Vector HitLocation)
    {
        if    (
                Killed.IsA('KFHumanPawn')
                &&    Killed.Controller.IsA('PlayerController')
                &&    Killer.Pawn.IsA('KFHumanPawn')
                &&    Killer.IsA('PlayerController')
                &&    Killed.Controller!=Killer
            )
        {
            Mut.IncreaseKills(PlayerController(Killer));
        }
        if(NextGameRules!=None)
            Return NextGameRules.PreventDeath(Killed, Killer, DamageType, HitLocation);
        Return False;
    }

    Код для загрузки мутатора в .bat файле или MutLoader:
    Код:
    TKKickMut.TKKickMut

    Ссылка
     
    Flame и WipeMaster нравится это.