179 lines
6.2 KiB
Plaintext
179 lines
6.2 KiB
Plaintext
|
scriptName TrapExplosiveGas extends objectReference
|
||
|
;
|
||
|
;
|
||
|
;==================================================
|
||
|
|
||
|
formlist property flExplodesGasTrapOnHit auto
|
||
|
{projectiles that will set this off when they hit}
|
||
|
|
||
|
formlist property flExplodesGasTrapOnEnter auto
|
||
|
{objects that will set this off when they enter}
|
||
|
|
||
|
formlist property flExplodesGasTrapOnMagicEffectApply auto
|
||
|
{magicEffects that will set this off when applied}
|
||
|
|
||
|
formlist property flExplodesGasTrapEquippedSpell auto
|
||
|
{Spells that will set this off if equipped and drawn}
|
||
|
|
||
|
formlist property trapGasWeapon auto
|
||
|
{weapons that will set this off on hit, specifically explosions}
|
||
|
|
||
|
bool actorHasWeaponsDrawn = TRUE ;remove this later
|
||
|
bool property checkActorEquippedItems = TRUE auto
|
||
|
{Whether or not to check items the player is carrying
|
||
|
default = True on explosive gas
|
||
|
set to off on oil pool}
|
||
|
bool property checkActorMagic = TRUE auto
|
||
|
{check the actors drawn magic
|
||
|
default = true on explosive gas
|
||
|
set to off on oil pool}
|
||
|
|
||
|
keyword property flameKeyword Auto
|
||
|
keyword property lightningKeyword auto
|
||
|
bool property lightningIgnites = FALSE Auto
|
||
|
{if this is true lightning should ignite this trap
|
||
|
default == false}
|
||
|
|
||
|
light property Torch01 auto
|
||
|
projectile property storedProjectile auto hidden
|
||
|
objectReference property storedObjRef auto hidden
|
||
|
MagicEffect property storedEffect1 auto hidden
|
||
|
MagicEffect property storedEffect2 auto hidden
|
||
|
MagicEffect property storedEffect3 auto hidden
|
||
|
MagicEffect property storedEffect4 auto hidden
|
||
|
int property storedEffectIncrement = 1 auto hidden
|
||
|
|
||
|
auto state waiting
|
||
|
;Start of the new script
|
||
|
event onHit(objectReference akAggressor, form akWeapon, projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
|
||
|
if !akProjectile || akProjectile != storedProjectile
|
||
|
storedProjectile = akProjectile
|
||
|
; debug.Trace(self + " is testing " + akProjectile + " due to onHit, akWeapon = " + akWeapon)
|
||
|
|
||
|
;USKP 1.3.2 added NONE checks due to numerous Papyrus errors.
|
||
|
If( (trapGasWeapon != NONE && trapGasWeapon.hasForm(akWeapon)) || akweapon == torch01 )
|
||
|
; debug.Trace(self + " is exploding due to " + akWeapon + " being in formlist " + TrapGasWeapon)
|
||
|
GasExplode(akAggressor)
|
||
|
ElseIf( flExplodesGasTrapOnHit != NONE && flExplodesGasTrapOnHit.hasForm(akProjectile) )
|
||
|
; debug.Trace(self + " is exploding due to " + akProjectile)
|
||
|
GasExplode(akAggressor)
|
||
|
ElseIf akWeapon.HasKeyword(flameKeyword)
|
||
|
; debug.Trace(self + " is exploding due to " + akWeapon + " - hasKeyword")
|
||
|
GasExplode(akAggressor)
|
||
|
endif
|
||
|
endif
|
||
|
endEvent
|
||
|
|
||
|
event OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)
|
||
|
if akEffect == storedEffect1 || akEffect == storedEffect2 || akEffect == storedEffect3 || akEffect == storedEffect4
|
||
|
;if the effect == any of the stored effects do nothing
|
||
|
else
|
||
|
if storedEffectIncrement == 1
|
||
|
storedEffect1 = akEffect
|
||
|
storedEffectIncrement = 2
|
||
|
elseif storedEffectIncrement == 2
|
||
|
storedEffect2 = akEffect
|
||
|
storedEffectIncrement = 3
|
||
|
elseif storedEffectIncrement == 3
|
||
|
storedEffect3 = akEffect
|
||
|
storedEffectIncrement = 4
|
||
|
else
|
||
|
storedEffect4 = akEffect
|
||
|
storedEffectIncrement = 1
|
||
|
endif
|
||
|
; debug.Trace(self + " is testing " + akEffect + " due to onMagicEffectApply")
|
||
|
if flExplodesGasTrapOnMagicEffectApply.hasForm(akEffect as form)
|
||
|
; debug.Trace(self + " is exploding due to " + akEffect)
|
||
|
GasExplode(akCaster)
|
||
|
elseif akEffect.hasKeyword(flameKeyword)
|
||
|
; debug.Trace(self + " is exploding due to " + akEffect)
|
||
|
GasExplode(akCaster)
|
||
|
elseif lightningIgnites && akEffect.hasKeyword(lightningKeyword)
|
||
|
; debug.Trace(self + " is exploding due to " + akEffect)
|
||
|
GasExplode(akCaster)
|
||
|
endif
|
||
|
endif
|
||
|
endEvent
|
||
|
|
||
|
|
||
|
event onTriggerEnter(objectReference triggerRef)
|
||
|
if (triggerRef as Actor) || !storedObjRef || storedObjRef.getBaseObject() != triggerRef.getBaseObject()
|
||
|
if !(triggerRef as Actor)
|
||
|
storedObjRef = triggerRef
|
||
|
endIf
|
||
|
; debug.Trace(self + " is testing " + triggerRef + " due to onTriggerEnter")
|
||
|
if flExplodesGasTrapOnEnter.hasForm(triggerRef.GetBaseObject())
|
||
|
; debug.Trace(self + " is exploding due to " + triggerRef)
|
||
|
GasExplode(triggerRef)
|
||
|
; Checking to see if the entering ref is an actor
|
||
|
elseif (triggerRef as Actor)
|
||
|
;check actor equipped items if necessary
|
||
|
if checkActorEquippedItems
|
||
|
checkActorWeapons(triggerRef as actor)
|
||
|
elseif checkActorMagic
|
||
|
If (triggerRef as actor).hasMagicEffectWithKeyword(flameKeyword)
|
||
|
; debug.Trace(self + " is exploding due to " + triggerRef + " having flame effect")
|
||
|
GasExplode(triggerRef)
|
||
|
ElseIf lightningIgnites
|
||
|
if (triggerRef as actor).hasMagicEffectWithKeyword(lightningKeyword)
|
||
|
; debug.Trace(self + " is exploding due to " + triggerRef + " having lightning effect")
|
||
|
GasExplode(triggerRef)
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
endif
|
||
|
endif
|
||
|
endif
|
||
|
endEvent
|
||
|
|
||
|
|
||
|
|
||
|
EndState
|
||
|
|
||
|
function GasExplode(objectReference causeActor)
|
||
|
;if (causeActor as actor)
|
||
|
self.setActorCause(causeActor as actor)
|
||
|
;endif
|
||
|
; debug.Trace(self + " has exploded")
|
||
|
self.damageObject(5)
|
||
|
endFunction
|
||
|
|
||
|
function checkActorWeapons(actor triggerActor)
|
||
|
; Checking if Torch is equipped
|
||
|
if triggerActor.GetEquippedItemType(0) == 11 || triggerActor.GetEquippedItemType(1) == 11
|
||
|
GasExplode(triggerActor)
|
||
|
; Checking if the player has weapons drawn
|
||
|
ElseIf triggerActor.IsWeaponDrawn() ;This should be a function check later
|
||
|
;if the player has a flamable spell equiped and drawn
|
||
|
; debug.Trace(self + " is testing " + (triggerActor).GetEquippedSpell(0) + " due to onTriggerEnter")
|
||
|
; debug.Trace(self + " is testing " + (triggerActor).GetEquippedSpell(1) + " due to onTriggerEnter")
|
||
|
;USKP 2.0.1 - Make sure they have something equipped before checking it.
|
||
|
if triggerActor.GetEquippedSpell(0) && triggerActor.GetEquippedSpell(0).hasKeyword(flameKeyword) ;check left hand
|
||
|
GasExplode(triggerActor)
|
||
|
elseif triggerActor.GetEquippedSpell(1) && flExplodesGasTrapEquippedSpell.hasForm(triggerActor.GetEquippedSpell(1) as form) ;check right hand
|
||
|
GasExplode(triggerActor)
|
||
|
endif
|
||
|
endif
|
||
|
endFunction
|
||
|
|
||
|
event onReset()
|
||
|
self.reset()
|
||
|
self.clearDestruction()
|
||
|
goToState("waiting")
|
||
|
endEvent
|
||
|
|
||
|
|
||
|
event OnDestructionStageChanged(int aiOldStage, int aiCurrentStage)
|
||
|
; debug.Trace(self + " has received destruction event #" + aiCurrentStage)
|
||
|
endEvent
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|