scriptName dunArcherPressurePlateScript extends ObjectReference

import debug
import utility

Formlist property flArrows auto
int property targetNumber auto
{0=Left Target 1=Middle Target 2=RightTarget  3=FarTarget}

ObjectReference property LeftTarget auto
ObjectReference property MiddleTarget auto
ObjectReference property RightTarget auto
ObjectReference property FarTarget auto
ObjectReference property myActorTarget auto
Actor property myActor auto
Quest property dunArcherQST auto
dunArcherQuestScript myQuest
bool playerHitTarget
bool correctArrows
bool inBox

;************************************

Event OnLoad()
	myQuest = dunArcherQST as dunArcherQuestScript
endEvent

;************************************

auto State Waiting
	Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
		Actor actorRef = akAggressor as Actor
		gotoState("DoNothing")
		if(myQuest.GetCurrentStageID() == 30 && myQuest.GetCurrentStageID() <= 32)
			myQuest.feedbackFlag = 0
		endif
		
		activate(self as objectReference)
		
		if(actorRef == game.GetPlayer())
			;player hit the target
			playerHitTarget = true
		endif
		
		if(flArrows.hasForm(akProjectile))
			;target was hit with correct arrow
			correctArrows = true
		endif
		
		if(myQuest.playerInBox == 1)
			;player is in box when target was hit
			inBox = true
		endif
		
		if(playerHitTarget && correctArrows && inBox)
			;player hit target and is using the correct arrows and is in box
			if(targetNumber == 0)
				;if player hit left target
				if(myQuest.GetCurrentStageID() == 30 || myQuest.GetCurrentStageID() == 32 || myQuest.GetCurrentStageID() == 60)
					;player hit the wrong target
					myQuest.feedbackFlag = 4
				else
					if(myQuest.GetCurrentStageID() == 31)
						;player hit the left target correctly
						myQuest.feedbackFlag = 0
						myQuest.SetCurrentStageID(32)
					else
						if(myQuest.GetCurrentStageID() == 50 || myQuest.GetCurrentStageID() == 51 || myQuest.GetCurrentStageID() == 70 || myQuest.GetCurrentStageID() == 71)
							;checking for when player needs to hit each of the three targets
							myQuest.playerHitTargetLeft = 1
						endif
					endif
				endif
			else
				if(targetNumber == 1)
					;if player hit middle target
					if(myQuest.GetCurrentStageID() == 30)
						;player hit middle target correctly
						myQuest.feedbackFlag = 0
						myQuest.SetCurrentStageID(31)
					else
						if(myQuest.GetCurrentStageID() == 31 || myQuest.GetCurrentStageID() == 32 || myQuest.GetCurrentStageID() == 60)
							;player hit the wrong target
							myQuest.feedbackFlag = 4
						else
							if(myQuest.GetCurrentStageID() == 50 || myQuest.GetCurrentStageID() == 51 || myQuest.GetCurrentStageID() == 70 || myQuest.GetCurrentStageID() == 71)
								;checking for when player needs to hit each of the three targets
								myQuest.playerHitTargetMiddle = 1
							endif
						endif
					endif
				else
					if(targetNumber == 2)
						;player hit right target
						if(myQuest.GetCurrentStageID() == 30 || myQuest.GetCurrentStageID() == 31 || myQuest.GetCurrentStageID() == 60)
							;player hit the wrong target
							myQuest.feedbackFlag = 4
						else
							if(myQuest.GetCurrentStageID() == 32)
								;player hit the right target correctly
								myQuest.feedbackFlag = 0
								myQuest.SetCurrentStageID(40)
							else
								if(myQuest.GetCurrentStageID() == 50 || myQuest.GetCurrentStageID() == 51 || myQuest.GetCurrentStageID() == 70 || myQuest.GetCurrentStageID() == 71)
									;checking for when player needs to hit each of the three targets
									myQuest.playerHitTargetRight = 1
								endif
							endif
						endif
					else
						if(targetNumber == 3)
							;player hit far target
							if(myQuest.GetCurrentStageID() == 30 || myQuest.GetCurrentStageID() == 31 || myQuest.GetCurrentStageID() == 32)
								;player hit the wrong target
								myQuest.feedbackFlag = 4
							else
								if(myQuest.GetCurrentStageID() == 60)
									;player hit the far target correctly
									myQuest.feedbackFlag = 0
									myQuest.playerChallengeComplete01 = 1
									myQuest.SetCurrentStageID(62)
								else
									if(myQuest.GetCurrentStageID() == 70 || myQuest.GetCurrentStageID() == 71)
										;checking for when player needs to hit all targets
										myQuest.playerHitTargetFar = 1
									endif
								endif
							endif
						endif
					endif
				endif
			endif
			
		else
			if(playerHitTarget && correctArrows && !inBox)
				;player hit target, used correct arrows, but is not in box
				myQuest.feedbackFlag = 1
			else
				if(playerHitTarget && !correctArrows && inBox)
					;player hit target, is in box, but used wrong arrows
					myQuest.feedbackFlag = 2
				else
					if(playerHitTarget && !correctArrows && !inBox)
						;player hit target, but used wrong arrows and is not in box
						myQuest.feedbackFlag = 3
					endif
				endif
			endif
		endif

		
		;this is for angie
		if(actorRef == myActor)
			if(myQuest.GetCurrentStageID() == 45)
				;Angi is shooting the three targets
				if(myQuest.count == 0)
					myActorTarget.moveto(LeftTarget)
					myQuest.count = 1
				else
					if(myQuest.count == 1)
						myActorTarget.moveto(RightTarget)
						myQuest.count = 2
					else
						if(myQuest.count == 2)
							myActorTarget.moveto(MiddleTarget)
							myQuest.count = 0
						else
							myQuest.count = 0
						endif
					endif
				endif
			else
				if(myQuest.GetCurrentStageID() == 69)
					;Angi is shooting all four targets
					if(myQuest.count == 0)
						myActorTarget.moveto(LeftTarget)
						myQuest.count = 1
					else
						if(myQuest.count == 1)
							myActorTarget.moveto(MiddleTarget)
							myQuest.count = 2
						else
							if(myQuest.count == 2)
								myActorTarget.moveto(FarTarget)
								myQuest.count = 3
							else
								if(myQuest.count == 3)
									myActorTarget.moveto(MiddleTarget)
									myQuest.count = 0
								endif
							endif
						endif
					endif
				endif
			endif
		endif
		
		;reset vars
		playerHitTarget = false
		correctArrows = false
		inBox = false

		
		;for player hitting three targets
		if(myQuest.GetCurrentStageID() == 50 || myQuest.GetCurrentStageID() == 51)
			if((myQuest.playerHitTargetLeft == 1) && (myQuest.playerHitTargetMiddle == 1) && (myQuest.playerHitTargetRight == 1))
				myQuest.playerChallengeComplete01 = 1
			endif
		endif
		
		if(myQuest.GetCurrentStageID() == 70 || myQuest.GetCurrentStageID() == 71)
			if((myQuest.playerHitTargetLeft == 1) && (myQuest.playerHitTargetMiddle == 1) && (myQuest.playerHitTargetRight == 1) && (myQuest.playerHitTargetFar == 1))
				myQuest.playerChallengeComplete01 = 1
			endif
		endif
		gotoState("Waiting")
	endEvent
	
endState

;************************************

State DoNothing
	;do nothing
EndState

;************************************