enderalse/source/scripts/_00e_mq07baftermath_function.psc

229 lines
6.4 KiB
Plaintext

Scriptname _00E_MQ07bAftermath_Function extends Quest
;=====================================================================================
; EVENTS
;=====================================================================================
Float Function _CalcNextUpdate(Float newUpdateDay, Float oldUpdateHours)
Float newUpdateHours = (newUpdateDay - GameDaysPassed.GetValue()) * 24.0 + 0.025
If newUpdateHours < 0.25
newUpdateHours = 0.25
EndIf
If oldUpdateHours <= 0.0 || newUpdateHours < oldUpdateHours
Return newUpdateHours
Else
Return oldUpdateHours
EndIf
EndFunction
Function _RegisterForNextUpdate()
Float fNextUpdateTime = 0.0
If bBeaconErrected && bLishariMoved == False
fNextUpdateTime = 0.25
EndIf
If bBeaconErrected == False
fNextUpdateTime = _CalcNextUpdate(fBeaconEnableDay, fNextUpdateTime)
EndIf
Int curStage = GetCurrentStageID()
If curStage < 10
fNextUpdateTime = _CalcNextUpdate(fConsequencesStartDay, fNextUpdateTime)
ElseIf curStage >= 20 && fConsequencesEndDay > 0.0
fNextUpdateTime = _CalcNextUpdate(fConsequencesEndDay, fNextUpdateTime)
EndIf
If fNextUpdateTime > 0.0
RegisterForSingleUpdateGameTime(fNextUpdateTime)
EndIf
EndFunction
Event OnUpdateGameTime()
; Version update
If bDoneTimeSetup == False
bDoneTimeSetup = True
fBeaconEnableDay = GameDaysPassed.GetValue()
If GetCurrentStageID() < 10 && bBeaconErrected == False
fConsequencesStartDay = fBeaconEnableDay + 1.0
Else
fConsequencesStartDay = fBeaconEnableDay
EndIf
If GetCurrentStageID() >= 20 && _00E_MQ07b_HallysFree.GetValueInt() == 0
fConsequencesEndDay = fBeaconEnableDay
EndIf
EndIf
; Enable construction version of the beacon
If bBeaconErrected == False && GameDaysPassed.GetValue() >= fBeaconEnableDay
If MQ10b.GetCurrentStageID() >= 5
bBeaconErrected = True ; Too late
ElseIf PlayerREF.GetWorldSpace() != CapitalCityUpperTemple
bBeaconErrected = True
MQ07b_Suntemple_Beacon_InConstruction.Enable()
EndIf
EndIf
; Teleport Lishari to the beacon
If bBeaconErrected && bLishariMoved == False
If MQ08Prologue.GetCurrentStageID() >= 10
bLishariMoved = True ; No point to move her anymore, MQ08Prologue has done this already
ElseIf _00E_MC_LishariREF.Is3DLoaded() == False && PlayerREF.GetWorldSpace() != CapitalCityUpperTemple
bLishariMoved = True
_00E_MC_LishariREF.MoveTo(LishariSuntempleMarker)
_00E_MC_LishariREF.EvaluatePackage()
EndIf
EndIf
; Consequences
Int curStage = GetCurrentStageID()
If curStage < 15 && GameDaysPassed.GetValue() >= fConsequencesStartDay
Bool bHallysIsReady
If _00E_MQ07b_HallysFree.GetValueInt() == 0
bHallysIsReady = MQ07b_Aftermath_HallysCorpseREF.IsEnabled()
If bHallysIsReady == False && PlayerREF.GetWorldSpace() != CapitalCityLowerCity
MQ07b_Aftermath_HallysCorpseREF.Enable()
bHallysIsReady = True
EndIf
Else
bHallysIsReady = True
EndIf
If bHallysIsReady
If NQ_G_07Dijaam_SC03_EscapeThroughTomb == None
NQ_G_07Dijaam_SC03_EscapeThroughTomb = Game.GetFormFromFile(0x00147063, "Skyrim.esm") as Scene
EndIf
If (PlayerREF.GetCurrentLocation() == CapitalCityLocation && NQ_G_07Dijaam_SC03_EscapeThroughTomb.IsPlaying() == false)
SetCurrentStageID(15)
Else
SetCurrentStageID(10)
EndIf
EndIf
ElseIf curStage >= 20 && fConsequencesEndDay > 0.0 && GameDaysPassed.GetValue() >= fConsequencesEndDay
DeleteDeadHallys()
EndIf
_RegisterForNextUpdate()
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function SetUp()
bDoneTimeSetup = True
fBeaconEnableDay = GameDaysPassed.GetValue() + 0.5
fConsequencesStartDay = fBeaconEnableDay + 1.0
fConsequencesEndDay = 0.0
_RegisterForNextUpdate()
EndFunction
Function SetUpConsequences()
ObjectReference objSpawnMarker
If _00E_MQ07b_HallysFree.GetValueInt() == 0
bDoneTimeSetup = True ; Version update failsave
fConsequencesEndDay = GameDaysPassed.GetValue() + 7.0
MQ07b_Aftermath_HallysCorpseREF.Enable()
SetCurrentStageID(20)
_RegisterForNextUpdate()
Else
objSpawnMarker = PlayerREF.PlaceAtMe(XMarkerHeading, 1)
objSpawnMarker.MoveTo(PlayerRef, -250.0 * Math.Sin(PlayerRef.GetAngleZ()), -250.0 * Math.Cos(PlayerRef.GetAngleZ()), PlayerRef.GetHeight())
akHallys = objSpawnMarker.PlaceActorAtMe(_00E_MQ07b_Hallys, 1)
Hallys.ForceRefTo(akHallys)
MQ07bAftermath_SC01_HallysThanksPlayer.ForceStart()
objSpawnMarker.Delete()
EndIf
EndFunction
Function DeleteHallys()
akHallys.Delete()
Cleanup()
EndFunction
Function DeleteDeadHallys()
MQ07b_Aftermath_HallysCorpseREF.Disable()
MQ07b_HallysWifeREF.Disable()
fConsequencesEndDay = 0.0
Cleanup()
EndFunction
Function Cleanup()
Player.Clear()
; Release all references
akHallys = None
MQ07b_Aftermath_HallysCorpseREF = None
MQ07b_HallysWifeREF = None
MQ07b_Suntemple_Beacon_InConstruction = None
_00E_MC_LishariREF = None
LishariSuntempleMarker = None
EndFunction
Function GiveReward()
PlayerREF.AddItem(_00E_Lehrbuch_Plus2Skillpoints, 1)
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
bool bBeaconErrected
Bool bLishariMoved
Bool bDoneTimeSetup
Float fBeaconEnableDay
Float fConsequencesStartDay
Float fConsequencesEndDay
Actor akHallys
Actor Property PlayerREF Auto
ActorBase Property _00E_MQ07b_Hallys Auto
Potion Property _00E_Lehrbuch_Plus2Skillpoints Auto
Location Property CapitalCityLocation Auto
GlobalVariable Property _00E_MQ07b_HallysFree Auto
GlobalVariable Property GameDaysPassed Auto
ObjectReference Property MQ07b_Aftermath_HallysCorpseREF Auto
ObjectReference Property MQ07b_HallysWifeREF Auto
ObjectReference Property MQ07b_Suntemple_Beacon_InConstruction Auto
Actor Property _00E_MC_LishariREF Auto
ObjectReference Property LishariSuntempleMarker Auto
ReferenceAlias Property Hallys Auto
ReferenceAlias Property Player Auto
Static Property XMarkerHeading Auto
Scene Property MQ07bAftermath_SC01_HallysThanksPlayer Auto
Scene Property NQ_G_07Dijaam_SC03_EscapeThroughTomb Auto
Quest Property MQ10b Auto
Quest Property MQ08Prologue Auto
Worldspace Property CapitalCityUpperTemple Auto
Worldspace Property CapitalCityLowerCity Auto