Scriptname _00E_NQ_G_06_Functions extends Quest Conditional

;=====================================================================================
;              							FUNCTIONS                  					 
;=====================================================================================


Function StartMessengerTimer()

	RegisterForSingleUpdateGameTime(24)
	
EndFunction

Function PlaceMessenger()

	If !bMessengerSpawned && (MQ12b.IsCompleted() || MQ12b.GetCurrentStageID() < 5) && MQ14.GetCurrentStageID() <= 15

		If (PlayerREF.GetCurrentLocation() == CapitalCityLocation) || (PlayerREF.GetCurrentLocation() == _00E_SuntempleLocation)
		
			bMessengerSpawned = True
			
			objSpawnMarker = PlayerREF.PlaceAtMe(XMarkerHeading, 1)
			objSpawnMarker.MoveTo(PlayerRef, -250.0 * Math.Sin(PlayerRef.GetAngleZ()), -250.0 * Math.Cos(PlayerRef.GetAngleZ()), PlayerRef.GetHeight())
			If _00E_NQ_G_05_MessengerREF.IsDead()
				_00E_NQ_G_05_MessengerREF.Resurrect()
			EndIf
			_00E_NQ_G_05_MessengerREF.Enable()
			_00E_NQ_G_05_MessengerREF.MoveTo(objSpawnMarker)
			UnregisterForUpdateGameTime()
			
			StartSC01()
		Else
			RegisterForSingleUpdateGameTime(0.2)
		EndIf
		
	EndIf
	
EndFunction

Function DespawnMessenger()

	_00E_NQ_G_05_MessengerREF.Disable()

EndFunction

Function GiveLetter()

	If (PlayerREF.GetItemCount(_00E_NQ_G_06_LetterFromDijaam_M) == 0) && (PlayerREF.GetItemCount(_00E_NQ_G_06_LetterFromDijaam_F) == 0)
	
		if PlayerREF.GetActorBase().GetSex() == 0
			PlayerREF.AddItem(_00E_NQ_G_06_LetterFromDijaam_M, 1)
		Else
			PlayerREF.AddItem(_00E_NQ_G_06_LetterFromDijaam_F, 1)
		Endif
		
	EndIf
	
EndFunction

Function DespawnGuard()

	_00E_NQ_G_06_GuardREF.Disable()

EndFunction
	
Function SideWithDijaam()

	_00E_NQ_G_SidedDijaam.SetValue(1)
	_00E_NQ_G_SidedMael.SetValue(0)
	Steam.UnlockAchievement("END_SIDED_DIJAAM_01")
 EndFunction

Function SideWithMael()

	_00E_NQ_G_SidedMael.SetValue(1)
	_00E_NQ_G_SidedDijaam.SetValue(0)
	
	Steam.UnlockAchievement("END_SIDED_MAEL_01")
	
EndFunction

Function SpawnKileans()

	_00E_NQ_G_06_MercenaryKilean_WarriorREF.Enable(abFadeIn = false)
	_00E_NQ_G_06_MercenaryKilean_MageREF.Enable(abFadeIn = false)
	
	_00E_NQ_G_06_MercenaryKilean_WarriorREF.MoveTo(_00E_NQ_G_06_KileanWarriorStandMarker)
	_00E_NQ_G_06_MercenaryKilean_MageREF.MoveTo(_00E_NQ_G_06_KileanMageStandMarker)
	_00E_NQ_G_06_MercenaryEnderalean_WarriorREF.disable()
	_00E_NQ_G_06_MercenaryEnderalean_MageREF.disable()

EndFunction

Function StartFightKilean()

	_00E_NQ_G_06_MercenaryKilean_WarriorREF.StartCombat(PlayerREF)
	_00E_NQ_G_06_MercenaryKilean_WarriorREF.SetActorValue("Aggression", 4)
	_00E_NQ_G_06_MercenaryKilean_MageREF.StartCombat(PlayerREF)
	_00E_NQ_G_06_MercenaryKilean_MageREF.SetActorValue("Aggression", 4)

EndFunction

Function SpawnEnderaleans()

	_00E_NQ_G_06_MercenaryEnderalean_WarriorREF.Enable(abFadeIn = false)
	_00E_NQ_G_06_MercenaryEnderalean_MageREF.Enable(abFadeIn = false)
	
	_00E_NQ_G_06_MercenaryEnderalean_WarriorREF.MoveTo(_00E_NQ_G_06_WarriorKneelMarker)
	_00E_NQ_G_06_MercenaryEnderalean_MageREF.MoveTo(_00E_NQ_G_06_EnderaleanMageStandMarker)
	
	_00E_NQ_G_06_MercenaryKilean_WarriorREF.disable()
	_00E_NQ_G_06_MercenaryKilean_WarriorREF.disable()

EndFunction

Function StartFightEnderalean()

	_00E_NQ_G_06_MercenaryEnderalean_WarriorREF.StartCombat(PlayerREF)
	_00E_NQ_G_06_MercenaryEnderalean_WarriorREF.SetActorValue("Aggression", 4)
	_00E_NQ_G_06_MercenaryEnderalean_MageREF.StartCombat(PlayerREF)
	_00E_NQ_G_06_MercenaryEnderalean_MageREF.SetActorValue("Aggression", 4)

EndFunction

Function StopFight()

	if !_00E_NQ_G_06_MercenaryKilean_MageREF.IsDisabled()
		_00E_NQ_G_06_MercenaryKilean_MageREF.StopCombat()
		_00E_NQ_G_06_MercenaryKilean_MageREF.SetGhost(True)
		_00E_PlayerFunctions.GetTeleportControl().TeleportNPC(_00E_NQ_G_06_MercenaryKilean_MageREF, _00E_NPCDumpMarker)
	ElseIf !_00E_NQ_G_06_MercenaryEnderalean_MageREF.IsDisabled()
		_00E_NQ_G_06_MercenaryEnderalean_MageREF.StopCombat()
		_00E_NQ_G_06_MercenaryEnderalean_MageREF.SetGhost(True)
		_00E_PlayerFunctions.GetTeleportControl().TeleportNPC(_00E_NQ_G_06_MercenaryEnderalean_MageREF, _00E_NPCDumpMarker)
	EndIf
	
EndFunction

Function DespawnMages()

	if !_00E_NQ_G_06_MercenaryKilean_MageREF.IsDisabled()
		_00E_NQ_G_06_MercenaryKilean_MageREF.Disable()
		if PlayerREF.GetItemCount(_00E_NQ_G_06_Contract) > 0
			SetCurrentStageID(45)
		Else
			SetCurrentStageID(40)
		EndIf
	ElseIf !_00E_NQ_G_06_MercenaryEnderalean_MageREF.IsDisabled()
		_00E_NQ_G_06_MercenaryEnderalean_MageREF.Disable()
		SetCurrentStageID(35)
	EndIf

EndFunction 

Function SetUpStage25()

	if bBlackmailed == true
		SetupSC04()
		StartSC04()
	ElseIf bBlackmailed == false
		SetupSC03()
		StartSC03()
	EndIf

EndFunction

Function SetupSC02()

	_00E_SC_DijaamOnelys.Enable()
	_00E_SC_DijaamOnelys.MoveTo(_00E_NQ_G_06_DijaamSitMarker)

EndFunction

Function SetupSC03()

	_00E_SC_Mael.MoveTo(_00E_NQ_G_06_MaelStandMarker)
	_00E_NQ_G_06_GuardREF.Enable()

EndFunction

Function SetupSC04()

	_00E_NQ_G_04_DoorGuardREF.MoveTo(_00E_NQ_G_06_ProtektorStandMarker)

EndFunction

Function SetupSC05()

	if _00E_NQ_G_SidedDijaam.GetValue() == 1
		SpawnEnderaleans()
		_00E_NQ_G_06_ChestREF.AddItem(_00E_NQ_G_06_SickleNote)
	EndIf
	
	if _00E_NQ_G_SidedMael.GetValue() == 1
		_00E_NQ_G_06_ChestREF.AddItem(_00E_NQ_G_06_Contract)
	EndIf

EndFunction

Function StartSC01()

	NQ_G_06_SC01_MessengerForceGreet.ForceStart()

EndFunction

Function StartSC02()

	NQ_G_06_SC02_DijaamTalkAtTavern.ForceStart()
	
EndFunction

Function StartSC03()

	NQ_G_06_SC03_MaelTalk.ForceStart()

EndFunction

Function StartSC04()

	NQ_G_06_SC04_ProtektorKickPlayerOut.ForceStart()

EndFunction

Function StartSC05()

	NQ_G_06_SC05_EncounterInCave.ForceStart()

EndFunction

Function RewardMoney()

	PlayerREF.AddItem(Gold001, __Config_RewardMoney)

EndFunction

Function FinishQuest()
	
	_00E_EPHandler.GiveEP(__Config_RewardEXP)
	
	if _00E_NQ_G_SidedMael.GetValueInt() == 1
		NQ_G_07Mael.SetCurrentStageID(5)
	Else
		NQ_G_07Dijaam.SetCurrentStageID(5)
	EndIf
	
EndFunction

;=====================================================================================
;              							EVENTS                  					 
;=====================================================================================
Event OnUpdateGameTime()

	NQG06_ReadyToSpawn.SetValueInt(1)
	
	PlaceMessenger()
	
EndEvent
;=====================================================================================
;              							PROPERTIES                  					 
;=====================================================================================
ObjectReference objSpawnMarker ;for moving Messenger

bool Property bBlackmailed Auto Conditional
bool bMessengerSpawned

Quest Property MQ12b Auto
Quest Property MQ14 Auto

;rewards
int Property __Config_RewardEXP Auto
int Property __Config_RewardMoney Auto
MiscObject Property Gold001 Auto

;items
Book Property _00E_NQ_G_06_LetterFromDijaam_M Auto
Book Property _00E_NQ_G_06_LetterFromDijaam_F Auto
Book Property _00E_NQ_G_06_Contract Auto
Book Property _00E_NQ_G_06_SickleNote Auto
ObjectReference Property _00E_NQ_G_06_ChestREF Auto

;actors
Actor Property _00E_NQ_G_05_MessengerREF Auto
Actor Property PlayerREF Auto
Actor Property _00E_NQ_G_04_DoorGuardREF Auto
Actor Property _00E_SC_Mael Auto
Actor Property _00E_SC_DijaamOnelys Auto
Actor Property _00E_NQ_G_06_GuardREF Auto
Actor Property _00E_NQ_G_06_MercenaryEnderalean_WarriorREF Auto
Actor Property _00E_NQ_G_06_MercenaryEnderalean_MageREF Auto
Actor Property _00E_NQ_G_06_MercenaryKilean_WarriorREF Auto
Actor Property _00E_NQ_G_06_MercenaryKilean_MageREF Auto

Location Property CapitalCityLocation Auto
Location Property _00E_SuntempleLocation Auto

;scenes
Scene Property NQ_G_06_SC01_MessengerForceGreet Auto
Scene Property NQ_G_06_SC02_DijaamTalkAtTavern Auto
Scene Property NQ_G_06_SC03_MaelTalk Auto
Scene Property NQ_G_06_SC04_ProtektorKickPlayerOut Auto
Scene Property NQ_G_06_SC05_EncounterInCave Auto

;for spawning Marker to move Messenger to
Static Property XMarkerHeading Auto

;globals
GlobalVariable Property _00E_NQ_G_SidedDijaam Auto
GlobalVariable Property _00E_NQ_G_SidedMael Auto
GlobalVariable Property NQG06_ReadyToSpawn Auto

;marker
ObjectReference Property _00E_NQ_G_06_ProtektorStandMarker Auto
ObjectReference Property _00E_NQ_G_06_DijaamSitMarker Auto
ObjectReference Property _00E_NQ_G_06_MaelStandMarker Auto
ObjectReference Property _00E_NQ_G_06_WarriorKneelMarker Auto
ObjectReference Property _00E_NQ_G_06_EnderaleanMageStandMarker Auto
ObjectReference Property _00E_NQ_G_06_KileanWarriorStandMarker Auto
ObjectReference Property _00E_NQ_G_06_KileanMageStandMarker Auto
ObjectReference Property _00E_NPCDumpMarker Auto

;next quest
_00E_NQ_G_07_Functions Property NQ_G_07Mael Auto
_00E_NQ_G_07_Functions Property NQ_G_07Dijaam Auto