enderalse/source/scripts/trapdweballista.psc

205 lines
5.5 KiB
Plaintext
Raw Normal View History

scriptName TrapDweBallista 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
bool property fireAllShots = True auto
{if this is true all three shots will be fired at once}
bool property isFiring auto hidden
bool property isLoaded auto hidden
bool property shotFired = false auto hidden
bool property weaponResolved = false auto hidden
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
isFiring = True
objectReference TrapSelf = self as objectReference
if !weaponResolved
ResolveLeveledWeapon()
endif
while !weaponResolved ;Do not fire till weapon is resolved
endWhile
;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 fireAllShots
playAnimation("TriggerAll") ;fire all
ballistaWeaponM.fire( TrapSelf, ballistaAmmo ) ;fire 01
ballistaWeaponL.fire( TrapSelf, ballistaAmmo ) ;fire 02
ballistaWeaponR.fire( TrapSelf, ballistaAmmo ) ;fire 03
shotcount -= 3
WaitForAnimationEvent("FTransAll")
;playAnimationAndWait("ResetAll","RTransAll") ;reset anim all
else
if shotCount == 3
playAnimation("Trigger01") ;fire anim 01
ballistaWeaponM.fire( TrapSelf, ballistaAmmo ) ;fire 01
shotcount -= 1
WaitForAnimationEvent("FTrans01")
playAnimationAndWait("Reset01","RTrans01") ;reset anim 01
elseIf ShotCount == 2
playAnimation("Trigger02") ;fire anim 02
ballistaWeaponL.fire( TrapSelf, ballistaAmmo ) ;fire 02
shotcount -= 1
WaitForAnimationEvent("FTrans02")
playAnimationAndWait("Reset02","RTrans02") ;reset anim 02
elseIf ShotCount == 1
playAnimation("Trigger03") ;fire anim 03
ballistaWeaponR.fire( TrapSelf, ballistaAmmo ) ;fire 03
shotcount -= 1
WaitForAnimationEvent("FTrans03")
;playAnimationAndWait("Reset03","RTrans03") ;reset anim 03
endIf
endIf
shotFired = True
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 ("Disabled")
endif
endEvent
Event OnActivate( objectReference activateRef )
;TRACE("Reset trigger")
EndEvent
endState
;-----------------------------------------------
int property LvlThreshold1 auto
int property LvlThreshold2 auto
int property LvlThreshold3 auto
int property LvlThreshold4 auto
int property LvlThreshold5 auto
ammo property ballistaAmmo auto
ammo property TrapDweBallistaBoltAmmo01 auto
ammo property TrapDweBallistaBoltAmmo02 auto
ammo property TrapDweBallistaBoltAmmo03 auto
ammo property TrapDweBallistaBoltAmmo04 auto
ammo property TrapDweBallistaBoltAmmo05 auto
ammo property TrapDweBallistaBoltAmmo06 auto
Function ResolveLeveledWeapon ()
;Trace("ResolveLeveledWeapon")
int damageLevel
damageLevel = CalculateEncounterLevel(TrapLevel)
; weapon lvlWeaponM = LvlWeaponM1
; weapon lvlWeaponL = LvlWeaponL1
; weapon lvlWeaponR = LvlWeaponR1
Ammo LvlAmmo = TrapDweBallistaBoltAmmo01
if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2)
; lvlWeaponM = LvlWeaponM2
; lvlWeaponL = LvlWeaponL2
; lvlWeaponR = LvlWeaponR2
LvlAmmo = TrapDweBallistaBoltAmmo02
;Trace("damage threshold =")
;Trace("2")
endif
if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3)
;lvlWeaponM = LvlWeapon3
LvlAmmo = TrapDweBallistaBoltAmmo03
;Trace("damage threshold =")
;Trace("3")
endif
if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4)
;lvlWeaponM = LvlWeapon4
LvlAmmo = TrapDweBallistaBoltAmmo04
;Trace("damage threshold =")
;Trace("4")
endif
if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5)
;lvlWeaponM = LvlWeapon5
LvlAmmo = TrapDweBallistaBoltAmmo05
;Trace("damage threshold =")
;Trace("5")
endif
if (damageLevel > LvlThreshold5)
;lvlWeaponM = LvlWeapon6
LvlAmmo = TrapDweBallistaBoltAmmo06
;Trace("damage threshold =")
;Trace("6")
endif
; ballistaWeaponM = lvlWeaponM
; ballistaWeaponL = lvlWeaponL
; ballistaWeaponR = lvlWeaponR
BallistaAmmo = LvlAmmo
weaponResolved = True
EndFunction
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