2020-12-13 15:01:13 +00:00
//=============================================================================
// KFCheatManager
//=============================================================================
// Base CheatManager for KFGame
//
// Note: If using ToggleDebugCamera and exec functions, call GetMyPawn()
// instead of using Pawn reference.
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
class KFCheatManager extends GameCheatmanager
native ;
//@HSL_MOD_BEGIN - amiller 5/11/2016 - Adding support to save extra data into profile settings
` include(KFProfileSettings.uci)
//@HSL_MOD_END
/** Debug scene related properties */
var bool bDebugSceneEnabled ;
var KFSceneCaptureDebugCam DebugSceneCamera ;
var KFAIController DebugKFAIC ;
var KFPawn _Monster DebugTarget ;
var name CheatType ;
/ * * W h e t h e r s p l a t t e r g u n m o r e i s c u r r e n t l y e n a b l e d . U s e d t o t o g g l e b e t w e e n n o r m a l
shooting mode and shooting splatters * /
var transient bool bUsingSplatterGun ;
/** for ReadGlobalStat */
var transient bool bRequestedGlobalStats ;
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* native cheats
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
exec native final function SetPerkLevel ( int NewPerkLevel ) ;
exec native final function SetPerkPrestigeLevel ( int NewPerkLevel ) ;
exec native final function ResetPerkLevels ( ) ;
exec native final function AnalyzeCharacterAttachments ( ) ;
exec native final function FixupCharacterAttachmentLocalization ( ) ;
/** Global (aka Aggregated) stats */
exec native function ReadGlobalStat ( string statId , optional int HistoryNumDays ) ;
/ * * H e l p s t o i d e n t i f y a l l t h e t r a n s l u c e n t m a t e r i a l s t h a t a r e t a g g e d w i t h b T r a n s l u c e n c y I n h e r i t D o m i n a n t S h a d o w s F r o m O p a q u e
for performance reasons . Having this checked will activate the "CopyToTranslucencyAttenTex" code path whenever
the material is in view .
* /
exec native final function FindTranslucencyInheritDominantShadowMaterials ( ) ;
/** Create and save an empty upk */
native final function MakeEmptyPackage ( ) ;
exec native function ForceDailyObjective ( int ObjectiveIndex , int UIIndex ) ;
exec native function ResetDailyObjectives ( ) ;
exec native function GiveVaultDosh ( int Amount ) ;
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* script cheats
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/ * *
* GetMyPawn ( ) : Use this to get a valid KFCheatManager . Pawn reference !
* If you need to access the CheatManager ' s Pawn ( Pawn / Outer . Pawn ) , use this function
* instead of directly using the "Pawn" variable . If the player executing the cheat is in
* DebugCamera mode ( see ToggleDebugCamera ( ) ) , "Pawn" will be null because the player will
* be unpossessed by his normal PlayerController and possessed by a KFDebugCameraController .
* DebugCameraControllers have no pawn , but GetMyPawn ( ) will return the pawn that you ' re
* looking for whether the player is in DebugCamera mode or not .
* /
function Pawn GetMyPawn ( )
{
/ * *
* If Outer . Pawn is null , assume that player is in DebugCamera mode and instead
* assume that Outer is a DebugCameraCameraController and return the reference to
* the player 's unpossessed PlayerController' s Pawn .
* /
return ( Pawn != none ) ? Pawn : DebugCameraController ( Outer ) . OriginalControllerRef . Pawn ;
}
exec function SetShellToState ( int ShellIndex , byte ShellState )
{
local KFWeap _GrenadeLauncher _CylinderBase GLBase ;
local KFPawn MyPawn ;
MyPawn = KFPawn ( GetMyPawn ( ) ) ;
if ( MyPawn != none && MyPawn . MyKFWeapon != none )
{
GLBase = KFWeap _GrenadeLauncher _CylinderBase ( MyPawn . MyKFWeapon ) ;
if ( GLBase != none )
{
GLBase . SetShellToState ( ShellIndex , ShellState ) ;
}
}
}
exec function SetFakeDownloadProgress ( bool bDownloading , float PercentageComplete )
{
local KFGameViewportClient KFVP ;
KFVP = KFGameViewportClient ( class 'Engine' . static . GetEngine ( ) . GameViewport ) ;
KFVP . NotifyDownloadProgress ( PMT _DownloadProgress , "TEST" , "59" ) ;
}
exec function SetInventoryFilter ( string FilterType , int NewEnum )
{
local string MyFilterType ;
local KFPlayerController KFPC ;
` log("Set Filter Called: " @FilterType @NewEnum);
MyFilterType = Caps ( FilterType ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none && KFPC . MyGFxManager != none && KFPC . MyGFxManager . InventoryMenu != none )
{
switch ( MyFilterType )
{
case "WEAPON" :
KFPC . MyGFxManager . InventoryMenu . Callback _WeaponTypeFilterChanged ( NewEnum ) ;
break ;
case "RARITY" :
KFPC . MyGFxManager . InventoryMenu . Callback _RarityTypeFilterChanged ( NewEnum ) ;
break ;
case "PERK" :
KFPC . MyGFxManager . InventoryMenu . Callback _PerkTypeFilterChanged ( NewEnum ) ;
break ;
default :
` log("Bad filter type provided!"@FilterType);
}
}
}
exec function PrintOutCurrentPrestigeInfo ( )
{
local KFPlayerController KFPC ;
local KFPlayerReplicationInfo KFPRI ;
KFPC = KFPlayerController ( Outer ) ;
` log("Curennt perk prestige level: " @KFPC.CurrentPerk.GetPrestigeLevel());
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
` log("KPRI active prestige level: " @KFPRI.GetActivePerkPrestigeLevel());
}
exec function DisplayFreeTrialFeatureBlockedPopUp ( )
{
class 'KFGFxMoviePlayer_Manager' . static . DisplayFreeTrialFeatureBlockedPopUp ( ) ;
}
exec function DisplayFreeTrialOverPopUp ( )
{
class 'KFGFxMoviePlayer_Manager' . static . DisplayFreeTrialOverPopUp ( ) ;
}
exec function TestItemServerStatusIndicatorStart ( )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxManager != none && KFPC . MyGFxManager . BackendStatusIndicatorWidget != none )
{
KFPC . MyGFxManager . BackendStatusIndicatorWidget . StartFlickeringConnectionLost ( ) ;
}
}
exec function TestItemServerStatusIndicatorStop ( )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxManager != none && KFPC . MyGFxManager . BackendStatusIndicatorWidget != none )
{
KFPC . MyGFxManager . BackendStatusIndicatorWidget . StopFlickeringConnectionLost ( ) ;
}
}
exec function OpenScreenSizeMovie ( )
{
KFPlayerController ( Outer ) . MyGFxManager . OpenScreenSizeMovie ( ) ;
}
exec function CloseScreenSizeMovie ( )
{
KFPlayerController ( Outer ) . MyGFxManager . ScreenSizeMovie . SaveAndClose ( ) ;
}
exec function OpenIIS ( )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
KFPC . MyGFxManager . OpenMenu ( UI _IIS ) ;
}
exec function SetIISText ( string MyString )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
KFPC . MyGFxManager . IISMenu . SetString ( "loginText" , MyString ) ;
}
exec function TestSongInfoWidget ( String S )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxHUD != none )
{
KFPC . MyGFxHUD . MusicNotification . ShowSongInfo ( S ) ;
}
}
exec function TestNumbPrompts ( int NumberOfPrompts )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxManager != none )
{
KFPC . MyGFxManager . ManagerObject . SetInt ( "numPrompts" , NumberOfPrompts ) ;
}
}
2020-12-13 15:09:05 +00:00
exec function TestMapMessage ( String S , float time )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxHUD != none )
{
KFPC . MyGFxHUD . MapTextWidget . DisplayMapText ( S , time , true ) ;
}
}
exec function TestMapCounterMessage ( String S , float time )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxHUD != none )
{
KFPC . MyGFxHUD . MapCounterTextWidget . DisplayMapText ( S , time ) ;
}
}
2020-12-13 15:01:13 +00:00
exec function MakeFakePopUp ( )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxManager != none )
{
KFPC . MyGFxManager . DelayedShowDisconnectMessage ( ) ;
}
}
exec function SetCharacterAttachment ( int MeshIndex , int SkinIndex , int AttachmentIndex , optional bool bIgnoreConflictingSlots = false )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxManager != none && KFPC . MyGFxManager . GearMenu != none )
{
KFPC . MyGFxManager . GearMenu . RelayFromCheatManager ( P , CO _Attachment , MeshIndex , SkinIndex , AttachmentIndex , bIgnoreConflictingSlots ) ;
}
}
exec function PrintOutCharacterCosmeticInfo ( )
{
local KFPlayerReplicationInfo KFPRI ;
local int i ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPRI == none )
{
return ;
}
` log("PRINTING OUT COSMETIC INFO!");
for ( i = 0 ; i < 3 /*MAX_COSMETIC_ATTACHMENTS*/ ; ++ i )
{
` log("Item on slot index: " @i @"Mesh index: " @KFPRI.RepCustomizationInfo.AttachmentMeshIndices[i] @"Skin index" @KFPRI.RepCustomizationInfo.AttachmentSkinIndices[i] );
}
` log("********END PRINT ATTACHMENTS*****************");
}
exec function TestLocalMessage ( )
{
ReceiveLocalizedMessage ( class 'KFLocalMessage' , LMT _KickVoteNotEnoughPlayers ) ;
}
// Start firing automatically
exec function AutoFire ( float interval )
{
StartFire ( ) ;
SetTimer ( interval , true , nameof ( FireAgain ) , self ) ;
}
// Stop firing automatically
exec function StopAutoFire ( )
{
StopFire ( ) ;
ClearTimer ( nameof ( FireAgain ) , self ) ;
}
simulated function FireAgain ( )
{
StopFire ( ) ;
StartFire ( ) ;
}
exec function TestGrenade ( optional string GrenadePath )
{
local vector StartTrace , TraceDir ;
local KFProj _Grenade SpawnedGrenade ;
local class < KFProj _Grenade > GrenadeClass ;
if ( GrenadePath == "" )
{
GrenadePath = "KFGameContent.KFProj_HEGrenade" ;
}
GrenadeClass = class < KFProj _Grenade > ( DynamicLoadObject ( GrenadePath , class 'Class' ) ) ;
// Leave a splat on level geometry along the direction being shot at
StartTrace = Pawn . GetWeaponStartTraceLocation ( ) ;
TraceDir = vector ( Pawn . Weapon . GetAdjustedAim ( StartTrace ) ) ;
// Spawn Grenade
SpawnedGrenade = Pawn . Weapon . Spawn ( GrenadeClass , Pawn . Weapon ) ;
if ( SpawnedGrenade != none && ! SpawnedGrenade . bDeleteMe )
{
SpawnedGrenade . Init ( TraceDir ) ;
}
}
exec function TestConcussiveGrenade ( )
{
local vector StartTrace , TraceDir ;
local KFProj _Grenade SpawnedGrenade ;
local class < KFProj _Grenade > GrenadeClass ;
GrenadeClass = class < KFProj _Grenade > ( DynamicLoadObject ( "KFGameContent.KFProj_DynamiteGrenade" , class 'Class' ) ) ;
// Leave a splat on level geometry along the direction being shot at
StartTrace = Pawn . GetWeaponStartTraceLocation ( ) ;
TraceDir = vector ( Pawn . Weapon . GetAdjustedAim ( StartTrace ) ) ;
// Spawn Grenade
SpawnedGrenade = Pawn . Weapon . Spawn ( GrenadeClass , Pawn . Weapon ) ;
if ( SpawnedGrenade != none && ! SpawnedGrenade . bDeleteMe )
{
SpawnedGrenade . ExplosionTemplate . ExplosionEffects = SpawnedGrenade . default . AltExploEffects ;
SpawnedGrenade . Init ( TraceDir ) ;
}
}
exec function TestNukeGrenade ( )
{
local vector StartTrace , TraceDir ;
local KFProj _Grenade SpawnedGrenade ;
local class < KFProj _Grenade > GrenadeClass ;
GrenadeClass = class < KFProj _Grenade > ( DynamicLoadObject ( "KFGameContent.KFProj_DynamiteGrenade" , class 'Class' ) ) ;
// Leave a splat on level geometry along the direction being shot at
StartTrace = Pawn . GetWeaponStartTraceLocation ( ) ;
TraceDir = vector ( Pawn . Weapon . GetAdjustedAim ( StartTrace ) ) ;
// Spawn Grenade
SpawnedGrenade = Pawn . Weapon . Spawn ( GrenadeClass , Pawn . Weapon ) ;
if ( SpawnedGrenade != none && ! SpawnedGrenade . bDeleteMe )
{
SpawnedGrenade . ExplosionTemplate = class 'KFPerk_Demolitionist' . static . GetNukeExplosionTemplate ( ) ;
SpawnedGrenade . ExplosionActorClass = class 'KFPerk_Demolitionist' . static . GetNukeExplosionActorClass ( ) ;
SpawnedGrenade . Init ( TraceDir ) ;
}
}
exec function BurnFX ( )
{
KFPawn ( GetMyPawn ( ) ) . AfflictionHandler . ToggleEffects ( AF _FirePanic , True ) ;
}
exec function StopBurnFX ( )
{
KFPawn ( GetMyPawn ( ) ) . AfflictionHandler . ToggleEffects ( AF _FirePanic , False ) ;
}
exec function SetInflate ( float InflateParam )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
KFPM . AfflictionHandler . UpdateMaterialParameter ( AF _Microwave , InflateParam ) ;
}
}
exec function SetChar ( float CharParam )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
KFPM . AfflictionHandler . UpdateMaterialParameter ( AF _FirePanic , CharParam ) ;
}
}
exec function ToggleZedsIgnoreMe ( )
{
local KFAIController KFAIC ;
KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe = ! KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC != none && KFAIC . Enemy == GetMyPawn ( ) )
{
KFAIC . Enemy = none ;
}
}
ClientMessage ( GetMyPawn ( ) @ "Zeds Ignore Me: " $KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe , CheatType ) ;
}
exec function ToggleFrustration ( optional int enabledValue = 5 )
{
if ( class 'KFAIController' . default . FrustrationThreshold == 0 )
{
ConsoleCommand ( "SETNOPEC KFAIController FrustrationThreshold" @ enabledValue ) ;
}
else
{
ConsoleCommand ( "SETNOPEC KFAIController FrustrationThreshold" @ 0 ) ;
}
}
exec function ZedTeleport ( )
{
local KFAIController KFAIC ;
KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe = ! KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC != none )
{
KFAIC . RelocateTeleport ( ) ;
}
}
ClientMessage ( "Teleporting zeds for reorganization" , CheatType ) ;
}
exec function ZedStuck ( )
{
local KFAIController KFAIC ;
KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe = ! KFPawn ( GetMyPawn ( ) ) . bAIZedsIgnoreMe ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC != none )
{
KFAIC . HandleStuck ( ) ;
}
}
ClientMessage ( "Forcing HandleStuck For Zeds" , CheatType ) ;
}
exec function LogCurrentWave ( )
{
local int i , j , k ;
local KFAISpawnManager SpawnManager ;
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
SpawnManager = KFGameInfo ( WorldInfo . Game ) . SpawnManager ;
` log("Current Loaded Wave Setup");
for ( i = 0 ; i < SpawnManager . AvailableSquads . Length ; i ++ )
{
for ( j = 0 ; j < SpawnManager . AvailableSquads [ i ] . MonsterList . Length ; j ++ )
{
` log( "AvailableSquads " $ i $ " MonsterList " $ j $ " is " $ GetEnum(enum'EAIType',SpawnManager.AvailableSquads[i].MonsterList[j].Type) $ " Num: " $ SpawnManager.AvailableSquads[i].MonsterList[j].Num $ " SquadName: " $ SpawnManager.AvailableSquads[i] );
}
}
` log("Current Waves Info For Wave: " $ KFGameInfo(WorldInfo.Game).MyKFGRI.WaveNum $ " which is " $ (KFGameInfo(WorldInfo.Game).MyKFGRI.WaveNum - 1) $ " in the wave array ");
i = KFGameInfo ( WorldInfo . Game ) . MyKFGRI . WaveNum - 1 ;
for ( j = 0 ; j < SpawnManager . WaveSettings . Waves [ i ] . Squads . Length ; j ++ )
{
for ( k = 0 ; k < SpawnManager . WaveSettings . Waves [ i ] . Squads [ j ] . MonsterList . Length ; k ++ )
{
` log( "Wave " $ i $ " Squads " $ j $ " MonsterList " $ k $ " is " $ GetEnum(enum'EAIType',SpawnManager.WaveSettings.Waves[i].Squads[j].MonsterList[k].Type) $ " Num: " $ SpawnManager.WaveSettings.Waves[i].Squads[j].MonsterList[k].Num );
}
}
for ( j = 0 ; j < SpawnManager . WaveSettings . Waves [ i ] . SpecialSquads . Length ; j ++ )
{
if ( SpawnManager . WaveSettings . Waves [ i ] . SpecialSquads [ j ] != none )
{
for ( k = 0 ; k < SpawnManager . WaveSettings . Waves [ i ] . SpecialSquads [ j ] . MonsterList . Length ; k ++ )
{
` log( "Wave " $ i $ " Special Squad MonsterList " $ k $ " is " $ GetEnum(enum'EAIType',SpawnManager.WaveSettings.Waves[i].SpecialSquads[j].MonsterList[k].Type) $ " Num: " $ SpawnManager.WaveSettings.Waves[i].SpecialSquads[j].MonsterList[k].Num );
}
}
else
{
` log( "Wave " $ i $ " No Special Squad " );
}
}
}
}
exec function LogAllWaves ( )
{
local int i , j , k ;
local KFAISpawnManager SpawnManager ;
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
SpawnManager = KFGameInfo ( WorldInfo . Game ) . SpawnManager ;
` log("Current Loaded Wave Setup");
for ( i = 0 ; i < SpawnManager . AvailableSquads . Length ; i ++ )
{
for ( j = 0 ; j < SpawnManager . AvailableSquads [ i ] . MonsterList . Length ; j ++ )
{
` log( "AvailableSquads " $ i $ " MonsterList " $ j $ " is " $ GetEnum(enum'EAIType',SpawnManager.AvailableSquads[i].MonsterList[j].Type) $ " Num: " $ SpawnManager.AvailableSquads[i].MonsterList[j].Num $ " SquadName: " $ SpawnManager.AvailableSquads[i] );
}
}
` log("All Waves Info");
for ( i = 0 ; i < SpawnManager . WaveSettings . Waves . Length ; i ++ )
{
for ( j = 0 ; j < SpawnManager . WaveSettings . Waves [ i ] . Squads . Length ; j ++ )
{
for ( k = 0 ; k < SpawnManager . WaveSettings . Waves [ i ] . Squads [ j ] . MonsterList . Length ; k ++ )
{
` log( "Wave " $ i $ " Squads " $ j $ " MonsterList " $ k $ " is " $ GetEnum(enum'EAIType',SpawnManager.WaveSettings.Waves[i].Squads[j].MonsterList[k].Type) $ " Num: " $ SpawnManager.WaveSettings.Waves[i].Squads[j].MonsterList[k].Num );
}
}
for ( j = 0 ; j < SpawnManager . WaveSettings . Waves [ i ] . SpecialSquads . Length ; j ++ )
{
if ( SpawnManager . WaveSettings . Waves [ i ] . SpecialSquads [ j ] != none )
{
for ( k = 0 ; k < SpawnManager . WaveSettings . Waves [ i ] . SpecialSquads [ j ] . MonsterList . Length ; k ++ )
{
` log( "Wave " $ i $ " Special Squad MonsterList " $ k $ " is " $ GetEnum(enum'EAIType',SpawnManager.WaveSettings.Waves[i].SpecialSquads[j].MonsterList[k].Type) $ " Num: " $ SpawnManager.WaveSettings.Waves[i].SpecialSquads[j].MonsterList[k].Num );
}
}
else
{
` log( "Wave " $ i $ " No Special Squad " );
}
}
}
}
}
exec function PowerUpHellishRage ( )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none )
{
KFPC . ReceivePowerUp ( class 'KFPowerUp_HellishRage' ) ;
}
}
// Enter the name of a weapons skeletal mesh to spawn it without animations
exec function SpawnGunModel ( string GunMeshString )
{
local SkeletalMesh GunMesh ;
GunMesh = SkeletalMesh ( DynamicLoadObject ( GunMeshString , class 'SkeletalMesh' ) ) ;
KFPawn ( Pawn ) . ArmsMesh . DetachFromAny ( ) ;
KFSkeletalMeshComponent ( Pawn . Weapon . Mesh ) . SetSkeletalMesh ( GunMesh ) ;
KFSkeletalMeshComponent ( Pawn . Weapon . Mesh ) . SetAnimTreeTemplate ( none ) ;
KFSkeletalMeshComponent ( Pawn . Weapon . Mesh ) . AnimSets . length = 0 ;
}
exec function HansGunsOut ( )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
KFPM . DoSpecialMove ( SM _ChangeStance , false , none , 1 ) ;
}
}
exec function HansGunsAway ( )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
KFPM . DoSpecialMove ( SM _ChangeStance , false , none , 0 ) ;
}
}
// Force the weapon to the stop at the first frame of the idle pose
exec function WeapForceIdle ( )
{
KFWeapon ( Pawn . Weapon ) . PlayAnimation ( KFWeapon ( Pawn . Weapon ) . IdleAnims [ 0 ] , 0.0 , false , 0.0 ) ;
SetTimer ( 0.001 , false , nameof ( FreezeWeapAnimUpdate ) , self ) ;
}
simulated function FreezeWeapAnimUpdate ( )
{
KFSkeletalMeshComponent ( Pawn . Weapon . Mesh ) . bPauseAnims = true ;
}
/** Used by animators to test new content */
exec function TestWeaponAnim ( name AnimName )
{
KFWeapon ( Pawn . Weapon ) . PlayAnimation ( AnimName , 0.0 , false , 0.0 ) ;
}
exec function SetPauseMonsterAnims ( bool bPause )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
KFPM . Mesh . bPauseAnims = bPause ;
}
}
exec function NoSpread ( )
{
if ( KFWeapon ( Pawn . Weapon ) != none )
{
KFWeapon ( Pawn . Weapon ) . Spread [ 0 ] = 0 ;
KFWeapon ( Pawn . Weapon ) . Spread [ 1 ] = 0 ;
ClientMessage ( "Spread Disabled" , CheatType ) ;
}
}
exec function GoSpread ( )
{
if ( KFWeapon ( Pawn . Weapon ) != none )
{
KFWeapon ( Pawn . Weapon ) . Spread [ 0 ] = KFWeapon ( Pawn . Weapon ) . default . Spread [ 0 ] ;
KFWeapon ( Pawn . Weapon ) . Spread [ 1 ] = KFWeapon ( Pawn . Weapon ) . default . Spread [ 1 ] ;
ClientMessage ( "Spread Enabled" , CheatType ) ;
}
}
exec function HideMenus ( )
{
if ( KFPlayerController ( Outer ) . MyGFxManager != none )
{
KFPlayerController ( Outer ) . MyGFxManager . SetMenuVisibility ( false ) ;
}
else
{
` log("MENU MANAGER NOT READY");
}
}
exec function DebugShowVoteKick ( )
{
local KFPlayerReplicationInfo KFPRI ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPlayerController ( Outer ) . MyGFxHUD != none && KFPRI != None )
{
KFPlayerController ( Outer ) . MyGFxHUD . ShowKickVote ( KFPRI , 10 , true ) ;
}
}
exec function DebugShowVoteSkipTrader ( )
{
local KFPlayerReplicationInfo KFPRI ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPlayerController ( Outer ) . MyGFxHUD != none && KFPRI != None )
{
KFPlayerController ( Outer ) . MyGFxHUD . ShowSkipTraderVote ( KFPRI , 10 , true ) ;
2021-11-16 17:03:42 +00:00
}
}
exec function DebugShowVotePauseGame ( )
{
local KFPlayerReplicationInfo KFPRI ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPlayerController ( Outer ) . MyGFxHUD != none && KFPRI != None )
{
KFPlayerController ( Outer ) . RequestPauseGame ( ) ;
2020-12-13 15:01:13 +00:00
}
}
exec function ToggleForceCrosshair ( )
{
KFHudBase ( MyHud ) . bForceDrawCrosshair = ! KFHudBase ( MyHud ) . bForceDrawCrosshair ;
}
exec function ToggleCrosshair ( )
{
KFHudBase ( MyHud ) . bDrawCrosshair = ! KFHudBase ( MyHud ) . bDrawCrosshair ;
}
/ * *
* Toggle the flame collision between simple and complex collision
* /
exec function FlameSetComplex ( bool bDoCollideComplex )
{
if ( KFWeap _FlameBase ( Pawn . Weapon ) != none )
{
KFWeap _FlameBase ( Pawn . Weapon ) . SetFlameComplex ( bDoCollideComplex ) ;
}
}
/ * *
* Toggle the flame damage debug settings
* /
exec function FlameDebugDamage ( bool bDebugDirectDamage , bool bDebugSplashDamage , bool bDebugShowSplashRadius , bool bDebugShowCollision )
{
local KFWeap _FlameBase KWFB ;
KWFB = KFWeap _FlameBase ( Pawn . Weapon ) ;
if ( KWFB != none )
{
KWFB . SetFlameDebugDamage ( bDebugDirectDamage , bDebugSplashDamage , bDebugShowSplashRadius , bDebugShowCollision ) ;
}
}
/ * *
* Toggle the flame effects debug settings
* /
exec function FlameDebugFX ( bool bDebugShowSeeds , bool bDebugShowBones , bool bDebugForceNonPlayerParticles )
{
local KFWeap _FlameBase KWFB ;
KWFB = KFWeap _FlameBase ( Pawn . Weapon ) ;
if ( KWFB != none )
{
KWFB . SetFlameDebugFX ( bDebugShowSeeds , bDebugShowBones , bDebugForceNonPlayerParticles ) ;
}
}
/ * *
* Toggle the flame effects debug settings
* /
exec function FlameDebugFX3P ( bool bDebugShowSeeds , bool bDebugShowBones , bool bDebugForceNonPlayerParticles )
{
local KFWeapAttach _SprayBase KFSB ;
local KFPawn KFP ;
KFP = KFPawn ( Pawn ) ;
if ( KFP != None )
{
KFSB = KFWeapAttach _SprayBase ( KFP . WeaponAttachment ) ;
if ( KFSB != none )
{
KFSB . SetFlameDebugFX ( bDebugShowSeeds , bDebugShowBones , bDebugForceNonPlayerParticles ) ;
}
}
}
/ * *
* Toggle the flame damage debug settings
* /
exec function FlameDebugDamage3P ( bool bDebugDirectDamage , bool bDebugSplashDamage , bool bDebugShowSplashRadius , bool bDebugShowCollision )
{
local KFWeapAttach _SprayBase KFSB ;
local KFPawn KFP ;
KFP = KFPawn ( Pawn ) ;
if ( KFP != None )
{
KFSB = KFWeapAttach _SprayBase ( KFP . WeaponAttachment ) ;
if ( KFSB != none )
{
KFSB . SetFlameDebugDamage ( bDebugDirectDamage , bDebugSplashDamage , bDebugShowSplashRadius , bDebugShowCollision ) ;
}
}
}
/ * *
* Switch to the next music track
* /
simulated exec function NextTrack ( )
{
if ( KFGameReplicationInfo ( WorldInfo . GRI ) != none )
{
KFGameReplicationInfo ( WorldInfo . GRI ) . PlayNewMusicTrack ( ) ;
}
}
/ * *
* Directly set the music volume
* /
simulated exec function SetMusicVolume ( float NewVolume )
{
local float MusicVolumeMultiplier ;
//@HSL_MOD_BEGIN - amiller 5/11/2016 - Adding support to save extra data into profile settings
local OnlinePlayerStorage Profile ;
Profile = class 'GameEngine' . static . GetOnlineSubsystem ( ) . PlayerInterface . GetProfileSettings ( LocalPlayer ( Player ) . ControllerId ) ;
MusicVolumeMultiplier = NewVolume ;
GetALocalPlayerController ( ) . SetAudioGroupVolume ( 'Music' , MusicVolumeMultiplier ) ;
Profile . SetProfileSettingValueFloat ( KFID _MusicVolumeMultiplier , MusicVolumeMultiplier ) ;
KFProfileSettings ( Profile ) . Save ( LocalPlayer ( Player ) . ControllerId ) ;
//@HSL_MOD_END
class 'KFGameEngine' . static . StaticSaveConfig ( ) ;
}
simulated exec function SetPadVolume ( float NewVolume )
{
class 'KFGameEngine' . static . SetWWisePADVolume ( NewVolume ) ;
}
exec function Weapon GiveWeapon ( String WeaponClassStr )
{
local KFInventoryManager KFIM ;
local Weapon NewWeap ;
KFIM = KFInventoryManager ( Pawn . InvManager ) ;
if ( KFIM != none )
{
KFIM . bInfiniteWeight = true ;
NewWeap = super . GiveWeapon ( WeaponClassStr ) ;
KFIM . bInfiniteWeight = false ;
}
return NewWeap ;
}
/ * *
* Give the player han ' s dual mkbs
* /
simulated exec function MKB ( )
{
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_DualMKb42_Hans" ) ;
}
/ * *
* Give the player the Minigun
* /
simulated exec function Minigun ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Minigun" ) ;
}
2020-12-13 15:09:05 +00:00
/ * *
* Give the player the Vampire
* /
simulated exec function Vampire ( )
{
GiveWeapon ( "KFGameContent.KFWeap_HRG_Vampire" ) ;
}
2021-03-02 11:56:51 +00:00
/ * *
* Give the player the HRG SonicGun
* /
simulated exec function SonicGun ( )
{
GiveWeapon ( "KFGameContent.KFWeap_HRG_SonicGun" ) ;
}
2020-12-13 15:01:13 +00:00
/ * *
* Give the player all pistol weapons
* /
simulated exec function Pistols ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Pistol_9mm" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_G18C" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Revolver_Rem1858" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_GrenadeLauncher_HX25" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Colt1911" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Flare" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Deagle" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_ChiappaRhino" ) ;
}
/ * *
* Give the player all dummy weapons
* /
simulated exec function DummyWeapon ( )
{
GiveWeapon ( "KFGameContent.KFWeap_AssetDummy" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Dummy" ) ;
}
/ * *
* Give the player all perk knives
* /
simulated exec function Melee ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Knife_Berserker" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Commando" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Support" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Demolitionist" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Firebug" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_FieldMedic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Gunslinger" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Sharpshooter" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_SWAT" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Knife_Survivalist" ) ;
}
/ * *
* Give the player the nailgun
* /
simulated exec function Nails ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_Nailgun" ) ;
}
/ * *
* Give the player all Berserker weapons
* /
simulated exec function Berserk ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Blunt_Crovel" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_Nailgun" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_HRGTeslauncher" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Edged_Katana" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Edged_FireAxe" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Blunt_ChainBat" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Blunt_MedicBat" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Edged_Zweihander" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Blunt_Pulverizer" ) ;
GiveWeapon ( " KFGameContent.KFWeap_Blunt_PowerGloves" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Eviscerator" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Blunt_MaceAndShield" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Edged_IonThruster" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Edged_AbominationAxe" ) ;
}
/ * *
* Give the player all Commando weapons
* /
simulated exec function Assault ( )
{
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_AR15" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Bullpup" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_AK12" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_MKB42" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_SCAR" ) ;
GiveWeapon ( "KFGameContent.KFWeap_LMG_Stoner63A" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Thompson" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_M16M203" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_FNFal" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_MedicRifleGrenadeLauncher" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Minigun" ) ;
}
/ * *
* Give the player all Support weapons
* /
simulated exec function Shotty ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_MB500" ) ;
GiveWeapon ( "KFGameContent.KFWeap_HRG_Revolver_Buckshot" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_DoubleBarrel" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_HZ12" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_M4" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_AA12" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_ElephantGun" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_DragonsBreath" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_Nailgun" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_Medic" ) ;
}
simulated exec function MineRec ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Mine_Reconstructor" ) ;
}
2020-12-13 15:09:05 +00:00
simulated exec function FrostSAxe ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Rifle_FrostShotgunAxe" ) ;
}
2020-12-13 15:01:13 +00:00
/ * *
* Give the player all Medic weapons
* /
simulated exec function Medic ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Mine_Reconstructor" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_HRG_Healthrower" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_Hemogoblin" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_HRGIncision" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_MedicRifleGrenadeLauncher" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Blunt_MedicBat" ) ;
2020-12-13 15:09:05 +00:00
GiveWeapon ( "KFGameContent.KFWeap_HRG_Vampire" ) ;
2020-12-13 15:01:13 +00:00
}
/ * *
* Give the player all Demolitionist weapons
* /
simulated exec function Demo ( )
{
GiveWeapon ( "KFGameContent.KFWeap_GrenadeLauncher_HX25" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Thrown_C4" ) ;
GiveWeapon ( "KFGameContent.KFWeap_GrenadeLauncher_M79" ) ;
GiveWeapon ( "KFGameContent.KFWeap_RocketLauncher_SealSqueal" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_M16M203" ) ;
GiveWeapon ( "KFGameContent.KFWeap_RocketLauncher_RPG7" ) ;
GiveWeapon ( "KFGameContent.KFWeap_RocketLauncher_Seeker6" ) ;
GiveWeapon ( "KFGameContent.KFWeap_GrenadeLauncher_M32" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Blunt_Pulverizer" ) ;
GiveWeapon ( "KFGameContent.KFWeap_HuskCannon" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_HRG_Kaboomstick" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Blunderbuss" ) ;
}
/ * *
* Give the player all Firebug weapons
* /
simulated exec function Firebug ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Flame_CaulkBurn" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Flare" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualFlare" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Shotgun_DragonsBreath" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_Mac10" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Flame_Flamethrower" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Beam_Microwave" ) ;
GiveWeapon ( "KFGameContent.KFWeap_HuskCannon" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Microwave" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_HRGIncendiaryRifle" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_HRGScorcher" ) ;
}
/ * *
* Give the player all dual weapons
* /
simulated exec function Dualies ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Revolver_DualRem1858" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualColt1911" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualG18" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualHRGWinterbite" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualDeagle" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_ChiappaRhinoDual" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Revolver_DualSW500" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualAF2011" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualFlare" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Dual9mm" ) ;
}
simulated exec function Singles ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Revolver_Rem1858" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Colt1911" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_HRGWinterbite" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Deagle" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_ChiappaRhino" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Revolver_SW500" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_AF2011" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_Winchester1894" ) ;
GiveWeapon ( "KFGameContent.KFWeap_GrenadeLauncher_HX25" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Flare" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_CenterfireMB464" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_9mm" ) ;
}
/ * *
* Give the player all Sharpshooter weapons
* /
simulated exec function Sharpshooter ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Rifle_Winchester1894" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_CenterfireMB464" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Bow_Crossbow" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_MosinNagant" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_M14EBR" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_RailGun" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_FNFal" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_M99" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Revolver_Rem1858" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Revolver_SW500" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Flare" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Bow_CompoundBow" ) ;
}
/ * *
* Give the player all Swat weapons
* /
simulated exec function SWAT ( )
{
GiveWeapon ( "KFGameContent.KFWeap_SMG_MP7" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_MP5RAS" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Thompson" ) ;
GiveWeapon ( "KFGameContent.KFWeap_HRG_Nailgun" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_P90" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_HK_UMP" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_Kriss" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_G18" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_Medic" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_Mac10" ) ;
}
/** Give the player all survivalist weapons */
exec function Surv ( )
{
GiveWeapon ( "KFGameContent.KFWeap_HRG_EMP_ArcGenerator" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Ice_FreezeThrower" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_LazerCutter" ) ;
2021-03-02 11:56:51 +00:00
GiveWeapon ( "KFGameContent.KFWeap_HRG_SonicGun" ) ;
2020-12-13 15:01:13 +00:00
}
/ * *
* Give the player all 3 d scope using weapons
* /
simulated exec function Scope ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Rifle_M14EBR" ) ;
}
/ * *
* Give the player all assault rifle weapons
* /
simulated exec function ScopeFOV ( float NewFOV )
{
if ( KFWeap _ScopedBase ( Pawn . Weapon ) != none )
{
KFWeap _ScopedBase ( Pawn . Weapon ) . SceneCapture . SetCaptureParameters ( , NewFOV ) ;
}
}
simulated exec function Winter ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Pistol_DualHRGWinterbite" ) ;
GiveWeapon ( "KFGameContent.KFWeapDef_HRGWinterbite" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_HRGIncision" ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_G18" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_MosinNagant" ) ;
}
simulated exec function Summer ( ) //give the player the weapons for the summer update
{
GiveWeapon ( "KFGameContent.KFWeap_Blunt_PowerGloves" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Rifle_M99" ) ;
GiveWeapon ( "KFGameContent.KFWeap_GrenadeLauncher_M32" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_Thompson" ) ;
GiveWeapon ( "KFGameContent.KFWeap_AssaultRifle_MKB42" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_ChiappaRhinoDual" ) ;
}
/ * *
* Give the player all flame weapons
* /
simulated exec function Flame ( )
{
Firebug ( ) ;
}
/ * *
* Give the player all rifle weapons
* /
simulated exec function Rifle ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Rifle_Winchester1894" ) ;
}
/ * *
* Give the player all SMG weapons
* /
simulated exec function SMG ( )
{
Swat ( ) ;
GiveWeapon ( "KFGameContent.KFWeap_SMG_Medic" ) ;
}
/ * A l l W e a p o n s
Give player all available weapons
* /
exec function AllWeapons ( )
{
GiveWeapon ( "KFGameContent.KFWeap_Pistol_9mm" ) ;
GiveWeapon ( "KFGameContent.KFWeap_Pistol_Deagle" ) ;
Assault ( ) ;
Berserk ( ) ;
Demo ( ) ;
Firebug ( ) ;
Medic ( ) ;
Swat ( ) ;
Shotty ( ) ;
Surv ( ) ;
}
/ * *
* Toggle recoil on and off for testing
* /
simulated exec function KillRecoil ( )
{
if ( Pawn != none && KFWeapon ( Pawn . Weapon ) != none )
{
KFWeapon ( Pawn . Weapon ) . maxRecoilPitch = 0 ;
KFWeapon ( Pawn . Weapon ) . minRecoilPitch = 0 ;
KFWeapon ( Pawn . Weapon ) . maxRecoilYaw = 0 ;
KFWeapon ( Pawn . Weapon ) . minRecoilYaw = 0 ;
ClientMessage ( "Recoil Disabled" , CheatType ) ;
}
}
simulated exec function WeapFOV ( float NewFov , optional bool bScaleByAspectRatio = true )
{
local float AdjustedFOV ;
local float DummyParam ;
if ( KFWeapon ( Pawn . Weapon ) != none )
{
if ( bScaleByAspectRatio )
{
AdjustedFOV = KFPlayerController ( Outer ) . CalcFOVForAspectRatio ( NewFOV , myHUD . SizeX , myHUD . SizeY , DummyParam ) ;
}
else
{
AdjustedFOV = NewFOV ;
}
KFWeapon ( Pawn . Weapon ) . SetFOV ( AdjustedFOV ) ;
}
}
/** Enables quick custom depth of field settings */
exec function QuickDOF ( bool bEnableDOF ,
optional float StaticDOFDistance = 1000. f ,
optional float Aperture = 0.25 f ,
optional float FocusBlendRate = 0. f )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none )
{
KFPC . ClientEnableDepthOfField ( bEnableDOF , StaticDOFDistance , Aperture , FocusBlendRate ) ;
}
}
/** Enables more precise DOF settings */
exec function CustomDOF ( bool bEnableDOF ,
optional float FocalDistance = 1200. f ,
optional float FocalRadius = 1200. f ,
optional float SharpRadius = 1000. f ,
optional float MinBlurSize = 0.0 f ,
optional float MaxNearBlurSize = 4.0 f ,
optional float MaxFarBlurSize = 3.0 f ,
optional float ExpFalloff = 1.0 f ,
optional float BlendInSpeed = 1.0 f ,
optional float BlendOutSpeed = 1.0 f )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none )
{
KFPC . ClientCustomDepthOfField ( bEnableDOF ,
FocalDistance ,
FocalRadius ,
SharpRadius ,
MinBlurSize ,
MaxNearBlurSize ,
MaxFarBlurSize ,
ExpFalloff ,
BlendInSpeed ,
BlendOutSpeed ) ;
}
}
simulated exec function ShowDownloadPopup ( string NewText , string NewTExt2 )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
KFPC . ShowConnectionProgressPopup ( PMT _DownloadProgress , NewText , NewTExt2 ) ;
}
/ * *
* Screen blur
* /
simulated exec function BackgroundBlur ( bool bBlur )
{
local KFPlayerController KFPC ;
local KFPawn KFP ;
KFPC = KFPlayerController ( Outer ) ;
KFP = KFPawn ( Pawn ) ;
if ( bBlur )
{
KFPC . EnableBlur ( true , 6.0 , 1.0 , 1.0 ) ;
KFPC . ConsoleCommand ( "PlayersOnly" ) ;
KFPC . EnableReflections ( false ) ;
if ( KFPC . UsingFirstPersonCamera ( ) )
{
KFP . SetFirstPersonVisibility ( false ) ;
KFP . DetachComponent ( KFP . ArmsMesh ) ;
}
}
else
{
KFPC . EnableBlur ( false , 0.0 , 1.0 , 1.0 ) ;
KFPC . ConsoleCommand ( "PlayersOnly" ) ;
KFPC . EnableReflections ( true ) ;
if ( KFPC . UsingFirstPersonCamera ( ) )
{
KFP . SetFirstPersonVisibility ( true ) ;
KFP . AttachComponent ( KFP . ArmsMesh ) ;
}
}
}
/ * *
* Hide first person weapon and hands
* /
exec function ShowHands ( bool bShow )
{
local KFPlayerController KFPC ;
local KFPawn KFP ;
KFPC = KFPlayerController ( Outer ) ;
KFP = KFPawn ( Pawn ) ;
if ( ! bShow )
{
if ( KFPC . UsingFirstPersonCamera ( ) )
{
KFP . SetFirstPersonVisibility ( false ) ;
KFP . DetachComponent ( KFP . ArmsMesh ) ;
}
}
else
{
if ( KFPC . UsingFirstPersonCamera ( ) )
{
KFP . SetFirstPersonVisibility ( true ) ;
KFP . AttachComponent ( KFP . ArmsMesh ) ;
}
}
}
/ * *
* Scale weapon shoot camera anims for testing
* /
simulated exec function ScaleShootCameraAnims ( float NewScale )
{
local int i ;
if ( Pawn != none && KFWeapon ( Pawn . Weapon ) != none )
{
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLastAnim , NewScale ) ;
for ( i = 0 ; i < KFWeapon ( Pawn . Weapon ) . FireSightedAnims . Length ; i ++ )
{
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireSightedAnims [ i ] , NewScale ) ;
}
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopSightedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLastSightedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopStartAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopStartSightedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopEndAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopEndSightedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireScopedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopScopedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLastScopedAnim , NewScale ) ;
SetWeaponCameraAnimScale ( 'Shoot_Burst2' , NewScale ) ;
SetWeaponCameraAnimScale ( 'Shoot_Burst' , NewScale ) ;
SetWeaponCameraAnimScale ( 'Shoot_Burst2_Iron' , NewScale ) ;
SetWeaponCameraAnimScale ( 'Shoot_Burst_Iron' , NewScale ) ;
}
}
/ * *
* Scale weapon shoot camera anims for testing
* /
simulated exec function RestoreShootCameraAnims ( )
{
local int i ;
if ( Pawn != none && KFWeapon ( Pawn . Weapon ) != none )
{
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLastAnim ) ;
for ( i = 0 ; i < KFWeapon ( Pawn . Weapon ) . FireSightedAnims . Length ; i ++ )
{
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireSightedAnims [ i ] ) ;
}
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopSightedAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLastSightedAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopStartAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopStartSightedAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopEndAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopEndSightedAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireScopedAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLoopScopedAnim ) ;
RestoreWeaponCameraAnimScale ( KFWeapon ( Pawn . Weapon ) . FireLastScopedAnim ) ;
RestoreWeaponCameraAnimScale ( 'Shoot_Burst2' ) ;
RestoreWeaponCameraAnimScale ( 'Shoot_Burst' ) ;
RestoreWeaponCameraAnimScale ( 'Shoot_Burst2_Iron' ) ;
RestoreWeaponCameraAnimScale ( 'Shoot_Burst_Iron' ) ;
}
}
simulated function SetWeaponCameraAnimScale ( name CameraAnimName , float NewScale )
{
local AnimSequence AnimSeq ;
local int i ;
local KFAnimNotify _CameraAnim CameraAnim ;
if ( Pawn != none && KFWeapon ( Pawn . Weapon ) != none )
{
AnimSeq = KFWeapon ( Pawn . Weapon ) . MySkelMesh . FindAnimSequence ( CameraAnimName ) ;
if ( AnimSeq != none )
{
for ( i = 0 ; i < AnimSeq . Notifies . length ; i ++ )
{
CameraAnim = KFAnimNotify _CameraAnim ( AnimSeq . Notifies [ i ] . Notify ) ;
// Set the CameraAnimScale
if ( CameraAnim != none )
{
CameraAnim . CameraAnimScale = NewScale ;
}
}
}
}
}
simulated function RestoreWeaponCameraAnimScale ( name CameraAnimName )
{
local AnimSequence AnimSeq ;
local int i ;
local KFAnimNotify _CameraAnim CameraAnim ;
if ( Pawn != none && KFWeapon ( Pawn . Weapon ) != none )
{
AnimSeq = KFWeapon ( Pawn . Weapon ) . MySkelMesh . FindAnimSequence ( CameraAnimName ) ;
if ( AnimSeq != none )
{
for ( i = 0 ; i < AnimSeq . Notifies . length ; i ++ )
{
CameraAnim = KFAnimNotify _CameraAnim ( AnimSeq . Notifies [ i ] . Notify ) ;
// Set the CameraAnimScale
if ( CameraAnim != none )
{
CameraAnim . CameraAnimScale = CameraAnim . default . CameraAnimScale ;
}
}
}
}
}
simulated exec function DramaEvent ( float Chance , optional float Duration = 3. f , optional bool bPartial )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
ClientMessage ( "DramaEvent Chance = " $Chance$ " Duration = " $Duration , CheatType ) ;
KFPlayerController ( Outer ) . bForcePartialZedTime = bPartial ;
KFGameInfo ( WorldInfo . Game ) . DramaticEvent ( Chance , Duration ) ;
KFPlayerController ( Outer ) . bForcePartialZedTime = KFPlayerController ( Outer ) . default . bForcePartialZedTime ;
}
}
exec function TestCheat ( )
{
` log("Cheat Manager works!");
}
exec function ImRich ( )
{
local KFPlayerReplicationInfo KFPRI ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPRI != None )
{
KFPRI . AddDosh ( 1000000 ) ;
}
}
exec function DoshMe ( int NewDoshAmount )
{
local KFPlayerReplicationInfo KFPRI ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPRI != None )
{
NewDoshAmount = NewDoshAmount - KFPRI . Score ;
KFPRI . AddDosh ( NewDoshAmount ) ;
}
}
//SHOPPINGSPREE COMMAND BY DISNEY NGUYEN -
//for speeding up the buying of tier 4 weapons for boss testing
//and grants a realistic amount of 5000 dosh to prevent spamming dosh throws
exec function ShoppingSpree ( )
{
//Give player 5000 dosh:
local KFPlayerReplicationInfo KFPRI ;
KFPRI = KFPlayerReplicationInfo ( PlayerReplicationInfo ) ;
if ( KFPRI != None )
{
KFPRI . AddDosh ( 5000 ) ;
}
//Open trader menu:
KFPlayerController ( Outer ) . OpenTraderMenu ( true ) ;
}
exec function HurtMe ( optional int DamageAmount = 50 )
{
if ( Pawn != none )
{
Pawn . TakeDamage ( DamageAmount , none , vect ( 0 , 0 , 0 ) , vect ( 0 , 0 , 0 ) , none ) ;
}
}
exec function DoTMe ( optional int DamageAmount = 50 )
{
KFPawn ( Pawn ) . ApplyDamageOverTime ( DamageAmount , Pawn . Controller , class 'KFDT_Fire' ) ;
}
/* Heal Player */
exec function HealMe ( optional int HealAmount = 50 )
{
if ( Pawn != none )
{
Pawn . HealDamage ( HealAmount , Pawn . Controller , none ) ;
}
}
/* Armor Player */
exec function ArmorMe ( optional int ArmorAmount = 50 )
{
if ( Pawn != none && KFPawn _Human ( Pawn ) != none )
{
KFPawn _Human ( Pawn ) . AddArmor ( ArmorAmount ) ;
}
}
exec function PlayMuzzleFlash ( )
{
local KFPawn KFP ;
KFP = KFPawn ( Pawn ) ;
if ( KFP != None )
{
KFP . WeaponAttachment . MuzzleFlash . CauseMuzzleFlash ( ) ;
}
}
exec function PlayShellEject ( )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != None )
{
if ( KFW . MuzzleFlash != None )
{
KFW . MuzzleFlash . CauseShellEject ( ) ;
}
}
}
exec function SpamShellEject ( float LifeParam = 0. f , float interval = 0.05 )
{
local KFWeapon KFW ;
if ( IsTimerActive ( nameof ( PlayShellEject ) , self ) )
{
ClearTimer ( nameof ( PlayShellEject ) , self ) ;
return ;
}
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != None )
{
if ( KFW . MuzzleFlash == None )
{
KFW . AttachMuzzleFlash ( ) ;
}
if ( KFW . MuzzleFlash != None && LifeParam > 0. f )
{
KFW . MuzzleFlash . SetShellEjectLife ( LifeParam ) ;
}
}
SetTimer ( interval , true , nameof ( PlayShellEject ) , self ) ;
}
simulated exec function TestHitZones ( )
{
local Actor TestActor ;
local vector HitLocation , HitNormal , TraceStart , TraceEnd ;
local TraceHitInfo CurrentImpact ;
TraceStart = PlayerCamera . CameraCache . POV . Location ;
TraceEnd = PlayerCamera . CameraCache . POV . Location + vector ( PlayerCamera . CameraCache . POV . Rotation ) * 2000 ;
foreach Pawn . TraceActors ( class 'Actor' , TestActor , HitLocation , HitNormal , TraceEnd , TraceStart , , CurrentImpact , TRACEFLAG _Bullet )
{
if ( ( TestActor . bBlockActors || TestActor . bProjTarget ) )
{
` log("Hit this: " $ TestActor $ " " $ CurrentImpact.HitComponent $ " " $ CurrentImpact.BoneName);
}
}
}
/* Throws a dynamic light component out in front of the player. Used for testing lighting in KF2 maps*/
exec simulated function SpawnFlare ( optional float NewBrightness = 1. f , optional float NewRadius = 512. f , optional byte R = 255 , optional byte G = 255 , optional byte B = 255 )
{
local KFDebugFlare NewFlare ;
if ( Pawn == none || Pawn . Weapon == none )
{
return ;
}
NewFlare = Pawn . Spawn ( class 'KFDebugFlare' , , , Pawn . Weapon . GetPhysicalFireStartLoc ( ) ) ;
if ( NewFlare != none )
{
NewFlare . Velocity = ( 500. f * Vector ( Pawn . Rotation ) ) + ( vect ( 0 , 0 , 1 ) * 150. f ) ;
NewFlare . FlareLight . SetLightProperties ( NewBrightness , MakeColor ( R , G , B ) ) ;
NewFlare . FlareLight . Radius = NewRadius ;
}
}
/* Clears out all flares from the map */
exec function KillFlares ( )
{
local KFDebugFlare Flare ;
foreach Pawn . DynamicActors ( class 'KFDebugFlare' , Flare )
{
Flare . Destroy ( ) ;
}
}
/** Sets maximum ammo on all weapons */
exec function AllAmmo ( )
{
local KFWeapon KFW ;
if ( Pawn == None )
return ;
ForEach Pawn . InvManager . InventoryActors ( class 'KFWeapon' , KFW )
{
KFW . AmmoCount [ 0 ] = KFW . MagazineCapacity [ 0 ] ;
KFW . AddAmmo ( KFW . GetMaxAmmoAmount ( 0 ) ) ;
KFW . AddSecondaryAmmo ( KFW . MagazineCapacity [ 1 ] ) ;
}
if ( KFInventoryManager ( Pawn . InvManager ) != none )
{
KFInventoryManager ( Pawn . InvManager ) . AddGrenades ( 100 ) ;
}
}
exec function UberAmmo ( )
{
local KFWeapon KFW ;
if ( Pawn == None )
return ;
ForEach Pawn . InvManager . InventoryActors ( class 'KFWeapon' , KFW )
{
KFW . SpareAmmoCount [ 0 ] = KFW . GetMaxAmmoAmount ( 0 ) * 3 ;
KFW . AmmoCount [ 0 ] = KFW . MagazineCapacity [ 0 ] ;
KFW . AmmoCount [ 1 ] = KFW . MagazineCapacity [ 1 ] ;
KFW . bInfiniteAmmo = true ;
}
if ( KFInventoryManager ( Pawn . InvManager ) != none )
{
KFInventoryManager ( Pawn . InvManager ) . GrenadeCount = 255 ;
}
}
exec function NoAmmo ( )
{
local KFWeapon KFW ;
if ( Pawn == None )
return ;
ForEach Pawn . InvManager . InventoryActors ( class 'KFWeapon' , KFW )
{
KFW . SpareAmmoCount [ 0 ] = 0 ;
KFW . AmmoCount [ 0 ] = 0 ;
KFW . AmmoCount [ 1 ] = 0 ;
KFW . bInfiniteAmmo = false ;
}
if ( KFInventoryManager ( Pawn . InvManager ) != none )
{
KFInventoryManager ( Pawn . InvManager ) . GrenadeCount = 0 ;
}
}
/** Turns weapon pausibility on/off */
exec function ToggleWeapCanPause ( )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != none )
{
KFW . bPauseWithPlayersOnly = ! KFW . bPauseWithPlayersOnly ;
}
}
/** Turns weapon recoil on/off */
exec function SetDebugRecoil3d ( bool bNewDebug )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != none )
{
KFW . bDebugRecoilPosition = bNewDebug ;
}
}
exec function SetIronIdleAnims ( bool bNewUseAnims )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != none )
{
if ( bNewUseAnims )
{
KFW . IdleSightedAnims [ 0 ] = '' ;
}
else
{
KFW . IdleSightedAnims [ 0 ] = KFW . default . IdleSightedAnims [ 0 ] ;
}
}
}
/** Turns weapon recoil on/off */
exec function SetISMeshCompScale ( float DebugScale )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != none )
{
KFW . IronSightMeshFOVCompensationScale = DebugScale ;
}
}
/** Turns weapon recoil on/off */
exec function NoRecoil ( )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != none )
{
KFW . maxRecoilPitch = 0 ;
KFW . minRecoilPitch = 0 ;
KFW . maxRecoilYaw = 0 ;
KFW . minRecoilYaw = 0 ;
ClientMessage ( "Recoil Disabled" , CheatType ) ;
}
}
/** Turns weapon recoil on/off */
exec function GoRecoil ( )
{
local KFWeapon KFW ;
KFW = KFWeapon ( Pawn . Weapon ) ;
if ( KFW != none )
{
KFW . maxRecoilPitch = KFW . default . maxRecoilPitch ;
KFW . minRecoilPitch = KFW . default . minRecoilPitch ;
KFW . maxRecoilYaw = KFW . default . maxRecoilYaw ;
KFW . minRecoilYaw = KFW . default . minRecoilYaw ;
ClientMessage ( "Recoil Enabled" , CheatType ) ;
}
}
exec function ShowTraderPath ( )
{
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . OpenedTrader . ShowTraderPath ( ) ;
}
exec function HideTraderPath ( )
{
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . OpenedTrader . HideTraderPath ( ) ;
}
exec function OpenTrader ( )
{
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . bTraderIsOpen = true ;
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . OpenTrader ( 300 ) ;
}
exec function OpenTraderNext ( )
{
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . bTraderIsOpen = true ;
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . OpenTraderNext ( 300 ) ;
}
exec function OpenTraderMenu ( )
{
KFPlayerController ( Outer ) . OpenTraderMenu ( true ) ;
}
/ * *
* Abbreviated FlushPersistentDebugLines
* /
exec function FPDL ( )
{
FlushPersistentDebugLines ( ) ;
}
// Debug exec to teleport player to location of actor with specified name
exec function GotoActor ( name ActorName )
{
local Actor A ;
foreach allactors ( class 'Actor' , A )
{
if ( A . Name == ActorName )
{
Ghost ( ) ;
Pawn . SetLocation ( A . Location ) ;
}
}
}
exec function AIHelp ( )
{
` log( "--------------------------------------------------------------------------------------------", true );
` log( "AI Debug Commands", true );
` log( "--------------------------------------------------------------------------------------------", true );
` log( " AIDEBUG Makes AI non-aggressive and ready to receive debug commands", true );
` log( " AISETCANATTACK True/False Sets whether the debug mode pawn should be capable of attacking you", true );
` log( " TOGGLEALLNPCDEBUG Renders names, some vital info, and a health bar above NPC heads", true );
` log( " AISTEPASIDE Forces StepAside AI Command", true );
` log( " AITOGGLEHEADTRACKING Toggles AI HeadTracking", true );
` log( " AIDEBUGTURNINPLACE Starts TurnInPlace debug command - AI will constantly turn to player", true );
` log( " AITAUNT Forces AI to execute a taunt command", true );
` log( " AIPATHTO <name> AI will attempt to move/path to KFPathnode with DebugTagName matching <name>", true );
` log( "--------------------------------------------------------------------------------------------", true );
}
/** Forces the Husk you're aiming at to become suicidal */
exec function AIHuskFlamethrower ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none && KFAIC . Pawn != none && KFAIC . Pawn . Health > 0 && KFAIC . Pawn . IsA ( 'KFPawn_ZedHusk' ) )
{
KFAIC . MovementPlugin . DisablePlugin ( ) ;
KFPawn ( KFAIC . Pawn ) . DoSpecialMove ( SM _HoseWeaponAttack , true , Pawn , 255 ) ;
}
else
{
ClientMessage ( "You must be aiming toward a living Husk to execute this command." , CheatType ) ;
}
}
/ * * R e n d e r s d e b u g s p h e r e a t N P C y o u ' r e a i m i n g a t , d r a w s a d e b u g l i n e f r o m t h e N P C " L e n g t h " u n i t s i n f r o n t i f i t .
Why ? I forget . * /
exec function DrawLineFromNPC ( optional float Length = 500. f )
{
local KFDebugLines KFDL ;
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none && KFAIC . Pawn != none )
{
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
KFDL . AddDebugSphere ( KFAIC . Pawn . Location , 32 , 8 , 0 , 255 , 0 , true ) ;
KFDL . AddDebugLine ( KFAIC . Pawn . Location , KFAIC . Pawn . Location + vector ( KFAIC . Pawn . Rotation ) * Length , 255 , 0 , 0 , true ) ;
KFDL . AddDebugText3D ( KFAIC . Pawn . Location + ( vector ( KFAIC . Pawn . Rotation ) * ( Length * 0.5 f ) ) , Length @ "Units" , true , 0 , 0 , 255 , true ) ;
}
}
exec function AllZedsTaunt ( optional bool bSlow = true )
{
local KFPawn _Monster KFPM ;
local bool bFound ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . MyKFAIC != none && KFPM . IsAliveAndWell ( ) )
{
class 'AICommand_TauntEnemy' . static . Taunt ( KFPM . MyKFAIC , KFPawn ( Pawn ) , TAUNT _EnemyKilled ) ;
bFound = TRUE ;
}
}
if ( bFound && bSlow )
{
SetTimer ( 2.5 f , false , nameof ( ZedTauntTimer ) , self ) ;
}
}
/ * * T h e b e s t c h e a t e v e r . I n f a c t y o u s h o u l d c o n s i d e r r e m o v i n g e v e r y c h e a t i n t h e g a m e e x c e p t t h i s o n e j u s t t o
save them from the humiliation of being so ridiculously inferior . That ' s assuming that this still works ( it might
not anymore ) . Nevertheless , let it stand as a monument and never be forgotten . * /
exec function SlasherTaunt ( optional bool bSlow = true )
{
local KFPawn _Monster KFPM ;
local bool bFound ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . MyKFAIC != none && KFPM . IsA ( 'KFPawn_ZedClot_Slasher' ) && KFPM . IsAliveAndWell ( ) )
{
class 'AICommand_TauntEnemy' . static . Taunt ( KFPM . MyKFAIC , KFPawn ( Pawn ) , TAUNT _EnemyKilled ) ;
bFound = TRUE ;
}
}
if ( ! bFound )
{
// Try to create one and give it one more try
SpawnDebugAI ( "ClotS" ) ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . MyKFAIC != none && KFPM . IsA ( 'KFPawn_ZedClot_Slasher' ) && KFPM . IsAliveAndWell ( ) )
{
class 'AICommand_TauntEnemy' . static . Taunt ( KFPM . MyKFAIC , KFPawn ( Pawn ) , TAUNT _EnemyKilled ) ;
bFound = TRUE ;
}
}
}
if ( bFound && bSlow )
{
SetTimer ( 2.5 f , false , nameof ( SlasherTauntTimer ) , self ) ;
}
}
/** Called by SlasherTaunt */
function ZedTauntTimer ( )
{
KFGameInfo ( WorldInfo . Game ) . DramaticEvent ( 1. f , 13 ) ;
}
/** Called by SlasherTaunt */
function SlasherTauntTimer ( )
{
KFGameInfo ( WorldInfo . Game ) . DramaticEvent ( 1. f , 13 ) ;
}
/** Toggles NPC debug line continually updated and pointing to its current anchor. */
exec function AIShowAnchor ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none && KFAIC . Pawn != none )
{
KFAIC . bDebug _DrawAnchor = ! KFAIC . bDebug _DrawAnchor ;
if ( KFAIC . bDebug _DrawAnchor )
{
ClientMessage ( "Rendering line to " $KFAIC . Pawn$ "'s anchor." , CheatType ) ;
}
}
}
/** Renders a line going "up" from the NPC's current floor, with a sphere at the end of the line */
exec function AIDebugFloor ( )
{
local KFAIController KFAIC ;
local vector Start , End ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none && KFAIC . Pawn != none )
{
Start = KFAIC . Pawn . Location + vector ( KFAIC . Pawn . Rotation ) * 64. f ;
End = Start + Pawn . Floor * 512. f ;
DrawDebugLine ( Start , End , 0 , 0 , 255 , TRUE ) ;
DrawDebugSphere ( End , 24 , 8 , 0 , 0 , 255 , TRUE ) ;
}
}
/** I have no idea what this does. Why can't anyone name their functions properly? */
exec function Puke ( optional int SeqNum , optional bool bLooping = true )
{
local KFPawn _Monster KFPM ;
local name SeqName ;
if ( SeqNum == 1 )
{
SeqName = 'Atk_Vomit_V3' ;
}
else if ( SeqNum == 2 )
{
SeqName = 'Atk_Vomit_Move_V1' ;
}
else
{
SeqName = 'Atk_Vomit_V1' ;
}
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsA ( 'KFPawn_ZedBloat' ) && KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none && KFPM . MyKFAIC . bHasDebugCommand && KFPM . PawnAnimInfo != none )
{
KFPM . PlayBodyAnim ( SeqName , EAS _FullBody , , , , bLooping ) ;
}
}
}
/ * * F o r c e s a l l l i v i n g Z e d s t o b e g i n a c t i n g a s i f t h e y j u s t l o s t t h e i r h e a d . T h e h e a d m i g h t b e t h e r e v i s i b l y , b u t
otherwise they are headless . * /
exec function AIHeadlessWander ( )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none )
{
KFPM . Health = 15. f ;
KFPM . CauseHeadTrauma ( ) ;
}
}
}
/ * * S h o w s p a t h s i n - g a m e w h i c h a r e c u r r e n t l y b l o c k e d f o r a n N P C o f t h e t y p e y o u a r e c u r r e n t l y l o o k i n g a t .
i . e , SpawnDebugAI FP , then ShowBlockedPath while aiming at him . Now you should see all pathnode connections
which he would not be permitted to use ( due to size , etc . ) . * /
exec function ShowBlockedPaths ( optional bool bSkipWalls = true , optional bool bRenderResult = true , optional bool bLogResult = true , optional float WithinPawnRadius = 0. f )
{
local KFPawn _Monster KFMP ;
local KFAIController KFAIC ;
local NavigationPoint N ;
local int SpecIdx , LocalBlockedSpecIdx , RouteCacheIdx , Cost , BlockedCount , Total ;
local bool bInBlockedPathList ;
local string BlockedStr ;
local float BlockedTimeRemaining ;
if ( ! bRenderResult && ! bLogResult )
{
bRenderResult = true ;
}
KFMP = GetKFMPFromAim ( ) ;
if ( KFMP != none && KFMP . MyKFAIC != none )
{
KFAIC = KFMP . MyKFAIC ;
if ( bLogResult )
{
` log( "===============================================================================" );
` log( "Blocked paths for " $ KFMP $ " <" $ KFMP.MyKFAIC $ "> at " $ KFMP.Location $ " [NPC Radius: " $ KFMP.GetCollisionRadius() $ " Height: " $ KFMP.GetCollisionHeight() $ "] Time: " $ WorldInfo.TimeSeconds );
` log( " " );
}
foreach WorldInfo . AllNavigationPoints ( class 'NavigationPoint' , N )
{
if ( ( WithinPawnRadius > 0. f ) && ( VSize ( N . Location - KFMP . Location ) > WithinPawnRadius ) )
{
continue ;
}
// Log info about current NavPoint
if ( bLogResult )
{
` log( " Checking " $ N );
` log( " bBlocked:" $ N.bBlocked $ " bOneWayPath:" $ N.bOneWayPath $ " ExtraCost: " $ N.ExtraCost );
if ( N . AnchoredPawn != none )
{
` log( " AnchoredPawn:" $ N.AnchoredPawn $ " LastAnchoredPawnTime:" $ N.LastAnchoredPawnTime );
}
}
// Render sphere on Nav if it's blocked for all NPCs
if ( N . bBlocked && bRenderResult )
{
DrawDebugSphere ( N . Location , 24 , 6 , 255 , 0 , 0 , TRUE ) ;
}
// Check blocked status of Nav's outgoing path connections
for ( SpecIdx = 0 ; SpecIdx < N . PathList . Length ; SpecIdx ++ )
{
bInBlockedPathList = false ;
BlockedTimeRemaining = 0. f ;
Total ++ ;
// Check the cost for Pawn type
Cost = N . PathList [ SpecIdx ] . GetCostFor ( KFMP ) ;
// Check the KFMonsterPawn's local blocked path list (these stay blocked up to 30 seconds)
for ( LocalBlockedSpecIdx = 0 ; LocalBlockedSpecIdx < KFAIC . BlockedPathList . Length ; LocalBlockedSpecIdx ++ )
{
if ( N . PathList [ SpecIdx ] == KFAIC . BlockedPathList [ LocalBlockedSpecIdx ] . BlockedReachSpec )
{
bInBlockedPathList = true ;
BlockedTimeRemaining = KFAIC . BlockedPathList [ LocalBlockedSpecIdx ] . BlockedTime ;
break ;
}
}
if ( bInBlockedPathList || N . bBlocked || ( Cost >= N . PathList [ SpecIdx ] . BLOCKEDPATHCOST ) )
{
BlockedCount ++ ;
if ( bLogResult )
{
` log( " Found blocked path for " $ KFMP $ " in NavPoint " $ N $ " [bBlocked:" $ N.bBlocked $ "][OneWay:" $ N.bOneWayPath $ "][ExtraCost:" $ N.ExtraCost $ "]" );
if ( N . AnchoredPawn != none )
{
` log( " " $ N $ "'s anchored pawn is " $ N.AnchoredPawn );
}
BlockedStr = " **** Path from " $N$ " to " $N . PathList [ SpecIdx ] . End . Actor$ " [Cost:" $Cost$ " Start:" $N . PathList [ SpecIdx ] . Start$ " End:" $N . PathList [ SpecIdx ] . End . Actor$ " ReachFlags:" $N . PathList [ SpecIdx ] . reachFlags$ "] is blocked " ;
if ( bInBlockedPathList )
{
BlockedStr = BlockedStr$ "(ReachSpec Found In " $KFAIC$ " BlockedPathList [TimeRemaining:" $BlockedTimeRemaining$ " seconds]) " ;
}
if ( N . bBlocked )
{
BlockedStr = BlockedStr$ "(" $N$ " bBlocked is TRUE) " ;
}
` log( BlockedStr );
` log( " Max Radius:" $ N.PathList[SpecIdx].CollisionRadius $ " Max Height:" $ N.PathList[SpecIdx].CollisionHeight $ " MaxLandingVelocity:" $ N.PathList[SpecIdx].MaxLandingVelocity $ " bCanCutCorners:" $ N.PathList[SpecIdx].bCanCutCorners );
for ( RouteCacheIdx = 0 ; RouteCacheIdx < KFAIC . RouteCache . Length ; RouteCacheIdx ++ )
{
if ( KFAIC . RouteCache [ RouteCacheIdx ] == N )
{
` log( " Found " $ N $ " in " $ KFAIC $ "'s routecache [Slot " $ RouteCacheIdx $ "]" );
break ;
}
}
}
if ( bRenderResult )
{
DrawDebugLine ( N . PathList [ SpecIdx ] . Start . Location , N . PathList [ SpecIdx ] . End . Actor . Location , 255 , 0 , 0 , TRUE ) ;
}
}
}
if ( bLogResult )
{
` log( "-------------------------------------------------------------------------------" );
}
}
if ( bLogResult )
{
` log( " " );
` log( " Found " $ BlockedCount $ " blocked paths (out of " $ Total $ " checked) for " $ KFMP );
` log( "===============================================================================" );
}
}
}
/ * * C u r r e n t l y o n l y w o r k s f o r F P o r C R , b u t e a s y t o a d d m o r e . S p a w n s a b r a i n d e a d Z e d t o u s e
as a reference , then renders all pathnode connections which are navigable by Zeds of the
type you specified . * /
exec function ShowReachSpecsFor ( name ZedType , optional bool bShowBlocked = true )
{
local NavigationPoint N ;
local int SpecIdx ;
local float Radius , Height ;
local KFPawn Spawned ;
local bool bShowWallPaths ;
switch ( ZedType )
{
case 'FP' :
Spawned = SpawnZed ( "FP" , , true ) ;
break ;
default :
bShowWallPaths = true ;
Spawned = SpawnZed ( "CR" , , true ) ;
}
if ( Spawned != none )
{
Radius = Spawned . GetCollisionRadius ( ) ;
Height = Spawned . GetCollisionHeight ( ) ;
}
foreach WorldInfo . AllNavigationPoints ( class 'NavigationPoint' , N )
{
if ( ! bShowWallPaths && KFWallPathNode ( N ) != none )
{
continue ;
}
for ( SpecIdx = 0 ; SpecIdx < N . PathList . Length ; SpecIdx ++ )
{
if ( ( N . PathList [ SpecIdx ] . CollisionRadius >= Radius && N . PathList [ SpecIdx ] . CollisionHeight >= Height ) )
{
//DrawDebugLine( N.PathList[SpecIdx].Start.Location, N.PathList[SpecIdx].End.Actor.Location, 255, 0, 0, true );
DrawDebugLine ( N . PathList [ SpecIdx ] . Start . Location , N . PathList [ SpecIdx ] . End . Actor . Location , 0 , 255 , 0 , true ) ;
}
else if ( bShowBlocked )
{
DrawDebugLine ( N . PathList [ SpecIdx ] . Start . Location , N . PathList [ SpecIdx ] . End . Actor . Location , 255 , 0 , 0 , true ) ;
}
}
}
if ( Spawned != none )
{
Spawned . Destroy ( ) ;
}
}
/** Dumps KFPathnodes with DebugTags to the log file. */
exec function DumpDebugNodes ( )
{
local KFPathnode KFPN ;
foreach WorldInfo . AllActors ( class 'KFPathnode' , KFPN )
{
if ( KFPN . DebugTag != '' )
{
` log( "Found " $ KFPN $ " with DebugTag " $ KFPN.DebugTag $ " at " $ KFPN.Location );
}
}
}
/** Attempts to safely teleport you to the KFPathnode with a DebugTag matching TagName */
exec function GotoDebugNode ( name TagName )
{
local KFPathnode KFPN ;
foreach WorldInfo . AllActors ( class 'KFPathnode' , KFPN )
{
if ( KFPN . DebugTag != '' && KFPN . DebugTag == TagName )
{
if ( bCollideWorld )
{
Ghost ( ) ;
}
if ( ! Pawn . SetLocation ( KFPN . Location + vect ( 0 , 0 , 32 ) ) )
{
ClientMessage ( "Ghost mode is on, but I failed to set your location!" , CheatType ) ;
}
else
{
ClientMessage ( "Teleported to " $KFPN$ "'s location [" $KFPN . Location$ "] - Ghost Mode is on" , CheatType ) ;
}
}
}
}
/ * * R e n d e r s a n y K F P a t h n o d e s w i t h D e b u g T a g s , a l o n g w i t h t h e i r D e b u g T a g s . K F D e b u g L i n e s m u s t b e
enabled either in the . ini ( bAdvDebugLines = true ) or by using the "KFDL" cheat to turn them on . * /
exec function ShowDebugNodes ( bool bOn = true )
{
local KFDebugLines KFDL ;
local KFPathNode NP ;
local float WidestRadius ;
local int i ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
if ( KFDL != none )
{
foreach allactors ( class 'KFPathNode' , NP )
{
if ( NP . DebugTag != '' && NP . DebugTag != NP . Class . Name )
{
if ( bOn )
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
if ( WidestRadius == 0. f || ( NP . PathList [ i ] . CollisionRadius < WidestRadius ) )
{
WidestRadius = NP . PathList [ i ] . CollisionRadius ;
}
}
KFDL . AddDebugSphere ( NP . Location , WidestRadius , 8 , 0 , 255 , 0 , false , 120. f ) ;
KFDL . AddDebugText3D ( NP . Location + vect ( 0 , 0 , 12 ) , NP$ ": " $NP . DebugTag , true , 20 , 70 , 150 , false , 120. f ) ;
WidestRadius = 0. f ;
}
else
{
KFDL . ClearAll ( ) ;
}
}
}
}
}
/** Overrides peripheral vision of the NPC you are aiming at */
exec function AISetPeriph ( float NewPeripheralVision )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
KFAIC . MyKFPawn . PeripheralVision = NewPeripheralVision ;
ClientMessage ( KFAIC . MyKFPawn$ "'s peripheral vision is now " $KFAIC . MyKFPawn . PeripheralVision , CheatType ) ;
}
exec function AIDebugVision ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( true ) ;
if ( ! KFAIC . bHasDebugCommand )
{
ClientMessage ( KFAIC . MyKFPawn$ " must have a controller in debug mode first!" , CheatType ) ;
}
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . Debug _Vision ( Pawn ) ;
}
exec function AISetSightRadius ( float NewSightRadius )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
KFAIC . MyKFPawn . SightRadius = NewSightRadius ;
ClientMessage ( KFAIC . MyKFPawn$ "'s sightradius is now " $KFAIC . MyKFPawn . PeripheralVision , CheatType ) ;
}
/** Show when paths were last built */
exec function PathInfo ( )
{
ClientMessage ( "Paths last built: " $WorldInfo . LastSuccessfulPathBuildTime , CheatType ) ;
}
2020-12-13 15:09:05 +00:00
/** Sends all active NPCs and not-yet-spawned NPCs into or out of debug mode */
2020-12-13 15:01:13 +00:00
exec function AIDebugMode ( optional bool bDebugMode = true )
{
local KFGameInfo KFG ;
local KFAIDirector AIManager ;
KFG = KFGameInfo ( WorldInfo . Game ) ;
if ( KFG != none )
{
AIManager = KFG . GetAIDirector ( ) ;
if ( AIManager != none )
{
AIManager . SetAIDebug ( bDebugMode ) ;
if ( bDebugMode )
{
ClientMessage ( "Debug mode turned on for active NPCs, and new NPCs will spawn in debug mode." , CheatType ) ;
}
else
{
ClientMessage ( "Debug mode turned off for active NPCs, and new NPCs will no longer spawn in debug mode." , CheatType ) ;
}
}
}
}
/** Draw the melee attack ranges of zeds*/
exec function ShowDebugStrikeRanges ( optional bool bShowAll = false )
{
ConsoleCommand ( "SETNOPEC KFAIController bDebug_ShowStrikeRange true" ) ;
if ( bShowAll )
{
ConsoleCommand ( "SETNOPEC KFAIController bDebug_ShowAllStrikeRange true" ) ;
}
else
{
ConsoleCommand ( "SETNOPEC KFAIController bDebug_ShowAllStrikeRange false" ) ;
}
}
/** Hide the melee attack ranges of zeds */
exec function HideDebugStrikeRanges ( )
{
ConsoleCommand ( "SETNOPEC KFAIController bDebug_ShowStrikeRange false" ) ;
ConsoleCommand ( "SETNOPEC KFAIController bDebug_ShowAllStrikeRange false" ) ;
}
/** Sends all NPCs, or just the NPC aimed at, into debug mode */
exec function AIDebug ( optional bool bAllZeds = false )
{
local KFAIController KFAIC ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . Pawn != none && KFAIC . Pawn . IsAliveAndWell ( ) )
{
if ( bAllZeds || ( IsAimingAt ( KFAIC . Pawn , 0.95 f ) ) )
{
KFAIC . StopAllLatentMovement ( ) ;
KFAIC . AbortMovementCommands ( ) ;
KFAIC . AbortMovementPlugIns ( ) ;
KFAIC . BeginDebugCommand ( ) ;
}
}
}
}
/** Begins AICommand_flee */
exec function AIFlee ( optional float FleeDuration , optional float FleeDistance = 5000. f )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none )
{
KFAIC . DoFleeFrom ( GetMyPawn ( ) , FleeDuration , FleeDistance ) ;
}
}
/** Begins AICommand_wander */
exec function AIWander ( optional bool bWanderTowardMe , optional bool bWanderAwayFromMe , optional float WanderDuration = - 1. f , optional float MaxWanderDistance = 10000. f )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none )
{
if ( bWanderTowardMe || bWanderAwayFromMe )
{
KFAIC . DoWander ( GetMyPawn ( ) , WanderDuration , bWanderAwayFromMe , MaxWanderDistance ) ;
}
else
{
KFAIC . DoWander ( , WanderDuration , false , MaxWanderDistance ) ;
}
}
}
exec function AIDebugSteering ( )
{
local AICommand _Debug DebugCommand ;
DebugCommand = GetDebugAICommand ( ) ;
if ( DebugCommand != none )
{
DebugCommand . Debug _Steering ( ) ;
}
}
exec function AIDebugStepAside ( optional bool bOn = true )
{
local AICommand _Debug DebugCommand ;
DebugCommand = GetDebugAICommand ( ) ;
if ( DebugCommand != none )
{
DebugCommand . Debug _StepAside ( bOn ) ;
}
}
exec function ShowAIStuckNpcsToggle ( )
{
local KFAIController KFAIC ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . ShowStuckNpcsToggle ( ) ;
}
}
exec function ToggleShowVisualStuckZedDebugInfo ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowVisualStuckZedDebugInfo = ! kfGameInfo . AIDirector . bShowVisualStuckZedDebugInfo ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowVisualStuckZedDebugInfo = ! KFAIC . bShowVisualStuckZedDebugInfo ;
` log("ToggleShowVisualStuckZedDebugInfo - " @ KFAIC.bShowVisualStuckZedDebugInfo);
}
}
exec function ToggleShowMovePointsDebugInfo ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowMovePointsDebugInfo = ! kfGameInfo . AIDirector . bShowMovePointsDebugInfo ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowMovePointsDebugInfo = ! KFAIC . bShowMovePointsDebugInfo ;
` log("ToggleShowMovePointsDebugInfo - " @ KFAIC.bShowMovePointsDebugInfo);
}
}
exec function ToggleShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState = ! kfGameInfo . AIDirector . bShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState = ! KFAIC . bShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState ;
` log("ToggleShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState - " @ KFAIC.bShowCollisionRadiusForReducedZedOnZedPinchPointCollisionState);
}
}
exec function ToggleShowHighDetailCombatMovementDebugInfo ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowHighDetailCombatMovementDebugInfo = ! kfGameInfo . AIDirector . bShowHighDetailCombatMovementDebugInfo ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowHighDetailCombatMovementDebugInfo = ! KFAIC . bShowHighDetailCombatMovementDebugInfo ;
` log("ToggleShowVisualStuckZedDebugInfo - " @ KFAIC.bShowHighDetailCombatMovementDebugInfo);
}
}
exec function ToggleShowLeapDownDebugArtifacts ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowLeapDownDebugArtifacts = ! kfGameInfo . AIDirector . bShowLeapDownDebugArtifacts ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowLeapDownDebugArtifacts = ! KFAIC . bShowLeapDownDebugArtifacts ;
` log( GetFuncName() @ " - " @ KFAIC.bShowLeapDownDebugArtifacts);
}
}
exec function ToggleShowDoorNavigationDebugArtifacts ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowDoorNavigationDebugArtifacts = ! kfGameInfo . AIDirector . bShowDoorNavigationDebugArtifacts ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowDoorNavigationDebugArtifacts = ! KFAIC . bShowDoorNavigationDebugArtifacts ;
` log( GetFuncName() @ " - " @ KFAIC.bShowDoorNavigationDebugArtifacts);
}
}
exec function ToggleShowDestructibleNavigationDebugArtifacts ( )
{
local KFAIController KFAIC ;
local KFGameInfo kfGameInfo ;
if ( KFGameInfo ( WorldInfo . Game ) == none )
{
return ;
}
kfGameInfo = KFGameInfo ( WorldInfo . Game ) ;
kfGameInfo . AIDirector . bShowDestructibleNavigationDebugArtifacts = ! kfGameInfo . AIDirector . bShowDestructibleNavigationDebugArtifacts ;
foreach AllActors ( class 'KFAIController' , KFAIC )
{
KFAIC . bShowDestructibleNavigationDebugArtifacts = ! KFAIC . bShowDestructibleNavigationDebugArtifacts ;
` log( GetFuncName() @ " - " @ KFAIC.bShowDestructibleNavigationDebugArtifacts);
}
}
exec function CheckReachSpecs ( )
{
local NavigationPoint NP ;
local int i , x , iCount ;
local array < NavigationPoint > Templist ;
foreach WorldInfo . AllNavigationPoints ( class 'NavigationPoint' , NP )
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
if ( NP . PathList [ i ] . End . Actor == none )
{
` log( NP $ " FOUND NO END FOR REACHSPEC " $ NP.PathList[i] $ " in slot " $ i );
}
TempList . AddItem ( NavigationPoint ( NP . PathList [ i ] . End . Actor ) ) ;
}
for ( x = 0 ; x < NP . PathList . Length ; x ++ )
{
iCount = 0 ;
for ( i = 0 ; i < Templist . Length ; i ++ )
{
if ( NavigationPoint ( NP . PathList [ x ] . End . Actor ) == Templist [ i ] )
{
if ( iCount > 0 )
{
` log( "FOUND DUPE REACHSPEC (" $ NP.PathList[x] $ " IN " $ NP $ " LEADING TO " $ Templist[ i ] );
}
iCount ++ ;
}
}
}
TempList . Length = 0 ;
}
}
/ * *
* Gets KFAIController from player ' s aim
* @ param bOnlyPawnsWithDebug ( Optional )
* @ return Aimed - at KFPawn _Monster ' s KFAIController
* /
function KFAIController GetKFAICFromAim ( optional bool bOnlyPawnsWithDebug , optional float Epsilon = 0.92 f )
{
local KFPawn _Monster KFPM ;
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none && IsAimingAt ( KFPM , Epsilon ) )
{
if ( bOnlyPawnsWithDebug && ! KFPM . MyKFAIC . bHasDebugCommand )
{
continue ;
}
return KFPM . MyKFAIC ;
}
}
return none ;
}
/ * *
* Gets KFPawn _Monster from player ' s aim
* @ param bOnlyPawnsWithDebug ( Optional )
* @ return Aimed - at KFPawn _Monster
* /
function KFPawn _Monster GetKFMPFromAim ( optional bool bOnlyPawnsWithDebug )
{
local KFPawn _Monster KFPM ;
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) && IsAimingAt ( KFPM , 0.95 f ) )
{
if ( KFPM . MyKFAIC != none && ( bOnlyPawnsWithDebug && ! KFPM . MyKFAIC . bHasDebugCommand ) )
{
continue ;
}
return KFPM ;
}
}
return none ;
}
exec function ToggleDebugCamera ( optional bool bDrawDebugText = true )
{
//ToggleAllOnScreenText();
bGodMode = true ;
super . ToggleDebugCamera ( bDrawDebugText ) ;
}
/** Same as above, but abbreviated name */
exec function TDC ( optional bool bDrawDebugText = true )
{
ToggleDebugCamera ( bDrawDebugText ) ;
}
function EnableDebugCamera ( bool bEnableDebugText )
{
Super . EnableDebugCamera ( bEnableDebugText ) ;
KFDebugCameraController ( DebugCameraControllerRef ) . bDebugSceneEnabled = bDebugSceneEnabled ;
KFDebugCameraController ( DebugCameraControllerRef ) . DebugSceneCamera = DebugSceneCamera ;
KFDebugCameraController ( DebugCameraControllerRef ) . DebugTarget = DebugTarget ;
}
exec function DumpInfoForAI ( optional bool bOutputToConsole = true )
{
local float TimeSinceLastRender ;
local string Info ;
local KFAIController KFAIC ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , KFAIC )
{
TimeSinceLastRender = ` TimeSince( KFAIC.Pawn.LastRenderTime );
Info = Info$ " \n... " $KFAIC @ KFAIC . Pawn$ "(ActvCmd:" $KFAIC . GetActionString ( ) $ ") -- TimeSinceLastRender:" @ TimeSinceLastRender @ "Enemy:" @ KFAIC . Enemy @ "AILoc:" @ KFAIC . Pawn . Location$ "\n" ;
}
if ( bOutputToConsole && Player != none && LocalPlayer ( Player ) != none )
{
LocalPlayer ( Player ) . ViewportClient . ViewportConsole . OutputText ( Info ) ;
//SendToConsole( Info );
}
` log( Info );
}
exec function ViewSelf ( optional bool bQuiet )
{
// TODO: Remove from local hud postrendered list instead
if ( ViewTarget != none && KFPawn _Monster ( ViewTarget ) != none )
{
KFPawn _Monster ( ViewTarget ) . SetDebugTextRendering ( false ) ;
SetNPCDebugCategory ( false , 'AICommands' ) ;
}
super . ViewSelf ( bQuiet ) ;
}
exec function ViewZed ( optional bool bLogBugItInfo )
{
local actor First ;
local bool bFound ;
local KFAIController C ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , C )
{
if ( C . Pawn != None && C . Pawn . Health > 0 )
{
if ( bFound || First == none )
{
First = C . Pawn ;
if ( bFound )
{
break ;
}
}
if ( C . PlayerReplicationInfo == RealViewTarget || C . Pawn == ViewTarget )
{
bFound = true ;
}
}
}
if ( first != None )
{
` log("view " $ first);
SetViewTarget ( First ) ;
SetCameraMode ( 'FreeCam' ) ;
KFPawn _Monster ( First ) . SetDebugTextRendering ( true ) ;
SetNPCDebugCategory ( true , 'AICommands' ) ;
FixFOV ( ) ;
if ( bLogBugItInfo )
{
BugItAI ( "Viewing from " $First$ ", health: " $Pawn ( First ) . Health$ " command: " $KFPawn _Monster ( First ) . MyKFAIC . GetActiveCommand ( ) ) ;
}
ClientMessage ( "Viewing from " $first$ ", type 'ViewSelf' to return to your body. Type 'Camera first' to switch to first-person." , CheatType ) ;
}
else
ViewSelf ( true ) ;
}
exec function TeleportPawnToCamera ( optional bool bToggleDebugCameraOff = false )
{
super . TeleportPawnToCamera ( bToggleDebugCameraOff ) ;
}
exec function AIMoveForward ( )
{
GetDebugAICommand ( ) . Debug _MoveForward ( ) ;
}
exec function AIHide _Debug ( )
{
local KFPawn _Monster KFPM ;
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none && IsAimingAt ( KFPM , 0.88 f ) )
{
if ( KFPM . MyKFAIC . bHasDebugCommand )
{
KFPM . MyKFAIC . SetEnemy ( Pawn ) ;
AICommand _Debug ( KFPM . MyKFAIC . GetActiveCommand ( ) ) . Debug _Hide ( ) ;
}
}
}
}
exec function AIFPRoam ( )
{
local KFPawn _Monster KFPM ;
local KFAIController KFAIC ;
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none )
{
if ( KFPM . IsA ( 'KFPawn_ZedFleshpound' ) )
{
KFAIC = KFPM . MyKFAIC ;
if ( KFAIC . bHasDebugCommand )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . GotoState ( 'Roaming' ) ;
break ;
}
}
}
}
}
exec function EnterZedVictoryState ( )
{
local KFAIController AI ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , AI )
{
AI . EnterZedVictoryState ( ) ;
}
}
exec function AddAIFilter ( coerce string Filter )
{
local KFAIController AI ;
local int Idx ;
local Name N ;
N = Name ( Filter ) ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , AI )
{
Idx = AI . AILogFilter . Find ( N ) ;
if ( Idx < 0 )
{
AI . AILogFilter [ AI . AILogFilter . Length ] = N ;
}
}
}
exec function RemoveAIFilter ( coerce string Filter )
{
local KFAIController AI ;
local int Idx ;
local Name N ;
N = Name ( Filter ) ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , AI )
{
Idx = AI . AILogFilter . Find ( N ) ;
if ( Idx >= 0 )
{
Pawn . MessagePlayer ( "Removed Filter" @ Filter ) ;
AI . AILogFilter . Remove ( Idx , 1 ) ;
}
}
}
exec function FlushAILogs ( )
{
local KFAIController GAI ;
if ( ! WorldInfo . bPlayersOnly )
{
DebugFreezeGame ( ) ;
}
foreach WorldInfo . AllControllers ( class 'KFAIController' , GAI )
{
if ( GAI . AILogFile != none )
{
GAI . AILogFile . CloseLog ( ) ;
GAI . AILogFile . Destroy ( ) ;
GAI . AILogFile = none ;
}
}
}
exec function AIFPEnrage ( )
{
local KFPawn _Monster KFPM ;
local KFAIController KFAIC ;
// local AICommand_Debug AID;
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none )
{
if ( KFPM . IsA ( 'KFPawn_ZedFleshpound' ) )
{
KFPM . MyKFAIC . Enemy = Pawn ;
KFAIC = KFPM . MyKFAIC ;
KFAIC . SetEnemy ( Pawn ) ;
KFAIC . MyKFPawn . SetEnraged ( true ) ;
}
}
}
}
exec function AIScream ( )
{
local KFPawn _Monster KFPM , Siren ;
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsA ( 'KFPawn_ZedSiren' ) && KFPM . IsAliveAndWell ( ) && KFPM . MyKFAIC != none )
{
Siren = KFPM ;
KFPM . DoSpecialMove ( SM _SonicAttack , true ) ;
}
}
foreach DynamicActors ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsA ( 'KFPawn_ZedClot' ) )
{
KFPM . MyKFAIC . Focus = Siren ;
KFPM . LookAtPawn ( Siren ) ;
}
}
}
/** Toggles debug info rendering for the Zed, if any, player is aiming at */
exec function ToggleNPCDebug ( optional name Category = 'All' )
{
local KFPawn _Monster KFPM ;
local bool bNPCDebugIsOn ;
if ( Category == '' )
{
Category = 'All' ;
}
// Clear out 'All' if we set something different
if ( Category != 'All' )
{
SetNPCDebugCategory ( False , 'All' ) ;
}
// Clear out 'AllVerbose' if we set something different
if ( Category != 'AllVerbose' )
{
SetNPCDebugCategory ( False , 'AllVerbose' ) ;
}
// See if player is aiming toward a Zed and get the Zed's controller if so.
KFPM = GetKFMPFromAim ( ) ;
if ( KFPM != none && KFPM . IsAliveAndWell ( ) )
{
bNPCDebugIsOn = KFPM . bDebug _DrawOverheadInfo ;
// Toggle it
bNPCDebugIsOn = ! bNPCDebugIsOn ;
ClientMessage ( "Turning " $ ( bNPCDebugIsOn ? "on" : "off" ) $ " debug text rendering for " $KFPM , CheatType ) ;
KFPM . SetDebugTextRendering ( bNPCDebugIsOn ) ;
SetNPCDebugCategory ( bNPCDebugIsOn , Category ) ;
}
else
{
ClientMessage ( "You must be aiming toward a living NPC to use this command, or use 'ToggleAllNPCDebug' for ALL NPCs." , CheatType ) ;
}
}
exec function AIStepAside ( optional bool bForMe )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none && KFAIC . MyKFPawn . IsAliveAndWell ( ) )
{
if ( ! bForMe )
{
ClientMessage ( KFAIC . MyKFPawn$ " stepping aside." , CheatType ) ;
KFAIC . StepAsideFor ( KFAIC . MyKFPawn , Vector ( KFAIC . MyKFPawn . Rotation ) ) ;
}
else
{
ClientMessage ( KFAIC . MyKFPawn$ " stepping out of your way." , CheatType ) ;
KFAIC . StepAsideFor ( Pawn , Vector ( Pawn . Rotation ) ) ;
}
}
}
exec function ShowAIInfo ( optional bool bOn = true )
{
local KFPawn _Monster KFMP ;
KFMP = GetKFMPFromAim ( ) ;
if ( DebugTarget != none && ! DebugTarget . bDeleteMe && DebugTarget . Health > 0 && DebugTarget . MyKFAIC != none )
{
DebugTarget . SetDebugTextRendering ( false ) ;
SetNPCDebugCategory ( false , 'AICommands' ) ;
ClientMessage ( "Turning off AICommand debugging for " $KFMP , CheatType ) ;
DebugTarget = none ;
return ;
}
if ( KFMP != none && KFMP . Health > 0 )
{
DebugTarget = KFMP ;
KFMP . SetDebugTextRendering ( bOn ) ;
SetNPCDebugCategory ( bOn , 'AICommands' ) ;
ClientMessage ( "Turning on AICommand debugging for " $KFMP , CheatType ) ;
}
}
/** Toggles debug info rendering for ALL living Zeds and any who spawn later in the game session */
exec function ToggleAllNPCDebug ( optional name Category = 'All' )
{
local KFGameInfo KFGI ;
local KFAIDirector Director ;
local KFPawn _Monster KFPM ;
local bool bNPCDebugIsOn ;
if ( Category == '' )
{
Category = 'All' ;
}
// Clear out 'All' if we set something different
if ( Category != 'All' )
{
SetNPCDebugCategory ( False , 'All' ) ;
}
// Clear out 'AllVerbose' if we set something different
if ( Category != 'AllVerbose' )
{
SetNPCDebugCategory ( False , 'AllVerbose' ) ;
}
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
// Check the current AllNPCDebug status, stored in the KFAIDirector in order to set the debug mode for any NPCs spawned later
Director = KFGI . GetAIDirector ( ) ;
if ( Director != none )
{
// Toggle it
Director . bShowAINames = ! Director . bShowAINames ;
bNPCDebugIsOn = Director . bShowAINames ;
ClientMessage ( "bShowAINames [Director] is now " $Director . bShowAINames , CheatType ) ;
ClientMessage ( "bNPCDebugIsOn is " $bNPCDebugIsOn , CheatType ) ;
}
}
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) )
{
KFPM . SetDebugTextRendering ( bNPCDebugIsOn ) ;
}
}
SetNPCDebugCategory ( bNPCDebugIsOn , Category ) ;
ClientMessage ( "Turning " $ ( bNPCDebugIsOn ? "on" : "off" ) $ " debug text rendering for NPCs" , CheatType ) ;
}
/** Sets debug info rendering for ALL living Zeds and any who spawn later in the game session */
exec function SetAllNPCDebug ( bool bTurnOn , optional name Category = 'All' )
{
local KFGameInfo KFGI ;
local KFAIDirector Director ;
local KFPawn _Monster KFPM ;
if ( Category == '' )
{
Category = 'All' ;
}
// Clear out 'All' if we set something different
if ( Category != 'All' )
{
SetNPCDebugCategory ( False , 'All' ) ;
}
// Clear out 'AllVerbose' if we set something different
if ( Category != 'AllVerbose' )
{
SetNPCDebugCategory ( False , 'AllVerbose' ) ;
}
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
// Check the current AllNPCDebug status, stored in the KFAIDirector in order to set the debug mode for any NPCs spawned later
Director = KFGI . GetAIDirector ( ) ;
if ( Director != none )
{
// Toggle it
Director . bShowAINames = bTurnOn ;
ClientMessage ( "bShowAINames [Director] is now " $Director . bShowAINames , CheatType ) ;
ClientMessage ( "bTurnOn is " $bTurnOn , CheatType ) ;
}
}
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . IsAliveAndWell ( ) )
{
KFPM . SetDebugTextRendering ( bTurnOn ) ;
}
}
SetNPCDebugCategory ( bTurnOn , Category ) ;
ClientMessage ( "Turning " $ ( bTurnOn ? "on" : "off" ) $ " debug text rendering for NPCs" , CheatType ) ;
}
simulated function SetNPCDebugCategory ( bool bTurnOn , optional name Category = 'All' )
{
local PlayerController PC ;
local KFHUDBase KFHud ;
// final local player's hud object
ForEach LocalPlayerControllers ( class 'PlayerController' , PC )
{
KFHud = KFHUDBase ( PC . MyHUD ) ;
}
if ( KFHud != None )
{
// remove debugtype if already in array
if ( INDEX _NONE != KFHud . DebugDisplay . RemoveItem ( Category ) )
{
KFHud . SaveConfig ( ) ;
}
if ( bTurnOn )
{
KFHud . ShowDebug ( Category ) ;
}
KFHud . bShowDebugInfo = false ; // Otherwise PostRenderFor is not called
}
}
// Abbreviated ToggleAllNPCDebug
exec function TAND ( optional name Category = 'All' )
{
ToggleAllNPCDebug ( Category ) ;
}
/** Show AI overhead text debug info (TODO: optional category filtering) */
exec function ShowAiDebugText ( optional bool bAffectAllZeds = false , optional name DebugCategory = 'All' )
{
local KFAIController KFAIC ;
local KFGameInfo KFGI ;
local KFAIDirector Director ;
if ( DebugCategory == '' )
{
DebugCategory = 'All' ;
}
// Clear out 'All' if we set something different
if ( DebugCategory != 'All' )
{
SetNPCDebugCategory ( False , 'All' ) ;
}
// Clear out 'AllVerbose' if we set something different
if ( DebugCategory != 'AllVerbose' )
{
SetNPCDebugCategory ( False , 'AllVerbose' ) ;
}
if ( bAffectAllZeds )
{
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
Director = KFGI . GetAIDirector ( ) ;
Director . bShowAINames = ! Director . bShowAINames ;
SetNPCDebugCategory ( Director . bShowAINames , DebugCategory ) ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , KFAIC )
{
KFAIC . bDebug _PostRenderInfo = ! KFAIC . bDebug _PostRenderInfo ;
KFAIC . bDebug _DrawOverheadInfo = KFAIC . bDebug _PostRenderInfo ;
KFAIC . SetPostRendering ( KFAIC . bDebug _PostRenderInfo ) ;
if ( KFPawn _Monster ( KFAIC . Pawn ) != none && KFPawn _Monster ( KFAIC . Pawn ) . IsAliveAndWell ( ) )
{
KFPawn _Monster ( KFAIC . Pawn ) . SetDebugTextRendering ( Director . bShowAINames ) ;
}
}
}
}
else
{
// See if player is aiming toward a Zed and get the Zed's controller if so.
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none && KFAIC . Pawn != none )
{
KFAIC . bDebug _PostRenderInfo = ! KFAIC . bDebug _PostRenderInfo ;
KFAIC . bDebug _DrawOverheadInfo = KFAIC . bDebug _PostRenderInfo ;
SetNPCDebugCategory ( KFAIC . bDebug _DrawOverheadInfo , DebugCategory ) ;
KFAIC . SetPostRendering ( KFAIC . bDebug _PostRenderInfo ) ;
if ( KFPawn _Monster ( KFAIC . Pawn ) != none && KFPawn _Monster ( KFAIC . Pawn ) . IsAliveAndWell ( ) )
{
KFPawn _Monster ( KFAIC . Pawn ) . SetDebugTextRendering ( KFAIC . bDebug _DrawOverheadInfo ) ;
}
}
}
}
exec function AIShowNames ( optional bool bOff = false )
{
local KFAIController KFAIC ;
local KFGameInfo KFGI ;
local KFAIDirector Director ;
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
Director = KFGI . GetAIDirector ( ) ;
if ( Director . bShowAINames && bOff )
{
ClientMessage ( "Turning off AIShowNames..." , CheatType ) ;
Director . bShowAINames = false ;
}
else
{
if ( Director . bShowAINames )
{
ClientMessage ( "AIShowNames is already on, enter 'AIShowNames false' to turn off." , CheatType ) ;
}
else
{
ClientMessage ( "Turning on AIShowNames..." , CheatType ) ;
}
Director . bShowAINames = true ;
}
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . bDebug _PostRenderInfo = Director . bShowAINames ;
KFAIC . bDebug _DrawOverheadInfo = Director . bShowAINames ;
//KFAIC.SetPostRendering( Director.bShowAINames );
}
}
}
exec function AIShowDebug ( )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( DebugKFAIC != none )
{
KFAIC . bDebug _DrawAIDebug = false ;
KFAIC . SetupDebug ( ) ;
DebugKFAIC = none ;
}
if ( KFAIC . Pawn != none && IsAimingAt ( KFAIC . Pawn , 0.95 f ) )
{
KFAIC . bDebug _DrawAIDebug = true ;
DebugKFAIC = KFAIC ;
KFAIC . SetupDebug ( ) ;
}
}
}
function AICommand _Debug GetDebugAICommand ( )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( IsAimingAt ( KFAIC . Pawn , 0.92 f ) )
{
if ( KFAIC . GetActiveCommand ( ) . IsA ( 'AICommand_Debug' ) )
{
return AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) ;
}
}
}
ClientMessage ( "You need to be aiming at a DebugMode Zed in order for this to work." , CheatType ) ;
return none ;
}
exec function MarkLocation ( )
{
local vector SphereLocation ;
if ( Pawn == none && DebugCameraController ( Outer ) != none )
{
SphereLocation = Outer . Location ;
}
else
{
SphereLocation = Pawn . Location ;
}
DrawDebugSphere ( SphereLocation , 36 , 8 , 255 , 255 , 0 , true ) ;
}
exec function AISetEnemyToMe ( optional bool bAllAI = false )
{
local KFAIController KFAIC ;
if ( ! bAllAI )
{
KFAIC = GetKFAICFromAim ( ) ;
if ( KFAIC != none )
{
KFAIC . SetEnemy ( Outer . Pawn ) ;
}
}
else
{
foreach WorldInfo . AllControllers ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . Pawn != none && KFAIC . Pawn . IsAliveAndWell ( ) )
{
KFAIC . SetEnemy ( Outer . Pawn ) ;
}
}
}
}
/** Change value of debug AI command bCanAttack flag */
exec function AISetCanAttack ( bool bCanAttack )
{
GetDebugAICommand ( ) . bAllowedToAttack = bCanAttack ;
ClientMessage ( GetDebugAIController ( ) . Pawn$ " " $GetDebugAICommand ( ) $ " bAllowedToAttack is now " $bCanAttack , CheatType ) ;
}
exec function GetYawRate ( )
{
local KFAIController KFAIC ;
KFAIC = GetDebugAIController ( ) ;
if ( KFAIC != none )
{
ClientMessage ( KFAIC . Pawn$ "'s RotationRate.Yaw is " $KFAIC . Pawn . RotationRate . Yaw , CheatType ) ;
}
}
exec function AIDisableBump ( )
{
local KFAIController KFAIC ;
KFAIC = GetDebugAIController ( ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
KFAIC . Disable ( 'NotifyBump' ) ;
ClientMessage ( KFAIC . Pawn$ " Bump Disabled" , CheatType ) ;
}
}
exec function AIEnableBump ( )
{
local KFAIController KFAIC ;
KFAIC = GetDebugAIController ( ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
KFAIC . Enable ( 'NotifyBump' ) ;
ClientMessage ( KFAIC . Pawn$ " Bump Enabled" , CheatType ) ;
}
}
exec function AIToggleHeadTracking ( )
{
local KFAIController KFAIC ;
KFAIC = GetDebugAIController ( ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
if ( KFAIC . MyKFPawn . bIsHeadTrackingActive )
{
KFAIC . MyKFPawn . ClearHeadTrackTarget ( GetALocalPlayerController ( ) . Pawn , 0.25 ) ;
}
else
{
KFAIC . MyKFPawn . LookAtPawn ( GetALocalPlayerController ( ) . Pawn ) ;
}
}
}
exec function TestScreamEffect ( )
{
Pawn . TakeDamage ( 1 , outer , Pawn . Location , vect ( 0 , 0 , 0 ) , class 'KFDT_Sonic' ) ;
}
function KFAIController GetDebugAIController ( optional bool bGetClosest = false , optional name inFunctionName )
{
local KFAIController KFAIC , ClosestKFAIC ;
if ( inFunctionName == '' )
{
inFunctionName = GetFuncName ( ) ;
}
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . GetActiveCommand ( ) . IsA ( 'AICommand_Debug' ) )
{
if ( bGetClosest )
{
if ( ClosestKFAIC == none )
{
ClosestKFAIC = KFAIC ;
}
else
{
if ( VSize ( KFAIC . Pawn . Location - Pawn . Location ) < VSize ( ClosestKFAIC . Pawn . Location - Pawn . Location ) )
{
ClosestKFAIC = KFAIC ;
}
}
}
else
{
if ( IsAimingAt ( KFAIC . Pawn , 0.8 f ) )
{
ClosestKFAIC = KFAIC ;
break ;
}
}
}
}
if ( ClosestKFAIC == none )
{
ClientMessage ( inFunctionName$ " : You need to be aiming at a valid NPC to do this." , CheatType ) ;
}
return ClosestKFAIC ;
}
exec function AIDebugTurnInPlace ( optional bool bEnableMelee = false )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . DoDebugTurnInPlace ( KFPlayerController ( Outer ) , bEnableMelee ) ;
}
}
exec function AIToggleTurnInPlace ( )
{
local KFAIController KFAIC ;
KFAIC = GetDebugAIController ( ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
KFAIC . MyKFPawn . bDisableTurnInPlace = ! KFAIC . MyKFPawn . bDisableTurnInPlace ;
}
if ( KFAIC . MyKFPawn . bDisableTurnInPlace )
{
ClientMessage ( KFAIC . Pawn$ " TurnInPlace disabled" , CheatType ) ;
}
else
{
ClientMessage ( KFAIC . Pawn$ " TurnInPlace enabled" , CheatType ) ;
}
}
/** Toggles ability to render KFDebugLines */
exec function ToggleKFDebugLines ( )
{
KFDL ( ) ;
}
/** Abbreviated name, toggles ability to render KFDebugLines */
exec function KFDL ( )
{
local KFGameEngine KFGEngine ;
KFGEngine = KFGameEngine ( Class 'KFGameEngine' . static . GetEngine ( ) ) ;
if ( KFGEngine != none )
{
class 'KFGameEngine' . default . bEnableAdvDebugLines = ! class 'KFGameEngine' . default . bEnableAdvDebugLines ;
ClientMessage ( "KFDebugLines on: " $class 'KFGameEngine' . default . bEnableAdvDebugLines , CheatType ) ;
}
}
exec function ClearDebugLines ( )
{
local KFDebugLines KFDL ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
if ( KFDL != none )
{
KFDL . ClearAll ( ) ;
}
}
exec function AIShowDropDowns ( bool bOn = true )
{
local KFDebugLines KFDL ;
local KFWallPathNode NP ;
local int i ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
if ( KFDL != none )
{
foreach allactors ( class 'KFWallPathNode' , NP )
{
if ( bOn )
{
if ( NP . DropDownNode != none )
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
if ( KFPathnode ( NP . PathList [ i ] . End . Actor ) == NP . DropDownNode && NP . PathList [ i ] . IsA ( 'WallToFloorReachSpec' ) )
{
KFDL . AddDebugSphere ( NP . Location , 24 , 8 , 0 , 255 , 0 , true , 250. f , NP . Name , 0 ) ;
if ( WallToFloorReachSpec ( NP . PathList [ i ] ) . bJumpDownTo )
{
KFDL . AddDebugLine ( NP . Location , NP . DropDownNode . Location , 0 , 200 , 0 , true , 220 , NP . Name , i ) ;
}
else
{
KFDL . AddDebugLine ( NP . Location , NP . DropDownNode . Location , 255 , 255 , 0 , true , 220 , NP . Name , i ) ;
}
}
}
}
}
else
{
KFDL . RemoveOwnedDebugLines ( NP . Name , 0 ) ;
KFDL . RemoveOwnedDebugSpheres ( NP . Name , 0 ) ;
}
}
}
}
exec function AIShowFloorToWallNodes ( bool bOn = true )
{
local KFDebugLines KFDL ;
local KFPathnode NP ;
local int i ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
if ( KFDL != none )
{
foreach allactors ( class 'KFPathnode' , NP )
{
if ( NP . bWallNode )
{
continue ;
}
if ( bOn )
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
if ( NP . PathList [ i ] . IsA ( 'FloortoWallReachSpec' ) )
{
KFDL . AddDebugSphere ( NP . Location , 24 , 8 , 0 , 255 , 0 , true , 250. f , NP . Name , 0 ) ;
KFDL . AddDebugLine ( NP . Location , NP . PathList [ i ] . End . Actor . Location , 100 , 200 , 150 , true , 220 , NP . Name , i ) ;
}
}
}
else
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
KFDL . RemoveOwnedDebugLines ( NP . Name , i ) ;
KFDL . RemoveOwnedDebugSpheres ( NP . Name , i ) ;
}
}
}
}
}
exec function AIShowForcedSpecs ( bool bOn = true )
{
local KFDebugLines KFDL ;
local KFPathnode NP ;
local int i ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
if ( KFDL != none )
{
foreach allactors ( class 'KFPathnode' , NP )
{
if ( NP . bWallNode )
{
continue ;
}
if ( bOn )
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
if ( NP . PathList [ i ] . IsA ( 'KFForcedReachSpec' ) )
{
KFDL . AddDebugSphere ( NP . Location , 24 , 8 , 0 , 255 , 0 , true , 250. f , NP . Name , 0 ) ;
KFDL . AddDebugLine ( NP . Location , NP . PathList [ i ] . End . Actor . Location , 100 , 200 , 150 , true , 220 , NP . Name , i ) ;
}
}
}
else
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
KFDL . RemoveOwnedDebugLines ( NP . Name , i ) ;
KFDL . RemoveOwnedDebugSpheres ( NP . Name , i ) ;
}
}
}
}
}
exec function AIShowLitNodes ( )
{
local NavigationPoint NP ;
local float ColorScale ;
local float TempFloat ;
FlushPersistentDebugLines ( ) ;
foreach allactors ( class 'NavigationPoint' , NP )
{
TempFloat = ( NP . Intensity . R + NP . Intensity . G + NP . Intensity . B ) / 3. f ;
ColorScale = Clamp ( TempFloat * 255. f , 30 , 255 ) ;
DrawDebugSphere ( NP . Location , 32 , 8 , ColorScale , ColorScale , 0 , true ) ;
}
}
exec function AIPlayTaunt ( byte TauntType )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( IsAimingAt ( KFAIC . Pawn , 0.88 f ) )
{
class 'AICommand_TauntEnemy' . static . Taunt ( KFAIC , KFPawn ( Pawn ) , ETauntType ( TauntType ) ) ;
}
}
}
exec function DebugNextPhase ( )
{
local KFAIController _ZedBoss KFAICB ;
foreach AllActors ( class 'KFAIController_ZedBoss' , KFAICB )
{
KFAICB . DebugNextPhase ( ) ;
}
}
exec function HansNextPhase ( )
{
DebugNextPhase ( ) ;
}
exec function HansGas ( )
{
local KFPawn _ZedHansBase HansPawn ;
foreach allactors ( class 'KFPawn_ZedHansBase' , HansPawn )
{
HansPawn . ANIMNOTIFY _AoENerveGas ( ) ;
}
}
exec function AISummonZeds ( int BattlePhase , int DifficultyIndex )
{
local KFAIController KFAIC ;
local KFInterface _MonsterBoss BossRef ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
BossRef = KFInterface _MonsterBoss ( KFAIC . MyKFPawn ) ;
if ( BossRef == none )
{
return ;
}
class 'AICommand_SummonZeds' . static . Summon ( KFAIC , BossRef . GetWaveInfo ( BattlePhase , DifficultyIndex ) , BossRef . GetNumMinionsToSpawn ( ) ) ;
}
}
exec function ShowBlockedPathnodes ( optional bool bOn = true )
{
local KFDebugLines KFDL ;
local int i ;
local NavigationPoint NP ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
foreach allactors ( class 'NavigationPoint' , NP )
{
if ( bOn && NP . bBlocked )
{
i ++ ;
KFDL . AddDebugSphere ( NP . Location , 24 , 12 , 0 , 255 , 0 , true , , NP . Name , i ) ;
//DrawDebugSphere( NP.Location, 24, 12, 0, 255, 0, true );
}
else
{
KFDL . RemoveOwnedDebugSpheres ( NP . Name ) ;
}
//NP.GoodSprite.SetHiddenGame( false );
}
}
exec function ShowPathnodes ( optional bool bOn = true )
{
local KFDebugLines KFDL ;
local int i ;
local NavigationPoint NP ;
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
foreach allactors ( class 'NavigationPoint' , NP )
{
if ( bOn )
{
i ++ ;
KFDL . AddDebugSphere ( NP . Location , 24 , 12 , 0 , 255 , 0 , true , , NP . Name , i ) ;
//DrawDebugSphere( NP.Location, 24, 12, 0, 255, 0, true );
}
else
{
KFDL . RemoveOwnedDebugSpheres ( NP . Name ) ;
}
//NP.GoodSprite.SetHiddenGame( false );
}
}
exec function AIMoveToMeAsEnemy ( )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . IsInDebugMode ( ) )
{
KFAIC . bIsProbingMeleeRangeEvents = false ;
KFAIC . SetEnemy ( Pawn ) ;
KFAIC . Enemy = Pawn ;
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . LastDebugGoal = KFAIC . Enemy ;
KFAIC . SetEnemyMoveGoal ( none , true , , , false ) ;
}
}
}
exec function AIEnableMeleeEvents ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
KFAIC . EnableMeleeRangeEventProbing ( ) ;
}
exec function AIDisableMeleeEvents ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( ) ;
KFAIC . DisableMeleeRangeEventProbing ( ) ;
}
exec function AIPathTo ( name DebugGoalName , optional float OffsetDistance = 0. f , optional bool bMarkGoalLocation )
{
local KFPathNode CheckNode ;
local actor DebugGoal ;
local KFAIController KFAIC ;
local KFPawn KFP ;
if ( DebugGoalName == '' )
{
ClientMessage ( "Use the Tag property in KFPathNodes, and specify that name to have AI path to a specific node. Exampe: AIPathTo TestGoal. PLAYER is also a valid argument." , CheatType ) ;
return ;
}
if ( DebugGoalName != 'Player' )
{
foreach WorldInfo . AllNavigationPoints ( class 'KFPathnode' , CheckNode )
{
if ( CheckNode . DebugTag == DebugGoalName )
{
DebugGoal = CheckNode ;
break ;
}
}
}
else
{
DebugGoal = GetALocalPlayerController ( ) . Pawn ;
}
if ( DebugGoal == none )
{
foreach allactors ( class 'KFPawn' , KFP )
{
if ( KFP . Controller == None || ! KFP . Controller . IsA ( 'KFAIController' ) )
{
DebugGoal = KFP ;
break ;
}
}
if ( DebugGoal == none )
{
ClientMessage ( "Cannot find a valid goal for '" $DebugGoalName$ "." , CheatType ) ;
return ;
}
}
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . IsInDebugMode ( ) )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . LastDebugGoal = DebugGoal ;
ClientMessage ( KFAIC . Pawn$ " Moving to " $DebugGoal$ " with an offset distance of " $OffsetDistance , CheatType ) ;
}
}
if ( bMarkGoalLocation )
{
ClientMessage ( "Type 'FlushPersistentDebugLines' to remove the debug sphere at goal location" , CheatType ) ;
DrawDebugSphere ( DebugGoal . Location , 32 , 8 , 189 , 183 , 107 , TRUE ) ;
}
}
exec function AIDebugCrawler ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( true ) ;
if ( KFAIC == none || ! KFAIC . IsA ( 'KFAIController_ZedCrawler' ) )
{
ClientMessage ( "You must be aiming at a debug-mode NPC!" ) ;
return ;
}
KFAIC . Pawn . bDebugCrawlerPhysics = ! KFAIC . Pawn . bDebugCrawlerPhysics ;
ClientMessage ( "DebugCrawler is now " $KFAIC . Pawn . bDebugCrawlerPhysics$ " for " $KFAIC . Pawn , CheatType ) ;
if ( KFAIC . Pawn . bDebugCrawlerPhysics )
{
ClientMessage ( "Warning - PlayersOnly will be activated throughout " $KFAIC . Pawn$ "'s moves." , CheatType , 13. f ) ;
}
}
exec function AITestCrawler ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( true ) ;
if ( KFAIC == none )
{
ClientMessage ( "You must be aiming at a debug-mode NPC!" , CheatType ) ;
}
if ( ! KFAIC . bHasDebugCommand )
{
ClientMessage ( KFAIC . MyKFPawn$ " must have a controller in debug mode first!" , CheatType ) ;
}
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . Debug _DebugNodes ( ) ;
}
exec function AITestCrawlers ( )
{
local KFAIController _ZedCrawler KFAIC ;
foreach WorldInfo . AllControllers ( class 'KFAIController_ZedCrawler' , KFAIC )
{
if ( KFAIC . bHasDebugCommand )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . Debug _DebugNodes ( ) ;
}
}
}
exec function AITestCrawlerAttack ( )
{
local KFAIController _ZedCrawler KFAIC ;
foreach WorldInfo . AllControllers ( class 'KFAIController_ZedCrawler' , KFAIC )
{
if ( KFAIC . bHasDebugCommand )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . Debug _CrawlerAttack ( ) ;
}
}
}
exec function AITestGrab ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( false , 0.9 f ) ;
if ( KFAIC != none )
{
if ( AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) != none )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . bAllowedToAttack = true ;
}
KFAIC . DoGrabAttack ( Pawn , 5. f ) ;
if ( AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) != none )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . bAllowedToAttack = false ;
}
}
}
exec function AIHansTestGrenadeTrajectory ( optional float Speed = 2500 , optional float ZPct = 0.45 f )
{
local KFAIController _Hans KFAIC ;
local vector EstimatedStartThrowLocation , TossVelocity ;
foreach WorldInfo . AllControllers ( class 'KFAIController_Hans' , KFAIC )
{
if ( KFAIC != none )
{
EstimatedStartThrowLocation = KFAIC . Pawn . GetPawnViewLocation ( ) + ( vect ( 15 , 32 , - 12 ) >> KFAIC . Pawn . GetViewRotation ( ) ) ;
if ( ! KFAIC . Pawn . SuggestTossVelocity ( TossVelocity , GetMyPawn ( ) . Location , EstimatedStartThrowLocation , Speed , , ZPct ) )
{
ClientMessage ( "FAIL for Speed:" $Speed$ " ZPCt:" $ZPct$ " 2DDist: " $VSize2D ( KFAIC . Pawn . Location - GetMyPawn ( ) . Location ) $ " ZDiff:" $abs ( KFAIC . Pawn . Location . Z - GetMyPawn ( ) . Location . Z ) , CheatType ) ;
}
else
{
ClientMessage ( "SUCCESS for Speed:" $Speed$ " ZPCt:" $ZPct$ " 2DDist: " $VSize2D ( KFAIC . Pawn . Location - GetMyPawn ( ) . Location ) $ " ZDiff:" $abs ( KFAIC . Pawn . Location . Z - GetMyPawn ( ) . Location . Z ) , CheatType ) ;
}
}
}
}
/** Make Hans, if you're looking at him, attempt to do his grenade attack */
exec function AIHansGrenade ( optional bool bGrenadeBarrage )
{
local KFAIController _Hans KFAIC ;
KFAIC = KFAIController _Hans ( GetKFAICFromAim ( false , 0.9 f ) ) ;
if ( KFAIC != none )
{
KFAIC . Enemy = GetMyPawn ( ) ;
KFAIC . DoGrenadeThrow ( bGrenadeBarrage ) ;
}
}
/** Same as AITestGrab but doesn't require aiming at the NPC (in order to test code which auto-rotates player to face the NPC */
exec function AITestHansGrab ( )
{
local KFAIController _Hans KFAIC ;
foreach WorldInfo . AllControllers ( class 'KFAIController_Hans' , KFAIC )
{
if ( AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) != none )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . bAllowedToAttack = true ;
}
KFAIC . DoGrabAttack ( Pawn , 5. f ) ;
if ( AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) != none )
{
AICommand _Debug ( KFAIC . GetActiveCommand ( ) ) . bAllowedToAttack = false ;
}
}
}
exec function AISetDebugColor ( byte R , byte G , byte B )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . Debug _TextColorOverride = MakeColor ( R , G , B , 255 ) ;
}
}
exec function AISetDebugColorR ( byte R )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . Debug _TextColorOverride . R = R ;
}
}
exec function AISetDebugColorG ( byte G )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . Debug _TextColorOverride . G = G ;
}
}
exec function AISetDebugColorB ( byte B )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . Debug _TextColorOverride . B = B ;
}
}
exec function AISetDebugColorA ( byte A )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
KFAIC . Debug _TextColorOverride . A = A ;
}
}
exec function AIDebugEnemy ( )
{
GetDebugAICommand ( ) . Debug _Enemy ( Pawn ) ;
}
exec function DumpReachSpecs ( )
{
local int i , Count ;
local NavigationPoint Nav , StartNav , EndNav ;
local float Length , TotalDist ;
foreach WorldInfo . AllNavigationPoints ( class 'NavigationPoint' , Nav )
{
` log( "--------------------------------------------------------------------------------" );
` log( "Checking Nav: " $ Nav );
for ( i = 0 ; i < Nav . PathList . Length ; i ++ )
{
StartNav = Nav ;
EndNav = Nav . PathList [ i ] . GetEnd ( ) ;
if ( ! Nav . PathList [ i ] . IsA ( 'ProscribedReachSpec' ) )
{
Count ++ ;
if ( StartNav != none && EndNav != none )
{
Length = VSize ( EndNav . Location - Nav . Location ) ;
` log( " " $ Nav.PathList[i] $ " connected to " $ EndNav $ " " $ Length $ " length" );
TotalDist += Length ;
}
}
}
}
` log( "Avg Dist: " $ TotalDist / Count );
}
/** Kill all zeds except the one I'm currently aiming at */
exec function KillOtherZeds ( )
{
local KFPawn _Monster AIP ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , AIP )
{
if ( AIP . Health > 0 && ! IsAimingAt ( AIP , 0.98 f ) )
{
AIP . TakeDamage ( 20000 , Outer , AIP . Location , Vect ( 0 , 0 , 0 ) , class 'KFDamageType' ) ;
}
}
}
` if( ` notdefined ( ShippingPC ) )
exec function DoActionScriptVoidOnMenu ( String VoidCommand )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none && KFPC . MyGFxManager != none && KFPC . MyGFxManager . CurrentMenu != none )
{
KFPC . MyGFxManager . CurrentMenu . ActionScriptVoid ( VoidCommand ) ;
}
}
` endif
exec function KillZeds ( optional float KillDistance = 0. f , optional bool LogKilledZedInfo = true )
{
local PlayerController KFPC ;
local DebugCameraController DCC ;
local KFPawn _Monster AIP ;
local Pawn MyPawn ;
` if( ` notdefined ( ShippingPC ) )
local string GoString , LocString ;
local PlayerController PC ;
` endif
KFPC = Outer ;
if ( KFPC != none )
{
DumpInfoForAI ( ) ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , AIP )
{
if ( ! AIP . IsAliveAndWell ( ) )
{
continue ;
}
if ( KillDistance > 0. f )
{
if ( Pawn != none )
{
MyPawn = Pawn ;
}
// If in DebugCameraController mode
else if ( DebugCameraController ( KFPC ) != none )
{
DCC = DebugCameraController ( KFPC ) ;
if ( DCC != none && DCC . OriginalControllerRef != none && DCC . OriginalControllerRef . Pawn != none )
{
MyPawn = DCC . OriginalControllerRef . Pawn ;
}
}
if ( MyPawn != none && ( VSizeSq ( AIP . Location - MyPawn . Location ) > ( KillDistance * KillDistance ) ) )
{
` log( self $ " Not killing " $ AIP $ " who is " $ VSize( AIP.Location - MyPawn.Location) $ " units away" );
continue ;
}
}
if ( AIP . Health > 0 )
{
` if( ` notdefined ( ShippingPC ) )
// Send a bugit string to the log file, dump the AI command history if possible and log some other info - in case motivation was to kill stragglers to end a wave
if ( LogKilledZedInfo && AIP . MyKFAIC != none )
{
AIP . MyKFAIC . AIBugItStringCreator ( AIP . Location , AIP . Rotation , GoString , LocString ) ;
` log( GetFuncName() $ "() Killing " $ AIP $ " at " $ AIP.Location $ ", MySpawnVolume:" $ AIP.MyKFAIC.MySpawnVolume $ " Health:" $ AIP.Health $ " Velocity:" $ AIP.Velocity $ " Phys:" $ AIP.GetPhysicsName() $ " MoveTarget:" $ AIP.MyKFAIC.MoveTarget!=none?AIP.MyKFAIC.MoveTarget.name:'None' );
// AIP.MyKFAIC.DumpCommandHistory();
//DumpInfoForAI( false );
}
` endif
if ( PlayerController ( AIP . Controller ) == none )
{
AIP . Died ( none , none , AIP . Location ) ;
}
}
}
` if( ` notdefined ( ShippingPC ) )
foreach WorldInfo . AllControllers ( class 'PlayerController' , PC )
{
if ( PC == outer )
{
if ( KillDistance > 0. f )
{
PC . ClientMessage ( "You killed all Zeds within " $KillDistance$ " units." , CheatType ) ;
}
else
{
PC . ClientMessage ( "You killed all Zeds." , CheatType ) ;
}
}
else if ( KillDistance > 0. f )
{
PC . ClientMessage ( Pawn$ " Killed all Zeds" , CheatType ) ;
}
else
{
PC . ClientMessage ( Pawn$ " Killed all Zeds within " $KillDistance$ " units." , CheatType ) ;
}
}
` endif
}
}
/** force all fleshpounds to toggle rage */
exec function AIRage ( )
{
local KFPawn _Monster P ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
if ( P . IsAliveAndWell ( ) && P . IsA ( 'KFPawn_ZedFleshpound' ) && ! P . IsEnraged ( ) && IsAimingAt ( P , 0.95 ) )
{
P . MyKFAIC . SetEnemy ( Pawn ) ;
P . SetEnraged ( true ) ;
}
}
}
exec function ShowCrawlerPath ( optional bool bAllowPartial = false , optional int OverrideFloorCostMin , optional int OverrideFloorCostMax )
{
local KFPawn _Monster KFPM ;
local actor Result ;
local KFGameEngine KFGEngine ;
local KFDebugLines KFDL ;
KFGEngine = KFGameEngine ( Class 'KFGameEngine' . static . GetEngine ( ) ) ;
if ( KFGEngine != none )
{
class 'KFGameEngine' . default . bEnableAdvDebugLines = true ;
}
// foreach WorldInfo.AllNavigationPoints( class'KFPathnode', KFPN )
// {
// KFPN.ForceClearForPathfinding();
// }
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . Health > 0 && KFPM . bCrawler && KFPM . MyKFAIC != none && KFPM . MyKFAIC . bHasDebugCommand )
{
KFPM . MyKFAIC . RouteCache . Length = 0 ;
if ( OverrideFloorCostMin > 0 && OverrideFloorCostMax > 0 )
{
//ClientMessage( "Using "$OverrideFloorCost$" floor cost instead of "$KFAIController_ZedCrawler(KFPM.MyKFAIC).ExtraCostForFloorNodes, CheatType );
KFAIController _ZedCrawler ( KFPM . MyKFAIC ) . MinExtraCostForFloorNodes = OverrideFloorCostMin ;
KFAIController _ZedCrawler ( KFPM . MyKFAIC ) . MaxExtraCostForFloorNodes = OverrideFloorCostMax ;
}
KFDL = class 'KFDebugLines' . static . GetDebugLines ( ) ;
Result = KFPM . MyKFAIC . GeneratePathTo ( GetMyPawn ( ) , , bAllowPartial ) ;
if ( Result == none )
{
ClientMessage ( KFPM$ " failed to build path" , CheatType ) ;
}
KFDL . ClearAll ( ) ;
KFPM . MyKFAIC . KFDebug _DrawMyPath ( ) ;
}
}
}
exec function AIDebugLOS ( )
{
local KFPawn _Monster KFPM ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , KFPM )
{
if ( KFPM . MyKFAIC . bHasDebugCommand && KFPM . IsAliveAndWell ( ) )
{
AICommand _Debug ( KFPM . MyKFAIC . GetActiveCommand ( ) ) . Debug _LOS ( ) ;
}
}
}
/** Logs the AI command stack for each existing AI in the level */
exec function DumpAICommands ( )
{
local KFAIController AI ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , AI )
{
AI . DumpCommandStack ( ) ;
}
}
exec function TestSpecDist ( optional bool bOnlyPathNodes = false )
{
local NavigationPoint NP , StartNav , EndNav ;
local int i ;
local array < float > Distances ;
local float Total ;
foreach allactors ( class 'NavigationPoint' , NP )
{
for ( i = 0 ; i < NP . PathList . Length ; i ++ )
{
StartNav = NP . PathList [ i ] . Start ;
EndNav = NP . PathList [ i ] . GetEnd ( ) ;
if ( StartNav != none && EndNav != none )
{
if ( bOnlyPathNodes )
{
if ( StartNav . Class != class 'Engine.PathNode' || EndNav . Class != class 'Engine.PathNode' )
{
continue ;
}
}
Distances . AddItem ( VSize ( NP . PathList [ i ] . Start . Location - NP . PathList [ i ] . GetEnd ( ) . Location ) ) ;
}
}
}
for ( i = 0 ; i < Distances . Length ; i ++ )
{
` log( "DISTANCES[" $ i $ "] : " $ Distances[ i ] );
Total += Distances [ i ] ;
}
` log( "TOTAL: " $ Total $ " LENGTH: " $ Distances.Length $ " AVG: " $ Total/Distances.Length );
}
simulated exec function BigHeadMode ( )
{
local Pawn P ;
local KFPawn KFPawn ;
for ( P = WorldInfo . PawnList ; P != none ; P = P . NextPawn )
{
KFPawn = KFPawn ( P ) ;
if ( KFPawn != none )
{
KFPawn . SetHeadScale ( 3. f , KFPawn . CurrentHeadScale ) ;
}
}
}
simulated exec function BigZedMode ( optional float scale = 2.0 , optional bool bScaleCollision )
{
local Pawn P ;
local KFPawn _Monster Zed ;
for ( P = WorldInfo . PawnList ; P != none ; P = P . NextPawn )
{
Zed = KFPawn _Monster ( P ) ;
if ( Zed != none )
{
Zed . SetDrawScale ( scale ) ;
if ( bScaleCollision )
{
Zed . SetCollisionSize ( Zed . CylinderComponent . default . CollisionRadius * scale , Zed . CylinderComponent . default . CollisionHeight * scale ) ;
}
}
}
}
/ * *
* This will set all active AIControllers InUseNodeCostMultiplier to 10 ( or 0 , toggling ) for testing & sprint review
* * /
simulated exec function AISetInUseCost ( optional float NewCost = 10. f )
{
local KFAIController KFAIC ;
foreach allactors ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . InUseNodeCostMultiplier == 0 )
{
KFAIC . InUseNodeCostMultiplier = 10 ;
}
else
{
KFAIC . InUseNodeCostMultiplier = 0 ;
}
ClientMessage ( KFAIC . Pawn$ " InUseNodeCostMultiplier is now " $KFAIC . InUseNodeCostMultiplier , CheatType ) ;
}
}
simulated exec function AILookAtMe ( bool bEnabled )
{
local Pawn P ;
local KFPawn _Monster KFP ;
for ( P = WorldInfo . PawnList ; P != none ; P = P . NextPawn )
{
KFP = KFPawn _Monster ( P ) ;
if ( KFP != none && KFP . bCanHeadTrack && IsAimingAt ( KFP , 0.88 f ) )
{
if ( bEnabled )
{
KFP . IK _Look _Head = SkelControlLookAt ( KFP . Mesh . FindSkelControl ( 'HeadLook' ) ) ;
KFP . bIsHeadTrackingActive = true ;
KFP . SetHeadTrackTarget ( Outer . Pawn , vect ( 0 , 0 , 0 ) , 1. f , false ) ;
}
else
{
KFP . ClearHeadTrackTarget ( KFP . MyLookAtInfo . LookAtTarget , 0.5 f ) ;
KFP . bIsHeadTrackingActive = false ;
}
}
}
}
exec function InjureZedArm ( )
{
local KFPawn _Monster AIP ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , AIP )
{
AIP . RagdollArm ( false ) ;
}
}
exec function CrippleZeds ( )
{
local KFPawn _Monster AIP ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , AIP )
{
AIP . CauseHeadTrauma ( AIP . HeadlessBleedOutTime ) ;
}
}
/** Cripple only the Zed you're aiming at */
exec function CrippleZed ( )
{
local KFPawn _Monster AIP ;
AIP = GetKFMPFromAim ( ) ;
if ( AIP != none )
{
AIP . CauseHeadTrauma ( AIP . HeadlessBleedOutTime ) ;
}
}
exec function EnableLivingGore ( )
{
local KFPawn _Monster AIP ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , AIP )
{
AIP . InitPartialKinematics ( ) ;
}
}
exec function PlayRandomStumble ( )
{
local KFPawn _Monster P ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
P . DoSpecialMove ( SM _Stumble , , , class 'KFSM_Stumble' . static . PackRandomSMFlags ( P ) ) ;
}
}
exec function PlayTaunt ( )
{
local KFPawn _Monster P ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
P . WalkBlendList . QueueTauntWalk ( ) ;
}
}
exec function PlayKnockdown ( optional vector LinearVelocity = vect ( 0 , 0 , 0 ) )
{
local KFPawn _Monster P ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
P . Knockdown ( LinearVelocity , vect ( 1 , 1 , 1 ) , Pawn . Location , 1000 , 100 ) ;
}
}
exec function PlayStunned ( )
{
local KFPawn _Monster P ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
if ( P . IsAliveAndWell ( ) )
{
// transition to the Stunned state
P . DoSpecialMove ( SM _Stunned ) ;
}
}
}
exec function EMPWander ( bool bEnable )
{
local KFPawn _Monster P ;
ForEach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
if ( P . IsAliveAndWell ( ) && P . MyKFAIC != none )
{
if ( bEnable )
{
// transition to the panicked state
P . CausePanicWander ( ) ;
P . AfflictionHandler . ToggleEffects ( AF _EMP , True , false ) ;
}
else
{
P . EndPanicWander ( ) ;
P . AfflictionHandler . ToggleEffects ( AF _EMP , False , false ) ;
}
}
}
}
exec function EMPValTest ( float EMPValue )
{
local KFPawn P ;
local MaterialInstanceConstant MIC ;
ForEach WorldInfo . AllPawns ( class 'KFPawn' , P )
{
if ( P . IsAliveAndWell ( ) )
{
foreach P . CharacterMICs ( MIC )
{
MIC . SetScalarParameterValue ( 'Scalar_EMP' , EMPValue ) ;
}
}
}
}
exec function BurnValTest ( float BurnValue )
{
local KFPawn P ;
local MaterialInstanceConstant MIC ;
ForEach WorldInfo . AllPawns ( class 'KFPawn' , P )
{
if ( P . IsAliveAndWell ( ) )
{
foreach P . CharacterMICs ( MIC )
{
MIC . SetScalarParameterValue ( 'Scalar_Burnt' , BurnValue ) ;
}
}
}
}
/ * *
* Spawn and possess a ZED
* Zeds aren ' t available to Kismet AI Factories ( due to HideDropDown ) . To get around this , use Kismet console
* events to spawn Zeds , using the SpawnAtTag parameter if you want the Zed to spawn at a specific KFPathnode .
* @ param ZedName Type of Zed ( ClotA , ClotC , ClotS , GF , FP , Crawler , etc . )
* @ param Distance ( optional ) AI will be spawned this many units in front of you
* @ param SpawnAtTag ( optional ) Spawn at a KFPathnode location if its DebugTagName matches SpawnAtTag
* * /
simulated exec function SpawnAI ( string ZedName , optional float Distance = 500. f , optional name SpawnAtTag )
{
local KFPawn Zed ;
Zed = SpawnAIZed ( ZedName , Distance , SpawnAtTag ) ;
if ( Zed != None )
{
Zed . SpawnDefaultController ( ) ;
if ( KFAIController ( Zed . Controller ) != none )
{
KFAIController ( Zed . Controller ) . SetTeam ( 1 ) ;
}
}
}
exec function SpawnAIV ( string ZedName , optional float Distance = 500. f )
{
local class < KFPawn _Monster > MonsterClass ;
local vector SpawnLoc ;
local rotator SpawnRot ;
local KFAIController KFAIC ;
local KFPawn KFP ;
if ( ! WorldInfo . Game . IsA ( 'KFGameInfo_VersusSurvival' ) )
{
ClientMessage ( "This cheat command is only valid in Versus Survival mode!" , CheatType ) ;
return ;
}
MonsterClass = LoadMonsterByName ( ZedName , true ) ;
if ( MonsterClass != none )
{
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
{
SpawnLoc = Pawn . Location ;
}
else
{
SpawnLoc = Location ;
}
SpawnLoc += Distance * vector ( Rotation ) + vect ( 0 , 0 , 1 ) * 15. f ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( MonsterClass , , , SpawnLoc , SpawnRot , , false ) ;
if ( KFP != none )
{
KFP . SetPhysics ( PHYS _Falling ) ;
if ( KFP . ControllerClass != None )
{
KFAIC = KFAIController ( KFP . Spawn ( KFP . ControllerClass ) ) ;
if ( KFAIC != none )
{
KFAIC . bIsSimulatedPlayerController = true ;
KFAIC . SetTeam ( 1 ) ;
KFAIC . Possess ( KFP , false ) ;
}
return ;
}
}
}
ClientMessage ( " Could not spawn AI Versus ZED [" $ZedName$ "]. Please make sure that the ZED name to archetype mapping is set up correctly." , CheatType ) ;
}
/ * *
* SpawnDebugAI ( )
* Spawns the specified Zed in a non - aggressive debug state which can accept various
* cheat commands to pathfind to specific locations , attack , charge , etc . The default
* base Zed AICommand is replaced with an AICommand _Debug . KFAIController . bDebugMode
* can be checked to see if an NPC is in debug mode .
* @ param ZedName Zed type ( just like SpawnZed and SpawnAI )
* @ param Distance ( Optional ) Distance
* @ param SpawnAtTag ( Optional ) SpawnAtTag ( Spawns at a KFPathNode with a DebugTag matching this name .
* @ param bShowDebugTxt ( Optional ) Spawn with debug text rendering over NPC ' s head
* /
simulated exec function SpawnDebugAI ( string ZedName , optional float Distance = 200. f , optional name SpawnAtTag , optional bool bShowDebugTxt = false )
{
local KFPawn Zed ;
// local KFAIDirector AIManager;
Zed = SpawnAIZed ( ZedName , Distance , SpawnAtTag ) ;
if ( Zed != None )
{
Zed . SpawnDefaultController ( ) ;
if ( Zed . Controller != none )
{
// Spawns with debug text overhead, even if the global setting in KFAIDirector is off
if ( bShowDebugTxt )
{
KFPawn _Monster ( Zed ) . SetDebugTextRendering ( true ) ;
SetNPCDebugCategory ( true , 'all' ) ;
}
KFAIController ( Zed . Controller ) . BeginDebugCommand ( ) ;
KFAIController ( Zed . Controller ) . DefaultCommandClass = class 'KFGame.AICommand_Debug' ;
KFAIController ( Zed . Controller ) . MeleeCommandClass = class 'KFGame.AICommand_Debug' ;
}
}
}
simulated exec function AIShowAttackAnims ( optional bool bSetEnemyForDebugModeAI = true )
{
local KFAIController KFAIC ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , KFAIC )
{
if ( KFAIC . Pawn != none && KFAIC . Pawn . IsAliveAndWell ( ) )
{
if ( IsAimingAt ( KFAIC . Pawn , 0.95 f ) )
{
// NPCs in debug mode don't auto-acquire an enemy, so set it to the player here. They won't be aggressive in debug mode, though.
if ( bSetEnemyForDebugModeAI )
{
KFAIC . SetEnemy ( Pawn ) ;
}
if ( KFAIC . bDebug _DrawAttackAnimInfo )
{
KFAIC . bDebug _DrawAttackAnimInfo = false ;
//KFAIC.SetPostRendering( false );
//KFAIC.bDebug_PostRenderInfo = false;
ClientMessage ( "Turning off attack animation info for " $KFAIC . Pawn , CheatType ) ;
return ;
}
else
{
KFAIC . bDebug _DrawAttackAnimInfo = true ;
KFAIC . SetPostRendering ( true ) ;
KFAIC . bDebug _PostRenderInfo = true ;
ClientMessage ( "Now showing attack animation info for " $KFAIC . Pawn , CheatType ) ;
return ;
}
}
}
}
ClientMessage ( "You need to be aiming at an NPC first!" , CheatType ) ;
}
simulated function KFPawn SpawnAIZed ( string ZedName , float Distance , optional name SpawnAtTag )
{
local KFPawn Zed ;
Zed = SpawnZed ( ZedName , Distance , , SpawnAtTag ) ;
` log( GetFuncName() $ "() Spawned: " $ Zed );
return Zed ;
}
/** Spawns a versus zed with name ZedName, and possess them with a player controller so we can test functionality that requires a player controlled versus zed */
exec function SpawnZedVC ( string ZedName )
{
local KFPlayerController KFPC ;
local class < KFPawn _Monster > MonsterClass ;
local vector SpawnLoc ;
local rotator SpawnRot ;
local KFPawn KFP ;
if ( ! WorldInfo . Game . IsA ( 'KFGameInfo_VersusSurvival' ) )
{
ClientMessage ( "This cheat command is only valid in Versus Survival mode!" , CheatType ) ;
return ;
}
MonsterClass = LoadMonsterByName ( ZedName , true ) ;
if ( MonsterClass != none )
{
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
{
SpawnLoc = Pawn . Location ;
}
else
{
SpawnLoc = Location ;
}
SpawnLoc += 200. f * vector ( Rotation ) + vect ( 0 , 0 , 1 ) * 15. f ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( MonsterClass , , , SpawnLoc , SpawnRot , , false ) ;
if ( KFP != none )
{
// Create a new Controller for this Bot
KFPC = Spawn ( class 'KFPlayerController' ) ;
// Silly name for now
WorldInfo . Game . ChangeName ( KFPC , "Braindead Human" , false ) ;
KFPC . Possess ( KFP , false ) ;
KFP . SetPhysics ( PHYS _Falling ) ;
}
else
{
ClientMessage ( " Could not spawn Versus ZED [" $ZedName$ "] with a PC. Please make sure that the ZED name to archetype mapping is set up correctly." , CheatType ) ;
}
}
}
/** Spawns a versus zed with name ZedName, and optionally possesses them */
exec function SpawnZedV ( string ZedName , optional bool bPossess = true )
{
local class < KFPawn _Monster > MonsterClass ;
local vector SpawnLoc ;
local rotator SpawnRot ;
local KFPawn KFP ;
if ( ! WorldInfo . Game . IsA ( 'KFGameInfo_VersusSurvival' ) )
{
ClientMessage ( "This cheat command is only valid in Versus Survival mode!" , CheatType ) ;
return ;
}
MonsterClass = LoadMonsterByName ( ZedName , true ) ;
if ( MonsterClass != none )
{
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
{
SpawnLoc = Pawn . Location ;
}
else
{
SpawnLoc = Location ;
}
SpawnLoc += 200. f * vector ( Rotation ) + vect ( 0 , 0 , 1 ) * 15. f ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( MonsterClass , , , SpawnLoc , SpawnRot , , false ) ;
if ( KFP != none )
{
if ( bPossess )
{
if ( Pawn != none )
{
Pawn . Destroy ( ) ;
}
if ( KFP . Controller != none )
{
KFP . Controller . Destroy ( ) ;
}
KFGameInfo ( WorldInfo . Game ) . SetTeam ( KFPlayerController ( Outer ) , KFGameInfo ( WorldInfo . Game ) . Teams [ 1 ] ) ;
Possess ( KFP , false ) ;
ServerCamera ( 'ThirdPerson' ) ;
}
KFP . SetPhysics ( PHYS _Falling ) ;
}
else
{
ClientMessage ( " Could not spawn Versus ZED [" $ZedName$ "]. Please make sure that the ZED name to archetype mapping is set up correctly." , CheatType ) ;
}
}
}
exec function GoHumanV ( )
{
local class < KFPawn _Human > HumanClass ;
local KFPawn _Human KFPH ;
local vector SpawnLoc ;
local rotator SpawnRot ;
if ( ! WorldInfo . Game . IsA ( 'KFGameInfo_VersusSurvival' ) )
{
ClientMessage ( "This cheat command is only valid in Versus Survival mode!" , CheatType ) ;
return ;
}
if ( Pawn != none )
{
SpawnLoc = Pawn . Location ;
Pawn . Destroy ( ) ;
}
else
{
SpawnLoc = Location ;
}
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
HumanClass = class < KFPawn _Human > ( DynamicLoadObject ( "KFGameContent.KFPawn_Human_Versus" , class 'Class' ) ) ;
KFPH = Spawn ( HumanClass , , , SpawnLoc , SpawnRot , , false ) ;
if ( KFPH != none )
{
KFGameInfo ( WorldInfo . Game ) . SetTeam ( KFPlayerController ( Outer ) , KFGameInfo ( WorldInfo . Game ) . Teams [ 0 ] ) ;
KFPH . AddDefaultInventory ( ) ;
Possess ( KFPH , false ) ;
ServerCamera ( 'FirstPerson' ) ;
KFPH . SetPhysics ( PHYS _Falling ) ;
}
else
{
ClientMessage ( "Could not spawn Versus Human." , CheatType ) ;
}
}
exec function SetBossNum ( int PosInBossArray )
{
ConsoleCommand ( "SETNOPEC KFAISpawnManager ForcedBossNum" @ PosInBossArray ) ;
}
/** Get a zed class from the name */
function class < KFPawn _Monster > LoadMonsterByName ( string ZedName , optional bool bIsVersusPawn )
{
local string VersusSuffix ;
local class < KFPawn _Monster > SpawnClass ;
VersusSuffix = bIsVersusPawn ? "_Versus" : "" ;
// Get the correct archetype for the ZED
if ( Left ( ZedName , 5 ) ~ = "ClotA" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedClot_Alpha" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 4 ) ~ = "EAlp" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedClot_AlphaKing" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 4 ) ~ = "ECra" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedCrawlerKing" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 5 ) ~ = "ClotS" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedClot_Slasher" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 5 ) ~ = "ClotC" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedClot_Cyst" $VersusSuffix , class 'Class' ) ) ;
}
else if ( ZedName ~ = "CLOT" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedClot_Cyst" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 3 ) ~ = "FHa" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedHansFriendlyTest" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 3 ) ~ = "FHu" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedHuskFriendlyTest" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 5 ) ~ = "KingF" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedFleshpoundKing" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 5 ) ~ = "MiniF" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedFleshpoundMini" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 1 ) ~ = "F" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedFleshpound" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 3 ) ~ = "GF2" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedGorefastDualBlade" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 1 ) ~ = "G" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedGorefast" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "St" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedStalker" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 1 ) ~ = "B" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedBloat" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 5 ) ~ = "KingB" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedBloatKing" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 4 ) ~ = "Poop" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedBloatKingSubspawn" , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "Sc" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedScrake" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "Pa" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedPatriarch" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "Cr" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedCrawler" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "Hu" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedHusk" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 8 ) ~ = "TestHusk" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedHusk_New" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "Ha" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedHans" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 2 ) ~ = "Si" )
{
return class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedSiren" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 1 ) ~ = "P" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedPatriarch" $VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 3 ) ~ = "Emp" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedDAR_EMP" $ VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 5 ) ~ = "Laser" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedDAR_Laser" $ VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 4 ) ~ = "Rock" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedDAR_Rocket" $ VersusSuffix , class 'Class' ) ) ;
}
else if ( Left ( ZedName , 1 ) ~ = "M" )
{
SpawnClass = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedMatriarch" $ VersusSuffix , class 'Class' ) ) ;
}
if ( SpawnClass != none )
{
SpawnClass = SpawnClass . static . GetAIPawnClassToSpawn ( ) ;
}
if ( SpawnClass == none )
{
ClientMessage ( "Could not spawn ZED [" $ZedName$ "]. Please make sure you specified a valid ZED name (ClotA, ClotS, ClotC, etc.) and that the ZED has a valid archetype setup." , CheatType ) ;
return none ;
}
return SpawnClass ;
}
native function int GetAITypeByName ( string ZedName ) ;
exec function SpawnHumanPawn ( optional bool bEnemy , optional bool bUseGodMode , optional int CharIndex )
{
local KFAIController KFBot ;
local KFPlayerReplicationInfo KFPRI ;
local vector CamLoc ;
local rotator CamRot ;
Local KFPawn _Human KFPH ;
local Vector HitLocation , HitNormal ;
local Actor TraceOwner ;
GetPlayerViewPoint ( CamLoc , CamRot ) ;
if ( Pawn != none )
{
TraceOwner = Pawn ;
}
else
{
TraceOwner = Outer ;
}
TraceOwner . Trace ( HitLocation , HitNormal , CamLoc + Vector ( CamRot ) * 250000 , CamLoc , TRUE , vect ( 0 , 0 , 0 ) ) ;
HitLocation . Z += 100 ;
// FlushPersistentDebugLines();
// DrawDebugSphere( HitLocation, 100, 12, 0, 255, 0, TRUE );
KFPH = Spawn ( class 'KFPawn_Human' , , , HitLocation ) ;
KFPH . SetPhysics ( PHYS _Falling ) ;
// Create a new Controller for this Bot
KFBot = Spawn ( class 'KFAIController' ) ;
// Silly name for now
WorldInfo . Game . ChangeName ( KFBot , "Braindead Human" , false ) ;
// Add them to the Team they selected
if ( ! bEnemy )
{
KFGameInfo ( WorldInfo . Game ) . SetTeam ( KFBot , KFGameInfo ( WorldInfo . Game ) . Teams [ 0 ] ) ;
}
KFBot . Possess ( KFPH , false ) ;
if ( bUseGodMode )
{
KFBot . bGodMode = true ;
}
KFPRI = KFPlayerReplicationInfo ( KFBot . PlayerReplicationInfo ) ;
// Set perk stuff
//KFPRI.SetCharacter(CharIndex);
KFPRI . CurrentPerkClass = Class 'KFPlayerController' . default . PerkList [ 1 ] . PerkClass ;
KFPRI . NetPerkIndex = 1 ;
if ( KFPRI != none )
{
KFPRI . PLayerHealthPercent = FloatToByte ( float ( KFPH . Health ) / float ( KFPH . HealthMax ) ) ;
KFPRI . PLayerHealth = KFPH . Health ;
}
//KFPRI.CurrentPerkLevel = 0;
KFPH . AddDefaultInventory ( ) ;
}
exec function KillBots ( )
{
local Controller P ;
foreach WorldInfo . AllControllers ( class 'Controller' , P )
{
if ( KFAIController ( P ) != none && KFAIController ( P ) . bIsPlayer )
{
P . Pawn . KilledBy ( P . Pawn ) ;
P . Destroy ( ) ;
}
}
}
/ * *
* Spawn a ZED for debugging , shooting at , etc
* * /
simulated exec function KFPawn SpawnZed ( string ZedName , optional float Distance = 200. f , optional bool bNoCollisionFail , optional name SpawnAtTag )
{
local class < KFPawn > SpawnClass ;
local vector SpawnLoc ;
local rotator SpawnRot ;
local KFPawn KFP ;
local KFPathnode KFPN ;
SpawnClass = LoadMonsterByName ( ZedName ) ;
if ( SpawnClass == none )
{
return none ;
}
if ( SpawnAtTag != '' )
{
foreach WorldInfo . AllNavigationPoints ( class 'KFPathnode' , KFPN )
{
if ( KFPN . DebugTag != '' )
{
if ( KFPN . DebugTag == SpawnAtTag )
{
SpawnLoc = KFPN . Location ;
}
}
}
}
else
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
SpawnLoc = Pawn . Location ;
else
SpawnLoc = Location ;
SpawnLoc += Distance * Vector ( Rotation ) + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot , , bNoCollisionFail ) ;
if ( KFP != None )
{
if ( KFPawn _Monster ( KFP ) != none )
{
KFPawn _Monster ( KFP ) . bDebug _SpawnedThroughCheat = true ;
}
KFP . SetPhysics ( PHYS _Falling ) ;
KFGameInfo ( WorldInfo . Game ) . SetMonsterDefaults ( KFPawn _Monster ( KFP ) ) ;
if ( KFP . Controller != none && KFAIController ( KFP . Controller ) != none )
{
KFGameInfo ( WorldInfo . Game ) . GetAIDirector ( ) . AIList . AddItem ( KFAIController ( KFP . Controller ) ) ;
}
}
else
{
ClientMessage ( "Could not spawn ZED [" $ZedName$ "]. Please make sure that the ZED name to archetype mapping is set up correctly." , CheatType ) ;
}
return KFP ;
}
/ * *
* Spawn a group of ZEDs for profiling , shooting , etc .
* * /
simulated exec function SpawnZedAIGroup (
string ZedName ,
int NumRows ,
int NumCols ,
optional float Spacing = 100. f )
{
local class < KFPawn > SpawnClass ;
local vector StartLoc , SpawnLoc , RightDir , FaceDir ;
local rotator SpawnRot ;
local KFPawn KFP ;
local int i , j ;
SpawnClass = LoadMonsterByName ( ZedName ) ;
if ( SpawnClass == none )
{
return ;
}
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
StartLoc = Pawn . Location ;
else
StartLoc = Location ;
FaceDir = normal ( GetRotatorAxis ( Rotation , 0 ) ) ;
RightDir = normal ( GetRotatorAxis ( Rotation , 1 ) ) ;
for ( i = 0 ; i < NumRows ; i ++ )
{
for ( j = 0 ; j < NumCols ; j ++ )
{
SpawnLoc = StartLoc + ( i + 1 ) * Spacing * FaceDir + ( j - NumCols / 2 ) * Spacing * RightDir + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot , , false ) ;
if ( KFP != None )
{
if ( KFPawn _Monster ( KFP ) != none )
{
KFPawn _Monster ( KFP ) . bDebug _SpawnedThroughCheat = true ;
}
KFP . SetPhysics ( PHYS _Falling ) ;
KFGameInfo ( WorldInfo . Game ) . SetMonsterDefaults ( KFPawn _Monster ( KFP ) ) ;
if ( KFP . Controller != none && KFAIController ( KFP . Controller ) != none )
{
KFGameInfo ( WorldInfo . Game ) . GetAIDirector ( ) . AIList . AddItem ( KFAIController ( KFP . Controller ) ) ;
}
KFP . SpawnDefaultController ( ) ;
if ( KFAIController ( KFP . Controller ) != none )
{
KFAIController ( KFP . Controller ) . SetTeam ( 1 ) ;
}
}
else
{
ClientMessage ( "Could not spawn ZED [" $ZedName$ "]. Please make sure that the ZED name to archetype mapping is set up correctly." , CheatType ) ;
}
}
}
}
/ * *
* Spawn a group of ZEDs for profiling , shooting , etc .
* * /
simulated exec function SpawnZedGroup (
string ZedName ,
int NumRows ,
int NumCols ,
optional float Spacing = 100. f ,
optional bool bUseGoreLOD = false ,
optional int ForcedLOD = 0 )
{
local class < KFPawn > SpawnClass ;
local vector StartLoc , SpawnLoc , RightDir , FaceDir ;
local rotator SpawnRot ;
local KFPawn KFP ;
local KFPawn _Monster KFPM ;
local int i , j ;
SpawnClass = LoadMonsterByName ( ZedName ) ;
if ( SpawnClass == none )
{
return ;
}
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
StartLoc = Pawn . Location ;
else
StartLoc = Location ;
FaceDir = normal ( GetRotatorAxis ( Rotation , 0 ) ) ;
RightDir = normal ( GetRotatorAxis ( Rotation , 1 ) ) ;
for ( i = 0 ; i < NumRows ; i ++ )
{
for ( j = 0 ; j < NumCols ; j ++ )
{
SpawnLoc = StartLoc + ( i + 1 ) * Spacing * FaceDir + ( j - NumCols / 2 ) * Spacing * RightDir + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot ) ;
if ( KFP != None )
{
KFP . SetPhysics ( PHYS _Falling ) ;
if ( KFP . Controller != none && KFAIController ( KFP . Controller ) != none )
{
KFGameInfo ( WorldInfo . Game ) . GetAIDirector ( ) . AIList . AddItem ( KFAIController ( KFP . Controller ) ) ;
}
if ( bUseGoreLOD )
{
KFPM = KFPawn _Monster ( KFP ) ;
if ( KFPM != none )
{
KFPM . SwitchToGoreMesh ( ) ;
}
else
{
ClientMessage ( "Failed to switch to gore LOD" , CheatType ) ;
}
}
if ( ForcedLOD != 0 )
{
KFP . mesh . ForcedLODModel = ForcedLOD ;
}
}
}
}
}
/ * *
* Spawn a group of ZEDs for profiling , shooting , etc .
* * /
simulated exec function SpawnZedLODs ( string ZedName )
{
local class < KFPawn > SpawnClass ;
local vector StartLoc , SpawnLoc , RightDir , FaceDir ;
local rotator SpawnRot ;
local KFPawn KFP ;
SpawnClass = LoadMonsterByName ( ZedName ) ;
if ( SpawnClass == none )
{
return ;
}
// The ZED should be spawned X units in front of the view location
if ( Pawn != None )
StartLoc = Pawn . Location ;
else
StartLoc = Location ;
FaceDir = normal ( GetRotatorAxis ( Rotation , 0 ) ) ;
RightDir = normal ( GetRotatorAxis ( Rotation , 1 ) ) ;
SpawnLoc = StartLoc + 200 * FaceDir - 200 * RightDir + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot ) ;
KFP . mesh . ForcedLODModel = 1 ;
SpawnLoc = StartLoc + 200 * FaceDir - 100 * RightDir + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot ) ;
KFP . mesh . ForcedLODModel = 2 ;
SpawnLoc = StartLoc + 200 * FaceDir + 0 * RightDir + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot ) ;
KFP . mesh . ForcedLODModel = 3 ;
SpawnLoc = StartLoc + 200 * FaceDir + 100 * RightDir + vect ( 0 , 0 , 1 ) * 15 ;
SpawnRot . Yaw = Rotation . Yaw + 32768 ;
KFP = Spawn ( SpawnClass , , , SpawnLoc , SpawnRot ) ;
KFP . mesh . ForcedLODModel = 4 ;
}
/** returns a any random clot AIType */
function string GetRandomClotType ( )
{
switch ( rand ( 2 ) )
{
case 0 :
return "KFGameContent.KFPawn_ZedClot_Alpha" ;
case 1 :
return "KFGameContent.KFPawn_ZedClot_Slasher" ;
case 2 :
return "KFGameContent.KFPawn_ZedClot_Cyst" ;
}
` warn("GetRandomClotType no type selected");
}
/** Sets a KFSpawner active with a test group of AI */
exec function TestPortalNearby ( string ZedName , optional int NumSpawns = 1 )
{
local KFSpawner Spawner , Best ;
local vector MyLocation ;
local float BestDist ;
foreach WorldInfo . AllActors ( class 'KFSpawner' , Spawner )
{
MyLocation = ( Pawn != None ) ? Pawn . Location : Location ;
if ( Best == none || VSize ( Spawner . Location - MyLocation ) < BestDist )
{
Best = Spawner ;
BestDist = VSize ( Best . Location - MyLocation ) ;
}
}
if ( Best != none )
{
Best . TestSpawn ( LoadMonsterByName ( ZedName ) , NumSpawns , true ) ;
}
}
/** Sets a KFSpawner active with a test group of AI */
exec function TestPortalAll ( optional string ZedName )
{
local KFSpawner Spawner ;
foreach WorldInfo . AllActors ( class 'KFSpawner' , Spawner )
{
Spawner . TestSpawn ( LoadMonsterByName ( ZedName ) , 1 , true ) ;
Spawner . bIgnoreChildren = true ;
}
}
exec function TestPortalActive ( optional string ZedName )
{
local KFSpawner ActiveSpawner ;
ActiveSpawner = KFGameInfo ( WorldInfo . Game ) . SpawnManager . ActiveSpawner ;
if ( ActiveSpawner != none )
{
ActiveSpawner . TestSpawn ( LoadMonsterByName ( ZedName ) , 1 , true ) ;
}
else
{
ClientMessage ( "Warning - No spawn volume has been activated." , CheatType , 13. f ) ;
` log("Say No spawn volume has been activated");
}
}
/ * *
* Test a Spawn Volume - currently only [ ToDo : Remove bCrawlersOnly & allow ability to specify any type ]
* /
exec function TestSpawnVolume ( int SpawnAmount , optional bool bCrawlersOnly , optional bool bBloatsOnly )
{
local KFSpawnVolume SpawnVolume , ClosestSpawnVolume ;
local array < class < KFPawn _Monster > > FakeSpawnList ;
local int i ;
local class < KFPawn _Monster > TempPawn ;
for ( i = 0 ; i < SpawnAmount ; i ++ )
{
if ( bCrawlersOnly )
{
TempPawn = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedCrawler" , class 'Class' ) ) ;
}
else if ( bBloatsOnly )
{
TempPawn = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedBloat" , class 'Class' ) ) ;
}
else
{
TempPawn = class < KFPawn _Monster > ( DynamicLoadObject ( GetRandomClotType ( ) , class 'Class' ) ) ;
}
FakeSpawnList . AddItem ( TempPawn ) ;
}
for ( i = 0 ; i < SpawnAmount ; i ++ )
{
` log( "FakeSpawnList " $ i $ " is " $ FakeSpawnList[ i ] );
}
foreach allactors ( class 'KFSpawnVolume' , SpawnVolume )
{
if ( ClosestSpawnVolume == none )
{
ClosestSpawnVolume = SpawnVolume ;
}
else
{
if ( Pawn != none )
{
if ( VSize ( SpawnVolume . Location - Pawn . Location ) < VSize ( ClosestSpawnVolume . Location - Pawn . Location ) )
{
ClosestSpawnVolume = SpawnVolume ;
}
}
else
{
// This looks odd since Outer is a Controller and it's usually a mistake to get the Controller's location, but this
// is specifically for ToggleDebugCamera mode. Your PlayerController and Pawn are left behind and you are a pawnless
// free-floating DebugCameraController which has valid locations (see EnableDebugCamera() in GameCheatManager).
// Your old pawn is still accessible through the DebugCameraController, using OriginalControllerRef.Pawn , but in this
// case it's assumed you want to be checking the closest volume to where your free floating view is, rather than the
// the old location where you first turned on ToggleDebugCamera.
if ( VSize ( SpawnVolume . Location - Outer . Location ) < VSize ( ClosestSpawnVolume . Location - Outer . Location ) )
{
ClosestSpawnVolume = SpawnVolume ;
}
}
}
}
ClosestSpawnVolume . SpawnWave ( FakeSpawnList , false ) ;
}
/ * *
* Test a Spawn Volume - currently only
* /
exec function SetSpawnVolumeDebug ( bool bSpawnDebug , optional bool bDebugRating , optional bool bDebugVisibility )
{
local KFSpawnVolume SpawnVolume ;
local KFSpawner Spawner ;
foreach allactors ( class 'KFSpawnVolume' , SpawnVolume )
{
SpawnVolume . bDebugSpawning = bSpawnDebug ;
SpawnVolume . bDebugRatingChecks = bDebugRating ;
SpawnVolume . bDebugVisibilityChecks = bDebugVisibility ;
}
foreach allactors ( class 'KFSpawner' , Spawner )
{
Spawner . bDebugSpawning = bSpawnDebug ;
}
ClientMessage ( "Setting bDebugSpawning to " $bSpawnDebug$ " for Spawn Volumes and Portal Spawns" , CheatType ) ;
}
/ * *
* Test a Spawn Volume - currently only
* /
exec function SetSpawnVolumeMinDebug ( bool bNewMinDebug )
{
local KFSpawnVolume SpawnVolume ;
foreach allactors ( class 'KFSpawnVolume' , SpawnVolume )
{
SpawnVolume . bMinimalDebugRatingChecks = bNewMinDebug ;
}
ClientMessage ( "Setting bMinimalDebugRatingChecks to " $bNewMinDebug$ " for Spawn Volumes" , CheatType ) ;
}
/ * *
* Test zed spawning
* /
exec function SpawnTest ( int SpawnAmount , optional bool bSimSpawn , optional bool bSpawnZeds )
{
local KFSpawnVolume SpawnVolume ;
local array < class < KFPawn _Monster > > FakeSpawnList ;
local int i ;
local class < KFPawn _Monster > TempPawn ;
FlushPersistentDebugLines ( ) ;
RemoveAllDebugStrings ( ) ;
for ( i = 0 ; i < SpawnAmount ; i ++ )
{
TempPawn = class < KFPawn _Monster > ( DynamicLoadObject ( GetRandomClotType ( ) , class 'Class' ) ) ;
FakeSpawnList . AddItem ( TempPawn ) ;
}
for ( i = 0 ; i < SpawnAmount ; i ++ )
{
` log( "FakeSpawnList " $ i $ " is " $ FakeSpawnList[ i ] );
}
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
//EST_Small,
//EST_Crawler,
KFGameInfo ( WorldInfo . Game ) . SpawnManager . DesiredSquadType = EST _Crawler ;
SpawnVolume = KFGameInfo ( WorldInfo . Game ) . SpawnManager . GetBestSpawnVolume ( FakeSpawnList ) ;
if ( bSimSpawn && ! bSpawnZeds )
{
SpawnVolume . SetLastSpawnTime ( WorldInfo . TimeSeconds ) ;
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . AddRecentSpawnVolume ( SpawnVolume . Location ) ;
}
}
ClientMessage ( "Checking Spawns, best volume = " $SpawnVolume , CheatType ) ;
if ( bSpawnZeds )
{
SpawnVolume . SpawnWave ( FakeSpawnList , true ) ;
}
}
/ * *
* Test zed spawning
* /
exec function SpawnBloatTest ( int SpawnAmount , optional bool bSimSpawn , optional bool bSpawnZeds )
{
local KFSpawnVolume SpawnVolume ;
local array < class < KFPawn _Monster > > FakeSpawnList ;
local int i ;
local class < KFPawn _Monster > TempPawn ;
FlushPersistentDebugLines ( ) ;
RemoveAllDebugStrings ( ) ;
for ( i = 0 ; i < SpawnAmount ; i ++ )
{
TempPawn = class < KFPawn _Monster > ( DynamicLoadObject ( "KFGameContent.KFPawn_ZedBloat" , class 'Class' ) ) ;
FakeSpawnList . AddItem ( TempPawn ) ;
}
for ( i = 0 ; i < SpawnAmount ; i ++ )
{
` log( "FakeSpawnList " $ i $ " is " $ FakeSpawnList[ i ] );
}
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
//EST_Small,
//EST_Crawler,
KFGameInfo ( WorldInfo . Game ) . SpawnManager . DesiredSquadType = EST _Crawler ;
SpawnVolume = KFGameInfo ( WorldInfo . Game ) . SpawnManager . GetBestSpawnVolume ( FakeSpawnList ) ;
if ( bSimSpawn && ! bSpawnZeds )
{
SpawnVolume . SetLastSpawnTime ( WorldInfo . TimeSeconds ) ;
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . AddRecentSpawnVolume ( SpawnVolume . Location ) ;
}
}
ClientMessage ( "Checking Spawns, best volume = " $SpawnVolume , CheatType ) ;
if ( bSpawnZeds )
{
SpawnVolume . SpawnWave ( FakeSpawnList , true ) ;
}
}
exec function FocusOnZed ( optional bool bTextOnly = false )
{
local class < Actor > FocusClass ;
local Actor PotentialFocusActor , FirstActor ;
local bool bFound ;
FocusClass = class 'KFGame.KFPawn_Monster' ;
ForEach AllActors ( FocusClass , PotentialFocusActor )
{
if ( KFPawn ( PotentialFocusActor ) != none && ! KFPawn ( PotentialFocusActor ) . IsAliveAndWell ( ) )
{
continue ;
}
if ( bFound || ( FirstActor == None ) )
{
FirstActor = PotentialFocusActor ;
if ( bFound )
{
break ;
}
}
if ( DebugSceneCamera != none && PotentialFocusActor == DebugSceneCamera . FocusActor )
{
bFound = true ;
}
}
// Found an actor to focus on, so initialize the debug scene...
if ( FirstActor != none )
{
ClientMessage ( "Focusing on Zed: " $FirstActor . Name$ " [Note: For additional debug scene window, add TRUE to the command ( FocusOnZed TRUE )]" , CheatType ) ;
InitDebugScene ( FirstActor , bTextOnly ) ;
}
}
/** Focus on an actor by class type - handled like ViewClass command */
exec function FocusOn ( class < Actor > FocusClass , optional bool bTextOnly = false )
{
local Actor PotentialFocusActor , FirstActor ;
local bool bFound ;
// Might restrict this more, as it currently will include controllers and other invisible
// objects. Some of that might be useful, though...
ForEach AllActors ( FocusClass , PotentialFocusActor )
{
if ( Pawn ( PotentialFocusActor ) != none && ! Pawn ( PotentialFocusActor ) . IsAliveAndWell ( ) )
{
continue ;
}
if ( bFound || ( FirstActor == None ) )
{
FirstActor = PotentialFocusActor ;
if ( bFound )
{
break ;
}
}
if ( DebugSceneCamera != none && PotentialFocusActor == DebugSceneCamera . FocusActor )
{
bFound = true ;
}
}
// Found an actor to focus on, so initialize the debug scene...
if ( FirstActor != none )
{
ClientMessage ( "DebugView from: " $FirstActor . Name , CheatType ) ;
InitDebugScene ( FirstActor , bTextOnly ) ;
}
}
function InitDebugScene ( actor ActorToWatch , optional bool bTextOnly )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none )
{
if ( DebugSceneCamera == none )
{
DebugSceneCamera = Spawn ( class 'KFSceneCaptureDebugCam' , Pawn , , Pawn . Location , Pawn . Rotation , , true ) ;
DebugSceneCamera . bTextOnly = bTextOnly ;
}
/ * * D e b u g v i e w w i n d o w i s d r a w n i n P o s t R e n d e r , w h i c h r e q u i r e s b S h o w O v e r l a y s t o b e t r u e a n d t h e d e b u g c a m e r a m u s t
be in the HUD ' s list of actors to receive the PostRender event * /
myHUD . bShowOverlays = true ;
myHUD . AddPostRenderedActor ( DebugSceneCamera ) ;
bDebugSceneEnabled = DebugSceneCamera . InitDebugScene ( KFPC , ActorToWatch ) ;
}
}
exec function WeldDoors ( optional int inNewIntegrity = - 1 )
{
local KFDoorActor KFDA ;
local int NewIntegrity ;
foreach WorldInfo . AllActors ( class 'KFDoorActor' , KFDA )
{
if ( inNewIntegrity == - 1 )
{
NewIntegrity = KFDA . MaxWeldIntegrity ;
}
else
{
NewIntegrity = inNewIntegrity ;
}
KFDA . WeldIntegrity = NewIntegrity ;
}
}
exec function DestroyDoors ( optional byte Reverse )
{
local KFDoorActor KFDA ;
foreach WorldInfo . AllActors ( class 'KFDoorActor' , KFDA )
{
KFDA . HitCount ++ ;
if ( Reverse != 0 )
{
// Set the last bit to indicate the hit direction
KFDA . HitCount = KFDA . HitCount | KFDA . HIT _DIRECTION _FLAG ;
}
else
{
// Clear out the last bit to indicate the hit direction
KFDA . HitCount = KFDA . HitCount & byte ( ~ KFDA . HIT _DIRECTION _FLAG ) ;
}
KFDA . PlayDestroyed ( ) ;
}
}
exec function ResetLevel ( )
{
WorldInfo . Game . ResetLevel ( ) ;
}
exec function ResetDoors ( )
{
local KFDoorActor KFDA ;
foreach WorldInfo . AllActors ( class 'KFDoorActor' , KFDA )
{
KFDA . ResetDoor ( ) ;
}
}
exec function AISetFocalPoint ( optional bool bClear = false )
{
local KFAIController KFAIC ;
foreach WorldInfo . AllControllers ( class 'KFAIController' , KFAIC )
{
if ( KFAIC != none && FastTrace ( KFAIC . Pawn . Location , Pawn . Location ) )
{
if ( KFAIC . GetActiveCommand ( ) . IsA ( 'AICommand_Debug' ) )
{
if ( bClear )
{
SetFocalPoint ( vect ( 0 , 0 , 0 ) ) ;
}
else
{
KFAIC . SetFocalPoint ( Pawn . Location ) ;
}
}
}
}
ClientMessage ( KFAIC . Pawn$ "'s FocalPoint is now " $KFAIC . GetFocalPoint ( ) , CheatType ) ;
}
exec function AIClearFocus ( optional bool bResetDesiredRot , optional bool bResetFocus , optional bool bResetFocalPoint )
{
local KFAIController KFAIC ;
local String msg ;
KFAIC = GetKFAICFromAim ( false ) ;
if ( KFAIC != none )
{
msg = Pawn$ " [ClearFocus]" ;
if ( bResetDesiredRot )
{
msg = msg$ "[Resetting DesiredRotation]" ;
KFAIC . MyKFPawn . ResetDesiredRotation ( ) ;
}
if ( bResetFocalPoint )
{
msg = msg$ "[Resetting FocalPoint]" ;
KFAIC . SetFocalPoint ( vect ( 0 , 0 , 0 ) ) ;
}
if ( bResetFocus )
{
msg = msg$ "[Resetting Focus]" ;
KFAIC . Focus = none ;
}
}
}
exec function AIUnlockDesiredRotation ( )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( false ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
KFAIC . MyKFPawn . LockDesiredRotation ( false ) ;
}
}
exec function AILockDesiredRotation ( optional bool bLock = true )
{
local KFAIController KFAIC ;
KFAIC = GetKFAICFromAim ( false ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
KFAIC . MyKFPawn . LockDesiredRotation ( bLock ) ;
}
}
exec function AISetFocus ( optional bool bFocusOnMe , optional bool bSetFocalPoint , optional bool bSetDesiredRot , optional bool bLockDesiredRot )
{
local KFAIController KFAIC ;
local String msg ;
KFAIC = GetKFAICFromAim ( false ) ;
if ( KFAIC != none && KFAIC . MyKFPawn != none )
{
msg = KFAIC . Pawn$ " [SetFocus]" ;
if ( bSetDesiredRot )
{
KFAIC . MyKFPawn . SetDesiredRotation ( rotator ( GetMyPawn ( ) . Location - KFAIC . Pawn . Location ) , bLockDesiredRot ) ;
msg = msg$ "[DesiredRot: " $KFAIC . MyKFPawn . DesiredRotation$ "]" ;
}
if ( bSetFocalPoint )
{
KFAIC . SetFocalPoint ( GetMyPawn ( ) . Location ) ;
msg = msg$ "[FocalPoint: " $KFAIC . GetFocalPoint ( ) $ "]" ;
}
if ( bFocusOnMe )
{
KFAIC . Focus = GetMyPawn ( ) ;
msg = msg$ "[Focus: " $Focus$ "]" ;
}
ClientMessage ( msg , CheatType ) ;
}
}
/** Turn off the debug scene camera view */
exec function FocusOff ( )
{
DestroyDebugScene ( ) ;
}
/** Destroy the debug scene, remove the camera from the HUD's post render list, etc. */
function DestroyDebugScene ( )
{
bDebugSceneEnabled = false ;
myHUD . bShowOverlays = false ; // Change this if we ever use overlays for anything else!
if ( DebugSceneCamera != none )
{
myHUD . RemovePostRenderedActor ( DebugSceneCamera ) ;
DebugSceneCamera . DestroyDebugScene ( ) ;
DebugSceneCamera = none ;
}
}
/ * * T o g g l e t h e K F S c e n e C a p t u r e D e b u g C a m o r b i t i n g b e h a v i o r . O r b i t i n g i s e s p e c i a l l y h e l p f u l i f t h e f o c u s
actor is moving . * /
exec function ToggleDebugSceneOrbit ( )
{
if ( DebugSceneCamera != none )
{
DebugSceneCamera . ToggleDebugSceneOrbit ( ) ;
}
}
/** Pause debug scene updating - the view remains but won't update until it's unpaused */
exec function PauseDebugSceneUpdate ( )
{
if ( DebugSceneCamera != none )
{
DebugSceneCamera . PauseDebugSceneUpdate ( ) ;
}
}
/** Override the scene capture view mode (wireframe, unlit, lit no shadows, etc.) */
function SetDebugSceneViewMode ( ESceneCaptureViewMode NewViewMode )
{
if ( bDebugSceneEnabled && DebugSceneCamera != none )
{
DebugSceneCamera . SetDebugSceneViewMode ( NewViewMode ) ;
}
}
/ * * T h i s w i l l o v e r r i d e t h e K F S c e n e C a p t u r e D e b u g C a m b e h a v i o r b y s t o p p i n g i t s m o v e m e n t a n d s h i f t i n g
its focus to match the player ' s viewpoint at the time the command was issued * /
exec function SetDebugSceneView ( )
{
if ( bDebugSceneEnabled && DebugSceneCamera != none )
{
DebugSceneCamera . MoveToMyPawnLocation ( ) ;
}
}
` if( ` notdefined ( ShippingPC ) )
exec function StartFireTimer ( float TimerInterval = 1.0 f )
{
if ( TimerInterval <= 0 )
{
ClearTimer ( nameof ( FireIntervalTimer ) , self ) ;
}
else
{
SetTimer ( TimerInterval , true , nameOf ( FireIntervalTimer ) , self ) ;
}
}
function FireIntervalTimer ( )
{
ConsoleCommand ( "StartFire 0" ) ;
}
` endif
exec function ToggleSplatterGun ( )
{
local KeyBind TempKeyBind ;
local KFPlayerInput KFInput ;
TempKeyBind . Name = 'LeftMouseButton' ;
KFInput = KFPlayerInput ( PlayerInput ) ;
if ( KFInput != none )
{
if ( ! bUsingSplatterGun && KFPlayerInput ( PlayerInput ) != none )
{
KFInput . RemoveCommandFromBind ( TempKeyBind , "GBA_Fire" ) ;
KFInput . SetKeyBind ( TempKeyBind , "SplatterFire" , false ) ;
KFInput . SaveConfig ( ) ;
bUsingSplatterGun = true ;
}
else
{
KFInput . RemoveCommandFromBind ( TempKeyBind , "SplatterFire" ) ;
KFInput . SetKeyBind ( TempKeyBind , "GBA_Fire" , false ) ;
KFInput . SaveConfig ( ) ;
bUsingSplatterGun = false ;
}
}
}
exec function SplatterFire ( )
{
//why you no work
if ( IsTimerActive ( nameof ( DoSplatterFire ) , self ) )
{
StopSplatterFire ( ) ;
}
else
{
DoSplatterFire ( ) ;
SetTimer ( 0.1 , true , nameof ( DoSplatterFire ) , self ) ;
}
}
exec function StopSplatterFire ( )
{
ClearTimer ( nameof ( DoSplatterFire ) , self ) ;
}
function DoSplatterFire ( )
{
local KFGoreManager GoreManager ;
local vector StartTrace , TraceDir ;
if ( ! bUsingSplatterGun ) {
StopSplatterFire ( ) ;
}
// Grab the gore manager
GoreManager = KFGoreManager ( WorldInfo . MyGoreEffectManager ) ;
if ( GoreManager == none )
{
` warn("##### Could not find gore manager #####");
return ;
}
// Leave a splat on level geometry along the direction being shot at
StartTrace = Pawn . GetWeaponStartTraceLocation ( ) ;
TraceDir = vector ( Pawn . Weapon . GetAdjustedAim ( StartTrace ) ) ;
GoreManager . LeaveAPersistentBloodSplat ( StartTrace , TraceDir ) ;
//Trace(OutHitLocation, OutHitNormal, EndTrace, StartTrace);
//DrawDebugLine(StartTrace, OutHitLocation, 255, 0, 0, true);
//DrawDebugStar(OutHitLocation, 10, 255, 255, 255, true);
}
exec function ClearSplatters ( )
{
local KFGoreManager GoreManager ;
// Grab the gore manager
GoreManager = KFGoreManager ( WorldInfo . MyGoreEffectManager ) ;
if ( GoreManager == none )
{
` warn("##### Could not find gore manager #####");
return ;
}
// Clear the splats
GoreManager . ClearPersistentBloodSplats ( ) ;
}
exec function ClearCorpses ( )
{
local int i ;
local KFGoreManager GoreManager ;
// Grab the gore manager
GoreManager = KFGoreManager ( WorldInfo . MyGoreEffectManager ) ;
if ( GoreManager == none )
{
return ;
}
// remove all humans from the corpse pool during respawn
for ( i = GoreManager . CorpsePool . Length - 1 ; i >= 0 ; i -- )
{
GoreManager . RemoveAndDeleteCorpse ( i ) ;
}
}
exec function EndRound ( optional bool bSkipResults )
{
if ( WorldInfo . Game != none )
{
WorldInfo . Game . GotoState ( 'RoundEnded' , bSkipResults ? 'ForceEnded' : 'Begin' ) ;
}
}
exec function CameraBlood ( )
{
Outer . ClientSpawnCameraLensEffect ( class 'KFCameraLensEmit_BloodBase' ) ;
}
exec function HeadShotPing ( bool value )
{
}
exec function CameraPuke ( )
{
Outer . ClientSpawnCameraLensEffect ( class 'KFCameraLensEmit_Puke' ) ;
}
exec function EnableAtkAnimDifficultyScaling ( )
{
ConsoleCommand ( "SETNOPEC KFPawnAnimInfo bEnableDifficultyScaling true" ) ;
}
exec function DisableAtkAnimDifficultyScaling ( )
{
ConsoleCommand ( "SETNOPEC KFPawnAnimInfo bEnableDifficultyScaling false" ) ;
}
` if( ` notdefined ( ShippingPC ) )
exec function FindAllCollectibles ( )
{
local KFGameInfo KFGI ;
KFGI = KFGameInfo ( WorldInfo . Game ) ;
KFGI . FindCollectibles ( ) ;
}
exec function SetDoshScalarValue ( float Poop )
{
if ( KFGameInfo _Entry ( WorldInfo . Game ) != none )
{
KFGameInfo _Entry ( WorldInfo . Game ) . InitDoshLitter ( Poop ) ;
}
}
exec function DoshVaultAmount ( int DoshVaultAmount , bool bMatchCurrentAndLast )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( bMatchCurrentAndLast )
{
KFPC . DebugLastSeenDoshVaultValue = DoshVaultAmount ;
KFPC . DebugCurrentDoshVaultValue = DoshVaultAmount ;
KFPC . DebugCurrentDoshVaultTier = DoshVaultAmount ;
}
else
{
KFPC . DebugLastSeenDoshVaultValue = DoshVaultAmount - KFPC . GetDoshVaultTierValue ( ) ;
KFPC . DebugCurrentDoshVaultValue = DoshVaultAmount ;
KFPC . DebugCurrentDoshVaultTier = DoshVaultAmount - KFPC . GetDoshVaultTierValue ( ) ;
}
if ( KFPC != none && KFPC . MyGFxManager != none && KFPC . MyGFxManager . DoshVaultMenu != none )
{
if ( KFPC . MyGFxManager . CurrentMenuIndex == UI _Dosh _Vault )
{
if ( KFGameInfo _Entry ( WorldInfo . Game ) != none )
{
KFGameInfo _Entry ( WorldInfo . Game ) . SpawnDoshPilesForAmount ( KFPC . DebugLastSeenDoshVaultValue ) ;
}
KFPC . MyGFxManager . DoshVaultMenu . SendDoshInfo ( KFPC . DebugLastSeenDoshVaultValue , KFPC . DebugCurrentDoshVaultValue , KFPC . DebugCurrentDoshVaultTier , KFPC . GetDoshVaultTierValue ( ) , 0 ) ;
}
}
}
exec function EnableForceSpecialZeds ( )
{
ConsoleCommand ( "SETNOPEC KFMonsterDifficultyInfo bForceSpecialSpawn true" ) ;
}
exec function DisableForceSpecialZeds ( )
{
ConsoleCommand ( "SETNOPEC KFMonsterDifficultyInfo bForceSpecialSpawn false" ) ;
}
exec function SetVaultParams ( )
{
}
` endif
/** Prints out a pawns modifier and final default values when spawned */
exec function ToggleAIDefaultsLog ( )
{
local KFGameInfo KFGI ;
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
KFGI . bLogAIDefaults = ! KFGI . bLogAIDefaults ;
}
}
/** Forces the game to think this many players are alive */
exec function SetLivingPlayers ( byte NewLivingPlayers , optional bool bSoloMode = false )
{
local KFGameInfo KFGI ;
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
KFGI . bOnePlayerAtStart = bSoloMode ;
KFGI . ForceLivingPlayerCount ( NewLivingPlayers ) ;
}
}
` if( ` notdefined ( ShippingPC ) )
/** Tells the Versus spawn manager to simulate X number of zed players using AI */
exec function SetAISimulatedPlayersV ( byte NewSimulatedAIPlayers , optional byte NewSimulatedMercPlayers = 0 )
{
ConsoleCommand ( "SETNOPEC KFAISpawnManager_Versus bUsingAISimulatedPlayers" @ NewSimulatedAIPlayers > 0 ? "true" : "false" ) ;
ConsoleCommand ( "SETNOPEC KFAISpawnManager_Versus AISimulatedPlayerNum" @ NewSimulatedAIPlayers ) ;
if ( NewSimulatedMercPlayers > 0 )
{
SetLivingPlayers ( NewSimulatedMercPlayers ) ;
}
}
` endif
/** converts a legacy 4/3 aspect ratio FOV to a 16/9 FOV */
exec function ConvertFOV ( float InFOV )
{
local float AspectRatio , OriginalAspectRatio ;
local float NewFOV ;
// 16/9 resolution scaled to 4/3 FOV
AspectRatio = 16 / 9 ;
OriginalAspectRatio = 4 / 3 ;
NewFOV = ( ATan2 ( ( Tan ( ( InFOV * Pi ) / 360.0 ) * ( AspectRatio / OriginalAspectRatio ) ) , 1 ) * 360.0 ) / Pi ;
` log("FOV --- Original:"@InFOV@"New:"@NewFOV);
}
/ * * I g n o r e t h i s - i t ' s a v e r y s p e c i f i c f u n c t i o n c a l l e d b y K i s m e t i n a t e s t l e v e l w h i c h h a s a t o g g l e a b l e p o i n t l i g h t w i t h a
* light animation . Toggling the light on the normal way doesn 't work unless I update the light' s last render time . Rather
* than editing the lighting code , I ' m just going to use this cheat command ( invoked by Kismet ) to do so . * /
exec function TurnOnAIArenaLight ( )
{
local PointLightToggleable PLT ;
foreach WorldInfo . AllActors ( class 'PointLightToggleable' , PLT )
{
PLT . bEnabled = true ;
PLT . LightComponent . SetEnabled ( true ) ;
PLT . LastRenderTime = WorldInfo . TimeSeconds ;
}
}
exec function SetNadeRadiusDebug ( bool bShowRadius )
{
class 'KFExplosionActor' . default . bDrawDebug = bShowRadius ;
class 'KFExplosionActor' . static . StaticSaveConfig ( ) ;
}
/** Spawn explosion fragment chunks for testing */
exec function LaunchChunks ( int NumChunks , bool bNoSpread )
{
local vector SpawnPos , BaseChunkDir ;
local rotator rot ;
local int i ;
local Projectile NewChunk ;
local vector ViewLocation ;
Local rotator ViewRotation ;
local KFPerk MyPerk ;
MyPerk = KFPawn ( Pawn ) . GetPerk ( ) ;
GetPlayerViewPoint ( ViewLocation , ViewRotation ) ;
SpawnPos = ViewLocation ;
if ( Pawn != none && Pawn . Role == ROLE _Authority )
{
BaseChunkDir = vector ( ViewRotation ) ;
for ( i = 0 ; i < NumChunks ; i ++ )
{
if ( bNoSpread )
{
rot = rotator ( BaseChunkDir ) ;
}
else
{
rot = rotator ( 8 * BaseChunkDir + VRand ( ) ) ;
}
NewChunk = Pawn . Weapon . Spawn ( MyPerk . GrenadeClass . default . ExplosionTemplate . ShardClass , Pawn . Weapon != none ? Pawn . Weapon : Pawn , , SpawnPos , rot ) ;
if ( NewChunk != None )
{
NewChunk . Init ( vector ( rot ) ) ;
}
}
}
}
exec function ShowMeleeCollision ( bool bEnable = true )
{
ConsoleCommand ( "SETNOPEC KFMeleeHelperBase bDebugShowCollision" @ bEnable ) ;
}
exec function Chris ( )
{
ConsoleCommand ( "SUPPRESS DevPhysics" ) ;
God ( ) ;
AllWeapons ( ) ;
Uberammo ( ) ;
ConsoleCommand ( "ToggleSpawning" ) ;
}
exec function TestGameSearch ( optional bool bSearchLan )
{
local KFDataStore _OnlineGameSearch SearchDataStore ;
local DataStoreClient DataStoreManager ;
local bool succeed ;
local OnlineGameSearch GameSearch ;
DataStoreManager = class 'UIInteraction' . static . GetDataStoreClient ( ) ;
if ( DataStoreManager == None )
{
` log("No data store manager");
ClientMessage ( "No data store manager" , CheatType ) ;
return ;
}
SearchDataStore = KFDataStore _OnlineGameSearch ( DataStoreManager . FindDataStore ( 'KFGameSearch' , LocalPlayer ( Player ) ) ) ;
if ( SearchDataStore == None )
{
` log("No search data store found");
ClientMessage ( "No search data store found" , CheatType ) ;
return ;
}
GameSearch = SearchDataStore . GetCurrentGameSearch ( ) ;
if ( GameSearch == None )
{
` log("No current game search found");
ClientMessage ( "No current game search found" , CheatType ) ;
return ;
}
GameSearch . bIsLanQuery = bSearchLan ;
succeed = SearchDataStore . SubmitGameSearch ( 0 ) ;
if ( succeed )
{
` log("Search start succeeded");
ClientMessage ( "Search start succeeded" , CheatType ) ;
}
else
{
` log("Search start failed");
ClientMessage ( "Search start failed" , CheatType ) ;
}
}
exec function ShowLevelUpPopUp ( bool bTierUnlock )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC != none && KFPC . MyGFxHUD != none && KFPC . MyGFxHUD . LevelUpNotificationWidget != none )
{
KFPC . MyGFxHUD . LevelUpNotificationWidget . ShowLevelUpNotification ( KFPC . CurrentPerk . Class , KFPC . GetLevel ( ) , bTierUnlock ) ;
}
}
exec function GetCurrentPerkXP ( )
{
ClientMessage ( "Perk:" @ Mid ( KFPawn ( Pawn ) . GetPerk ( ) , 7 ) @ "XP:" @ KFPlayerController ( Outer ) . GetPerkXP ( KFPawn ( Pawn ) . GetPerk ( ) . Class ) , CheatType ) ;
}
/** Simulate radius damage falloff for balance tweaks */
exec function TestFalloffDamage ( float Distance , float MaxRadius , float FalloffExponent )
{
local float DamageScale ;
DamageScale = FClamp ( 1. f - Distance / MaxRadius , 0. f , 1. f ) ;
DamageScale = DamageScale * * FalloffExponent ;
` log(GetFuncName()@"Result:" $ DamageScale);
}
/** Zed time testing */
exec function ZedTimeTest ( float NewCustomTimeDilation )
{
GetMyPawn ( ) . CustomTimeDilation = NewCustomTimeDilation ;
GetMyPawn ( ) . Weapon . CustomTimeDilation = NewCustomTimeDilation ;
}
exec function FakeDramaEvent ( )
{
DramaEvent ( 1.0 ) ;
ZedTimeTest ( 5.0 ) ;
SetTimer ( 0.6 , false , nameof ( ClearFakeDramaEvent ) , self ) ;
}
simulated function ClearFakeDramaEvent ( )
{
GetMyPawn ( ) . CustomTimeDilation = 1.0 ;
GetMyPawn ( ) . Weapon . CustomTimeDilation = 1.0 ;
}
/** Simulated a double shotgun shot momentum */
exec function DBJump ( )
{
local vector UsedKickMomentum ;
2022-11-27 21:49:25 +00:00
local KFPlayerController KFPC ;
2020-12-13 15:01:13 +00:00
// Push the player back when they fire both barrels
if ( Pawn != none )
{
UsedKickMomentum . X = - 1000 ;
if ( Pawn . Physics == PHYS _Falling )
{
UsedKickMomentum = UsedKickMomentum >> Pawn . GetViewRotation ( ) ;
UsedKickMomentum *= 0.5 ;
}
else
{
UsedKickMomentum = UsedKickMomentum >> Pawn . Rotation ;
UsedKickMomentum . Z = 0 ;
}
Pawn . AddVelocity ( UsedKickMomentum , Pawn . Location , none ) ;
2022-11-27 21:49:25 +00:00
KFPC = KFPlayerController ( Pawn . Controller ) ;
if ( KFPC != none )
{
KFPC . SetShotgunJump ( true ) ;
}
2020-12-13 15:01:13 +00:00
}
}
exec function ShowKFGameVersion ( )
{
` log( "Current KFGame version:" @ class'KFGameEngine'.static.GetKFGameVersion() );
}
//Ammo
exec function LogAmmoPickups ( )
{
local KFGameinfo KFGI ;
local float NumTotalAmmoPickups ,
NumActiveAmmoPickups ,
NumSleepingAmmoPickups ,
NumDisabledAmmoPickups ;
local int i ;
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
` log( "~~LogAmmoPickups START~~~" );
for ( i = 0 ; i < KFGI . AmmoPickups . Length ; i ++ )
{
NumTotalAmmoPickups += 1. f ;
if ( KFGI . AmmoPickups [ i ] . IsInState ( 'Disabled' ) )
{
NumDisabledAmmoPickups += 1. f ;
` log( "~~LogAmmoPickups: AmmoPickup" @ i @ "is disabled! Location:" @ KFGI.AmmoPickups[i].Location );
}
else if ( KFGI . AmmoPickups [ i ] . IsInState ( 'sleeping' ) )
{
NumSleepingAmmoPickups += 1. f ;
` log( "~~LogAmmoPickups: AmmoPickup" @ i @ "is sleeping! Location:" @ KFGI.AmmoPickups[i].Location @ "; Time until respawn: " @ KFGI.AmmoPickups[i].GetRemainingTimeForTimer(nameof(KFGI.AmmoPickups[i].Reset)));
}
else if ( KFGI . AmmoPickups [ i ] . IsInState ( 'pickup' ) )
{
NumActiveAmmoPickups += 1. f ;
` log( "~~LogAmmoPickups: AmmoPickup" @ i @ "is ACTIVE! Location:" @ KFGI.AmmoPickups[i].Location );
}
}
` log( "~~LogAmmoPickups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" );
` log( "~~LogAmmoPickups: Total num ammo pickup ups: " @ Round( NumTotalAmmoPickups ) );
` log( "~~LogAmmoPickups: Disabled ammo pickup ups: " @ Round( NumDisabledAmmoPickups ) );
` log( "~~LogAmmoPickups: Sleeping ammo pickup ups: " @ Round( NumSleepingAmmoPickups ) );
` log( "~~LogAmmoPickups: Active ammo pickup ups: " @ Round( NumActiveAmmoPickups ) );
` log( "~~LogAmmoPickups: Percentages: Disabled:" @ (100 / NumTotalAmmoPickups) * NumDisabledAmmoPickups $ "%" @ "Sleeping:" @ (100 / NumTotalAmmoPickups) * NumSleepingAmmoPickups $ "%" @ "Active:" @ (100 / NumTotalAmmoPickups) * NumActiveAmmoPickups $ "%" );
` log( "~~LogAmmoPickups END~~~" );
}
}
exec function LogItemPickups ( )
{
local KFGameinfo KFGI ;
local float NumTotalItemPickups ,
NumActiveItemPickups ,
NumSleepingItemPickups ,
NumDisabledItemPickups ;
local int i ;
KFGI = KFGameInfo ( WorldInfo . Game ) ;
if ( KFGI != none )
{
` log( "~~LogItemPickups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" );
` log( "~~LogItemPickups START~~~" );
` log( "~~LogItemPickups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" );
for ( i = 0 ; i < KFGI . ItemPickups . Length ; i ++ )
{
NumTotalItemPickups += 1. f ;
if ( KFGI . ItemPickups [ i ] . IsInState ( 'Disabled' ) )
{
NumDisabledItemPickups += 1. f ;
` log( "~~LogItemPickups: ItemPickup" @ i @ "is disabled! Location:" @ KFGI.ItemPickups[i].Location );
}
else if ( KFGI . ItemPickups [ i ] . IsInState ( 'sleeping' ) )
{
NumSleepingItemPickups += 1. f ;
` log( "~~LogItemPickups -------------------------------------" );
` log( "~~LogItemPickups: ItemPickup" @ i @ "is sleeping! Location:" @ KFGI.ItemPickups[i].Location );
}
else if ( KFGI . ItemPickups [ i ] . IsInState ( 'pickup' ) )
{
NumActiveItemPickups += 1. f ;
` log( "~~LogItemPickups -------------------------------------" );
` log( "~~LogItemPickups: ItemPickup" @ i @ "is ACTIVE! Location:" @ KFGI.ItemPickups[i].Location );
` log( "~~LogItemPickups: ItemPickup" @ i @ "item is a" @ KFPickupFactory_Item(KFGI.ItemPickups[i]).ItemPickups[ KFPickupFactory_Item(KFGI.ItemPickups[i]).PickupIndex ].ItemClass.name );
}
}
` log( "~~LogItemPickups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" );
` log( "~~LogItemPickups: Total num item pickups: " @ Round( NumTotalItemPickups ) );
` log( "~~LogItemPickups: Disabled item pickups: " @ Round( NumDisabledItemPickups ) );
` log( "~~LogItemPickups: Sleeping item pickups: " @ Round( NumSleepingItemPickups ) );
` log( "~~LogItemPickups: Active item pickups: " @ Round( NumActiveItemPickups ) );
` log( "~~LogItemPickups: Percentages: Disabled:" @ (100 / NumTotalItemPickups) * NumDisabledItemPickups $ "%" @ "Sleeping:" @ (100 / NumTotalItemPickups) * NumSleepingItemPickups $ "%" @ "Active:" @ (100 / NumTotalItemPickups) * NumActiveItemPickups $ "%" );
` log( "~~LogItemPickups END~~~" );
}
}
exec function LogStatValue ( int StatId )
{
KFPlayerController ( Outer ) . LogStatValue ( StatId ) ;
}
/** Brute force hide/unhide actors that are ignored for pawn relevancy */
exec function ToggleRelevancyView ( )
{
local Actor A ;
foreach AllActors ( class 'Actor' , A )
{
if ( A . bIgnoreNetRelevancyCollision )
{
A . SetHidden ( ! A . bHidden ) ;
}
}
}
/** Brute force hide/unhide actors that are ignored for RB visibility */
exec function ToggleVisibilityView ( )
{
local Actor A ;
local StaticMeshActor SM ;
local StaticMeshComponent SMC ;
foreach AllActors ( class 'Actor' , A )
{
SM = StaticMeshActor ( A ) ;
if ( SM != None )
{
SMC = SM . StaticMeshComponent ;
if ( ! SMC . RBCollideWithChannels . Visibility )
{
SMC . SetHidden ( ! SMC . HiddenGame ) ;
}
}
else
{
// Unsupported Type - For a more complete view use 'show visibility'
A . SetHidden ( ! A . bHidden ) ;
}
}
}
/** Debugging */
exec function LogServerMovementVars ( )
{
if ( Pawn != None )
{
` log(Pawn@"Velocity:" @ Pawn.Velocity);
` log(Pawn@"Acceleration:" @ Pawn.Acceleration);
` log(Pawn@"Physics:" @ Pawn.Physics);
` log(Pawn@"bIsWalking:" @ Pawn.bIsWalking);
` log(Pawn@"bIsSprinting:" @ KFPawn(Pawn).bIsSprinting);
` log(Pawn@"bIsCrouched:" @ Pawn.bIsCrouched);
` log(Pawn@"WeaponEncumbrance:" @ KFInventoryManager(Pawn.InvManager).GetEncumbranceSpeedMod());
` log(Pawn@"GroundSpeed:" @ Pawn.GroundSpeed);
` log(Pawn@"Speed:" @ VSize(Pawn.Velocity));
` log(Pawn@"MovementSpeedModifier:" @ Pawn.MovementSpeedModifier);
` log(Pawn@"Controller State:"@Outer.GetStateName());
}
}
// respawns all spectating players
exec function RespawnSpectators ( )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
KFGameInfo ( WorldInfo . Game ) . StartHumans ( ) ;
}
}
exec function WeaponGotoState ( name StateName )
{
if ( Pawn != none && Pawn . Weapon != none )
{
Pawn . Weapon . GotoState ( Statename ) ;
}
}
/** SDK - Weapon skin preview */
exec function SetWeaponSkin ( int MaterialIndex , string MaterialName )
{
local MaterialInterface NewMat ;
if ( Pawn != none && Pawn . Weapon != none )
{
NewMat = MaterialInterface ( DynamicLoadObject ( MaterialName , class 'MaterialInterface' ) ) ;
Pawn . Weapon . Mesh . SetMaterial ( MaterialIndex , NewMat ) ;
}
}
/** DemiGod Mode (prevents death, but not damage) */
exec function DemiGod ( )
{
` if( ` _ _TW _SDK _ )
if ( bDemiGodMode )
{
bDemiGodMode = false ;
ClientMessage ( "Demi God mode off" ) ;
return ;
}
bDemiGodMode = true ;
ClientMessage ( "Demi God Mode on" ) ;
` endif
}
/** Play grapple move if available */
exec function TestGrapple ( )
{
local KFPawn _Monster P ;
foreach WorldInfo . AllPawns ( class 'KFPawn_Monster' , P )
{
if ( P . CanDoSpecialMove ( SM _GrappleAttack ) )
{
P . DoSpecialMove ( SM _GrappleAttack , true , Pawn ) ;
}
}
}
exec function SpawnHumanPawnV ( optional bool bEnemy , optional bool bUseGodMode , optional int CharIndex )
{
local KFAIController KFBot ;
local KFPlayerReplicationInfo KFPRI ;
local vector CamLoc ;
local rotator CamRot ;
local class < KFPawn _Human > PawnClass ;
Local KFPawn _Human KFPH ;
local Vector HitLocation , HitNormal ;
local Actor TraceOwner ;
GetPlayerViewPoint ( CamLoc , CamRot ) ;
if ( Pawn != none )
{
TraceOwner = Pawn ;
}
else
{
TraceOwner = Outer ;
}
TraceOwner . Trace ( HitLocation , HitNormal , CamLoc + Vector ( CamRot ) * 250000 , CamLoc , TRUE , vect ( 0 , 0 , 0 ) ) ;
HitLocation . Z += 100 ;
// FlushPersistentDebugLines();
// DrawDebugSphere( HitLocation, 100, 12, 0, 255, 0, TRUE );
PawnClass = class < KFPawn _Human > ( DynamicLoadObject ( "KFGameContent.KFPawn_Human_Versus" , class 'Class' ) ) ;
KFPH = Spawn ( PawnClass , , , HitLocation ) ;
KFPH . SetPhysics ( PHYS _Falling ) ;
// Create a new Controller for this Bot
KFBot = Spawn ( class 'KFAIController' ) ;
// Silly name for now
WorldInfo . Game . ChangeName ( KFBot , "Braindead Vs. Human" , false ) ;
// Add them to the Team they selected
if ( ! bEnemy )
{
KFGameInfo ( WorldInfo . Game ) . SetTeam ( KFBot , KFGameInfo ( WorldInfo . Game ) . Teams [ 0 ] ) ;
}
KFBot . Possess ( KFPH , false ) ;
if ( bUseGodMode )
{
KFBot . bGodMode = true ;
}
KFPRI = KFPlayerReplicationInfo ( KFBot . PlayerReplicationInfo ) ;
// Set perk stuff
//KFPRI.SetCharacter(CharIndex);
KFPRI . CurrentPerkClass = Class 'KFPlayerController' . default . PerkList [ 1 ] . PerkClass ;
KFPRI . NetPerkIndex = 1 ;
if ( KFPRI != none )
{
KFPRI . PLayerHealthPercent = FloatToByte ( float ( KFPH . Health ) / float ( KFPH . HealthMax ) ) ;
KFPRI . PLayerHealth = KFPH . Health ;
}
//KFPRI.CurrentPerkLevel = 0;
KFPH . AddDefaultInventory ( ) ;
}
/** For Accessory Testing, stop player on Gear Menu */
` if( ` notdefined ( ShippingPC ) )
exec function StopPawnOnGearMenu ( optional bool bTickDisabled = true )
{
local KFPawn _Human KFPH ;
foreach WorldInfo . AllActors ( class 'KFPawn_Human' , KFPH )
{
if ( KFPH != none )
{
KFPH . SetTickIsDisabled ( bTickDisabled ) ;
}
else
{
` log( GetFuncName() @ "Notice: No KFPawn_Human" );
}
}
}
` endif
// NVCHANGE_BEGIN - RLS - Debugging Effects (do not merge)
` if( ` notdefined ( ShippingPC ) )
exec function NVZedTime ( bool bImmediate = false , float Chance = 100.0 , float Duration = 5.0 )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
if ( bImmediate )
{
KFGameInfo ( WorldInfo . Game ) . DramaticEvent ( Chance , Duration ) ;
}
else
{
KFGameInfo ( WorldInfo . Game ) . bNVAlwaysDramatic = ! KFGameInfo ( WorldInfo . Game ) . bNVAlwaysDramatic ;
}
if ( KFGameInfo ( WorldInfo . Game ) . bNVAlwaysDramatic )
ClientMessage ( "NV: Always ZedTime ENABLED!" ) ;
else
ClientMessage ( "NV: Always ZedTime DISABLED." ) ;
}
}
exec function NVEnableZedTime ( bool bEnable = true )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
KFGameInfo ( WorldInfo . Game ) . bNVBlockDramatic = ! bEnable ;
if ( KFGameInfo ( WorldInfo . Game ) . bNVBlockDramatic )
ClientMessage ( "NV: ZedTime BLOCKED!" ) ;
else
ClientMessage ( "NV: ZedTime UNBLOCKED." ) ;
}
}
exec function NVHeadshot ( )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
KFGameInfo ( WorldInfo . Game ) . bNVAlwaysHeadshot = ! KFGameInfo ( WorldInfo . Game ) . bNVAlwaysHeadshot ;
if ( KFGameInfo ( WorldInfo . Game ) . bNVAlwaysHeadshot )
ClientMessage ( "NV: Always Headshot ENABLED!" ) ;
else
ClientMessage ( "NV: Always Headshot DISABLED." ) ;
}
}
exec function NVDamage ( )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
KFGameInfo ( WorldInfo . Game ) . bNVDebugDamage = ! KFGameInfo ( WorldInfo . Game ) . bNVDebugDamage ;
if ( KFGameInfo ( WorldInfo . Game ) . bNVDebugDamage )
ClientMessage ( "NV: Debug Damage ENABLED!" ) ;
else
ClientMessage ( "NV: Debug Damage DISABLED." ) ;
}
}
exec function NVGod ( )
{
AllWeapons ( ) ;
Flame ( ) ;
Uberammo ( ) ;
KillRecoil ( ) ;
NVZedTime ( ) ;
}
exec function NVSpawnFlex ( optional int EffectNumber = 0 , optional name BoneName )
{
local ParticleSystem FlexPSCTemplate ;
local KFPawn KFP ;
local matrix KMatrix ;
local vector KLoc ;
local rotator KRot ;
local ParticleSystemComponent PSC ;
KFP = KFPawn ( Pawn ) ;
if ( KFP != none )
{
if ( EffectNumber == 0 )
{
EffectNumber = rand ( 5 ) + 1 ;
}
if ( BoneName == '' )
{
BoneName = 'head' ;
}
switch ( EffectNumber )
{
case 1 :
FlexPSCTemplate = ParticleSystem 'FX_Gore_EMIT.FX_Obliteration_Explode' ;
break ;
case 2 :
FlexPSCTemplate = ParticleSystem 'FX_Gore_EMIT.FX_Spine_Jet_01' ;
break ;
case 3 :
FlexPSCTemplate = ParticleSystem 'ZED_Bloat_EMIT.FX_Bloat_Explode' ;
break ;
case 4 :
FlexPSCTemplate = ParticleSystem 'ZED_Siren_EMIT.FX_Siren_scream_01' ;
break ;
default :
FlexPSCTemplate = ParticleSystem 'ZED_Bloat_EMIT.FX_Bloat_Barf' ;
break ;
}
KMatrix = KFP . Mesh . GetBoneMatrix ( KFP . Mesh . MatchRefBone ( BoneName ) ) ;
KLoc = MatrixGetOrigin ( KMatrix ) ;
KMatrix = MakeRotationMatrix ( rot ( 0 , - 16383 , 16383 ) ) * KMatrix ;
KRot = MatrixGetRotator ( KMatrix ) ;
PSC = WorldInfo . MyEmitterPool . SpawnEmitter ( FlexPSCTemplate , KLoc , KRot , KFP ) ;
PSC . SetLightingChannels ( KFP . PawnLightingChannel ) ;
}
}
` endif
// NVCHANGE_END - RLS - Debugging Effects
exec function ShowPostRoundMenu ( )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
KFPC . ClientOpenRoundSummary ( ) ;
}
exec function Hats ( )
{
ConsoleCommand ( "set kfunlockmanager bdebugunlocks true" ) ;
}
// Playfab debugging Begin
/////////////////////////////////////////////////////////////
exec function LoginSelf ( )
{
TestLogin ( PlayerReplicationInfo . PlayerName ) ;
}
exec function TestLogin ( string InName )
{
` log("Logging in"@InName);
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddOnLoginCompleteDelegate ( OnLoginComplete ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . Login ( InName ) ;
}
function OnLoginComplete ( bool bWasSuccessful , string SessionTicket , string PlayfabId )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearOnLoginCompleteDelegate ( OnLoginComplete ) ;
` log("Login complete with success"@bWasSuccessful@"and playfab ID"@PlayfabId@"and session ticket"@SessionTicket);
}
exec function TestPlayfabGameSearch ( )
{
local KFDataStore _OnlineGameSearch SearchDataStore ;
SearchDataStore = KFDataStore _OnlineGameSearch ( class 'UIInteraction' . static . GetDataStoreClient ( ) . FindDataStore ( 'KFGameSearch' ) ) ;
SearchDataStore . ActiveSearchIndex = 0 ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddFindOnlineGamesCompleteDelegate ( OnFindOnlinePlayfabGamesComplete ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . FindOnlineGames ( SearchDataStore . GameSearchCfgList [ 0 ] . Search ) ;
}
function OnFindOnlinePlayfabGamesComplete ( bool bSuccess )
{
local int i ;
local KFDataStore _OnlineGameSearch SearchDataStore ;
local KFOnlineGameSettings GS ;
SearchDataStore = KFDataStore _OnlineGameSearch ( class 'UIInteraction' . static . GetDataStoreClient ( ) . FindDataStore ( 'KFGameSearch' ) ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearFindOnlineGamesCompleteDelegate ( OnFindOnlinePlayfabGamesComplete ) ;
` log("Search finished with success"@bSuccess);
for ( i = 0 ; i < SearchDataStore . GameSearchCfgList [ 0 ] . Search . Results . Length ; i ++ )
{
GS = KFOnlineGameSettings ( SearchDataStore . GameSearchCfgList [ 0 ] . Search . Results [ i ] . GameSettings ) ;
` log("Listing result with region"@GS.Region@"and join string"@GS.JoinString@"and gamemode"@GS.Mode@"and lobby ID"@GS.LobbyId@"and num open connections"@GS.NumOpenPublicConnections@"and max players"@GS.NumPublicConnections);
}
}
exec function TestServerInfoQuery ( string LobbyId )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddQueryServerInfoCompleteDelegate ( OnQueryServerInfoComplete ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . QueryServerInfo ( LobbyId ) ;
}
function OnQueryServerInfoComplete ( bool bWasSuccessful , string LobbyId , string ServerIp , int ServerPort , string AuthTicket )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearQueryServerInfoCompleteDelegate ( OnQueryServerInfoComplete ) ;
` log("OnQueryServerInfoComplete complete with succcess"@bWasSuccessful@"and lobby ID"@LobbyId@"and server IP"@ServerIp@"and port"@ServerPort@"and auth ticket"@AuthTicket);
}
exec function StartupServer ( optional string ServerCommandline )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddOnServerStartedDelegate ( OnServerStarted ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . StartNewServerInstance ( ServerCommandline ) ;
}
function OnServerStarted ( bool bWasSuccessful , string ServerLobbyId , string ServerIp , int ServerPort , string ServerTicket )
{
local string OpenCommand ;
` log("Server started with success flag"@bWasSuccessful@"and with lobby id"@ServerLobbyId@"and server IP"@ServerIp@"and port"@ServerPort@"and ticket"@ServerTicket);
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearOnServerStartedDelegate ( OnServerStarted ) ;
if ( bWasSuccessful )
{
OpenCommand = "open" @ ServerIp$ ":" $ServerPort ;
OpenCommand $ = "?AuthTicket=" $ServerTicket ;
OpenCommand $ = "?PlayfabPlayerId=" $class 'GameEngine' . static . GetPlayfabInterface ( ) . CachedPlayfabId ;
` log("Going to connect with URL:"@OpenCommand);
ConsoleCommand ( OpenCommand ) ;
}
}
exec function SetMatchmakingRegion ( string InRegion )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . CurrRegionName = InRegion ;
}
exec function ReadPFStoreData ( )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddStoreDataReadCompleteDelegate ( OnPlayfabStoreReadComplete ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ReadStoreData ( ) ;
}
function OnPlayfabStoreReadComplete ( bool bSuccessful )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearStoreDataReadCompleteDelegate ( OnPlayfabStoreReadComplete ) ;
` log("store catalog read with success"@bSuccessful);
}
exec function ReadPFUserInventory ( )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddInventoryReadCompleteDelegate ( OnPlayfabInventoryReadComplete ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ReadInventory ( ) ;
}
function OnPlayfabInventoryReadComplete ( bool bSuccessful )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearInventoryReadCompleteDelegate ( OnPlayfabInventoryReadComplete ) ;
` log("Inventory read with success"@bSuccessful);
}
exec function UnlockContainer ( string ContainerItemID )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . UnlockContainer ( ContainerItemID ) ;
}
exec function DumpItemDefinitions ( )
{
local int i ;
local OnlineSubsystem OSS ;
OSS = Class 'GameEngine' . static . GetOnlineSubsystem ( ) ;
for ( i = 0 ; i < OSS . ItemPropertiesList . Length ; i ++ )
{
` log("Listing item"@OSS.ItemPropertiesList[i].Definition@"with name"@OSS.ItemPropertiesList[i].Name@"and type"@OSS.ItemPropertiesList[i].Type@"and price"@OSS.ItemPropertiesList[i].Price@"and URL"@OSS.ItemPropertiesList[i].IconURL@OSS.ItemPropertiesList[i].IconURLLarge);
` log(" and short description"@OSS.ItemPropertiesList[i].ShortDescription);
` log(" and description"@OSS.ItemPropertiesList[i].Description);
` log(" and bundle"@OSS.ItemPropertiesList[i].Bundle);
` log(" and exchange"@OSS.ItemPropertiesList[i].Exchange);
}
}
exec function DumpInventory ( )
{
local int i ;
local OnlineSubsystem OSS ;
OSS = Class 'GameEngine' . static . GetOnlineSubsystem ( ) ;
for ( i = 0 ; i < OSS . CurrentInventory . Length ; i ++ )
{
` log("Listing item"@OSS.CurrentInventory[i].Definition@"and quantity"@OSS.CurrentInventory[i].Quantity);
}
}
exec function DumpExchangeRules ( )
{
local int i , j ;
local OnlineSubsystem OSS ;
OSS = Class 'GameEngine' . static . GetOnlineSubsystem ( ) ;
for ( i = 0 ; i < OSS . ExchangeRuleSetList . Length ; i ++ )
{
` log("For target"@OSS.ExchangeRuleSetList[i].Target@"and item type"@OSS.ExchangeRuleSetList[i].Type);
for ( j = 0 ; j < OSS . ExchangeRuleSetList [ i ] . Sources . Length ; j ++ )
{
` log(" " $ OSS.ExchangeRuleSetList[i].Sources[j].Definition@"x" $ OSS.ExchangeRuleSetList[i].Sources[j].Quantity);
}
}
}
exec function DebugUpdateInternalData ( string InKey , string InValue )
{
local array < string > Keys , Values ;
Keys . AddItem ( InKey ) ;
Values . AddItem ( InValue ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ServerUpdateInternalUserData ( class 'GameEngine' . static . GetPlayfabInterface ( ) . CachedPlayfabId , Keys , Values ) ;
}
exec function DebugUpdateServerData ( )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . CreateGameSettings ( class 'KFOnlineGameSettings' ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ServerUpdateOnlineGame ( ) ;
}
exec function DebugRetrieveInternalData ( string InKey )
{
local array < string > Keys ;
Keys . AddItem ( InKey ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ServerRetrieveInternalUserData ( class 'GameEngine' . static . GetPlayfabInterface ( ) . CachedPlayfabId , Keys ) ;
}
exec function DebugAddCurrency ( int Amount )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ServerAddVirtualCurrencyForUser ( class 'GameEngine' . static . GetPlayfabInterface ( ) . CachedPlayfabId , Amount ) ;
}
exec function DebugRemoveCurrency ( int Amount )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ServerRemoveVirtualCurrencyForUser ( class 'GameEngine' . static . GetPlayfabInterface ( ) . CachedPlayfabId , Amount ) ;
}
exec function DebugGrantItem ( string ItemId )
{
local array < string > ItemIds ;
ItemIds . AddItem ( ItemId ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ServerGrantItemsForUser ( class 'GameEngine' . static . GetPlayfabInterface ( ) . CachedPlayfabId , ItemIds ) ;
}
exec function DebugConsumeEntitlements ( )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ConsumeEntitlements ( ) ;
}
exec function TestTutorialRewards ( )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ExecuteCloudScript ( "ClaimTutorialRewards" , none ) ;
}
exec function DeleteXboxSaveData ( )
{
OnlineSub . ContentInterface . DeleteSaveGame ( LocalPlayer ( Player ) . ControllerId , 0 , "" , "ProfileData" ) ;
}
exec function ShowXboxProductDetails ( optional string ProductId )
{
OnlineSub . PlayerInterfaceEx . ShowProductDetailsUI ( LocalPlayer ( Player ) . ControllerId , ProductId ) ;
}
exec function ShowXboxStoreUI ( )
{
OnlineSub . PlayerInterfaceEx . ShowContentMarketplaceUI ( LocalPlayer ( Player ) . ControllerId , 1 , 1 , "65656f5b-117f-43d2-ae4c-74aea578c32d" ) ;
}
exec function DumpGameProducts ( ) { DumpStoreCatalog ( MIT _Game ) ; }
exec function DumpApplicationProducts ( ) { DumpStoreCatalog ( MIT _Application ) ; }
exec function DumpDurables ( ) { DumpStoreCatalog ( MIT _GameContent ) ; }
exec function DumpConsumables ( ) { DumpStoreCatalog ( MIT _GameConsumable ) ; }
exec function DumpSubscriptions ( ) { DumpStoreCatalog ( MIT _Subscription ) ; }
exec function DumpFullCatalog ( )
{
` log("Dumping Game Products");
DumpGameProducts ( ) ;
` log("Dumping Application Products");
DumpApplicationProducts ( ) ;
` log("Dumping Durable Products");
DumpDurables ( ) ;
` log("Dumping Consumable Products");
DumpConsumables ( ) ;
` log("Dumping Subscription Products");
DumpSubscriptions ( ) ;
}
exec function DumpStoreCatalog ( EMediaItemType MediaType )
{
local int i , j , k ;
local array < MarketplaceProductDetails > AvailableProducts ;
OnlineSub . MarketplaceInterface . GetAvailableProducts ( LocalPlayer ( Player ) . ControllerId , MediaType , AvailableProducts ) ;
` log("Dumping products now... size"@AvailableProducts.Length);
for ( i = 0 ; i < AvailableProducts . Length ; i ++ )
{
` log(i@"StandardId"@AvailableProducts[i].StandardId);
` log(i@"MediaItemType"@AvailableProducts[i].MediaItemType);
` log(i@"ProductName"@AvailableProducts[i].ProductName);
` log(i@"ProductId"@AvailableProducts[i].ProductId);
` log(i@"SandboxId"@AvailableProducts[i].SandboxId);
` log(i@"TitleId"@AvailableProducts[i].TitleId);
` log(i@"IsBundle"@AvailableProducts[i].bIsBundle);
` log(i@"IsPartOfAnyBundle"@AvailableProducts[i].bIsPartOfAnyBundle);
` log(i@"ReducedName"@AvailableProducts[i].ReducedName);
` log(i@"DetailsReadState"@AvailableProducts[i].DetailsReadState);
` log(i@"ProductDescription"@AvailableProducts[i].ProductDescription);
` log(i@"images length"@AvailableProducts[i].Images.Length);
for ( j = 0 ; j < AvailableProducts [ i ] . Images . Length ; j ++ )
{
` log(" Id"@AvailableProducts[i].Images[j].Id);
` log(" Height"@AvailableProducts[i].Images[j].Height);
` log(" Width"@AvailableProducts[i].Images[j].Width);
` log(" Purpose"@AvailableProducts[i].Images[j].Purpose);
` log(" ResizeURL"@AvailableProducts[i].Images[j].ResizeURL);
` log(" purposes length"@AvailableProducts[i].Images[j].Purposes.Length);
for ( k = 0 ; k < AvailableProducts [ i ] . Images [ j ] . Purposes . Length ; k ++ )
{
` log(" "@AvailableProducts[i].Images[j].Purposes[k]);
}
}
` log(i@"availabilities length"@AvailableProducts[i].Availabilities.Length);
for ( j = 0 ; j < AvailableProducts [ i ] . Availabilities . Length ; j ++ )
{
` log(" Title"@AvailableProducts[i].Availabilities[j].Title);
` log(" Description"@AvailableProducts[i].Availabilities[j].Description);
` log(" ContentId"@AvailableProducts[i].Availabilities[j].ContentId);
` log(" CurrencyCode"@AvailableProducts[i].Availabilities[j].CurrencyCode);
` log(" DisplayListPrice"@AvailableProducts[i].Availabilities[j].DisplayListPrice);
` log(" DisplayPrice"@AvailableProducts[i].Availabilities[j].DisplayPrice);
` log(" DistributionType"@AvailableProducts[i].Availabilities[j].DistributionType);
` log(" bIsPurchasable"@AvailableProducts[i].Availabilities[j].bIsPurchasable);
` log(" ListPrice"@AvailableProducts[i].Availabilities[j].ListPrice);
` log(" Price"@AvailableProducts[i].Availabilities[j].Price);
` log(" PromotionalText"@AvailableProducts[i].Availabilities[j].PromotionalText);
` log(" OfferId"@AvailableProducts[i].Availabilities[j].OfferId);
` log(" SignedOffer"@AvailableProducts[i].Availabilities[j].SignedOffer);
` log(" AcceptablePaymentInstrumentTypes length"@AvailableProducts[i].Availabilities[j].AcceptablePaymentInstrumentTypes.Length);
for ( k = 0 ; k < AvailableProducts [ i ] . Availabilities [ j ] . AcceptablePaymentInstrumentTypes . Length ; k ++ )
{
` log(" "@AvailableProducts[i].Availabilities[j].AcceptablePaymentInstrumentTypes[k]);
}
}
}
}
exec function RefreshXboxInventory ( )
{
OnlineSub . MarketplaceInterface . ResetInventoryItems ( LocalPlayer ( Player ) . ControllerId , MIT _All ) ;
OnlineSub . MarketplaceInterface . ReadInventoryItems ( LocalPlayer ( Player ) . ControllerId , MIT _All ) ;
}
exec function ReadPlayfabTitleData ( )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . AddTitleDataReadCompleteDelegate ( OnTitleDataRead ) ;
class 'GameEngine' . static . GetPlayfabInterface ( ) . ReadTitleData ( ) ;
}
exec function OnTitleDataRead ( )
{
` log("Title data read");
}
exec function GetTitleDataValueForKey ( string Key )
{
class 'GameEngine' . static . GetPlayfabInterface ( ) . ClearTitleDataReadCompleteDelegate ( OnTitleDataRead ) ;
` log("title data value for key"@Key@"is"@class'GameEngine'.static.GetPlayfabInterface().GetTitleDataForKey( Key ) );
}
exec function DebugEndGameRewards ( float GameplayTime , optional bool bFinal )
{
local JsonObject Parms ;
Parms = new class 'JsonObject' ;
Parms . SetIntValue ( "UpdateTime" , GameplayTime ) ;
Parms . SetBoolValue ( "bGameEnd" , bFinal ) ;
PlayfabInter . ExecuteCloudScript ( "UpdatePlayRewards" , Parms ) ;
}
exec function DebugSetSafeFrame ( float NewScale )
{
KFGameEngine ( class 'Engine' . static . GetEngine ( ) ) . SafeFrameScale = NewScale ;
}
// Playfab debugging End
/////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
// Mixer Debugging
exec function StartMixer ( )
{
KFPlayerController ( Outer ) . InitializeMixer ( ) ;
}
exec function StopMixer ( )
{
KFPlayerController ( Outer ) . ShutdownMixer ( ) ;
}
exec function TestGaveAmmo ( string Username )
{
KFPlayerController ( Outer ) . MyGFxHUD . ShowNonCriticalMessage ( Username @ class 'KFCommon_LocalizedStrings' . default . MixerGaveAmmoString ) ;
}
exec function TestMixerButton ( string Button , string metadata , int amount , int cooldown )
{
local array < string > MetaKeys , MetaProps ;
if ( metadata != "" )
{
MetaKeys . AddItem ( "Type" ) ;
MetaProps . AddItem ( metadata ) ;
}
if ( amount > 0 )
{
MetaKeys . AddItem ( "Amount" ) ;
MetaProps . AddItem ( string ( amount ) ) ;
}
if ( cooldown > 0 )
{
MetaKeys . AddItem ( "Cooldown" ) ;
MetaProps . AddItem ( string ( cooldown ) ) ;
}
KFPlayerController ( Outer ) . TestMixerCall ( Button , MetaKeys , MetaProps ) ;
}
exec function ForceMixerScene ( string VersionNumber , string ShareCode )
{
class 'MixerIntegration' . static . ForceMixerScene ( VersionNumber , ShareCode ) ;
}
//-----------------------------------------------------------------------------
// LED Debugging
exec function InitLEDEffects ( )
{
local LogitechLEDInterface LogtitechLED ;
local RazerLEDInterface RazerFXLED ;
local AlienFXLEDInterface AlienFXLED ;
AlienFXLED = class 'PlatformInterfaceBase' . static . GetAlienFXIntegration ( ) ;
RazerFXLED = class 'PlatformInterfaceBase' . static . GetRazerIntegration ( ) ;
LogtitechLED = class 'PlatformInterfaceBase' . static . GetLogitechIntegration ( ) ;
if ( RazerFXLED == none )
{
` log("RazerFXLED == none");
}
if ( LogtitechLED == none )
{
` log("LogtitechLED == none");
}
if ( AlienFXLED == none )
{
` log("AlienFXLED == none");
}
else
{
AlienFXLED . Activate ( ) ;
}
}
exec function SetLEDRGB ( byte RedPercent , byte GreenPercent , byte BluePercent )
{
local LogitechLEDInterface LogtitechLED ;
local RazerLEDInterface RazerFXLED ;
local AlienFXLEDInterface AlienFXLED ;
LogtitechLED = class 'PlatformInterfaceBase' . static . GetLogitechIntegration ( ) ;
RazerFXLED = class 'PlatformInterfaceBase' . static . GetRazerIntegration ( ) ;
AlienFXLED = class 'PlatformInterfaceBase' . static . GetAlienFXIntegration ( ) ;
if ( LogtitechLED != none )
{
LogtitechLED . SetColor ( RedPercent , GreenPercent , BluePercent ) ;
}
if ( RazerFXLED != none )
{
RazerFXLED . SetColor ( RedPercent , GreenPercent , BluePercent ) ;
}
if ( AlienFXLED != none )
{
if ( ! AlienFXLED . SetColor ( RedPercent , GreenPercent , BluePercent ) )
{
` log("Failed to set color for AlienFX");
}
}
}
exec function LEDSetFlashingRBG ( int RedPercent , int GreenPercent , int BluePercent ,
int MilliSecondsDuration , int MilliSecondsInterval )
{
local KFPlayerController KFPC ;
KFPC = KFPlayerController ( Outer ) ;
if ( KFPC . LEDEffectsManager != none )
{
//KFPC.LEDEffectsManager.LEDSetFlashingRBG(RedPercent, GreenPercent, BluePercent, MilliSecondsDuration, MilliSecondsInterval);
KFPC . LEDEffectsManager . PlayEffectPuke ( 0 ) ;
}
}
exec function LEDPulseLighting ( int RedPercent , int GreenPercent , int BluePercent , int
MilliSecondsDuration , int MilliSecondsInterval )
{
local LogitechLEDInterface LogtitechLED ;
local RazerLEDInterface RazerFXLED ;
local AlienFXLEDInterface AlienFXLED ;
LogtitechLED = class 'PlatformInterfaceBase' . static . GetLogitechIntegration ( ) ;
RazerFXLED = class 'PlatformInterfaceBase' . static . GetRazerIntegration ( ) ;
AlienFXLED = class 'PlatformInterfaceBase' . static . GetAlienFXIntegration ( ) ;
if ( LogtitechLED != none )
{
LogtitechLED . LEDPulseLighting ( RedPercent , GreenPercent , BluePercent ,
MilliSecondsDuration , MilliSecondsInterval ) ;
}
if ( RazerFXLED != none )
{
RazerFXLED . LEDPulseLighting ( RedPercent , GreenPercent , BluePercent ,
MilliSecondsDuration , MilliSecondsInterval ) ;
}
if ( AlienFXLED != none )
{
AlienFXLED . LEDPulseLighting ( RedPercent , GreenPercent , BluePercent ,
MilliSecondsDuration , MilliSecondsInterval ) ;
}
}
exec function LedStopEffects ( )
{
local LogitechLEDInterface LogtitechLED ;
local RazerLEDInterface RazerFXLED ;
LogtitechLED = class 'PlatformInterfaceBase' . static . GetLogitechIntegration ( ) ;
RazerFXLED = class 'PlatformInterfaceBase' . static . GetRazerIntegration ( ) ;
if ( LogtitechLED != none )
{
LogtitechLED . LedStopEffects ( ) ;
}
if ( RazerFXLED != none )
{
RazerFXLED . LedStopEffects ( ) ;
}
}
exec function LedRestoreLighting ( )
{
local LogitechLEDInterface LogtitechLED ;
LogtitechLED = class 'PlatformInterfaceBase' . static . GetLogitechIntegration ( ) ;
if ( LogtitechLED != none )
{
LogtitechLED . LedRestoreLighting ( ) ;
}
else
{
` log("LogtitechLED == none");
}
}
exec function SetMissionObjectiveActive ( bool bActive )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxHUD != none )
{
KFPC . MyGFxHUD . WaveInfoWidget . ObjectiveContainer . SetActive ( bActive ) ;
}
}
exec function SetMissionFailState ( bool bFailed )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxHUD != none )
{
KFPC . MyGFxHUD . WaveInfoWidget . ObjectiveContainer . SetFailState ( bFailed ) ;
}
}
exec function SetMissionObjectiveVisible ( bool bVisible )
{
local Pawn P ;
local KFPlayerController KFPC ;
P = GetMyPawn ( ) ;
KFPC = KFPlayerController ( Outer ) ;
if ( P == none || KFPC == None )
{
return ;
}
if ( KFPC . MyGFxHUD != none )
{
KFPC . MyGFxHUD . WaveInfoWidget . ObjectiveContainer . SetVisible ( bVisible ) ;
}
}
exec function UpgradeWeapon ( )
{
local KFPawn MyPawn ;
MyPawn = KFPawn ( GetMyPawn ( ) ) ;
if ( MyPawn != none && MyPawn . MyKFWeapon != none )
{
MyPawn . MyKFWeapon . UpgradeWeapon ( ) ;
}
}
exec function ForceSpecialWave ( optional string ZedTypeName )
{
local int AIType ;
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
KFGameInfo ( WorldInfo . Game ) . bForceSpecialWave = true ;
if ( ZedTypeName != "" )
{
AIType = GetAITypeByName ( ZedTypeName ) ;
if ( AIType != INDEX _NONE )
{
KFGameInfo ( WorldInfo . Game ) . DebugForceSpecialWaveZedType = AIType ;
}
else
{
ClientMessage ( ZedTypeName @ "is not a valid special wave type." , CheatType ) ;
}
}
}
}
exec function ForceOutbreakWave ( optional int OutbreakIdx = INDEX _NONE )
{
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
KFGameInfo ( WorldInfo . Game ) . bForceOutbreakWave = true ;
if ( OutbreakIdx != INDEX _NONE )
{
KFGameInfo ( WorldInfo . Game ) . DebugForcedOutbreakIdx = OutbreakIdx ;
}
}
}
exec function ForceNextObjective ( )
{
if ( KFGameInfo ( WorldInfo . Game ) != none && KFGameInfo ( WorldInfo . Game ) . MyKFGRI != none )
{
KFGameInfo ( WorldInfo . Game ) . MyKFGRI . bForceNextObjective = true ;
}
}
exec function ActivateAllPickups ( )
{
local int i ;
if ( KFGameInfo ( WorldInfo . Game ) != none )
{
for ( i = 0 ; i < KFGameInfo ( WorldInfo . Game ) . ItemPickups . Length ; ++ i )
{
KFGameInfo ( WorldInfo . Game ) . ActivateNextPickup ( KFGameInfo ( WorldInfo . Game ) . ItemPickups [ i ] , 1 ) ;
}
}
}
//-----------------------------------------------------------------------------
// Discord Debugging
exec function ForceUpdateDiscordPresence ( )
{
//KFPlayerController(Outer).UpdateDiscordRichPresence();
}
defaultproperties
{
CheatType = "KFCheat"
}