enderalse/source/scripts/_00e_a2_eldritchbloodsc.psc
Eddoursul 6f96053d76 Entropic Blood fixes:
- Controlled actor no longer remains hostile to player.
- Fixed floating in the air after save reload or player's death, occurred during victim selection or ghostwalking.
- Unmarking attacking actor unmarks its target as well.
2024-07-30 17:35:20 +02:00

248 lines
7.4 KiB
Plaintext

Scriptname _00E_A2_EldritchBloodSC extends activemagiceffect
Import _00E_TalentLibrary
Import Utility
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
if akSource == _00E_A2_SkyfallBoltSP
if (Victim.GetActorValue("Health") - _00E_A2_SkyfallBoltSP.GetNthEffectMagnitude(0)) <= - 10
bSynergySkyfallExplosion = True
EndIf
EndIf
EndEvent
Event OnEffectStart(Actor akTarget, Actor akCaster)
Actor PlayerRef = Game.GetForm(0x14) as Actor
TalentLevel = GetPlayerTalentLevel(_00E_Class_LifeAndDeath_P09b_Talent_EldritchBlood, _00E_Class_LifeAndDeath_P09b_Talent_EldritchBlood2, _00E_Class_LifeAndDeath_P09b_Talent_EldritchBlood3)
Game.ShowFirstPersonGeometry()
Victim = akTarget
A2_EldritchBlood_Victim.ForceRefTo(Victim)
_00E_A2_EldritchBloodParticelAttachVFX.Play(Victim)
; Strip Victim off all its factions
VictimFactions = Victim.GetFactions(-128, 127)
VictimFactionRanks = CreateIntArray(VictimFactions.Length)
Int i = 0
While i < VictimFactions.Length
If VoiceFactions.HasForm(VictimFactions[i]) ; Skip voice factions
VictimFactions[i] = None
Else
VictimFactionRanks[i] = Victim.GetFactionRank(VictimFactions[i])
Victim.RemoveFromFaction(VictimFactions[i])
EndIf
i += 1
EndWhile
Victim.AddToFaction(PlayerAlliesFaction)
Victim.AddToFaction(EPFaction)
Victim.SetRelationshipRank(PlayerRef, 3)
Victim.SetActorValue("Confidence", 4)
Victim.SetActorValue("Aggression", 2)
AdjustAndAddFrenzyPerk(Victim)
Victim.StopCombat()
If A2_EldritchBlood_VictimTarget.GetActorReference()
A2_EldritchBlood_Victim.GetActorReference().StartCombat(A2_EldritchBlood_VictimTarget.GetActorReference())
ElseIf PlayerREF.GetCombatTarget()
A2_EldritchBlood_Victim.GetActorReference().StartCombat(PlayerREF.GetCombatTarget())
EndIf
EndEvent
Event OnEffectFinish(Actor akTarget, Actor akCaster)
_00E_A2_EldritchBloodMarkedFXS.Stop(Victim)
Victim.RemovePerk(iPerk)
A2_EldritchBlood_Victim.Clear()
A2_EldritchBlood_VictimTarget.Clear()
_00E_A2_EldritchBloodParticelAttachVFX.Stop(Victim)
; Restore old factions of Victim
Victim.RemoveFromFaction(PlayerAlliesFaction)
Victim.RemoveFromFaction(EPFaction)
Int i = 0
While i < VictimFactions.Length
If VictimFactions[i]
Victim.AddToFaction(VictimFactions[i])
If VictimFactionRanks[i] != 0
Victim.SetFactionRank(VictimFactions[i], VictimFactionRanks[i])
EndIf
EndIf
i += 1
EndWhile
Victim.EvaluatePackage()
EndEvent
Event OnDying(Actor akKiller)
Explode()
Self.Dispel()
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function AdjustAndAddFrenzyPerk(Actor Victim)
float iDamageMultiplicator = _00E_A2_EldritchBloodSP.GetNthEffectMagnitude(TalentLevel + 2)
If TalentLevel == 1
iPerk = _00E_A2_EldritchBloodPerk01
Elseif TalentLevel == 2
iPerk = _00E_A2_EldritchBloodPerk02
Elseif TalentLevel == 3
iPerk == _00E_A2_EldritchBloodPerk03
EndIf
iPerk.SetNthEntryValue(1, 1, iDamageMultiplicator)
iPerk.SetNthEntryValue(2, 1, iDamageMultiplicator)
Victim.AddPerk(iPerk)
EndFunction
Function Explode()
If TalentLevel == 1
iPerk = _00E_A2_EldritchBloodPerk01
Elseif TalentLevel == 2
iPerk = _00E_A2_EldritchBloodPerk02
Elseif TalentLevel == 3
iPerk == _00E_A2_EldritchBloodPerk03
EndIf
Victim.SetCriticalStage(Victim.CritStage_DisintegrateStart)
If bSynergySkyfallExplosion
AtronachUnsummonDeathFXS.Play(Victim)
Else
_00E_A1_DevourSoul_DisintegrateFXS.Play(Victim)
EndIf
Wait(1.5)
Game.ShakeCamera(afStrength = 1.0)
ObjectReference EXPMarker = Victim.PlaceAtMe(XMarker, 1)
EXPMarker.MoveTo(Victim, 0.0, 0.0, 50.0)
If bSynergySkyfallExplosion
bSynergySkyfallExplosion = False
If TalentLevel == 1
EXPMarker.PlaceAtMe(_00E_MAGEldritchShockExplosion, 1)
Elseif TalentLevel == 2
EXPMarker.PlaceAtMe(_00E_MAGEldritchShockExplosion02, 1)
Elseif TalentLevel == 3
EXPMarker.PlaceAtMe(_00E_MAGEldritchShockExplosion03, 1)
EndIf
_00E_A2_SynergyEldritchBloodSkyfallDMGEnch.SetNthEffectMagnitude(0, (_00E_A2_EldritchBloodEnchantment.GetNthEffectMagnitude(0)*1.5))
_00E_MQ16_EchoScreamsM.Play(Victim)
EXPMarker.PlaceAtMe(_00E_A2_SynergyEldritchBloodSkyfallExp, 1)
Victim.AttachAshPile(_00E_NPCOorbayaAshPile)
Victim.KnockAreaEffect(0.5, 256)
If _00E_Synergy_EldritchBloodSkyfall.GetValueInt() == 0
_00E_Synergy_EldritchBloodSkyfall.SetValueInt(1)
_00E_PlayerFunctions.GetSkillControl().ShowSynergyMessage()
EndIf
Else
If TalentLevel == 1
EXPMarker.PlaceAtMe(_00E_MAGEldritchShockExplosion, 1)
Elseif TalentLevel == 2
EXPMarker.PlaceAtMe(_00E_MAGEldritchShockExplosion02, 1)
Elseif TalentLevel == 3
EXPMarker.PlaceAtMe(_00E_MAGEldritchShockExplosion03, 1)
EndIf
EXPMarker.PlaceAtMe(_00E_FS_MAGGoreExplosion, 1)
_00E_A2_ShatterSoulExpIMOD.Apply()
Victim.AttachAshPile(_00E_EldritchPile)
EndIf
ObjectReference VictimREF = Victim as ObjectReference
(VictimREF as _00E_EPOnDeath).HasBlameSpell = true
Victim.SetAlpha(0.0, true)
Victim.RemovePerk(iPerk)
Victim.Kill(Victim)
Victim.SetCriticalStage(Victim.CritStage_DisintegrateEnd)
EXPMarker.Delete()
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
Faction[] VictimFactions
Int[] VictimFactionRanks
FormList Property VoiceFactions Auto
Faction Property PlayerAlliesFaction Auto
Faction Property EPFaction Auto
int TalentLevel
bool bSynergySkyfallExplosion
Actor Victim
Perk iPerk
Perk Property _00E_A2_EldritchBloodPerk01 Auto
Perk Property _00E_A2_EldritchBloodPerk02 Auto
Perk Property _00E_A2_EldritchBloodPerk03 Auto
Sound Property _00E_MQ16_EchoScreamsM Auto
Enchantment Property _00E_A2_EldritchBloodEnchantment Auto
Enchantment Property _00E_A2_SynergyEldritchBloodSkyfallDMGEnch Auto
Perk Property _00E_Class_LifeAndDeath_P09b_Talent_EldritchBlood Auto
Perk Property _00E_Class_LifeAndDeath_P09b_Talent_EldritchBlood2 Auto
Perk Property _00E_Class_LifeAndDeath_P09b_Talent_EldritchBlood3 Auto
Static Property XMarker Auto
Activator Property _00E_EldritchPile Auto
Activator Property _00E_NPCOorbayaAshPile Auto
VisualEffect Property _00E_A2_EldritchBloodParticelAttachVFX Auto
Spell Property _00E_A2_EldritchBloodSP Auto
Spell Property _00E_A2_SkyfallBoltSP Auto
GlobalVariable Property _00E_Synergy_EldritchBloodSkyfall Auto
EffectShader Property _00E_A1_DevourSoul_DisintegrateFXS Auto
EffectShader Property _00E_A2_EldritchBloodMarkedFXS Auto
EffectShader Property AtronachUnsummonDeathFXS Auto
ImageSpaceModifier Property _00E_A2_ShatterSoulExpIMOD Auto
ReferenceAlias Property A2_EldritchBlood_Victim Auto
ReferenceAlias Property A2_EldritchBlood_VictimTarget Auto
Explosion Property _00E_MAGEldritchShockExplosion Auto
Explosion Property _00E_MAGEldritchShockExplosion02 Auto
Explosion Property _00E_MAGEldritchShockExplosion03 Auto
Explosion Property _00E_A2_SynergyEldritchBloodSkyfallExp Auto
Explosion Property _00E_FS_MAGGoreExplosion Auto