From d780b46dca4a0a0bf805feee3345324291d2db6a Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 23 May 2022 17:14:23 -0400 Subject: [PATCH] Core/Auras: Implement SPELL_AURA_FORCE_BREATH_BAR Port From (https://github.com/TrinityCore/TrinityCore/commit/6c01f761b2c00d9ea8d44f2856c7a82cadb9bbfc) --- .../Constants/Spells/SpellAuraConst.cs | 2 +- Source/Game/Entities/Player/Player.Map.cs | 21 +++++-------------- Source/Game/Spells/Auras/AuraEffect.cs | 21 +++++++++++++++---- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Source/Framework/Constants/Spells/SpellAuraConst.cs b/Source/Framework/Constants/Spells/SpellAuraConst.cs index 0b5ff002d..1f04dd62c 100644 --- a/Source/Framework/Constants/Spells/SpellAuraConst.cs +++ b/Source/Framework/Constants/Spells/SpellAuraConst.cs @@ -185,7 +185,7 @@ namespace Framework.Constants ModHealthRegenInCombat = 161, PowerBurn = 162, ModCritDamageBonus = 163, - ForceBeathBar = 164, //NYI + ForceBeathBar = 164, MeleeAttackPowerAttackerBonus = 165, ModAttackPowerPct = 166, ModRangedAttackPowerPct = 167, diff --git a/Source/Game/Entities/Player/Player.Map.cs b/Source/Game/Entities/Player/Player.Map.cs index 294720429..18fba4007 100644 --- a/Source/Game/Entities/Player/Player.Map.cs +++ b/Source/Game/Entities/Player/Player.Map.cs @@ -792,44 +792,33 @@ namespace Game.Entities // process liquid auras using generic unit code base.ProcessTerrainStatusUpdate(oldLiquidStatus, newLiquidData); + m_MirrorTimerFlags &= ~(PlayerUnderwaterState.InWater | PlayerUnderwaterState.InLava | PlayerUnderwaterState.InSlime | PlayerUnderwaterState.InDarkWater); + // player specific logic for mirror timers if (GetLiquidStatus() != 0 && newLiquidData != null) { // Breath bar state (under water in any liquid type) if (newLiquidData.type_flags.HasAnyFlag(LiquidHeaderTypeFlags.AllLiquids)) - { if (GetLiquidStatus().HasAnyFlag(ZLiquidStatus.UnderWater)) m_MirrorTimerFlags |= PlayerUnderwaterState.InWater; - else - m_MirrorTimerFlags &= ~PlayerUnderwaterState.InWater; - } // Fatigue bar state (if not on flight path or transport) if (newLiquidData.type_flags.HasAnyFlag(LiquidHeaderTypeFlags.DarkWater) && !IsInFlight() && !GetTransport()) m_MirrorTimerFlags |= PlayerUnderwaterState.InDarkWater; - else - m_MirrorTimerFlags &= ~PlayerUnderwaterState.InDarkWater; // Lava state (any contact) if (newLiquidData.type_flags.HasAnyFlag(LiquidHeaderTypeFlags.Magma)) - { if (GetLiquidStatus().HasAnyFlag(ZLiquidStatus.InContact)) m_MirrorTimerFlags |= PlayerUnderwaterState.InLava; - else - m_MirrorTimerFlags &= ~PlayerUnderwaterState.InLava; - } // Slime state (any contact) if (newLiquidData.type_flags.HasAnyFlag(LiquidHeaderTypeFlags.Slime)) - { if (GetLiquidStatus().HasAnyFlag(ZLiquidStatus.InContact)) m_MirrorTimerFlags |= PlayerUnderwaterState.InSlime; - else - m_MirrorTimerFlags &= ~PlayerUnderwaterState.InSlime; - } } - else - m_MirrorTimerFlags &= ~(PlayerUnderwaterState.InWater | PlayerUnderwaterState.InLava | PlayerUnderwaterState.InSlime | PlayerUnderwaterState.InDarkWater); + + if (HasAuraType(AuraType.ForceBeathBar)) + m_MirrorTimerFlags |= PlayerUnderwaterState.InWater; } } } diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index d23b2abae..30152b89f 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -1989,7 +1989,7 @@ namespace Game.Spells } // call functions which may have additional effects after changing state of unit - if (target.IsInWorld) + if (target.IsInWorld) target.UpdateObjectVisibility(); } @@ -3207,7 +3207,7 @@ namespace Game.Spells aurApp.GetTarget().HandleStatFlatModifier(UnitMods.Armor, UnitModifierFlatType.Base, GetAmount(), apply); } - + [AuraEffectHandler(AuraType.ModStatBonusPct)] void HandleModStatBonusPercent(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply) { @@ -4762,7 +4762,7 @@ namespace Game.Spells aurApp.GetTarget().CastSpell(aurApp.GetTarget(), GetSpellEffectInfo().TriggerSpell, new CastSpellExtraArgs(this)); } - + [AuraEffectHandler(AuraType.OpenStable)] void HandleAuraOpenStable(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply) { @@ -5873,7 +5873,7 @@ namespace Game.Spells aurApp.GetTarget().UpdateMountCapability(); } - + [AuraEffectHandler(AuraType.CosmeticMounted)] void HandleCosmeticMounted(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply) { @@ -5907,6 +5907,19 @@ namespace Game.Spells foreach (Aura aura in suppressedAuras) aura.ApplyForTargets(); } + + [AuraEffectHandler(AuraType.ForceBeathBar)] + void HandleForceBreathBar(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply) + { + if (!mode.HasAnyFlag(AuraEffectHandleModes.Real)) + return; + + Player playerTarget = aurApp.GetTarget().ToPlayer(); + if (playerTarget == null) + return; + + playerTarget.UpdatePositionData(); + } #endregion }