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) Levelsystem.GiveEP(150) EndFunction ;===================================================================================== ; PROPERTIES ;===================================================================================== _00E_QuestFunctions Property Levelsystem Auto 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