enderalse/source/scripts/_00e_ark_genericdialoguefunctions.psc

126 lines
3.5 KiB
Plaintext
Raw Normal View History

Scriptname _00E_Ark_GenericDialogueFunctions extends Quest Conditional
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnUpdateGameTime()
If PlayerREF.GetWorldSpace() == CapitalCityUpperCity
RegisterForSingleUpdateGameTime(1.0)
Return
EndIf
; Failsafes
bPlayerWithinHearingDistance = False
Int Index = 0
While Index < arrayPoemScenes.Length
If arrayPoemScenes[Index].IsPlaying()
arrayPoemScenes[Index].Stop()
EndIf
Index += 1
EndWhile
bPoemCurrentlyPlaying = False
EndEvent
Event OnUpdate()
StartRandomPoemScene()
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
bool Function NoPoemPlaying()
Int Index = 0
While Index < arrayPoemScenes.Length
If arrayPoemScenes[Index].IsPlaying()
Return False
EndIf
Index += 1
EndWhile
Return True
EndFunction
Function StartRandomPoemScene()
If _00E_UpperCity_PrinceMithREF.GetCurrentPackage() != _00E_CapitalCity_UpperCity_Mith_ReadPoems
Return
EndIf
If PlayerREF.GetWorldSpace() != CapitalCityUpperCity
bPlayerWithinHearingDistance = False
EndIf
If bPlayerWithinHearingDistance == False
Return
EndIf
If NoPoemPlaying() == False
Return
EndIf
; If the prince is away from his marker or in dialogue with the player, try again later
If _00E_UpperCity_PrinceMithREF.GetDistance(PrinceMithReadPoemsMarker) > 64.0 || _00E_UpperCity_PrinceMithREF.IsInDialogueWithPlayer()
RegisterForSingleUpdate(2.0)
Return
EndIf
If !bPoemCurrentlyPlaying
bPoemCurrentlyPlaying = True
UnregisterForUpdate()
; Pick a poem, but not the same as the last time
Int poemIndex = Utility.RandomInt(0, arrayPoemScenes.Length - 1)
While poemIndex == lastPoemPlayed
poemIndex = Utility.RandomInt(0, arrayPoemScenes.Length - 1)
EndWhile
arrayPoemScenes[poemIndex].ForceStart()
lastPoemPlayed = poemIndex
RegisterForSingleUpdateGameTime(1.0)
EndIf
EndFunction
Function OnPoemSceneEnd()
bPoemCurrentlyPlaying = False
RegisterForSingleUpdate(1.0)
EndFunction
Function RemoveAmulets()
PlayerREF.RemoveItem(_00E_MQ01_FinnCarbosAmulet, 2)
bPlayerHasGivenAmulets = True
PlayerREF.AddItem(Gold001, 150)
PlayerREF.AddItem(_00E_Eispranke, 1)
_00E_EPHandler.GiveEP(150)
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
bool Property bPlayerHasHadMithConversation Auto Conditional Hidden
bool Property bPlayerHasHadToriusConversation Auto Conditional Hidden
bool Property bPlayerHasGivenAmulets Auto Conditional Hidden
bool Property bPlayerWithinHearingDistance Auto Hidden
bool Property bPoemCurrentlyPlaying Auto Hidden
Actor Property _00E_UpperCity_PrinceMithREF Auto
Actor Property PlayerREF Auto
Worldspace Property CapitalCityUpperCity Auto
MiscObject Property Gold001 Auto
Armor Property _00E_MQ01_FinnCarbosAmulet Auto
Potion Property _00E_Eispranke Auto
Package Property _00E_CapitalCity_UpperCity_Mith_ReadPoems Auto
ObjectReference Property PrinceMithReadPoemsMarker Auto
Scene[] Property arrayPoemScenes Auto
Int Property lastPoemPlayed = -1 Auto Hidden