diff --git a/scripts/_00e_smoking_crossleggedmarkerscript.pex b/scripts/_00e_smoking_crossleggedmarkerscript.pex index d7666aff..e888d597 100644 Binary files a/scripts/_00e_smoking_crossleggedmarkerscript.pex and b/scripts/_00e_smoking_crossleggedmarkerscript.pex differ diff --git a/scripts/_00e_smoking_wallmarkerscript.pex b/scripts/_00e_smoking_wallmarkerscript.pex index bc8576e1..e8a4f7f4 100644 Binary files a/scripts/_00e_smoking_wallmarkerscript.pex and b/scripts/_00e_smoking_wallmarkerscript.pex differ diff --git a/source/scripts/_00e_smoking_crossleggedmarkerscript.psc b/source/scripts/_00e_smoking_crossleggedmarkerscript.psc index 3ccb4443..8e1caa64 100644 --- a/source/scripts/_00e_smoking_crossleggedmarkerscript.psc +++ b/source/scripts/_00e_smoking_crossleggedmarkerscript.psc @@ -25,6 +25,13 @@ state Smoking endevent Event OnUpdate() + if bIsFinished + UnregisterForUpdate() + UnregisterForSleep() + GotoState("") + return + endif + _LockAnimationUpdates() If AnimationStage == 0 && Target.GetSitState() != 3 @@ -52,6 +59,13 @@ state Smoking Event OnSleepStart(float afSleepStartTime, float afDesiredSleepEndTime) ; Debug.Trace(self + ": OnSleepStart, " + Target) + + if bIsFinished + UnregisterForSleep() + UnregisterForUpdate() + GotoState("") + return + endif ; Force reset of the animations to make the NPC re-enter the furniture (if it wishes). ; Fixes NPCs creeping away from the furniture while the player is sleeping in the same location. @@ -70,12 +84,6 @@ state Smoking GotoState("") endEvent - event OnEndState() - ; Debug.Trace(self + ": Unregistering for updates, " + Target) - UnregisterForUpdate() - UnregisterForSleep() - endevent - endstate Event OnCellAttach() @@ -100,6 +108,8 @@ Event OnEffectFinish(Actor akTarget, Actor akCaster) _LockAnimationUpdates() StopAnimations(False) _UnlockAnimationUpdates() + + Target = None EndEvent Function StopAnimations(Bool bQuickStop) diff --git a/source/scripts/_00e_smoking_wallmarkerscript.psc b/source/scripts/_00e_smoking_wallmarkerscript.psc index f79a1039..95d6dd3c 100644 --- a/source/scripts/_00e_smoking_wallmarkerscript.psc +++ b/source/scripts/_00e_smoking_wallmarkerscript.psc @@ -20,12 +20,18 @@ Event OnEffectStart(Actor akTarget, Actor akCaster) EndEvent Event OnUpdate() + if bIsFinished + UnregisterForUpdate() + UnregisterForSleep() + return + endif + _LockAnimationUpdates() If AnimationStage == 0 && Target.GetSitState() != 3 ; Debug.Trace(self + ": OnUpdate, " + Target + ", stage " + AnimationStage + ", waiting...") RegisterForSingleUpdate(1.0) - ElseIf bIsFinished == False + Else AnimationStage += 1 ; Debug.Trace(self + ": OnUpdate, " + Target + ", stage " + AnimationStage) @@ -57,27 +63,21 @@ EndEvent Event OnSleepStart(float afSleepStartTime, float afDesiredSleepEndTime) ; Debug.Trace(self + ": OnSleepStart, " + Target) + if bIsFinished + UnregisterForSleep() + UnregisterForUpdate() + return + endif + ; Force reset of the animations to make the NPC re-enter the furniture (if it wishes). ; Fixes NPCs creeping away from the furniture while the player is sleeping in the same location. _LockAnimationUpdates() - - If bIsFinished == False - UnregisterForUpdate() - StopAnimations(True) - Target.RemoveSpell(_00E_Smoking_WallMarkerSP) - EndIf - + UnregisterForUpdate() + StopAnimations(True) + Target.RemoveSpell(_00E_Smoking_WallMarkerSP) _UnlockAnimationUpdates() EndEvent -Event OnCellDetach() - UnregisterForSleep() -endEvent - -Event OnCellAttach() - RegisterForSleep() -endEvent - Event OnEffectFinish(Actor akTarget, Actor akCaster) ; Debug.Trace(self + ": OnEffectFinish, " + Target) @@ -85,24 +85,23 @@ Event OnEffectFinish(Actor akTarget, Actor akCaster) Target.RemoveSpell(_00E_Smoking_WallMarkerSP) _LockAnimationUpdates() - StopAnimations(False) + StopAnimations(Target.GetParentCell() != (Game.GetForm(0x14) as Actor).GetParentCell()) _UnlockAnimationUpdates() + Target = None + EndEvent Function StopAnimations(Bool bQuickStop) If AnimationStage > 0 - If bQuickStop - Debug.SendAnimationEvent(Target, "IdleForceDefaultState") - Else - Debug.SendAnimationEvent(Target, "WallPipeSmokingExit") - EndIf - If AnimationStage > 1 _00E_Smoking_PipeSmokingSmokeExhaleEffect.Stop(Target) EndIf Target.SetHeadtracking(True) - If bQuickStop == False + If bQuickStop + Debug.SendAnimationEvent(Target, "IdleForceDefaultState") + Else + Debug.SendAnimationEvent(Target, "WallPipeSmokingExit") Utility.Wait(1.75) Debug.SendAnimationEvent(Target, "IdleForceDefaultState") EndIf