// Code is... borrowed from SkellTestMap's mutator class DebugHeadHitbox extends Actor; var KFMonsterOS Zed; var Vector HeadLocation; var float headScale; replication { reliable if (Role == ROLE_Authority) HeadLocation, headScale; } simulated event PostBeginPlay() { super.PostBeginPlay(); if (Role == ROLE_Authority && Owner != none) { SetLocation(Owner.Location); SetPhysics(PHYS_None); SetBase(Owner); Zed = KFMonsterOS(Owner); } } simulated event Tick(float deltaTime) { local Coords C; local bool bAltHeadLoc; if (Zed == none || Zed.bDecapitated || Zed.HeadBone == '' || Zed.health <= 0) { Destroy(); return; } // Server hit-boxes if (Role == ROLE_Authority) { if (Level.NetMode == NM_DedicatedServer && Zed.Physics == PHYS_Walking && !Zed.IsAnimating(0) && !Zed.IsAnimating(1) && !Zed.bIsCrouched) bAltHeadLoc = true; headScale = Zed.headRadius * Zed.headScale; if (bAltHeadLoc) { HeadLocation = Zed.Location + (Zed.OnlineHeadshotOffset >> Zed.Rotation); if (Level.NetMode == NM_DedicatedServer) headScale *= Zed.onlineHeadshotScale; } else { C = Zed.GetBoneCoords(Zed.HeadBone); HeadLocation = C.Origin + (Zed.headHeight * Zed.headScale * C.XAxis); } } } defaultproperties { bHidden=True bSkipActorPropertyReplication=True RemoteRole=ROLE_SimulatedProxy NetPriority=2.000000 }