aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp11
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp20
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
5 files changed, 29 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index ea4f405e96c..50a74ad1ed8 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -24560,18 +24560,15 @@ void Player::SendInitialPacketsAfterAddToMap()
// set some aura effects that send packet to player client after add player to map
// SendMessageToSet not send it to player not it map, only for aura that not changed anything at re-apply
// same auras state lost at far teleport, send it one more time in this case also
- static const AuraType auratypes[] =
+ static constexpr AuraType auratypes[] =
{
SPELL_AURA_MOD_FEAR, SPELL_AURA_TRANSFORM, SPELL_AURA_WATER_WALK,
SPELL_AURA_FEATHER_FALL, SPELL_AURA_HOVER, SPELL_AURA_SAFE_FALL,
- SPELL_AURA_FLY, SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED, SPELL_AURA_NONE
+ SPELL_AURA_FLY, SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED, SPELL_AURA_ADV_FLYING
};
- for (AuraType const* itr = &auratypes[0]; itr && itr[0] != SPELL_AURA_NONE; ++itr)
- {
- Unit::AuraEffectList const& auraList = GetAuraEffectsByType(*itr);
- if (!auraList.empty())
+ for (AuraType auraType : auratypes)
+ if (Unit::AuraEffectList const& auraList = GetAuraEffectsByType(auraType); !auraList.empty())
auraList.front()->HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true);
- }
if (HasAuraType(SPELL_AURA_MOD_STUN) || HasAuraType(SPELL_AURA_MOD_STUN_DISABLE_GRAVITY))
SetRooted(true);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 23ff0e14c04..91731cc0a98 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8216,8 +8216,12 @@ void Unit::UpdateMountCapability()
if (!aurEff->GetAmount())
aurEff->GetBase()->Remove();
else if (MountCapabilityEntry const* capability = sMountCapabilityStore.LookupEntry(aurEff->GetAmount())) // aura may get removed by interrupt flag, reapply
+ {
+ SetFlightCapabilityID(capability->FlightCapabilityID, true);
+
if (!HasAura(capability->ModSpellAuraID))
CastSpell(this, capability->ModSpellAuraID, aurEff);
+ }
}
}
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index db2dcaac82e..16524552f3a 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -537,7 +537,7 @@ enum AuraType : uint32
SPELL_AURA_MOD_LEECH = 443, // NYI
SPELL_AURA_444 = 444,
SPELL_AURA_445 = 445,
- SPELL_AURA_446 = 446,
+ SPELL_AURA_ADV_FLYING = 446,
SPELL_AURA_MOD_XP_FROM_CREATURE_TYPE = 447,
SPELL_AURA_448 = 448,
SPELL_AURA_449 = 449,
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 9f40f1731fc..3b04455db88 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -515,7 +515,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //443 SPELL_AURA_MOD_LEECH
&AuraEffect::HandleNULL, //444
&AuraEffect::HandleNULL, //445
- &AuraEffect::HandleNULL, //446
+ &AuraEffect::HandleModAdvFlying, //446 SPELL_AURA_ADV_FLYING
&AuraEffect::HandleNoImmediateEffect, //447 SPELL_AURA_MOD_XP_FROM_CREATURE_TYPE implemented in KillRewarder::_RewardXP
&AuraEffect::HandleNULL, //448
&AuraEffect::HandleNULL, //449
@@ -2795,8 +2795,13 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo
// cast speed aura
if (mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK)
+ {
if (MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(GetAmount()))
+ {
+ target->SetFlightCapabilityID(mountCapability->FlightCapabilityID, true);
target->CastSpell(target, mountCapability->ModSpellAuraID, this);
+ }
+ }
}
else
{
@@ -2813,6 +2818,8 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo
// remove speed aura
if (MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(GetAmount()))
target->RemoveAurasDueToSpell(mountCapability->ModSpellAuraID, target->GetGUID());
+
+ target->SetFlightCapabilityID(0, true);
}
}
@@ -2941,6 +2948,17 @@ void AuraEffect::HandleAuraCanTurnWhileFalling(AuraApplication const* aurApp, ui
target->SetCanTurnWhileFalling(apply);
}
+void AuraEffect::HandleModAdvFlying(AuraApplication const* aurApp, uint8 mode, bool apply) const
+{
+ if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
+ return;
+
+ Unit* target = aurApp->GetTarget();
+ target->SetCanDoubleJump(apply || target->HasAura(SPELL_DH_DOUBLE_JUMP));
+ target->SetCanFly(apply);
+ target->SetCanAdvFly(apply);
+}
+
void AuraEffect::HandleIgnoreMovementForces(AuraApplication const* aurApp, uint8 mode, bool apply) const
{
if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 07610b2dff8..aab03b03cf9 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -186,6 +186,7 @@ class TC_GAME_API AuraEffect
void HandleWaterBreathing(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleForceMoveForward(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleAuraCanTurnWhileFalling(AuraApplication const* aurApp, uint8 mode, bool apply) const;
+ void HandleModAdvFlying(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleIgnoreMovementForces(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleDisableInertia(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleSetCantSwim(AuraApplication const* aurApp, uint8 mode, bool apply) const;