enderalse/source/scripts/_00e_ark_genericdialoguefunctions.psc

128 lines
3.5 KiB
Plaintext

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