Scriptname _00E_ActorPackageLookAtScript extends Actor Package Property WatchPackage Auto Keyword Property LinkLookAtTarget Auto Bool bIsWorking Bool bIsTrackingTarget ;===================================================================================== ; EVENTS ;===================================================================================== Event OnLoad() TryStartWorking(GetCurrentPackage()) EndEvent Event OnUnload() StopWorking() EndEvent Event OnPackageStart(Package akNewPackage) If akNewPackage == WatchPackage TryStartWorking(akNewPackage) Else StopWorking() EndIf EndEvent Event OnPackageChange(Package akOldPackage) If akOldPackage == WatchPackage StopWorking() EndIf EndEvent State Working Event OnUpdate() If UpdateLookAt() If bIsWorking RegisterForSingleUpdate(3.0) EndIf Else StopWorking() EndIf EndEvent EndState ;===================================================================================== ; FUNCTIONS ;===================================================================================== Function TryStartWorking(Package akNewPackage) If akNewPackage == WatchPackage && bIsWorking == False bIsWorking = True GoToState("Working") RegisterForSingleUpdate(2.0) EndIf EndFunction Function StopWorking() If bIsWorking bIsWorking = False GoToState("") _SetTrackingTarget(False, None) EndIf EndFunction Bool Function UpdateLookAt() If Is3DLoaded() == False || IsDead() Return False EndIf ObjectReference lookAtTarget = GetLinkedRef(LinkLookAtTarget) If (lookAtTarget == None) || (((lookAtTarget as Actor) != None) && (lookAtTarget as Actor).IsDead()) Return False EndIf GetCombatState() If GetCombatState() == 0 && lookAtTarget.Is3DLoaded() && IsBleedingOut() == False && IsInDialogueWithPlayer() == False && GetCurrentPackage() == WatchPackage If bIsWorking _SetTrackingTarget(True, lookAtTarget) EndIf Else _SetTrackingTarget(False, lookAtTarget) EndIf Return True EndFunction Function _SetTrackingTarget(Bool _IsTrackingTarget, ObjectReference lookAtTarget) If bIsTrackingTarget != _IsTrackingTarget bIsTrackingTarget = _IsTrackingTarget If bIsTrackingTarget SetLookAt(lookAtTarget) Else ClearLookAt() EndIf EndIf EndFunction