169 lines
4.1 KiB
Plaintext
169 lines
4.1 KiB
Plaintext
|
scriptName DartTrap extends TrapBase
|
||
|
;
|
||
|
;Dart Trap extending TrapBase
|
||
|
;integrated with the TrapTriggerBase
|
||
|
;
|
||
|
;================================================================
|
||
|
|
||
|
import debug
|
||
|
import utility
|
||
|
import custom
|
||
|
|
||
|
int numPorts
|
||
|
objectReference currentLink
|
||
|
int portIndex = 1
|
||
|
int shotCount
|
||
|
;int numShots = 20 ;might want to make this a property
|
||
|
float fireRate = 0.1
|
||
|
float property initialDelay = 0.2 auto
|
||
|
weapon dartWeapon
|
||
|
float property firingDelay = 0.03 auto
|
||
|
float currentTime
|
||
|
|
||
|
int property NumShots =1 auto
|
||
|
|
||
|
bool property isFiring auto hidden
|
||
|
bool property isLoaded auto hidden
|
||
|
|
||
|
Function initialize()
|
||
|
currentLink = self as objectReference
|
||
|
numPorts = countLinks(currentLink) ;counts how many in a chain of linked refs. Don't loop linked refs.
|
||
|
;trace( "numPorts" )
|
||
|
;trace( numPorts as string )
|
||
|
|
||
|
endFunction
|
||
|
|
||
|
function ResetLimiter()
|
||
|
shotcount = 0 ;shotCount is scoped outside of the OnActivateBlocks. This will reset scopecount to 0, extending the firing time.
|
||
|
endFunction
|
||
|
|
||
|
Function fireTrap()
|
||
|
isFiring = True
|
||
|
ResolveLeveledWeapon()
|
||
|
;TRACE("fireTrap called")
|
||
|
WindupSound.play( self as ObjectReference) ;play windup sound
|
||
|
wait( initialDelay ) ;wait for windup
|
||
|
;TRACE("Initial Delay complete")
|
||
|
trapDisarmed = fireOnlyOnce ;If this can be fired only once then disarm
|
||
|
|
||
|
;TRACE("Looping =")
|
||
|
;TRACE(Loop)
|
||
|
|
||
|
shotcount = 0
|
||
|
currentTime = getCurrentRealTime()
|
||
|
while(shotcount <= numShots ) && isLoaded == TRUE
|
||
|
wait(0.01)
|
||
|
if ((currentTime + firingDelay) < getCurrentRealTime())
|
||
|
|
||
|
int firePort = RandomInt( 0, numPorts ) ;set fireport
|
||
|
|
||
|
if fireport > 0
|
||
|
currentLink = GetNthLinkedRef (firePort)
|
||
|
Else
|
||
|
currentLink = self as objectReference
|
||
|
endif
|
||
|
dartWeapon.fire( currentLink, dartAmmo ) ;fire
|
||
|
shotcount = shotCount + 1 ;increment number of shotswait( fireRate ) ;- timeDelay) ;wait for the fire rate time delay, minus processing time
|
||
|
|
||
|
|
||
|
|
||
|
if (loop == TRUE) ;Reset Limiter
|
||
|
ResetLimiter()
|
||
|
endif
|
||
|
currentTime = getCurrentRealTime()
|
||
|
endif
|
||
|
endWhile
|
||
|
|
||
|
if isLoaded
|
||
|
isFiring = false
|
||
|
;playAnimation("idle")
|
||
|
goToState("Reset")
|
||
|
endif
|
||
|
|
||
|
endFunction
|
||
|
|
||
|
State Reset
|
||
|
|
||
|
Event OnBeginState()
|
||
|
;TRACE("State Reset")
|
||
|
GoToState ( "Idle" )
|
||
|
;TrapHitBase hitBase = (self as objectReference) as TrapHitBase
|
||
|
;hitBase.goToState("CanHit")
|
||
|
endEvent
|
||
|
|
||
|
Event OnActivate( objectReference activateRef )
|
||
|
;TRACE("Reset trigger")
|
||
|
EndEvent
|
||
|
|
||
|
endState
|
||
|
|
||
|
event onCellAttach()
|
||
|
isLoaded = TRUE
|
||
|
if isFiring == True
|
||
|
fireTrap()
|
||
|
endif
|
||
|
EndEvent
|
||
|
|
||
|
event onCellDetach()
|
||
|
; debug.Trace(self + " has recieved onUnload event")
|
||
|
isLoaded = FALSE
|
||
|
endEvent
|
||
|
|
||
|
;-----------------------------------------------
|
||
|
|
||
|
int property LvlThreshold1 auto
|
||
|
weapon property LvlWeapon1 auto
|
||
|
int property LvlThreshold2 auto
|
||
|
weapon property LvlWeapon2 auto
|
||
|
int property LvlThreshold3 auto
|
||
|
weapon property LvlWeapon3 auto
|
||
|
int property LvlThreshold4 auto
|
||
|
weapon property LvlWeapon4 auto
|
||
|
int property LvlThreshold5 auto
|
||
|
weapon property LvlWeapon5 auto
|
||
|
weapon property LvlWeapon6 auto
|
||
|
ammo property dartAmmo auto
|
||
|
|
||
|
Function ResolveLeveledWeapon ()
|
||
|
;Trace("ResolveLeveledWeapon")
|
||
|
int damageLevel
|
||
|
damageLevel = CalculateEncounterLevel(TrapLevel)
|
||
|
|
||
|
weapon lvlWeapon = LvlWeapon1
|
||
|
|
||
|
if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2)
|
||
|
lvlWeapon = LvlWeapon2
|
||
|
;Trace("damage threshold =")
|
||
|
;Trace("2")
|
||
|
endif
|
||
|
if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3)
|
||
|
lvlWeapon = LvlWeapon3
|
||
|
;Trace("damage threshold =")
|
||
|
;Trace("3")
|
||
|
endif
|
||
|
if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4)
|
||
|
lvlWeapon = LvlWeapon4
|
||
|
;Trace("damage threshold =")
|
||
|
;Trace("4")
|
||
|
endif
|
||
|
if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5)
|
||
|
lvlWeapon = LvlWeapon5
|
||
|
;Trace("damage threshold =")
|
||
|
;Trace("5")
|
||
|
endif
|
||
|
if (damageLevel > LvlThreshold5)
|
||
|
lvlWeapon = LvlWeapon6
|
||
|
;Trace("damage threshold =")
|
||
|
;Trace("6")
|
||
|
endif
|
||
|
|
||
|
dartWeapon = lvlWeapon
|
||
|
EndFunction
|
||
|
|
||
|
;Event OnTrapHit(ObjectReference akTarget, float afXVel, float afYVel, float afZVel, float afXPos, float afYPos, float afZPos, int aeMaterial, bool abInitialHit, int aeMotionType)
|
||
|
; if (hitOnce == FALSE)
|
||
|
; hitOnce = TRUE
|
||
|
; endif
|
||
|
;endEvent
|
||
|
|