207 lines
5.3 KiB
Plaintext
207 lines
5.3 KiB
Plaintext
Scriptname _00E_NQ_G_07_PetrifiedCombatSC extends ReferenceAlias
|
|
|
|
Import Math
|
|
|
|
;=====================================================================================
|
|
; EVENTS
|
|
;=====================================================================================
|
|
|
|
Event OnInit()
|
|
|
|
akSelf = Self.GetActorReference()
|
|
|
|
fOriginalStrength = __Config_fShieldStrength
|
|
|
|
EndEvent
|
|
|
|
Event OnDying(Actor akKiller)
|
|
|
|
If __Config_fShieldStrength > 0
|
|
StopProtectiveBarrier()
|
|
EndIf
|
|
|
|
EndEvent
|
|
|
|
Event OnEnterBleedout()
|
|
|
|
If (bIsDevra && !bDevraProtected) || (!bIsDevra && !bAlyxProtected)
|
|
SpawnShield()
|
|
EndIf
|
|
|
|
EndEvent
|
|
|
|
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
|
|
|
|
If akAggressor == PlayerREF && !akSelf.IsDead() && akSelf.IsBleedingOut()
|
|
If _00E_NQ_G_07_PetrifiedProtected.GetValueInt() == 1
|
|
_00E_NQG07_s_PetrifiedCombatAttackHasNoEffect.Show()
|
|
MAGFail.Play(akSelf)
|
|
Else
|
|
DamageShield(akSource)
|
|
MAGShockImpact.Play(akSelf)
|
|
If !bIsFlickering
|
|
Flicker()
|
|
EndIf
|
|
Endif
|
|
EndIf
|
|
|
|
EndEvent
|
|
|
|
Event OnUpdate()
|
|
|
|
If __Config_fShieldStrength > 0
|
|
|
|
akSelf.RestoreActorValue("Health", akSelf.GetBaseActorValue("Health"))
|
|
StopProtectiveBarrier()
|
|
|
|
EndIf
|
|
|
|
EndEvent
|
|
|
|
;=====================================================================================
|
|
; FUNCTIONS
|
|
;=====================================================================================
|
|
|
|
Function SpawnShield()
|
|
|
|
_00E_A2_GhostwalkTeleportVFX.Play(akSelf)
|
|
AzuraEvil.Play(akSelf)
|
|
akSelf.SetAlpha(0.75)
|
|
|
|
If bIsDevra
|
|
If !(_00E_NQ_G_07_AlyxREF.IsBleedingOut()) && !(_00E_NQ_G_07_AlyxREF.IsDead())
|
|
NightingaleStrifeAbsorbTargetVFX.Play(_00E_NQ_G_07_AlyxREF, akFacingObject = _00E_NQ_G_07_DevraREF)
|
|
bDevraProtected = True
|
|
_00E_NQ_G_07_PetrifiedProtected.SetValueInt(1)
|
|
EndIf
|
|
Else
|
|
If !(_00E_NQ_G_07_DevraREF.IsBleedingOut()) && !(_00E_NQ_G_07_DevraREF.IsDead())
|
|
NightingaleStrifeAbsorbTargetVFX.Play(_00E_NQ_G_07_DevraREF, akFacingObject = _00E_NQ_G_07_AlyxREF)
|
|
bAlyxProtected = True
|
|
_00E_NQ_G_07_PetrifiedProtected.SetValueInt(1)
|
|
EndIf
|
|
EndIf
|
|
|
|
If (_00E_NQ_G_07_DevraREF.IsBleedingOut() && _00E_NQ_G_07_AlyxREF.IsBleedingOut()) || (_00E_NQ_G_07_DevraREF.IsDead() || _00E_NQ_G_07_AlyxREF.IsDead())
|
|
_00E_NQ_G_07_PetrifiedProtected.SetValueInt(0)
|
|
EndIf
|
|
|
|
If !akSelf.IsDead()
|
|
RegisterForSingleUpdate(7)
|
|
EndIf
|
|
_00E_A2_GhostwalkTeleportVFX.Stop(akSelf)
|
|
|
|
EndFunction
|
|
|
|
Function StopProtectiveBarrier()
|
|
|
|
if bIsDevra
|
|
bDevraProtected = False
|
|
else
|
|
bAlyxProtected = False
|
|
endif
|
|
_00E_NQ_G_07_PetrifiedProtected.SetValueInt(1)
|
|
NQ_G_07_BarrierREF.PlayAnimation("PlayAnim01")
|
|
NQ_G_07_BarrierREF.Disable()
|
|
AzuraEvil.Stop(akSelf)
|
|
NightingaleStrifeAbsorbTargetVFX.Stop(akSelf)
|
|
akSelf.SetAlpha(1)
|
|
MAGRestorationFFFire.Play(akSelf)
|
|
|
|
If !akSelf.IsDead()
|
|
akSelf.StartCombat(PlayerREF)
|
|
EndIf
|
|
|
|
EndFunction
|
|
|
|
Function Flicker()
|
|
|
|
bIsFlickering = true
|
|
MAGShockImpact.Play(akSelf)
|
|
akSelf.SetAlpha(0.3)
|
|
Utility.Wait(0.5)
|
|
akSelf.SetAlpha(0.7)
|
|
Utility.Wait(0.4)
|
|
akSelf.SetAlpha(0.5)
|
|
Utility.Wait(0.6)
|
|
akSelf.SetAlpha(0.75)
|
|
bIsFlickering = false
|
|
|
|
EndFunction
|
|
|
|
Function DamageShield(Form akDamageSource)
|
|
|
|
__Config_fShieldStrength = __Config_fShieldStrength - GetDealtDamage(akDamageSource)
|
|
|
|
If (__Config_fShieldStrength > 0) && ((fOriginalStrength - fCurrentSubtrahend) >= __Config_fShieldStrength)
|
|
float fCurrentPercentage = ((__Config_fShieldStrength)/(fOriginalStrength/100))
|
|
_00E_NQG07_s_PetrifiedCombatPsionicShieldReduced.Show(fCurrentPercentage)
|
|
fCurrentSubtrahend += 40
|
|
ElseIf __Config_fShieldStrength <= 0
|
|
NQ_G_07.RemoveEssentialFlag(akSelf)
|
|
akSelf.Kill(PlayerREF)
|
|
UnregisterForUpdate()
|
|
EndIf
|
|
|
|
EndFunction
|
|
|
|
float Function GetDealtDamage(Form akDamageSource)
|
|
|
|
Weapon wpSourceWeapon = akDamageSource as Weapon
|
|
|
|
if wpSourceWeapon
|
|
if ! SKSE.GetVersion()
|
|
if PlayerREF.GetEquippedItemType(1) == 5 || PlayerREF.GetEquippedItemType(1) == 6
|
|
return 50.0
|
|
endif
|
|
return 40
|
|
endif
|
|
|
|
Return wpSourceWeapon.GetBaseDamage() as Float
|
|
Else
|
|
Return 25.0
|
|
EndIf
|
|
|
|
EndFunction
|
|
;=====================================================================================
|
|
; PROPERTIES
|
|
;=====================================================================================
|
|
|
|
int iMessageCounter
|
|
|
|
bool bDevraProtected
|
|
bool bAlyxProtected
|
|
|
|
bool Property bIsDevra Auto
|
|
bool bIsFlickering = false
|
|
|
|
float fOriginalStrength
|
|
float Property fCurrentSubtrahend = 0.0 Auto
|
|
|
|
float Property __Config_fShieldStrength = 200.0 Auto
|
|
float Property __Config_fHealthPercentage = 0.3 Auto
|
|
|
|
Message Property _00E_NQG07_s_PetrifiedCombatAttackHasNoEffect Auto
|
|
Message Property _00E_NQG07_s_PetrifiedCombatPsionicShieldReduced Auto
|
|
|
|
; ADDED IN FORGOTTEN STORIES
|
|
ObjectReference Property NQ_G_07_BarrierREF Auto
|
|
|
|
Actor akSelf
|
|
|
|
Sound Property MAGFail Auto
|
|
Sound Property MAGShockImpact Auto
|
|
Sound Property MAGRestorationFFFire Auto
|
|
|
|
Actor Property _00E_NQ_G_07_AlyxREF Auto
|
|
Actor Property _00E_NQ_G_07_DevraREF Auto
|
|
Actor Property PlayerREF Auto
|
|
|
|
EffectShader Property AzuraEvil Auto
|
|
|
|
VisualEffect Property NightingaleStrifeAbsorbTargetVFX Auto
|
|
VisualEffect Property _00E_A2_GhostwalkTeleportVFX Auto
|
|
|
|
GlobalVariable Property _00E_NQ_G_07_PetrifiedProtected Auto
|
|
|
|
_00E_NQ_G_07_Functions Property NQ_G_07 Auto |