1
Fork 0

Unregister events on smokers

development
Eddoursul 3 months ago
parent eb34dda08b
commit fb97078ce5
  1. BIN
      scripts/_00e_smoking_crossleggedmarkerscript.pex
  2. BIN
      scripts/_00e_smoking_wallmarkerscript.pex
  3. 22
      source/scripts/_00e_smoking_crossleggedmarkerscript.psc
  4. 47
      source/scripts/_00e_smoking_wallmarkerscript.psc

@ -25,6 +25,13 @@ state Smoking
endevent endevent
Event OnUpdate() Event OnUpdate()
if bIsFinished
UnregisterForUpdate()
UnregisterForSleep()
GotoState("")
return
endif
_LockAnimationUpdates() _LockAnimationUpdates()
If AnimationStage == 0 && Target.GetSitState() != 3 If AnimationStage == 0 && Target.GetSitState() != 3
@ -52,6 +59,13 @@ state Smoking
Event OnSleepStart(float afSleepStartTime, float afDesiredSleepEndTime) Event OnSleepStart(float afSleepStartTime, float afDesiredSleepEndTime)
; Debug.Trace(self + ": OnSleepStart, " + Target) ; 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). ; 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. ; Fixes NPCs creeping away from the furniture while the player is sleeping in the same location.
@ -70,12 +84,6 @@ state Smoking
GotoState("") GotoState("")
endEvent endEvent
event OnEndState()
; Debug.Trace(self + ": Unregistering for updates, " + Target)
UnregisterForUpdate()
UnregisterForSleep()
endevent
endstate endstate
Event OnCellAttach() Event OnCellAttach()
@ -100,6 +108,8 @@ Event OnEffectFinish(Actor akTarget, Actor akCaster)
_LockAnimationUpdates() _LockAnimationUpdates()
StopAnimations(False) StopAnimations(False)
_UnlockAnimationUpdates() _UnlockAnimationUpdates()
Target = None
EndEvent EndEvent
Function StopAnimations(Bool bQuickStop) Function StopAnimations(Bool bQuickStop)

@ -20,12 +20,18 @@ Event OnEffectStart(Actor akTarget, Actor akCaster)
EndEvent EndEvent
Event OnUpdate() Event OnUpdate()
if bIsFinished
UnregisterForUpdate()
UnregisterForSleep()
return
endif
_LockAnimationUpdates() _LockAnimationUpdates()
If AnimationStage == 0 && Target.GetSitState() != 3 If AnimationStage == 0 && Target.GetSitState() != 3
; Debug.Trace(self + ": OnUpdate, " + Target + ", stage " + AnimationStage + ", waiting...") ; Debug.Trace(self + ": OnUpdate, " + Target + ", stage " + AnimationStage + ", waiting...")
RegisterForSingleUpdate(1.0) RegisterForSingleUpdate(1.0)
ElseIf bIsFinished == False Else
AnimationStage += 1 AnimationStage += 1
; Debug.Trace(self + ": OnUpdate, " + Target + ", stage " + AnimationStage) ; Debug.Trace(self + ": OnUpdate, " + Target + ", stage " + AnimationStage)
@ -57,27 +63,21 @@ EndEvent
Event OnSleepStart(float afSleepStartTime, float afDesiredSleepEndTime) Event OnSleepStart(float afSleepStartTime, float afDesiredSleepEndTime)
; Debug.Trace(self + ": OnSleepStart, " + Target) ; 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). ; 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. ; Fixes NPCs creeping away from the furniture while the player is sleeping in the same location.
_LockAnimationUpdates() _LockAnimationUpdates()
UnregisterForUpdate()
If bIsFinished == False StopAnimations(True)
UnregisterForUpdate() Target.RemoveSpell(_00E_Smoking_WallMarkerSP)
StopAnimations(True)
Target.RemoveSpell(_00E_Smoking_WallMarkerSP)
EndIf
_UnlockAnimationUpdates() _UnlockAnimationUpdates()
EndEvent EndEvent
Event OnCellDetach()
UnregisterForSleep()
endEvent
Event OnCellAttach()
RegisterForSleep()
endEvent
Event OnEffectFinish(Actor akTarget, Actor akCaster) Event OnEffectFinish(Actor akTarget, Actor akCaster)
; Debug.Trace(self + ": OnEffectFinish, " + Target) ; Debug.Trace(self + ": OnEffectFinish, " + Target)
@ -85,24 +85,23 @@ Event OnEffectFinish(Actor akTarget, Actor akCaster)
Target.RemoveSpell(_00E_Smoking_WallMarkerSP) Target.RemoveSpell(_00E_Smoking_WallMarkerSP)
_LockAnimationUpdates() _LockAnimationUpdates()
StopAnimations(False) StopAnimations(Target.GetParentCell() != (Game.GetForm(0x14) as Actor).GetParentCell())
_UnlockAnimationUpdates() _UnlockAnimationUpdates()
Target = None
EndEvent EndEvent
Function StopAnimations(Bool bQuickStop) Function StopAnimations(Bool bQuickStop)
If AnimationStage > 0 If AnimationStage > 0
If bQuickStop
Debug.SendAnimationEvent(Target, "IdleForceDefaultState")
Else
Debug.SendAnimationEvent(Target, "WallPipeSmokingExit")
EndIf
If AnimationStage > 1 If AnimationStage > 1
_00E_Smoking_PipeSmokingSmokeExhaleEffect.Stop(Target) _00E_Smoking_PipeSmokingSmokeExhaleEffect.Stop(Target)
EndIf EndIf
Target.SetHeadtracking(True) Target.SetHeadtracking(True)
If bQuickStop == False If bQuickStop
Debug.SendAnimationEvent(Target, "IdleForceDefaultState")
Else
Debug.SendAnimationEvent(Target, "WallPipeSmokingExit")
Utility.Wait(1.75) Utility.Wait(1.75)
Debug.SendAnimationEvent(Target, "IdleForceDefaultState") Debug.SendAnimationEvent(Target, "IdleForceDefaultState")
EndIf EndIf

Loading…
Cancel
Save