Scriptname _00E_MQ11c_OorbayaBallistaScript extends TrapBase ;Dart Trap extending TrapBase ;integrated with the TrapTriggerBase ; ;================================================================ import debug import utility import custom int property shotCount = 3 auto {This property track the ammo that the ballista has, and starts with} ;int numShots = 20 ;might want to make this a property float fireRate = 0.1 float property initialDelay = 0.0 auto weapon property ballistaWeaponM auto weapon property ballistaWeaponL auto weapon property ballistaWeaponR auto Ammo Property _00E_MQ11c_OorbayaBallistBolt Auto GlobalVariable Property _00E_MQ11c_BallistaFired Auto Actor Property MQ11c_SC10_RyneusOorbaya Auto bool property isFiring auto hidden bool property isLoaded auto hidden bool property shotFired = false auto hidden bool property weaponResolved = false auto hidden Quest Property MQ11c Auto ReferenceAlias Property Oorbaya Auto Function initialize() endFunction Function ResetLimiter() shotFired = false ;shotCount is scoped outside of the OnActivate blocks. This will reset scopecount to 0, extending the firing time. EndFunction Function fireTrap() if !TrapDisarmed _00E_MQ11c_BallistaFired.SetValue(1) Oorbaya.GetActorReference().SetGhost(False) isFiring = True objectReference TrapSelf = self as objectReference ;TRACE("fireTrap called") WindupSound.play( self as ObjectReference) ;play windup sound wait( initialDelay ) ;wait for windup ; if (fireOnlyOnce == True) ;If this can be fired only once then disarm ; trapDisarmed = True ; endif while(shotcount > 0) && !shotfired && isLoaded if shotCount == 3 playAnimation("Trigger01") ;fire anim 01 ballistaWeaponM.fire( TrapSelf, _00E_MQ11c_OorbayaBallistBolt ) ;fire 01 shotcount -= 1 WaitForAnimationEvent("FTrans01") playAnimationAndWait("Reset01","RTrans01") ;reset anim 01 elseIf ShotCount == 2 playAnimation("Trigger02") ;fire anim 02 ballistaWeaponL.fire( TrapSelf, _00E_MQ11c_OorbayaBallistBolt ) ;fire 02 shotcount -= 1 WaitForAnimationEvent("FTrans02") playAnimationAndWait("Reset02","RTrans02") ;reset anim 02 elseIf ShotCount == 1 playAnimation("Trigger03") ;fire anim 03 ballistaWeaponR.fire( TrapSelf, _00E_MQ11c_OorbayaBallistBolt ) ;fire 03 shotcount -= 1 WaitForAnimationEvent("FTrans03") ;playAnimationAndWait("Reset03","RTrans03") ;reset anim 03 endIf shotFired = True Wait(1) if (loop == TRUE) ;Reset Limiter resetLimiter() endif endWhile if isLoaded isFiring = false ;playAnimation("idle") goToState("Reset") endif endif endFunction State Reset Event OnBeginState() ;TRACE("State Reset") if shotcount > 0 ;shotCount = 3 GoToState ( "Idle" ) Else TrapDisarmed = True GoToState ("Reset") endif endEvent Event OnActivate( objectReference activateRef ) ;TRACE("Reset trigger") EndEvent endState ;----------------------------------------------- event onLoad() isLoaded = TRUE if isFiring == True fireTrap() endif if shotCount == 3 playAnimationAndWait("Reset03","RTrans03") ;reset anim 01 elseIf ShotCount == 2 playAnimationAndWait("Reset01","RTrans01") ;reset anim 02 elseIf ShotCount == 1 playAnimationAndWait("Reset02","RTrans02") ;reset anim 02 endIf EndEvent event onUnload() ; debug.Trace(self + " has recieved onUnload event") isLoaded = FALSE endEvent