Scriptname defaultsetStageOnHitAliasScript extends ReferenceAlias  
{generic script for one-shot quest stage update}

import game
import debug

int property stage auto
{ stage to set}

int property prereqStageOPT = -1 auto
{ OPTIONAL: stage that must be set for this trigger to fire }

int testState	; for debugging

bool property playerOnly = True auto

auto STATE waitingForPlayer
	Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
		;trace(self + " OnHit in waitingForPlayer")
		testForTrigger(akAggressor, 2)
	endEvent

endSTATE

STATE hasBeenTriggered
	; this state doesn't do anything
	EVENT onActivate(objectReference triggerRef)
	endEvent

	Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
		;trace(self + " OnHit in hasBeenTriggered")
	endEvent

	EVENT onTriggerEnter(objectReference triggerRef)
	endEvent

	Event OnEquipped(Actor akActor)
	endEvent
endSTATE

EVENT onActivate(objectReference triggerRef)
endEvent

function testForTrigger(objectReference triggerRef, int pTestTriggerType)
; 	debug.trace(self + " testForTrigger, triggerRef=" + triggerRef + ", triggerType=" + pTestTriggerType)
	if TriggerType == pTestTriggerType
		if (triggerRef == getPlayer() || !playerOnly)
			if prereqStageOPT == -1 || GetOwningQuest().IsStageDone(prereqStageOPT) == 1
; 				debug.trace(self + " testforTrigger SUCCEEDED")
				GetOwningQuest().SetCurrentStageID(stage)
				gotoState("hasBeenTriggered")
			endif
		endif
	endif
endFunction

int Property TriggerType = 2 Auto  hidden
{0 = OnActivate
1 = OnDeath
2 = OnHit
3 = OnTriggerEnter
4 = OnEquipped
5 = OnCombatBegin
6 = OnCellLoad
7 = Added to player inventory
8 = Removed from player inventory

... etc...
TODO: Convert to enum when we have them
}