scriptName PhysicsTrap extends TrapBase ; ; ;This is the base class for a physics trap. ;When a moving trap collides with an actor, it should damage that actor. ;This sets up the mechanics, but behavior will have to be set up on the inherited object. ;================================================================ import debug import utility ;================================================================ int property LvlThreshold1 auto int property LvlDamage1 auto int property LvlThreshold2 auto int property LvlDamage2 auto int property LvlThreshold3 auto int property LvlDamage3 auto int property LvlThreshold4 auto int property LvlDamage4 auto int property LvlThreshold5 auto int property LvlDamage5 auto int property LvlDamage6 auto ;PhysicsTrapHit property hitBase auto hidden Function ResolveLeveledDamage () int damageLevel int damage damageLevel = CalculateEncounterLevel(TrapLevel) damage = LvlDamage1 if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2) damage = LvlDamage2 ;Trace("damage threshold =") ;Trace("2") endif if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3) damage = LvlDamage3 ;Trace("damage threshold =") ;Trace("3") endif if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4) damage = LvlDamage4 ;Trace("damage threshold =") ;Trace("4") endif if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5) damage = LvlDamage5 ;Trace("damage threshold =") ;Trace("5") endif if (damageLevel > LvlThreshold5) damage = LvlDamage6 ;Trace("damage threshold =") ;Trace("6") endif ;Trace("damage =") ;Trace(damage) PhysicsTrapHit hitbase hitbase = (self as objectReference) as PhysicsTrapHit hitBase.damage = damage EndFunction ;---------------------------------- float initialDelay = 0.2 Function fireTrap() ; debug.Trace(self + ": is running FireTrap") goToState("Done") ;hitBase.goToState("CanHit") ResolveLeveledDamage() SetMotionType(1) if WindupSound WindupSound.play( self as ObjectReference) ;play windup sound endif wait( initialDelay ) ;wait for windup ApplyHavokImpulse(0.0, 0.0, -1.0, 15.0) endFunction state Done Event OnLoad() endEvent endState Event OnLoad() ; debug.Trace(self + ": is running onCellAttach") SetMotionType(4) ResolveLeveledDamage() ;hitbase = (self as objectReference) as PhysicsTrapHit EndEvent ; Event OnUnLoad() ; if doOnce == 0 ; SetMotionType(1) ; endif ; EndEvent Event onReset() self.reset() goToState("Idle") ;SetMotionType(4) - USKP 2.0.1: Redundant. Throws errors and the OnLoad should be handling it anyway as it requires 3D to be loaded. endEvent Event onCellLoad() ; debug.Trace(self + ": has called onCellLoad") endEvent