Scriptname _00E_MQ05_Functions extends Quest Conditional Import Utility int function _GetScriptVersion() Global return 1 endFunction ;===================================================================================== ; FUNCTIONS ;===================================================================================== Function SetUp() _00E_MC_CaliaREF.Enable(false) _00E_MC_CaliaREF.EvaluatePackage() _00E_MQ05_DunwarREF.Enable(false) _00E_MQ05_DunwarREF.EvaluatePackage() _00E_MC_JorrekRef.Enable(false) _00E_MC_JorrekRef.EvaluatePackage() _00E_MC_CaliaREF.SetOutfit(_25E_HolyOrder_NoviceOutfitNoHelmet) EndFunction Function UpdateStage() if GetCurrentStageID() == 15 SetCurrentStageID(17) Elseif GetCurrentStageID() == 17 SetCurrentStageID(20) EndIf EndFunction Function RemovePackage() PlayerREF.RemoveItem(_00E_MQ05_BartarrPackage, 1) EndFunction Function StartIntroductionScene() SetObjectiveCompleted(17) MQ05_SC1_JorrekIntroducesPlayer.ForceStart() EndFunction function PlayerAIWalkStop() PlayerREF.PlayIdle(IdleWalkingCameraEnd) Game.EnablePlayerControls(abMovement = false, abFighting = false, abCamSwitch = false, abLooking = true, abSneaking = false, abmenu = false, abactivate = false, abjournaltabs = false) Game.SetPlayerAIDriven(False) endFunction Function StartVision() _00E_PlayerFunctions.GetVisionControl().VisionEffectTimestop() MQ05_SC3_Vision.ForceStart() EndFunction Function StopVision() _00E_PlayerFunctions.GetVisionControl().VisionEffectTimestopStop() MQ05_SC3_Vision.Stop() EndFunction Function GroupSpotsMerchantScene() PosessedMerchant.GetActorReference().Enable() MQ05_SC4_GroupSpotsPosessedMerchant.ForceStart() EndFunction Function GroupConfrontsMerchantScene() MQ05_SC6_MerchantConfrontation.ForceStart() SetCompanions(false) EndFunction Function UntoggleMerchantGhost() PosessedMerchant.GetActorReference().SetGhost(False) EndFunction Function KillMerchant() MAGShockExpImod.Apply() PosessedMerchant.GetReference().KnockAreaEffect(1, 1024) _00E_MQ05_DunwarREF.PushActorAway(PosessedMerchant.GetActorReference(), 4.0) PlayerREF.SetGhost(False) _00E_MQ05_MerchantDeathM.Play(PosessedMerchant.GetReference()) Wait(0.5) GroupConfrontsMerchantScene02() EndFunction Function KillMerchantFailsave() Actor akMerchant = PosessedMerchant.GetActorReference() akMerchant.SetGhost(False) akMerchant.GetActorBase().SetEssential(False) Wait(0.2) akMerchant.KillEssential(akMerchant) ObjectReference SkyMarker = akMerchant.PlaceAtMe(XMarkerHeading) SkyMarker.MoveTo(akMerchant, 0.0 , 0.0, 500) _00E_MQ05_DunwarLighting.RemoteCast(SkyMarker, akMerchant, akMerchant) SkyMarker.Delete() SetCurrentStageID(80) EndFunction Function GroupConfrontsMerchantScene02() MQ05_SC7_MerchantConfrontation02.ForceStart() EndFunction Function RemoveSilence() _00E_SilenceTransitionHighPriority.Remove() EndFunction Function StartApproachOnRitualSiteScene() MQ05_SC08_TriggerREF.Enable() SetCompanions(true) EndFunction Function StartRitualScene() ; just in case If MQ05_SC08_TriggerREF.IsEnabled() MQ05_SC08_TriggerREF.Disable() EndIf Game.RequestAutoSave() _00E_SilenceTransitionHighPriority.Add() SetCompanions(false) MQ05_SC9_DiscussionAndRitual.ForceStart() _FS_Phasmalist_ControlQuest.UnsummonApparitionIfExists() _FS_TheriantrophistControlQuest.TransformBackIfTransformed() EndFunction Function GivePlayerPotion() PlayerREF.AddItem(_00E_MQ05_RitualDrinkBottle, 1, false) SetCompanions(true) EndFunction Function SetCompanions(bool bCompanion) If bCompanion == true _00E_Func_SetNPCAsCompanion.SetNPCAsCompanion(_00E_MC_CaliaREF, true, 300, 200, 100) _00E_Func_SetNPCAsCompanion.SetNPCAsCompanion(_00E_MQ05_DunwarREF, true, 250, 200, 100) _00E_Func_SetNPCAsCompanion.SetNPCAsCompanion(_00E_MC_JorrekRef, true, 350, 300, 100) Else _00E_Func_SetNPCAsCompanion.SetNPCAsCompanion(_00E_MC_CaliaREF, false) _00E_Func_SetNPCAsCompanion.SetNPCAsCompanion(_00E_MQ05_DunwarREF, false) _00E_Func_SetNPCAsCompanion.SetNPCAsCompanion(_00E_MC_JorrekRef, false) EndIf EndFunction Function PlayerDrinksPotion() _FS_TheriantrophistControlQuest.TransformBackIfTransformed() _00E_TeleportGlobal.SetValue(1) _00E_Meditate_Allowed.SetValueInt(0) Game.ForceThirdPerson() debug.SendAnimationEvent(PlayerREF as objectreference, "IdleDrinkPotion") Game.GetPlayer().RemoveItem(_00E_MQ05_RitualDrinkBottle, 1) Wait(5) Game.ForceFirstPerson() PlayerREF.PlayIdle(TG05_KnockOut) TG05SequenceImod.Apply() MAGVampireSunlight.Play(PlayerREF) Wait(3.2) FadeToBlackHoldImod.Apply() _00E_NPCKillBodyfall.Play(PlayerREF) Wait(2) _00E_PlayerFunctions.GetSafeItemRemove().RemoveAllItemsSafeVersion(MQ05Container) PlayerREF.AddItem(ClothesPrisonerRags, 1, true) PlayerREF.EquipItem(ClothesPrisonerRags) PlayerREF.AddItem(_01E_01Messer, 1, true) PlayerREF.EquipItem(_01E_01Messer) PlayerREF.MoveTo(MQ05_JailPlayerStartMarker) FadeToBlackHoldImod.Remove() TG05SequenceImod.Remove() _00E_WakeUp.Apply() PlayerREF.PlayIdle(Idle_1stPersonWoozyGetUpFromBed) Wait(5) Game.EnablePlayerControls() Game.SetPlayerAIDriven(False) Self.SetCurrentStageID(95) if Ryon.GetReference().GetParentCell() != PlayerREF.GetParentCell() ; Failsave for some weird cases where Aixon is missing. I ; hope this solves http://sureai.net:9898/browse/ERB-1794 . Debug.Trace("MQ05: Aixon forcibly moved to player cell!") Ryon.GetReference().MoveTo(PlayerREF) else Debug.Trace("MQ05: Aixon correctly located in player cell.") endif _00E_SilenceTransitionHighPriority.Remove() (PlayerREF as _00E_PlayerFunctions).ResumeRandomHeadTracking() Game.RequestAutoSave() EndFunction Function DisableGhostDoor() Game.DisablePlayerControls() _00E_MagConjureReanimate.Play(playerREF) _00E_MQ05_SurrealDisappearance.Apply() Wait(2.6) _00E_MQ05_GhostSound.Play(PlayerREF) MQ05_D6_JailDoor.Enable(False) Wait(4.5) Self.SetCurrentStageID(110) EndFunction Function StartFinalScene() Game.ForceThirdPerson() _00E_Func_AIWalk.PlayerAIWalk(True) ; Kill all the ghosts, to avoid confusing Aixon's AI. int iIndex = _00E_MQ05_GhostsList.GetSize() while iIndex > 0 iIndex -= 1 Actor akActor = _00E_MQ05_GhostsList.GetAt(iIndex) as Actor akActor.Kill() endwhile MQ05_SC14_PlayerWalksIntoCell.ForceStart() ; Timer failsave for the case when the player or Aixon takes too ; long (i.e., usually, fails) to enter the cell. ; This should solve http://sureai.net:9898/browse/ERB-674 and ; part of http://sureai.net:9898/browse/ERB-823 . Wait(10) If MQ05_SC14_PlayerWalksIntoCell.IsPlaying() Debug.Trace("MQ05: Ryon and player forcefully moved back to cell!") Self.SetCurrentStageID(125) MQ05_SC14_PlayerWalksIntoCell.Stop() Ryon.GetReference().MoveTo(MQ05_SC14_AixonEndMarker) PlayerREF.MoveTo(MQ05_SC14_AixonEndMarker) EndIf EndFunction Function DisableGhostDoorFinal() _00E_MagConjureReanimate.Play(playerREF) _00E_MQ05_SurrealDisappearance.Apply() Wait(2.6) _00E_MQ05_GhostSound.Play(PlayerREF) MQ05_D7_JailDoorFinal.Enable(False) Wait(4.5) Self.SetCurrentStageID(130) Ryon.GetReference().MoveTo(MQ05_SC14_AixonEndMarker) EndFunction Function StartAixonScene() Actor akRyon = Ryon.GetActorReference() akRyon.StopCombat() akRyon.EvaluatePackage() ; Restore Ryon's health to above 0 if he's bleeding out. ; This fixes him not speaking all his lines in the followup scene sometimes. ; The code was copied from DGIntimidateQuestScript. If akRyon.IsBleedingOut() Float bleederHealth = akRyon.GetActorValue("health") If bleederHealth < 1 bleederHealth = 10 - bleederHealth akRyon.RestoreActorValue("health", bleederHealth) EndIf EndIf MQ05_SC15_AixoNDisappear.ForceStart() akRyon.Say(MQ05_D8_2) Wait(3) _00E_AMBHorrorVoicesNoLoopM.Play(PlayerREF) Wait(15) _00E_MAGEldritchExplosionM.Play(PlayerREF) FadeToWhiteHoldImod.ApplyCrossFade() Wait(5) _00E_PlayerFunctions.GetSafeItemRemove().RemoveAllItemsSafeVersion(None) Self.SetCurrentStageID(150) EndFunction Function CompleteQuest() _00E_PlayerFunctions.GetSoundControl().RemoveSilence() If CQJ01_SC01_DancingNomadScene.IsPlaying() CQJ01_SC01_DancingNomadScene.Stop() EndIf If _00E_MC_YuslanRef.IsDisabled() _00E_MC_YuslanRef.Enable() EndIf _00E_EPHandler.GiveEp(__Config_RewardEXP) If MQ05Prologue_SC2.IsPlaying() MQ05Prologue_SC2.Stop() EndIf If MQ05_SC09_DiscussionAndRitual.IsPlaying() MQ05_SC09_DiscussionAndRitual.Stop() EndIf If MQ03_SC4_KonstantinExaminesPlayer.IsPlaying() MQ03_SC4_KonstantinExaminesPlayer.Stop() EndIf _00E_Meditate_Allowed.SetValueInt(1) MQ06.Start() EndFunction ;===================================================================================== ; PROPERTIES ;===================================================================================== int Property __Config_RewardEXP = 350 Auto {How much EXP is granted upon completion} bool Property bSpokenWithCalia Auto Conditional Hidden bool Property bSpokenWithDunwar Auto Conditional Hidden idle property IdleWalkingCameraEnd auto idle property IdleWalkingCameraStart auto Idle Property TG05_KnockOut Auto Idle Property Idle_1stPersonWoozyGetUpFromBed Auto actor property PlayerREF auto Actor Property _00E_MC_YuslanRef Auto Armor Property ClothesPrisonerRags Auto Weapon Property _01E_01Messer Auto MiscObject Property _00E_MQ05_RitualDrinkBottle Auto MiscObject Property _00E_MQ05_BartarrPackage Auto MusicType Property _00E_SilenceTransitionHighPriority Auto GlobalVariable Property _00E_TeleportGlobal Auto GlobalVariable Property _00E_Meditate_Allowed Auto Actor Property _00E_MQ05_DunwarREF Auto Actor Property _00E_MC_CaliaREF Auto Actor Property _00E_MC_JorrekRef Auto ReferenceAlias Property Dunwar Auto ReferenceAlias Property Calia Auto ReferenceAlias Property Jorrek Auto ReferenceAlias Property PosessedMerchant Auto ReferenceAlias Property Ryon Auto Topic Property MQ05_D8_2 Auto Scene Property MQ05_SC1_JorrekIntroducesPlayer Auto Scene Property MQ05_SC3_Vision Auto Scene Property MQ05_SC4_GroupSpotsPosessedMerchant Auto Scene Property MQ05_SC6_MerchantConfrontation Auto Scene Property MQ05_SC7_MerchantConfrontation02 Auto Scene Property MQ05_SC9_DiscussionAndRitual Auto Scene Property MQ05_SC14_PlayerWalksIntoCell Auto Scene Property MQ05_SC15_AixoNDisappear Auto Scene Property CQJ01_SC01_DancingNomadScene Auto Scene Property MQ05Prologue_SC2 Auto Scene Property MQ05_SC09_DiscussionAndRitual Auto Scene Property MQ03_SC4_KonstantinExaminesPlayer Auto Sound Property _00E_MQ05_GhostSound Auto Sound Property _00E_MagConjureReanimate Auto Sound Property _00E_AMBHorrorVoicesNoLoopM Auto Sound Property _00E_MAGEldritchExplosionM Auto Sound Property _00E_MQ05_MerchantDeathM Auto Sound Property MAGVampireSunlight Auto Sound Property _00E_NPCKillBodyfall Auto Static Property XMarkerHeading Auto Outfit Property _25E_HolyOrder_NoviceOutfitNoHelmet Auto ImageSpaceModifier Property TG05SequenceImod Auto ImageSpaceModifier Property _00E_WakeUp Auto ImageSpaceModifier Property _00E_MQ05_SurrealDisappearance Auto ImageSpaceModifier Property FadeToWhiteHoldImod Auto ImageSpaceModifier Property FadeToBlackHoldImod Auto ImageSpaceModifier Property MAGShockExpImod Auto spell property _00E_MQ05_DunwarLighting auto ObjectReference Property MQ05Container Auto ObjectReference Property MQ05_JailPlayerStartMarker Auto ObjectReference Property MQ05_D6_JailDoor Auto ObjectReference Property MQ05_D7_JailDoorFinal Auto ObjectReference Property MQ05_SC14_AixonEndMarker Auto ObjectReference Property MQ05_SC08_TriggerREF Auto Quest Property MQ06 Auto Formlist Property _00E_MQ05_GhostsList Auto