Scriptname defaultsetStageRefScript extends ObjectReference {generic script for one-shot quest stage update on references} import game import debug int property stage auto { stage to set} quest Property myQuest auto { quest containing the stage you want to set} int property prereqStageOPT = -1 auto { OPTIONAL: stage that must be set for this trigger to fire } int testState ; for debugging auto STATE waitingForPlayer EVENT onActivate(objectReference triggerRef) testForTrigger(triggerRef, 0) endEVENT ;Event OnDeath(Actor akKiller) ;ACTOR ONLY EVENT ;testForTrigger(getPlayer(), 1) ;endEvent 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 EVENT OnTriggerEnter(objectReference triggerRef) testForTrigger(triggerRef, 3) endEVENT ;ACTOR ONLY EVENT ;Event OnEquipped(Actor akActor) ; testForTrigger(akActor, 4) ;endEvent ;ACTOR ONLY EVENT ;Event OnCombatStateChanged(Actor akTarget, int aeCombatState) ; if aeCombatState != 0 ; 0 = not in combat, so non-zero means entered combat ; ; FOR NOW, don't care if its player ; testForTrigger(getPlayer(), 5) ; testForTrigger(akTarget, 5) ; endIf ;endEvent Event OnCellLoad() testForTrigger((Game.GetForm(0x14) as Actor), 6) endEvent Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) ; trigger if object is added to player's inventory testForTrigger(akNewContainer, 7) ; trigger if object is removed from player's inventory testForTrigger(akOldContainer, 8) endEvent Event OnOpen(ObjectReference akActionRef) testForTrigger((Game.GetForm(0x14) as Actor), 9) endEvent Event onRead() ; debug.Trace(self + " has been read") testForTrigger((Game.GetForm(0x14) as Actor), 10) 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() if prereqStageOPT == -1 || myQuest.IsStageDone(prereqStageOPT) == 1 ; debug.trace(self + " testforTrigger SUCCEEDED") myQuest.SetCurrentStageID(stage) gotoState("hasBeenTriggered") endif endif endif endFunction int Property TriggerType = 0 Auto {0 = OnActivate N/A = OnDeath (ACTOR ONLY - Must use "defaultSetStageActorRef" script) N/A = OnHit (ACTOR ONLY - Must use "defaultSetStageActorRef" script) 3 = OnTriggerEnter N/A = OnEquipped (ACTOR ONLY - Must use "defaultSetStageActorRef" script) 5 = OnCombatBegin 6 = OnCellLoad 7 = Added to player inventory 8 = Removed from player inventory 9 = OnOpen (for Doors and Containers) 10 = onRead (for books) ... etc... TODO: Convert to enum when we have them }