aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAqua Deus <95978183+aquadeus@users.noreply.github.com>2022-02-26 21:23:37 +0100
committerGitHub <noreply@github.com>2022-02-26 21:23:37 +0100
commit6c01f761b2c00d9ea8d44f2856c7a82cadb9bbfc (patch)
tree4bffdc16cce710bc66489130ef900e471b037e55 /src
parent19f64e66e58d3d7ebed6437a474a134e7c673ed6 (diff)
Core/Auras: Implement SPELL_AURA_FORCE_BREATH_BAR (#27790)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp21
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp14
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
4 files changed, 20 insertions, 18 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c1ac6f3f357..de466cd4b5b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -26153,44 +26153,33 @@ void Player::ProcessTerrainStatusUpdate(ZLiquidStatus oldLiquidStatus, Optional<
// process liquid auras using generic unit code
Unit::ProcessTerrainStatusUpdate(oldLiquidStatus, newLiquidData);
+ m_MirrorTimerFlags &= ~(UNDERWATER_INWATER | UNDERWATER_INLAVA | UNDERWATER_INSLIME | UNDERWATER_INDARKWATER);
+
// player specific logic for mirror timers
if (GetLiquidStatus() && newLiquidData)
{
// Breath bar state (under water in any liquid type)
if (newLiquidData->type_flags.HasFlag(map_liquidHeaderTypeFlags::AllLiquids))
- {
if (GetLiquidStatus() & LIQUID_MAP_UNDER_WATER)
m_MirrorTimerFlags |= UNDERWATER_INWATER;
- else
- m_MirrorTimerFlags &= ~UNDERWATER_INWATER;
- }
// Fatigue bar state (if not on flight path or transport)
if (newLiquidData->type_flags.HasFlag(map_liquidHeaderTypeFlags::DarkWater) && !IsInFlight() && !GetTransport())
m_MirrorTimerFlags |= UNDERWATER_INDARKWATER;
- else
- m_MirrorTimerFlags &= ~UNDERWATER_INDARKWATER;
// Lava state (any contact)
if (newLiquidData->type_flags.HasFlag(map_liquidHeaderTypeFlags::Magma))
- {
if (GetLiquidStatus() & MAP_LIQUID_STATUS_IN_CONTACT)
m_MirrorTimerFlags |= UNDERWATER_INLAVA;
- else
- m_MirrorTimerFlags &= ~UNDERWATER_INLAVA;
- }
// Slime state (any contact)
if (newLiquidData->type_flags.HasFlag(map_liquidHeaderTypeFlags::Slime))
- {
if (GetLiquidStatus() & MAP_LIQUID_STATUS_IN_CONTACT)
m_MirrorTimerFlags |= UNDERWATER_INSLIME;
- else
- m_MirrorTimerFlags &= ~UNDERWATER_INSLIME;
- }
}
- else
- m_MirrorTimerFlags &= ~(UNDERWATER_INWATER | UNDERWATER_INLAVA | UNDERWATER_INSLIME | UNDERWATER_INDARKWATER);
+
+ if (HasAuraType(SPELL_AURA_FORCE_BREATH_BAR))
+ m_MirrorTimerFlags |= UNDERWATER_INWATER;
}
void Player::AtEnterCombat()
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index a584ab6c243..90c3f3ebc45 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -255,7 +255,7 @@ enum AuraType : uint32
SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161,
SPELL_AURA_POWER_BURN = 162,
SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163,
- SPELL_AURA_FORCE_BREATH_BAR = 164, // NYI
+ SPELL_AURA_FORCE_BREATH_BAR = 164,
SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165,
SPELL_AURA_MOD_ATTACK_POWER_PCT = 166,
SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT = 167,
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 75f7535dcec..3d150f4f559 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -230,7 +230,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNoImmediateEffect, //161 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT
&AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN implemented in AuraEffect::PeriodicTick
&AuraEffect::HandleNoImmediateEffect, //163 SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
- &AuraEffect::HandleNULL, //164 SPELL_AURA_FORCE_BREATH_BAR
+ &AuraEffect::HandleForceBreathBar, //164 SPELL_AURA_FORCE_BREATH_BAR
&AuraEffect::HandleNoImmediateEffect, //165 SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS implemented in Unit::MeleeDamageBonus
&AuraEffect::HandleAuraModAttackPowerPercent, //166 SPELL_AURA_MOD_ATTACK_POWER_PCT
&AuraEffect::HandleAuraModRangedAttackPowerPercent, //167 SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT
@@ -6143,6 +6143,18 @@ void AuraEffect::HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication con
aura->ApplyForTargets();
}
+void AuraEffect::HandleForceBreathBar(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const
+{
+ if (!(mode & AURA_EFFECT_HANDLE_REAL))
+ return;
+
+ Player* playerTarget = aurApp->GetTarget()->ToPlayer();
+ if (!playerTarget)
+ return;
+
+ playerTarget->UpdatePositionData();
+}
+
template TC_GAME_API void AuraEffect::GetTargetList(std::list<Unit*>&) const;
template TC_GAME_API void AuraEffect::GetTargetList(std::deque<Unit*>&) const;
template TC_GAME_API void AuraEffect::GetTargetList(std::vector<Unit*>&) const;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index c9f04b647ec..8ed3ef13e41 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -327,6 +327,7 @@ class TC_GAME_API AuraEffect
void HandleMountRestrictions(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
+ void HandleForceBreathBar(AuraApplication const* aurApp, uint8 mode, bool apply) const;
// aura effect periodic tick handlers
void HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) const;