Scriptname _00E_DragonPriestCombatRotationScript extends activemagiceffect {Fixes dragon priests' tendency to get stuck in combat, looking away from their combat target and so unable to attack} Actor Property PlayerRef Auto Actor TargetRef Bool bTranslating Bool bEffectFinished Event OnEffectStart(Actor akTarget, Actor akCaster) TargetRef = akCaster If TargetRef == PlayerRef Dispel() Return EndIf If TargetRef RegisterForSingleUpdate(1.0) ; Wait a bit before applying the fix, it could be a false positive EndIf EndEvent Event OnEffectFinish(Actor akTarget, Actor akCaster) bEffectFinished = True EndEvent Event OnDying(Actor akKiller) bEffectFinished = True EndEvent Event OnUpdate() Actor akCombatRef = TargetRef.GetCombatTarget() If akCombatRef && Math.Abs(TargetRef.GetHeadingAngle(akCombatRef)) >= 15.0 ; && TargetRef.GetDistance(akCombatRef) < 256.0 If bEffectFinished == False bTranslating = True ; Turn the NPC to its combat target TargetRef.TranslateTo(TargetRef.X, TargetRef.Y, TargetRef.Z, TargetRef.GetAngleX(), TargetRef.GetAngleY(), _NormAngle(TargetRef.GetAngleZ() - TargetRef.GetHeadingAngle(akCombatRef)), 0.0, 90.0) Utility.Wait(2.0) ; Need to force-stop translation for the NPC to start moving _StopTranslation() EndIf EndIf If bEffectFinished == False RegisterForSingleUpdate(1.0) EndIf EndEvent Event OnTranslationComplete() _StopTranslation() EndEvent Event OnTranslationFailed() _StopTranslation() EndEvent Float Function _NormAngle(Float fAngle) While fAngle < 0.0 fAngle += 360.0 EndWhile While fAngle >= 360.0 fAngle -= 360.0 EndWhile Return fAngle EndFunction Function _StopTranslation() If bTranslating bTranslating = False TargetRef.StopTranslation() EndIf EndFunction