Class Ext_T_AutoFireHelper extends Info transient; var class AssociatedPerkClass; var Pawn PawnOwner; var PlayerController LocalPC; var bool bNetworkOwner; replication { if ( bNetOwner ) PawnOwner,AssociatedPerkClass; } function PostBeginPlay() { PawnOwner = Pawn(Owner); if( PawnOwner==None ) Destroy(); else SetTimer(0.5+FRand()*0.4,true); } function Timer() { if( PawnOwner==None || PawnOwner.Health<=0 || PawnOwner.InvManager==None ) Destroy(); } simulated function Tick( float Delta ) { if ( WorldInfo.NetMode==NM_DedicatedServer || PawnOwner==None || PawnOwner.InvManager==None || KFWeapon(PawnOwner.Weapon)==None || ( KFWeapon(PawnOwner.Weapon).GetWeaponPerkClass(AssociatedPerkClass) != AssociatedPerkClass && AssociatedPerkClass != class'KFPerk_Survivalist' )) return; // Find local playercontroller. if( LocalPC==None ) { LocalPC = PlayerController(PawnOwner.Controller); if( LocalPC==None ) return; bNetworkOwner = (LocalPlayer(LocalPC.Player)!=None); } if( !bNetworkOwner ) return; // Force always to pending fire. if( LocalPC.bFire!=0 && !PawnOwner.InvManager.IsPendingFire(None,0) ) PawnOwner.Weapon.StartFire(0); else if( LocalPC.bAltFire!=0 && !PawnOwner.InvManager.IsPendingFire(None,1) ) PawnOwner.Weapon.StartFire(1); } defaultproperties { Components.Empty() RemoteRole=ROLE_SimulatedProxy bOnlyRelevantToOwner=true }