Reload Interrupt Mutator. Мутатор прерывание перезарядки

Reload Interrupt Mutator. Мутатор прерывание перезарядки

  • Тема закрыта
  • Вы не можете ответить в тему

Reload Interrupt Mutator. Мутатор прерывание перезарядки Reload Interrupt Mutator. Мутатор прерывание перезарядки Некоторые пушки очень уж долго и нудно перезаряжаются и не дают шанса поменять себя на другое оружие. Это простейший мутатор позволяющий прерывать любую перезар...

Geekrainian #1

    • Группа: Администратор
    • Сообщений: 800

    Отправлено:

    Reload Interrupt Mutator. Мутатор прерывание перезарядки

    Некоторые пушки очень уж долго и нудно перезаряжаются и не дают шанса поменять себя на другое оружие.
    Это простейший мутатор позволяющий прерывать любую перезарядку сменой оружия или броском гранаты. В принципе можете дописать среди InterruptAliases в Interaction классе, например, “Fire” и “AltFire”.
    Тогда сможете частично перезарядиться и стрелять там, где раньше это не позволялось.

    class ReloadInterruptMut extends Mutator;
    //simple version of Reload Options Mutator
    //author: a1eat0r
    //link: http://forums.tripwireinteractive.com/showpost.php?p=1208486&postcount=1
    //каждому игроку вешаем Interaction класс, который будет отслеживать нажатие клавиш
    simulated function Tick(float DeltaTime)
    {
        local PlayerController PC;
        PC = Level.GetLocalPlayerController();
    
        if (PC != None)
        {
            PC.Player.InteractionMaster.AddInteraction("ReloadInterruptMut.RIInteraction", PC.Player);
            Disable('Tick');
        }
    }
    defaultproperties
    {
        GroupName="KF-ReloadInterrupt"
        FriendlyName="ReloadInterruptMut"
        Description="ReloadInterruptMut"
        bAlwaysRelevant=true
        RemoteRole=ROLE_SimulatedProxy
        bAddToServerPackages=true
    }
    class RIInteraction extends Interaction;
    var KFPlayerController PC;
    var array<string> InterruptAliases;
    function Initialize()
    {
        PC = KFPlayerController(ViewportOwner.Actor);
        if (PC == None)
            Master.RemoveInteraction(Self);
        if (InterruptAliases.Length == 0)
            InterruptAliases = default.InterruptAliases;
    }
    event NotifyLevelChange()
    {
        Master.RemoveInteraction(Self);
    }
    function KFWeapon GetWeapon()
    {
        if (PC.Pawn != None)
            return KFWeapon(PC.Pawn.Weapon);
        else
            return None;
    }
    //Получаем текущую пушку в руках у игрока, если она перезаряжается - прерываем процесс
    //на сервере и на клиенте
    function InterruptReload()
    {
        local KFWeapon W;
        W = GetWeapon();
        if (W == None)
            return;
        if(W.bIsReloading)
        {
            W.ServerInterruptReload();
            if    (
                    PC.Level.NetMode != NM_StandAlone
                    &&    (PC.Level.NetMode != NM_ListenServer || !PC.Pawn.IsLocallyControlled())
                )
            {
                W.ClientInterruptReload();
            }
        }
    }
    //Если нажата клавиша - срабатываем и проверяем что нажато. Если действие является одним из //перечисленных в массиве InterruptAliases, то прерываем перезарядку
    function bool KeyEvent(EInputKey Key, EInputAction Action, float Delta)
    {
        local string Alias, LeftPart, RigthPart;
        local int i;
        if (Action == IST_Press)
        {
            Alias = PC.ConsoleCommand("KEYBINDING" @ PC.ConsoleCommand("KEYNAME" @ Key));
            if (Divide(Alias, " ", LeftPart, RigthPart))
                Alias = LeftPart;
            for (i = 0; i < InterruptAliases.Length; i++)
            {
                if (Alias ~= InterruptAliases[i])
                {
                    InterruptReload();
                    break;
                }
            }
        }
        return false;
    }
    defaultproperties
    {
        InterruptAliases(0)="ThrowNade"
        InterruptAliases(1)="ThrowGrenade"
        InterruptAliases(2)="GetWeapon"
        InterruptAliases(3)="SwitchWeapon"
        InterruptAliases(4)="SwitchToLastWeapon"
    }

    Добавлять в виде ReloadInterruptMut.ReloadInterruptMut
    Автор: Flame

    Назад