//============================================================================= // KF Use Trigger. Now with bigger messages, and Refire delays for human users. // This shit's used for Doors in Killing Floor. // By: Alex //============================================================================= class KFUseTrigger extends UseTrigger; var array DoorOwners; var() int ReFireDelay; var int LastAttempt; var float WeldStrength,LastMessageTimer; var() float MaxWeldStrength; var() float CombatSealReduction; // How much do we weaken the effectiveness of the Players' welder by when the door is being attacked? var() bool bAlwaysShowMessage; // Show a text message to nearby players even when the doors are sealed / the trigger is not useable var() string LockedMessage, UnLockedMessage, WeldedShutMessage, WeldedShutMessage2; var() sound LockedSound, UnLockedSound ; // The SFX for trying to open a locked door, and unlocking it. var() bool bDirectionalOpen; var vector InitRotation; function PostBeginPlay() { Super.PostBeginPlay(); if( bDirectionalOpen ) InitRotation = vector(Rotation); } function AddDoor( KFDoorMover Other ) { local int i; i = DoorOwners.Length; DoorOwners.Length = i+1; DoorOwners[i] = Other; } function bool SelfTriggered() { return true; } /* function HideDoorWeldingStatus() { HUDKillingFloor(PlayerController(DoorUser.Controller).myHUD).HideDoorIntegrityMeter(); } function ShowDoorWeldingStatus(PlayerController PC, KFDoorMover) { local int i; For( i = 0; i < DoorOwners.Length; i++ ) { if ( !bUntouch && !DoorOwners[i].bHidden && (DoorOwners[i].bClosed || DoorOwners[i].bSealed) ) { if ( PlayerController(DoorUser.Controller) != None ) { } } else { if ( PlayerController(DoorUser.Controller) != None ) { HUDKillingFloor(PlayerController(DoorUser.Controller).myHUD).ShowDoorIntegrity(false, 0, 0); } } } } */ function UsedBy(Pawn user) { local int i; local Inventory inv; local byte OpenKeyNum; if( (Level.TimeSeconds-LastAttempt)0 ) OpenKeyNum = 1; else OpenKeyNum = 2; } For( i = 0; i < DoorOwners.Length; i++ ) { if ( !DoorOwners[i].bSealed && !DoorOwners[i].bHidden && !DoorOwners[i].bKeyLocked ) { if( OpenKeyNum == 0 ) DoorOwners[i].Trigger(Self,User); else DoorOwners[i].OpenDoorToKey(User,OpenKeyNum); LastAttempt = Level.TimeSeconds; } if ( DoorOwners[i].bSealed && !DoorOwners[i].bHidden && DoorOwners[i].bClosed) { if ( PlayerController(user.controller) != none ) { PlayerController(user.controller).ReceiveLocalizedMessage(class'KFMod.WaitingMessage', 4); } LastAttempt = Level.TimeSeconds; } if( DoorOwners[i].bKeyLocked && !DoorOwners[i].bSealed && !DoorOwners[i].bHidden && DoorOwners[i].bClosed ) { for( inv=user.Inventory; inv!=None; inv=inv.Inventory) { if( KFKeyInventory(inv)!=None && inv.tag==DoorOwners[i].tag ) { if( OpenKeyNum==0 ) DoorOwners[i].Trigger(Self,User); else DoorOwners[i].OpenDoorToKey(User,OpenKeyNum); if( PlayerController(user.controller)!=None ) PlayerController(user.controller).ClientMessage(UnLockedMessage, 'CriticalEvent'); PlaySound(UnLockedSound,,255,,100); DoorOwners[i].bKeyLocked = false; LastAttempt = Level.TimeSeconds; KFKeyInventory(inv).UnLock(); } } } } } // Modded to account for...Zombies, and the Sealing (removal) of the Door Movers. function Touch( Actor Other ) { local int i; local byte OpenKeyNum; if( Pawn(Other)==None || Pawn(Other).Health <= 0 ) Return; if( bDirectionalOpen ) { if( (Normal(Other.Location-Location) dot InitRotation)>0 ) OpenKeyNum = 1; else OpenKeyNum = 2; } For( i = 0; i < DoorOwners.Length; i++ ) { if( KFMonster(Other)!=none || KFInvasionBot(Pawn(Other).Controller) != none ) { if( !DoorOwners[i].bKeyLocked && !DoorOwners[i].bSealed && !DoorOwners[i].bHidden && DoorOwners[i].KeyNum==0 ) { if( OpenKeyNum==0 ) DoorOwners[i].Trigger(Self,Pawn(Other)); else DoorOwners[i].OpenDoorToKey(Pawn(Other),OpenKeyNum); } } else if ( !DoorOwners[i].bSealed && !DoorOwners[i].bHidden ) { // Send a string message to the toucher. if(PlayerController(Pawn(Other).Controller)!=none) { if( LastMessageTimer MaxWeldStrength ) { ExtraWeld = MaxWeldStrength-WeldStrength; } if ( ExtraWeld == 0 ) { return; } if ( WelderInst != none ) { PC = KFPlayerController(WelderInst.Controller); if ( PC != none && KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements) != none ) { KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements).AddWeldingPoints(ExtraWeld); } } WeldStrength +=ExtraWeld; For( i=0; i damageType) { local int i; if( WeldDamage==0 ) Return; WeldStrength-=WeldDamage; if( WeldStrength<=0 ) { WeldStrength = 0; For( i=0; i