enderalse/scripts/source/_00e_mq01_trapdweballistadam.psc

224 lines
6.2 KiB
Plaintext

scriptName _00E_MQ01_TrapDweBallistaDam 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
Actor property enemy1 auto
Actor property enemy2 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
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
; A failsafe to ensure that at least one spider has been dealt with,
; as their slightly random positioning on the cell's navmesh makes
; this not easy to predict.
utility.wait(2)
if (enemy1.isDead() == 0)
if (enemy2.isDead() == 0)
; If the spiders are on the ground floor, it's the player's
; fault.
if (enemy1.getPositionZ() > -1200)
enemy1.kill()
elseif (enemy2.getPositionZ() > -1200)
enemy2.kill()
endif
endIf
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