scriptName TrapOilPool extends TrapExplosiveGas ; ; ;============================================== ; form fireHazard ;objectReference myHazardRef float property burnDuration = 30.0 auto {duration that the pool burns for} string oilAnim = "stopeffect" string oilDisappearEvent ="end" objectReference myLinkedRef bool lightIsOn = False bool property lightStaysOn = False auto {if set to 'TRUE' the enabled linked ref will not get disabled when the oil pool is destroyed} ;used to track if we have turned on our linkedRef light yet bool property deleteSelfAfterIgnition = True auto {whether or not the oil pool is used up after burning default == true} ;bool hazardAssigned = False explosion property OilExplosion auto ;hidden bool property weaponResolved = false auto hidden int Property TrapLevel = 1 auto {Used to determine the difficulty of the trap, currently only tied to damage 0 = Easy 1 = Medium (DEFAULT) 2 = Hard 3 = VeryHard} ; event onLoad() ; fireHazard = game.getForm(0X0005A1A3) ; hazardAssigned = True ; endEvent ;/ event onCellAttach() if !weaponResolved ResolveLeveledExplosion() endif endEvent /; Function gasExplode(objectReference causeActor) ;if (causeActor as actor) self.setActorCause(causeActor as actor) ;endif goToState("DoNothing") ;if hazardAssigned == False ; AssignHazard() ;endif ;myHazardRef = PlaceAtMe(fireHazard, 1) (self as objectReference).damageObject(5.0) myLinkedRef = getLinkedRef() if myLinkedRef && !lightIsOn lightIsOn = True myLinkedRef.enable() endif endFunction state doNothing event onHit(objectReference akAggressor, form akWeapon, projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) endEvent event OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect) endEvent event onTriggerEnter(objectReference triggerRef) endEvent endState ; function AssignHazard() ; fireHazard = game.getForm(0X0005A1A3) ; hazardAssigned = True ; endFunction event OnDestructionStageChanged(int aiOldStage, int aiCurrentStage) myLinkedRef = getLinkedRef() ;if !weaponResolved ; ResolveLeveledExplosion() ;endif if aiCurrentStage == 2 placeAtMe(OilExplosion) endif if aiCurrentStage < 3 && !lightIsOn && myLinkedRef lightIsOn = True myLinkedRef.enable() endif ; debug.Trace(self + " has received destruction event #" + aiCurrentStage) if aiCurrentStage == 3 if deleteSelfAfterIgnition playanimationandwait(oilAnim, oilDisappearEvent) endif if !lightStaysOn && myLinkedRef myLinkedRef.disable() endif if deleteSelfAfterIgnition self.Disable() else self.reset() self.clearDestruction() goToState("Waiting") endif endif endEvent ;/ ;================================================================ int property LvlThreshold1 auto int property LvlThreshold2 auto int property LvlThreshold3 auto int property LvlThreshold4 auto int property LvlThreshold5 auto Explosion property TrapOilExplosion01 auto Explosion property TrapOilExplosion02 auto Explosion property TrapOilExplosion03 auto Explosion property TrapOilExplosion04 auto Explosion property TrapOilExplosion05 auto Explosion property TrapOilExplosion06 auto Function ResolveLeveledExplosion () ;Trace("ResolveLeveledWeapon") int damageLevel damageLevel = CalculateEncounterLevel(TrapLevel) ; weapon lvlWeaponM = LvlWeaponM1 ; weapon lvlWeaponL = LvlWeaponL1 ; weapon lvlWeaponR = LvlWeaponR1 explosion LvlExplosion = TrapOilExplosion01 if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2) ; lvlWeaponM = LvlWeaponM2 ; lvlWeaponL = LvlWeaponL2 ; lvlWeaponR = LvlWeaponR2 LvlExplosion = TrapOilExplosion02 ;Trace("damage threshold =") ;Trace("2") endif if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3) ;lvlWeaponM = LvlWeapon3 LvlExplosion = TrapOilExplosion03 ;Trace("damage threshold =") ;Trace("3") endif if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4) ;lvlWeaponM = LvlWeapon4 LvlExplosion = TrapOilExplosion04 ;Trace("damage threshold =") ;Trace("4") endif if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5) ;lvlWeaponM = LvlWeapon5 LvlExplosion = TrapOilExplosion05 ;Trace("damage threshold =") ;Trace("5") endif if (damageLevel > LvlThreshold5) ;lvlWeaponM = LvlWeapon6 LvlExplosion = TrapOilExplosion06 ;Trace("damage threshold =") ;Trace("6") endif ; ballistaWeaponM = lvlWeaponM ; ballistaWeaponL = lvlWeaponL ; ballistaWeaponR = lvlWeaponR OilExplosion = LvlExplosion weaponResolved = True EndFunction /;