205 lines
5.5 KiB
Plaintext
205 lines
5.5 KiB
Plaintext
|
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
|
||
|
|