enderalse/source/scripts/_00e_explosivebarrelsscript.psc

98 lines
2.8 KiB
Plaintext

Scriptname _00E_ExplosiveBarrelsScript extends ObjectReference
Import Math
Import Utility
; This script is used to control the behaviour of gunpowder-barrels.
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
bool bExplode = (akProjectile && _00E_ExplosiveBarrel_ValidProjectiles.HasForm(akProjectile)) || (akSource && _00E_ExplosiveBarrel_ValidSources.HasForm(akSource))
if ! bExplode
Actor aggressor = akAggressor as Actor
if aggressor
if _00E_A1_FireArrowAmm == None
_00E_A1_FireArrowAmm = Game.GetForm(0x670EC) as Ammo
endif
if _00E_A1_FireArrowME == None
_00E_A1_FireArrowME = Game.GetForm(0x5BD36) as MagicEffect
endif
if aggressor.IsEquipped(_00E_A1_FireArrowAmm) || ( aggressor.HasMagicEffect(_00E_A1_FireArrowME) && aggressor.GetItemCount(_00E_A1_FireArrowAmm) == 0 )
bExplode = true
endif
endif
endif
If bExplode
If bExploded == False
bExploded = True
If ExplosionMarkerRef == None
ExplosionMarkerRef = Self.PlaceAtMe(XMarker)
EndIf
Self.DamageObject(100) ; Damage the object to trigger the OnDestructionStageChanged events
RegisterForSingleUpdate(30.0)
EndIf
EndIf
EndEvent
Event OnDestructionStageChanged(Int aiOldStage, Int aiCurrentStage)
if aiCurrentStage == 1
UnregisterForUpdate()
Game.ShakeCamera(afStrength = 0.4)
; Place VFX and explosion
If ExplosionMarkerRef
ExplosionMarkerRef.PlaceAtMe(_00E_ExplosiveBarrelEXP_Damage)
Else
Self.PlaceAtMe(_00E_ExplosiveBarrelEXP_Damage)
EndIf
Wait(0.1)
If ExplosionMarkerRef
ExplosionMarkerRef.PlaceAtMe(_00E_ExplosiveBarrelEXP_VFX)
Else
Self.PlaceAtMe(_00E_ExplosiveBarrelEXP_VFX)
EndIf
DeleteExplosionMarker()
EndIf
EndEvent
Event OnUpdate()
; Failsafe cleanup
DeleteExplosionMarker()
EndEvent
Function DeleteExplosionMarker()
If ExplosionMarkerRef
ExplosionMarkerRef.Disable()
ExplosionMarkerRef.Delete()
ExplosionMarkerRef = None
EndIf
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
Explosion Property _00E_ExplosiveBarrelEXP_VFX Auto
Explosion Property _00E_ExplosiveBarrelEXP_Damage Auto
Formlist Property _00E_ExplosiveBarrel_ValidSources Auto
Formlist Property _00E_ExplosiveBarrel_ValidProjectiles Auto
Static Property XMarker Auto
Bool bExploded = False
ObjectReference ExplosionMarkerRef
MagicEffect Property _00E_A1_FireArrowME Auto
Ammo Property _00E_A1_FireArrowAmm Auto