108 lines
3.1 KiB
Plaintext
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_TimeControl.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
|