enderalse/scripts/source/_00e_mq02_functions.psc

539 lines
14 KiB
Plaintext

Scriptname _00E_MQ02_Functions extends Quest Conditional
Import Utility
Import Game
Import _00E_QuestFunctions
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function MovePlayerAndJesparToStart()
ShowFirstPersonGeometry(true)
Timescale.SetValue(10)
PlayerREF.MoveTo(MQ02_D0_PlayersWakeUpmarker02)
_00E_MC_JesparREF.Disable()
FadeToBlackHoldImod.Apply()
ForceFirstPerson()
DisablePlayerControls(true, true, true, true, true, true, true)
Levelsystem.SkipTimeToHour(5.5)
_00E_MC_JesparREF.Enable()
_00E_MC_JesparREF.MoveTo(MQ02_D0_JesparSpawnMarker)
Wait(0.3)
Self.SetStage(15)
EndFunction
Function WakeUpPlayer()
FadeOutGame(false, true, 0.4, 1)
PlayerRef.PlayIdle(Idle_1stPersonWoozyGetUpFromBed)
FadeToBlackHoldImod.Remove()
_00E_MQ02_WakeUp.Apply()
Self.SetStage(20)
RequestAutoSave()
EnablePlayerControls()
_00E_SilenceLongTransitionHighPriority.Remove()
_00E_Music_Special_Character_Jespar.Add()
EndFunction
Function StartSC01()
MQ02_SC1_JesparDialogeInterlude.ForceStart()
EndFunction
Function FadeOutAndBack()
DisablePlayerControls()
_00E_MC_JesparREF.EnableAI(false)
FadeToBlackAndBackIMOD.Apply()
SkyrimClear.SetActive()
Wait(3.3)
_00E_MC_JesparREF.Disable()
Levelsystem.SkipTimeToHour(6.5)
Wait(0.5)
; Jespar may snap to player's position after EnableAI, so we ensure he is in the correct position.
; Plus, he acts weird and wants to go somewhere without this.
_00E_MC_JesparREF.EnableAI(true)
_00E_MC_JesparREF.Enable()
_00E_MC_JesparREF.MoveTo(MQ02_D0_JesparSpawnMarker)
EnablePlayerControls()
SetStage(30)
ShowFirstPersonGeometry(true)
EndFunction
Function DialogueInterlude()
ShowFirstPersonGeometry(true)
SetPlayerAIDriven(false)
EndFunction
Function ShowQuestDifficultyTutorial()
MQ02_CampBanditREF.Enable()
If _00E_DisableQuestTutorials.GetValueInt() == 0
_00E_Tutorial_QuestDifficulty.Show()
EndIf
EndFunction
Function MoveJesparToHouseAndUnlockDoor()
MQ02_D5_YeroFarmTrapdoor.Lock(false, true)
_00E_MC_JesparREF.MoveTo(MQ02_D5_JesparYeroMarker01)
Self.SetObjectiveCompleted(10)
Self.SetObjectiveDisplayed(15)
EndFunction
Function CheckIfObjectivesAreCompleted()
if (Self.IsObjectiveCompleted(15)) && (Self.IsObjectiveCompleted(25))
Self.SetStage(55)
Else
Return
EndIf
EndFunction
Function StartSC06()
MQ02_D4_AlfridBench.BlockActivation(false)
MQ02_SC6_AlfriedTravelToBench.ForceStart()
EndFunction
Function ReadBook()
while bReadingBooks == true
Wait(0.01)
endwhile
bReadingBooks = True
iReadCounter += 1
if iReadCounter == 3
UpdateObjective()
Endif
bReadingBooks = false
EndFunction
Function CountBook()
while bCountingBooks == true
Wait(0.01)
endwhile
bCountingBooks = True
iBookCounter += 1
if iBookCounter == 3
UpdateObjective()
Endif
bCountingBooks = false
EndFunction
Function UpdateObjective()
SetObjectiveCompleted(20)
SetObjectiveDisplayed(25)
EndFunction
Function StartPuzzleScene()
; Failsave for http://sureai.net:9898/browse/ERB-1192 :
if MQ02_SC1_JesparDialogeInterlude.IsPlaying()
MQ02_SC1_JesparDialogeInterlude.Stop()
endif
MQ02_SC2_PuzzleScene.Start()
EndFunction
Function EnableYeroBook()
_00E_MQ02_SC3_YeroBook.Enable()
EndFunction
Function PlayerDrinkWine()
;Debug.SendAnimationEvent(PlayerREF, "IdleForceDefaultState")
Game.DisablePlayerControls()
ForceThirdPerson()
Debug.SendAnimationEvent(PlayerREF, "IdleDrinkPotion")
PlayerREF.RestoreActorValue("Health", PlayerREF.GetAV("Health"))
_00E_NPCUncorkPotionAndDrinkM.Play(PlayerREF)
EndFunction
Function TeleportJesparAway()
PlayerREF.AddItem(_01E_TeleportrolleFlusshaim, 1, false)
Levelsystem.TeleportNPC(_00E_MC_JesparREF, MQ02_D5_JesparTeleportMarker)
Self.SetStage(135)
SetFlusshaimTavernBarStoolsOwner(PlayerREF.GetActorBase())
EndFunction
Function YeroBookFailsave()
If (_00E_MQ02_SC3_YeroBook != None) && (_00E_MQ02_SC3_YeroBook.GetParentCell() == PlayerREF.GetParentCell())
_00E_MQ02_SC3_YeroBook.SetPosition(3569.7229, -5481.8379, -429.7459)
EndIf
EndFunction
Function GivePlayerSkillbook()
If iPlayerClass == 3
PlayerREF.AddItem(_00E_LehrbuchBlockTo25)
PlayerREF.AddItem(_00E_LehrbuchHeavyArmorTo25)
PlayerREF.AddItem(_00E_LehrbuchOnehandedTo25)
PlayerREF.AddItem(_00E_LehrbuchTwohandedTo25)
PlayerREF.AddItem(_00E_HandwerksbuchSmithingTo25)
ElseIf iPlayerClass == 2
PlayerREF.AddItem(_00E_LehrbuchRestorationTo25)
PlayerREF.AddItem(_00E_LehrbuchIllusionTo25)
PlayerREF.AddItem(_00E_LehrbuchDestructionTo25)
PlayerREF.AddItem(_00E_LehrbuchAlterationTo25)
PlayerREF.AddItem(_00E_LehrbuchConjurationTo25)
ElseIf iPlayerClass == 1
PlayerREF.AddItem(_00E_LehrbuchSneakTo25)
PlayerREF.AddItem(_00E_LehrbuchOnehandedTo25)
PlayerREF.AddItem(_00E_LehrbuchMarksmanTo25)
PlayerREF.AddItem(_00E_LehrbuchLightArmorTo25)
PlayerREF.AddItem(_00E_HandwerksbuchLockpickingTo25)
EndIf
If _00E_DisableQuestTutorials.GetValueInt() == 0
_00E_Tutorial_Skillbooks.Show()
EndIf
EndFunction
Function WaitForNightfall()
Wait(0.2)
DisablePlayerControls()
FadeToBlackAndBackIMOD02.Apply()
Wait(3)
Levelsystem.SkipTimeToHour(3)
SetStage(140)
EndFunction
Function StartJourneyScene()
EnablePlayerControls()
SetNPCAsCompanion(_00E_MC_JesparREF, True, 200, 150, 100)
MQ02_TripToArkEnableMarker.EnableNoWait()
Weather.ReleaseOverride()
If _00E_DisableQuestTutorials.GetValueInt() == 0
_00E_MQ02_TutorialCompanionFollow.Show()
EndIf
CompanionIsTalking.SetValueInt(0)
MQ02_SC3_FollowJesparToArk.ForceStart()
_00E_MC_JesparREF.EvaluatePackage()
EndFunction
Function StartPanoramaScene()
CompanionIsTalking.SetValueInt(0)
MQ02_SC4_JesparPanoramaScene.ForceStart()
SetFlusshaimTavernBarStoolsOwner(None) ; Don't need the stools to be reserved anymore
EndFunction
Function MoveJesparToPlayer()
DisablePlayerControls()
SetNPCAsCompanion(_00E_MC_JesparREF, False)
_00E_MC_JesparREF.MoveTo(MQ02_D7_JesparTeleportMarker)
Wait(1)
_00E_MC_JesparREF.StopCombat()
MQ02_SC5_JesparArrivalInArk.ForceStart()
EndFunction
Function PuzzleLeverFailsave()
; Ugly failsave to prevent the arbitrary disappearing of one/more puzzle levers
MQ02_Puzzle_Lever_01.SetPosition(3435.8838, -2531.2515, -92.0632)
MQ02_Puzzle_Lever_02.SetPosition(2135.6963, -2862.6311, -323.6631)
MQ02_Puzzle_Lever_03.SetPosition(2137.8079, -2908.3262, -323.6631)
MQ02_Puzzle_Lever_04.SetPosition(2248.0068, -3263.7217, -113.5741)
MQ02_Puzzle_Lever_05.SetPosition(2166.4260, -2775.4336, -133.4723)
EndFunction
Function SprintHelpMessage()
If _00E_DisableQuestTutorials.GetValueint() == 0
if _00E_Tutorial_Sprint == None
_00E_Tutorial_Sprint = Game.GetForm(0x00042B0A) as Message
endif
_00E_Tutorial_Sprint.Show()
EndIf
EndFunction
Function ClearBookAlias()
YeroBook.Clear()
EndFunction
Function FinishQuest()
Levelsystem.RemoveSilence()
Levelsystem.RemoveCombatSoundtracks()
EnablePlayerControls()
MQ03.SetStage(5)
; SE: No such objective.
; Self.SetObjectiveCompleted(70)
Self.SetStage(175)
_00E_MC_JesparREF.EvaluatePackage()
MyradWardenFlusshaim.EnableNoWait()
PlayerREF.RemoveItem(_00E_MQ02YeroBook)
MQ02_TripToArkEnableMarker.DisableNoWait()
SetFlusshaimTavernBarStoolsOwner(None) ; Failsafe
Self.Stop()
Cleanup()
EndFunction
Function Cleanup()
; Clear reference properties to not keep them persistent
FlusshaimTavernBarStool1 = None
FlusshaimTavernBarStool3 = None
MQ02_TripToArkEnableMarker = None
EndFunction
;=====================================================================================
; RIDDLE
;=====================================================================================
Event OnUpdate()
ResetRiddle()
EndEvent
Function TryToInsertStick(ObjectReference ActivatorREF)
while bInsertingStick == true
Wait(0.05)
endwhile
bInsertingStick = true
int CurrentValue = _00E_MQ02Riddle.GetValueInt()
ObjectReference LinkedREF = ActivatorREF.GetLinkedRef()
If GetStage() == 70 && LinkedREF.IsDisabled()
If CurrentValue == 0
iDifficulty = Utility.GetINIInt("iDifficulty:GamePlay")
Int iUpdate = 15
If iDifficulty == 0
iUpdate = 19
ElseIf iDifficulty == 1
iUpdate = 17
ElseIf iDifficulty == 4
iUpdate = 13
ElseIf iDifficulty == 5
iUpdate = 11
EndIf
RegisterForSingleUpdate(iUpdate)
EndIf
QSTAstrolabeButtonPressX.Play(ActivatorREF)
LinkedREF.Enable()
ActivatorREF.SetDisplayName("")
_00E_MQ02Riddle.SetValue(CurrentValue + 1)
If _00E_MQ02Riddle.GetValue() == 5
UnregisterForUpdate()
MQ02_Puzzle_DoorREF.Activate(ActivatorREF as objectReference)
SetStage(80)
If _00E_MQ02_Riddle_IsThisTheFirstRun.GetValueInt() == 1 && _00E_AchievementsEnabled.GetValueInt() == 1
Game.UnlockAchievement("END_STARLING_PUZZLE_01")
_00E_MQ02_Riddle_IsThisTheFirstRun.SetValueInt(0)
EndIf
EndIf
EndIf
bInsertingStick = false
EndFunction
Function ResetRiddle()
_00E_MQ02Riddle.SetValue(0)
QSTAstrolabeButtonOpenX.Play(PlayerREF)
string _sName = MQ02_Puzzle_Lever_01.GetBaseOBject().GetName()
MQ02_Puzzle_Lever_01.SetDisplayName(_sName)
MQ02_Puzzle_Lever_02.SetDisplayName(_sName)
MQ02_Puzzle_Lever_03.SetDisplayName(_sName)
MQ02_Puzzle_Lever_04.SetDisplayName(_sName)
MQ02_Puzzle_Lever_05.SetDisplayName(_sName)
MQ02_Puzzle_Lever_01.GetLinkedRef().DisableNoWait()
MQ02_Puzzle_Lever_02.GetLinkedRef().DisableNoWait()
MQ02_Puzzle_Lever_03.GetLinkedRef().DisableNoWait()
MQ02_Puzzle_Lever_04.GetLinkedRef().DisableNoWait()
MQ02_Puzzle_Lever_05.GetLinkedRef().DisableNoWait()
_00E_MQ02_Riddle_IsThisTheFirstRun.SetValueInt(0)
If CompanionIsTalking.GetValueInt() == 0
CompanionIsTalking.SetValueInt(1)
_00E_MC_JesparREF.Say(MQ02_SC2_JesparDoItAgainTopic)
CompanionIsTalking.SetValueInt(0)
EndIf
EndFunction
Function SetFlusshaimTavernBarStoolsOwner(ActorBase abNewOwner)
FlusshaimTavernBarStool1.SetActorOwner(abNewOwner)
FlusshaimTavernBarStool3.SetActorOwner(abNewOwner)
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
int Property __Config_RewardEXP Auto
{How much exp will be given upon quest completion]}
int Property iPlayerClass Auto Conditional Hidden
; 1: Rogue 2: Mage, 3: Warrior
int iDifficulty
bool bCountingBooks = false
bool bReadingBooks = false
int iBookCounter
int iReadCounter
bool bInsertingStick = false
Actor Property PlayerREF Auto
Actor Property _00E_MC_JesparREF Auto
Actor Property MQ02_CampBanditREF Auto
_00E_Game_SkillmenuSC Property Player Auto
_00E_QuestFunctions Property Levelsystem Auto
Potion Property _00E_LehrbuchBlockTo25 Auto
Potion Property _00E_LehrbuchAlterationTo25 Auto
Potion Property _00E_LehrbuchConjurationTo25 Auto
Potion Property _00E_LehrbuchDestructionTo25 Auto
Potion Property _00E_LehrbuchHeavyArmorTo25 Auto
Potion Property _00E_LehrbuchIllusionTo25 Auto
Potion Property _00E_LehrbuchLightArmorTo25 Auto
Potion Property _00E_LehrbuchMarksmanTo25 Auto
Potion Property _00E_LehrbuchOnehandedTo25 Auto
Potion Property _00E_LehrbuchRestorationTo25 Auto
Potion Property _00E_LehrbuchSneakTo25 Auto
Potion Property _00E_LehrbuchTwohandedTo25 Auto
Potion Property _00E_HandwerksbuchLockpickingTo25 Auto
Potion Property _00E_HandwerksbuchSmithingTo25 Auto
MusicType Property _00E_Music_Special_Character_Jespar Auto
MusicType Property _00E_SilenceLongTransitionHighPriority Auto
Message Property _00E_Tutorial_Skillbooks Auto
Message Property _00E_Tutorial_QuestDifficulty Auto
Message Property _00E_MQ02_TutorialCompanionFollow Auto
Message Property _00E_Tutorial_Sprint Auto
Message Property _00E_JesparEntriggerFollow Auto
ImageSpaceModifier Property FadeToBlackHoldIMOD Auto
ImageSpaceModifier Property _00E_MQ02_WakeUp Auto
ImageSpaceModifier Property FadeToBlackAndBackIMOD Auto
ImageSpaceModifier Property FadeToBlackAndBackIMOD02 Auto
Idle Property Idle_1stPersonWoozyGetUpFromBed Auto
Sound Property _00E_NPCUncorkPotionAndDrinkM Auto
Sound Property QSTAstrolabeButtonOpenX Auto
Sound Property QSTAstrolabeButtonPressX Auto
ObjectReference Property MQ02_D0_PlayersWakeUpmarker02 Auto
ObjectReference Property MQ02_D0_JesparSpawnMarker Auto
ObjectReference Property MQ02_D5_JesparYeroMarker01 Auto
ObjectReference Property MQ02_D5_YeroFarmTrapdoor Auto
ObjectReference Property _00E_MQ02_SC3_YeroBook Auto
ObjectReference Property MQ02_D5_JesparTeleportMarker Auto
ObjectReference Property MQ02_D7_JesparTeleportMarker Auto
ObjectReference Property MQ02_D4_AlfridBench Auto
ObjectReference Property MyradWardenFlusshaim Auto
ObjectReference Property MQ02_Puzzle_Lever_01 Auto
ObjectReference Property MQ02_Puzzle_Lever_02 Auto
ObjectReference Property MQ02_Puzzle_Lever_03 Auto
ObjectReference Property MQ02_Puzzle_Lever_04 Auto
ObjectReference Property MQ02_Puzzle_Lever_05 Auto
ObjectReference Property MQ02_Puzzle_DoorREF Auto
ObjectReference Property FlusshaimTavernBarStool1 Auto
ObjectReference Property FlusshaimTavernBarStool3 Auto
ObjectReference Property MQ02_TripToArkEnableMarker Auto
Book Property _00E_MQ02YeroBook Auto
Scene Property MQ02_SC1_JesparDialogeInterlude Auto
Scene Property MQ02_SC2_PuzzleScene Auto
Scene Property MQ02_SC3_FollowJesparToArk Auto
Scene Property MQ02_SC4_JesparPanoramaScene Auto
Scene Property MQ02_SC5_JesparArrivalInArk Auto
Scene Property MQ02_SC6_AlfriedTravelToBench Auto
Scroll Property _01E_TeleportrolleFlusshaim Auto
Quest Property MQ03 Auto
GlobalVariable Property Timescale Auto
GlobalVariable Property CompanionIsTalking Auto
GlobalVariable Property GameHour Auto
GlobalVariable Property _00E_DisableQuestTutorials Auto
GlobalVariable Property _00E_MQ02Riddle Auto
GlobalVariable Property _00E_MQ02_Riddle_IsThisTheFirstRun Auto
GlobalVariable Property _00E_AchievementsEnabled Auto
Topic Property MQ02_SC2_JesparDoItAgainTopic Auto
Weather Property SkyrimClear Auto
ReferenceAlias Property YeroBook Auto