diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 4fac82a21..6d195a9c7 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -19285,7 +19285,7 @@ void Player::SendInitialPacketsBeforeAddToMap() // SMSG_POWER_UPDATE // set fly flag if in fly form or taxi flight to prevent visually drop at ground in showup moment - if(HasAuraType(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED) || HasAuraType(SPELL_AURA_FLY) || isInFlight()) + if(HasAuraType(SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED) || HasAuraType(SPELL_AURA_FLY) || isInFlight()) m_movementInfo.AddMovementFlag(MOVEFLAG_FLYING); m_mover = this; @@ -19310,7 +19310,7 @@ void Player::SendInitialPacketsAfterAddToMap() { 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_FLIGHT_SPEED, SPELL_AURA_NONE + SPELL_AURA_FLY, SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED, SPELL_AURA_NONE }; for(AuraType const* itr = &auratypes[0]; itr && itr[0] != SPELL_AURA_NONE; ++itr) { diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index aa0ca8afe..b956d29ca 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4933,7 +4933,7 @@ SpellCastResult Spell::CheckCast(bool strict) break; } case SPELL_AURA_FLY: - case SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED: + case SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED: { // not allow cast fly spells if not have req. skills (all spells is self target) // allow always ghost flight spells diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 8184db349..8c0ab0159 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -248,12 +248,12 @@ enum AuraType SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204, SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_DAMAGE = 205, - SPELL_AURA_MOD_SPEED_MOUNTED = 206, // ? used in strange spells - SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 207, - SPELL_AURA_MOD_SPEED_FLIGHT = 208, - SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS = 209, - SPELL_AURA_210 = 210, // unused - SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211, + SPELL_AURA_MOD_FLIGHT_SPEED = 206, + SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED = 207, + SPELL_AURA_MOD_FLIGHT_SPEED_STACKING = 208, + SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_STACKING = 209, + SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING = 210, + SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING = 211, SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212, SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213, SPELL_AURA_214 = 214, diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 4e8df4f7d..2073a1dcc 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -256,12 +256,12 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &Aura::HandleNoImmediateEffect, //203 SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::SpellCriticalDamageBonus &Aura::HandleNoImmediateEffect, //204 SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::SpellCriticalDamageBonus &Aura::HandleNoImmediateEffect, //205 SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_DAMAGE implemented in Unit::SpellCriticalDamageBonus - &Aura::HandleNULL, //206 SPELL_AURA_MOD_SPEED_MOUNTED - &Aura::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED - &Aura::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_SPEED_FLIGHT, used only in spell: Flight Form (Passive) - &Aura::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS - &Aura::HandleNULL, //210 "Increase flight speed by" - &Aura::HandleAuraModIncreaseFlightSpeed, //211 SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK + &Aura::HandleAuraModIncreaseFlightSpeed, //206 SPELL_AURA_MOD_FLIGHT_SPEED + &Aura::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED + &Aura::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_FLIGHT_SPEED_STACKING + &Aura::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_STACKING + &Aura::HandleAuraModIncreaseFlightSpeed, //210 SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING + &Aura::HandleAuraModIncreaseFlightSpeed, //211 SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING &Aura::HandleAuraModRangedAttackPowerOfStatPercent, //212 SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT &Aura::HandleNoImmediateEffect, //213 SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT implemented in Player::RewardRage &Aura::HandleUnused, //214 Tamed Pet Passive (single test like spell 20782, also single for 157 aura) @@ -3377,7 +3377,7 @@ void Aura::HandleAuraTransform(bool apply, bool Real) ((Creature*)m_target)->LoadEquipment(ci->equipmentId, true); // Dragonmaw Illusion (set mount model also) - if(GetId()==42016 && m_target->GetMountID() && !m_target->GetAurasByType(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED).empty()) + if(GetId()==42016 && m_target->GetMountID() && !m_target->GetAurasByType(SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED).empty()) m_target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID,16314); } @@ -4371,7 +4371,7 @@ void Aura::HandleAuraModIncreaseFlightSpeed(bool apply, bool Real) return; // Enable Fly mode for flying mounts - if (m_modifier.m_auraname == SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED) + if (m_modifier.m_auraname == SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED) { WorldPacket data; if(apply) @@ -4396,6 +4396,34 @@ void Aura::HandleAuraModIncreaseFlightSpeed(bool apply, bool Real) m_target->CastSpell(m_target, 25860, true, NULL, this); } + // Swift Flight Form check for higher speed flying mounts + if (apply && m_target->GetTypeId() == TYPEID_PLAYER && GetSpellProto()->Id == 40121) + { + for (PlayerSpellMap::const_iterator iter = ((Player*)m_target)->GetSpellMap().begin(); iter != ((Player*)m_target)->GetSpellMap().end(); ++iter) + { + if (iter->second.state != PLAYERSPELL_REMOVED) + { + bool changedSpeed = false; + SpellEntry const *spellInfo = sSpellStore.LookupEntry(iter->first); + for(int i = 0; i < MAX_EFFECT_INDEX; ++i) + { + if(spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED) + { + int32 mountSpeed = spellInfo->CalculateSimpleValue(SpellEffectIndex(i)); + if (mountSpeed > m_modifier.m_amount) + { + m_modifier.m_amount = mountSpeed; + changedSpeed = true; + break; + } + } + } + if (changedSpeed) + break; + } + } + } + m_target->UpdateSpeed(MOVE_FLIGHT, true); } diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 6949192c8..f6d924351 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1570,7 +1570,7 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx) case 58601: // Remove Flight Auras { m_caster->RemoveSpellsCausingAura(SPELL_AURA_FLY); - m_caster->RemoveSpellsCausingAura(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED); + m_caster->RemoveSpellsCausingAura(SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED); return; } case 59640: // Underbelly Elixir diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 7748a73a4..e13d4de70 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -10287,7 +10287,7 @@ void Unit::Mount(uint32 mount, uint32 spellId) else if (SpellEntry const* spellInfo = sSpellStore.LookupEntry(spellId)) { // Flying case (Unsummon any pet) - if (IsSpellHaveAura(spellInfo, SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED)) + if (IsSpellHaveAura(spellInfo, SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED)) ((Player*)this)->UnsummonPetTemporaryIfAny(); // Normal case (Unsummon only permanent pet) else if (Pet* pet = GetPet()) @@ -10854,11 +10854,17 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio) case MOVE_FLIGHT: { if (IsMounted()) // Use on mount auras - main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED); + { + main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED); + stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_STACKING); + non_stack_bonus = (100.0f + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING))/100.0f; + } else // Use not mount (shapeshift for example) auras (should stack) - main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_SPEED_FLIGHT); - stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS); - non_stack_bonus = (100.0f + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK))/100.0f; + { + main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED); + stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_FLIGHT_SPEED_STACKING); + non_stack_bonus = (100.0f + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING))/100.0f; + } break; } case MOVE_FLIGHT_BACK: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7927851bc..70cd1fad0 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9753" + #define REVISION_NR "9754" #endif // __REVISION_NR_H__