Scriptname _00E_MQ15_FailsaveSC extends ObjectReference  

;=====================================================================================
;              							EVENTS                  					 
;=====================================================================================

Event OnTriggerEnter(ObjectReference akActionRef)

	If !bDone && akActionRef == PlayerREF
		
		If bYuslan 
			iNPCsToPort += 1
			PortToPlayerIfNotNearby(MQ15.akYuslan)
		EndIf
		
		If bCompanion 
			iNPCsToPort += 1
			PortToPlayerIfNotNearby(MQ15.akCompanion)
		EndIf
		
		If bTealor 
			iNPCsToPort += 1
			PortToPlayerIfNotNearby(MQ15.akTealor)
		EndIf
		
		bDone = True
		
	EndIf

EndEvent

Event OnUpdate()

	If bCompanion && !PlayerREF.HasLOS(MQ15.akCompanion)
		MQ15.akCompanion.MoveTo(akSpawnPoint)
		bPortedNPC01 = True
	EndIf
	
	If bYuslan && !PlayerREF.HasLOS(MQ15.akYuslan)
		MQ15.akYuslan.MoveTo(akSpawnPoint)
		bPortedNPC02 = True
	EndIf
	
	If bTealor && !PlayerREF.HasLOS(MQ15.akTealor)
		MQ15.akTealor.MoveTo(akSpawnPoint)
		bPortedNPC03 = True
	EndIf
	
	If iNPCsToPort == 1
		If bPortedNPC01
			CleanUp()
		Else
			RegisterForSingleUpdate(2)
		EndIf
	ElseIf iNPCsToPort == 2
		If bPortedNPC01 && bPortedNPC02
			CleanUp()
		Else
			RegisterForSingleUpdate(2)
		EndIf
	ElseIf iNPCsToPort == 3
		If bPortedNPC01 && bPortedNPC02 && bPortedNPC03
			CleanUp()
		Else
			RegisterForSingleUpdate(2)
		EndIf
	EndIf

EndEvent

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

Function CleanUp()

	Self.Delete()
	akSpawnPoint.Delete()

EndFunction

Function PortToPlayerIfNotNearby(Actor akPortTarget)

	If !__Config_bDistanceCheck 
	
		akPortTarget.MoveTo(PlayerREF)
		
	Elseif __Config_bDistanceCheck && (akPortTarget.GetDistance(PlayerREF) >= __Config_fDistanceCheck) && !bUpdating
			
		objSpawnMarker = PlayerREF.PlaceAtMe(XMarkerHeading, 1)
		objSpawnMarker.MoveTo(PlayerRef, -250.0 * Math.Sin(PlayerRef.GetAngleZ()), -250.0 * Math.Cos(PlayerRef.GetAngleZ()), PlayerRef.GetHeight())
		akSpawnPoint = objSpawnMarker.PlaceActorAtMe(_00E_NPCOorbayaInvisibeActor, 1)
		objSpawnMarker.Delete()
		iNPCsToPort = 0
	
		bUpdating = True
		RegisterForSingleUpdate(1)
	Else
		Return
	EndIf
	
EndFunction

;=====================================================================================
;              							PROPERTIES                  					 
;=====================================================================================

float Property __Config_fDistanceCheck = 1000.0 Auto

_00E_MQ15_Functions Property MQ15 Auto

int iNPCsToPort

bool bDone

bool bPortedNPC01 
bool bPortedNPC02 
bool bPortedNPC03 
bool bUpdating 

bool Property bYuslan Auto
bool Property bTealor Auto
bool Property bCompanion Auto

bool Property __Config_bDistanceCheck = False Auto

ObjectReference objSpawnMarker
Actor akSpawnPoint

Static Property XMarkerHeading Auto

Actor Property PlayerREF Auto
ActorBase Property _00E_NPCOorbayaInvisibeActor Auto