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