enderalse/scripts/source/_00e_sermontriggerboxscript.psc

108 lines
3.1 KiB
Plaintext

Scriptname _00E_SermonTriggerBoxScript extends ObjectReference
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnInit()
bSermonsAllowed = True
EndEvent
Event OnTriggerEnter(ObjectReference akActionRef)
If akActionRef == PlayerREF
bPlayerIsInside = True
TryStartSermonScene()
EndIf
EndEvent
Event OnTriggerLeave(ObjectReference akActionRef)
If akActionRef == PlayerREF
bPlayerIsInside = False
UnregisterForUpdate()
EndIf
EndEvent
Event OnUpdateGameTime()
bSermonsAllowed = True
If bPlayerIsInside
TryStartSermonScene()
EndIf
EndEvent
Event OnUpdate()
TryStartSermonScene()
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function TryStartSermonScene()
Actor priestRef = (GetLinkedRef() as Actor)
If _00E_GenericDialogues_PriestSpeech01.IsPlaying() || priestRef.IsDead() || priestRef.IsDisabled() || (bSermonsAllowed == False)
Return
EndIf
ObjectReference preachMarkerRef = priestRef.GetLinkedRef()
If (priestRef.GetDistance(preachMarkerRef) > 1000.0) || (_00E_QuestFunctions.HourIsInRange(GameHour.GetValue(), __Config_SermonHourStart, __Config_SermonHourEnd) == False)
If bPlayerIsInside
RegisterForSingleUpdate(5.0)
EndIf
Return
EndIf
; Start the scene
If bPlayerIsInside && bSermonsAllowed
bSermonsAllowed = False
Alias_PreachMarker.ForceRefTo(preachMarkerRef)
Alias_PreachLookMarker.ForceRefTo(priestRef.GetLinkedRef(PreachingMarkerKeyword))
Alias_Preacher.ForceRefTo(priestRef)
_00E_SermonTempleID.SetValueInt(__Config_TempleID)
_00E_GenericDialogues_PriestSpeech01.ForceStart()
bSermonsAllowed = False ; Just in case
; Re-allow sermons 1 hour after __Config_SermonHourEnd
Float fCooldownPeriod = __Config_SermonHourEnd + 1.0 - GameHour.GetValue()
If fCooldownPeriod < 0.0
fCooldownPeriod += 24.0
EndIf
If fCooldownPeriod < 1.0
fCooldownPeriod = 1.0
EndIf
RegisterForSingleUpdateGameTime(fCooldownPeriod)
EndIf
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
Bool bSermonsAllowed = True
Bool bPlayerIsInside = False
Float Property __Config_SermonHourStart Auto
{The minimum hour to launch the scene}
Float Property __Config_SermonHourEnd Auto
{The maximum hour to launch the scene}
Int Property __Config_TempleID Auto
{ 1 - Temple in Flusshaim, 2 - Malphas Temple in Ark }
Scene Property _00E_GenericDialogues_PriestSpeech01 Auto
Actor Property PlayerREF Auto
GlobalVariable Property GameHour Auto
GlobalVariable Property _00E_SermonTempleID Auto
Keyword Property PreachingMarkerKeyword Auto
ReferenceAlias Property Alias_Preacher Auto
ReferenceAlias Property Alias_PreachMarker Auto
ReferenceAlias Property Alias_PreachLookMarker Auto