diff --git a/scripts/_00e_a2_eldritchbloodplayermarksc.pex b/scripts/_00e_a2_eldritchbloodplayermarksc.pex index 52298071..d09c09a7 100644 Binary files a/scripts/_00e_a2_eldritchbloodplayermarksc.pex and b/scripts/_00e_a2_eldritchbloodplayermarksc.pex differ diff --git a/scripts/_00e_a2_eldritchbloodplayersc.pex b/scripts/_00e_a2_eldritchbloodplayersc.pex index 7ac9514e..61c35280 100644 Binary files a/scripts/_00e_a2_eldritchbloodplayersc.pex and b/scripts/_00e_a2_eldritchbloodplayersc.pex differ diff --git a/scripts/_00e_a2_eldritchbloodsc.pex b/scripts/_00e_a2_eldritchbloodsc.pex index fb7f8fc8..4377b236 100644 Binary files a/scripts/_00e_a2_eldritchbloodsc.pex and b/scripts/_00e_a2_eldritchbloodsc.pex differ diff --git a/scripts/_00e_playerfunctions.pex b/scripts/_00e_playerfunctions.pex index 6bca25ae..34909214 100644 Binary files a/scripts/_00e_playerfunctions.pex and b/scripts/_00e_playerfunctions.pex differ diff --git a/scripts/_00e_slowselfmesc.pex b/scripts/_00e_slowselfmesc.pex index 062cf8dd..63d80796 100644 Binary files a/scripts/_00e_slowselfmesc.pex and b/scripts/_00e_slowselfmesc.pex differ diff --git a/source/scripts/_00e_a2_eldritchbloodplayermarksc.psc b/source/scripts/_00e_a2_eldritchbloodplayermarksc.psc index a010ad99..fcb50ad8 100644 --- a/source/scripts/_00e_a2_eldritchbloodplayermarksc.psc +++ b/source/scripts/_00e_a2_eldritchbloodplayermarksc.psc @@ -16,11 +16,14 @@ Event OnCrosshairRefChange(ObjectReference ref) lastTarget.blockActivation(false) EndIf lastTarget = ref - ref.blockActivation(true) - + + if ref + ref.blockActivation(true) + endif + If _00E_A2_EldritchBloodGlobal.GetValueInt() == 1 - If Ref.GetSelfAsActor() && Ref != Game.GetPlayer() - EldritchBloodEffectScript.SelectEnemy(Ref as Actor) + If ref as Actor && ref != Game.GetForm(0x14) + EldritchBloodEffectScript.SelectEnemy(ref as Actor) EndIf Else UnregisterForCrosshairRef() @@ -86,7 +89,6 @@ Function EnterMarkingMode(Float iReach, _00E_A2_EldritchBloodPlayerSC _00E_A2_El akSelfRef = Self.GetActorReference() RegisterForAnimationEvent(akSelfRef, "weaponSwing") - Game.DisablePlayerControls(false, false, false, false, false, false, false, false) fActivatePickLengthBefore = GetINIFloat("fActivatePickLength:Interface") SetINIFloat("fActivatePickLength:Interface", iReach) EldritchBloodEffectScript = _00E_A2_EldritchBloodMEScript @@ -103,7 +105,6 @@ Function ExitMarkingMode() iAttackCounter = 0 UnregisterForAnimationEvent(akSelfRef, "weaponSwing") - Game.EnablePlayerControls() UnregisterForCrosshairRef() SetINIFloat("fActivatePickLength:Interface", 150) diff --git a/source/scripts/_00e_a2_eldritchbloodplayersc.psc b/source/scripts/_00e_a2_eldritchbloodplayersc.psc index e418b251..100948fa 100644 --- a/source/scripts/_00e_a2_eldritchbloodplayersc.psc +++ b/source/scripts/_00e_a2_eldritchbloodplayersc.psc @@ -88,15 +88,25 @@ State AddEffect Event OnBeginState() A2_EldritchBlood_Victim.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) - A2_EldritchBlood_VictimTarget.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) + + if A2_EldritchBlood_VictimTarget.GetActorReference() + A2_EldritchBlood_VictimTarget.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) + endif + PlayerREF.RemoveSpell(_00E_A2_EldritchBloodAbSelectionSP) A2_EldritchBlood_PlayerForScript.ExitMarkingMode() _00E_A2_EldritchBloodSelectionHoldIMOD.Remove() - Sound.StopInstance(MarkingLP) QSTDA16SoulGemOffM.Play(PlayerREF) A2_EldritchBlood_Player.Clear() - A2_EldritchBlood_Rune.GetReference().Delete() - A2_EldritchBlood_VictimRune.GetReference().Delete() + + if A2_EldritchBlood_Rune.GetReference() + A2_EldritchBlood_Rune.GetReference().Delete() + endif + + if A2_EldritchBlood_VictimRune.GetReference() + A2_EldritchBlood_VictimRune.GetReference().Delete() + endif + A2_EldritchBlood_Rune.Clear() A2_EldritchBlood_VictimRune.Clear() @@ -108,10 +118,10 @@ Event OnBeginState() MarkingVictimRuneREF.Delete() EndIf - AddFrenzySpell() _00E_A2_EldritchBloodGlobal.SetValueInt(0) + Sound.StopInstance(MarkingLP) EndEvent @@ -125,38 +135,54 @@ Function AddFrenzySpell() float iExpDamage = _00E_A2_EldritchBloodSP.GetNthEffectMagnitude(iIndex - 1) _00E_A2_EldritchBloodEnchantment.SetNthEffectMagnitude(0, iExpDamage) - _00E_A2_EldritchBloodMarkedVictimFXS.Stop(A2_EldritchBlood_VictimTarget.GetActorReference()) + + if A2_EldritchBlood_VictimTarget.GetActorReference() + _00E_A2_EldritchBloodMarkedVictimFXS.Stop(A2_EldritchBlood_VictimTarget.GetActorReference()) + endif + float iFrenzyDMGMult = _00E_A2_EldritchBloodSP.GetNthEffectMagnitude(iIndex + 2) Int iFrenzyDuration = _00E_A2_EldritchBloodSP.GetNthEffectDuration(iIndex + 2) as Int _00E_A2_EldritchBloodVictimSP.SetNthEffectMagnitude(0, iFrenzyDMGMult) _00E_A2_EldritchBloodVictimSP.SetNthEffectDuration(0, iFrenzyDuration) - - _00E_A2_EldritchBloodVictimSP.Cast(A2_EldritchBlood_Victim.GetReference(), A2_EldritchBlood_Victim.GetReference()) - If iFrezyAttackTargetMarked - A2_EldritchBlood_Victim.GetActorReference().StartCombat(A2_EldritchBlood_VictimTarget.GetActorReference()) - Else - A2_EldritchBlood_Victim.GetActorReference().StartCombat(PlayerREF.GetCombatTarget()) - EndIf + if A2_EldritchBlood_Victim.GetReference() + _00E_A2_EldritchBloodVictimSP.Cast(A2_EldritchBlood_Victim.GetReference(), A2_EldritchBlood_Victim.GetReference()) + endif EndFunction Function NotMarkedClearUp() - A2_EldritchBlood_Victim.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) - A2_EldritchBlood_VictimTarget.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) + if A2_EldritchBlood_Victim.GetActorReference() + A2_EldritchBlood_Victim.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) + endif + + if A2_EldritchBlood_VictimTarget.GetActorReference() + A2_EldritchBlood_VictimTarget.GetActorReference().RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) + _00E_A2_EldritchBloodMarkedVictimFXS.Stop(A2_EldritchBlood_VictimTarget.GetActorReference()) + endif + (PlayerREF as _00E_Game_TalentControlSC).SetTalentRecoveryTime(_00E_A2_EldritchBlood, 0) MAGFail.Play(PlayerREF) PlayerREF.RemoveSpell(_00E_A2_EldritchBloodAbSelectionSP) - A2_EldritchBlood_PlayerForScript.ExitMarkingMode() + + if A2_EldritchBlood_PlayerForScript + A2_EldritchBlood_PlayerForScript.ExitMarkingMode() + endif + _00E_A2_EldritchBloodSelectionHoldIMOD.Remove() - Sound.StopInstance(MarkingLP) QSTDA16SoulGemOffM.Play(PlayerREF) A2_EldritchBlood_Player.Clear() - A2_EldritchBlood_Rune.GetReference().Delete() - A2_EldritchBlood_VictimRune.GetReference().Delete() - _00E_A2_EldritchBloodMarkedVictimFXS.Stop(A2_EldritchBlood_VictimTarget.GetActorReference()) + + if A2_EldritchBlood_Rune.GetReference() + A2_EldritchBlood_Rune.GetReference().Delete() + endif + + if A2_EldritchBlood_VictimRune.GetReference() + A2_EldritchBlood_VictimRune.GetReference().Delete() + endif + A2_EldritchBlood_Rune.Clear() A2_EldritchBlood_VictimRune.Clear() A2_EldritchBlood_VictimTarget.Clear() @@ -170,31 +196,38 @@ Function NotMarkedClearUp() MarkingVictimRuneREF.Delete() EndIf - Wait(2) + if ! PlayerREF.IsDead() + Wait(2.0) + endif + _00E_A2_EldritchBloodGlobal.SetValueInt(0) + if MarkingLP + Sound.StopInstance(MarkingLP) + endif + EndFunction Function SelectEnemy(Actor iVictim) - If IsTargetValid(iVictim) - If !IsTargetMarked(iVictim) - If !iFrenzyTargetMarked - MarkFrenzyVictim(iVictim) - iFrenzyTargetMarked = True - Elseif !iFrezyAttackTargetMarked - MarkFrenzyTargetVictim(iVictim) - iFrezyAttackTargetMarked = True - Else - _00E_Levelsystem_sEnemyAlreadyMarked.Show() - MAGFail.Play(PlayerREF) - EndIf - Else - UnmarkEnemy(iVictim) - EndIf + If ! IsTargetValid(iVictim) + return + EndIf + + If !IsTargetMarked(iVictim) + If !iFrenzyTargetMarked + MarkFrenzyVictim(iVictim) + iFrenzyTargetMarked = True + Elseif !iFrezyAttackTargetMarked + MarkFrenzyTargetVictim(iVictim) + iFrezyAttackTargetMarked = True Else - Return + _00E_Levelsystem_sEnemyAlreadyMarked.Show() + MAGFail.Play(PlayerREF) EndIf + Else + UnmarkEnemy(iVictim) + EndIf EndFunction @@ -224,35 +257,39 @@ EndFunction Function UnmarkEnemy(Actor iVictim) - bool Cleared - If iVictim.HasSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) A2_EldritchBlood_Rune.Clear() A2_EldritchBlood_Victim.Clear() - MarkingRuneREF.Disable() iFrenzyTargetMarked = False _00E_Levelsystem_sEldritchBloodVictimMarkingRemoved.Show() iVictim.RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) _00E_A2_EldritchBloodMarkedFXS.Stop(iVictim) _00E_A2_GhostwalkDeselectM.Play(PlayerREF) - Cleared = True + MarkingRuneREF.Delete() + MarkingRuneREF = None + + ; Unmark attack target too + if A2_EldritchBlood_VictimTarget.GetActorReference() + UnmarkEnemy(A2_EldritchBlood_VictimTarget.GetActorReference()) + endif + Elseif iVictim.HasSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) A2_EldritchBlood_VictimRune.Clear() A2_EldritchBlood_VictimTarget.Clear() - MarkingVictimRuneREF.Disable() iFrezyAttackTargetMarked = False _00E_Levelsystem_sEldritchBloodAttackVictimMarkingRemoved.Show() iVictim.RemoveSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) _00E_A2_EldritchBloodMarkedVictimFXS.Stop(iVictim) _00E_A2_GhostwalkDeselectM.Play(PlayerREF) - Cleared = True + MarkingVictimRuneREF.Delete() + MarkingVictimRuneREF = None EndIf - + EndFunction bool Function IsTargetValid(Actor CheckVictim) - If CheckVictim.IsInFaction(PlayerAlliesFaction) + If CheckVictim.IsInFaction(PlayerAlliesFaction) || CheckVictim.IsCommandedActor() || CheckVictim.IsPlayerTeammate() Return False ElseIf CheckVictim.HasKeyword(MagicNoEldritchBlood) _00E_Levelsystem_sAbilityEnemyLevelTooHigh.Show() @@ -272,21 +309,13 @@ bool Function EnemyLevelTooHigh(Actor LevelVictim) Float iAllowedDif = _00E_A2_EldritchBloodSP.GetNthEffectMagnitude(6) - If (LevelVictim.GetLevel() > (PlayerLevel.GetValueInt() + iAllowedDif as Int)) - Return True - Else - Return False - EndIf + return (LevelVictim.GetLevel() > (PlayerLevel.GetValueInt() + iAllowedDif as Int)) EndFunction bool Function IsTargetMarked(Actor iVictim) - If iVictim.HasSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) || iVictim.HasSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) - Return True - Else - Return False - EndIf + return iVictim.HasSpell(_00E_A2_EldritchBloodAbMarkedVictimSP) || iVictim.HasSpell(_00E_A2_EldritchBloodAbMarkedVictimTargetSP) EndFunction diff --git a/source/scripts/_00e_a2_eldritchbloodsc.psc b/source/scripts/_00e_a2_eldritchbloodsc.psc index a274b547..65f594b0 100644 --- a/source/scripts/_00e_a2_eldritchbloodsc.psc +++ b/source/scripts/_00e_a2_eldritchbloodsc.psc @@ -20,7 +20,7 @@ EndEvent Event OnEffectStart(Actor akTarget, Actor akCaster) - Actor PlayerRef = Game.GetPlayer() + 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() @@ -29,10 +29,6 @@ Event OnEffectStart(Actor akTarget, Actor akCaster) _00E_A2_EldritchBloodParticelAttachVFX.Play(Victim) - If Victim.GetCombatTarget() == PlayerRef - Victim.StopCombat() - EndIf - ; Strip Victim off all its factions VictimFactions = Victim.GetFactions(-128, 127) VictimFactionRanks = CreateIntArray(VictimFactions.Length) @@ -55,9 +51,16 @@ Event OnEffectStart(Actor akTarget, Actor akCaster) Victim.SetActorValue("Confidence", 4) Victim.SetActorValue("Aggression", 2) - Victim.EvaluatePackage() - AdjustAndAddFrenzyPerk() - + 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 @@ -85,6 +88,7 @@ Event OnEffectFinish(Actor akTarget, Actor akCaster) EndWhile Victim.EvaluatePackage() + EndEvent Event OnDying(Actor akKiller) @@ -98,7 +102,7 @@ EndEvent ; FUNCTIONS ;===================================================================================== -Function AdjustAndAddFrenzyPerk() +Function AdjustAndAddFrenzyPerk(Actor Victim) float iDamageMultiplicator = _00E_A2_EldritchBloodSP.GetNthEffectMagnitude(TalentLevel + 2) @@ -112,6 +116,8 @@ Function AdjustAndAddFrenzyPerk() iPerk.SetNthEntryValue(1, 1, iDamageMultiplicator) iPerk.SetNthEntryValue(2, 1, iDamageMultiplicator) + + Victim.AddPerk(iPerk) EndFunction @@ -172,14 +178,15 @@ Function Explode() _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.Kill(Victim) - Victim.SetCriticalStage(Victim.CritStage_DisintegrateEnd) - EXPMarker.Delete() + 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 diff --git a/source/scripts/_00e_playerfunctions.psc b/source/scripts/_00e_playerfunctions.psc index bcd4f32d..6eb0826c 100644 --- a/source/scripts/_00e_playerfunctions.psc +++ b/source/scripts/_00e_playerfunctions.psc @@ -21,6 +21,11 @@ Event OnPlayerLoadGame() if ControlRepository == None ControlRepository = Game.GetForm(0x493C2) as _00E_EnderalControls endif + + ; Restore INI value changed by slow time effects + if Utility.GetINIFloat("fInAirFallingCharGravityMult:Havok") < 1.35 + Utility.SetINIFloat("fInAirFallingCharGravityMult:Havok", 1.35) + endif EndEvent _00E_SkillControl function GetSkillControl() Global diff --git a/source/scripts/_00e_slowselfmesc.psc b/source/scripts/_00e_slowselfmesc.psc index 6e1d7392..c1cefb12 100644 --- a/source/scripts/_00e_slowselfmesc.psc +++ b/source/scripts/_00e_slowselfmesc.psc @@ -12,6 +12,8 @@ EndEvent Event OnEffectFinish(Actor akTarget, Actor akCaster) _00E_PlayerFunctions.GetVisionControl().UpdateSpeed(akTarget) + + ; Also restored on game load in _00E_PlayerFunctions Utility.SetINIFloat("fInAirFallingCharGravityMult:Havok", 1.35) EndEvent