72 lines
1.7 KiB
Plaintext
72 lines
1.7 KiB
Plaintext
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
|