diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 |
4 files changed, 24 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9def0f173a5..7b6355b4a80 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9911,6 +9911,17 @@ void Unit::UpdateSpeed(UnitMoveType mtype) if (speed > max_speed) speed = max_speed; } + + if (mtype == MOVE_RUN) + { + // force minimum speed rate @ aura 437 SPELL_AURA_MOD_MINIMUM_SPEED_RATE + if (int32 minSpeedMod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_MINIMUM_SPEED_RATE)) + { + float minSpeed = minSpeedMod / (IsControlledByPlayer() ? playerBaseMoveSpeed[mtype] : baseMoveSpeed[mtype]); + if (speed < minSpeed) + speed = minSpeed; + } + } break; } default: diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 9b064574fe2..e3d6799c1a5 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -494,7 +494,7 @@ enum AuraType SPELL_AURA_434 = 434, SPELL_AURA_435 = 435, SPELL_AURA_MOD_ENVIRONMENTAL_DAMAGE_TAKEN = 436, // NYI - SPELL_AURA_437 = 437, + SPELL_AURA_MOD_MINIMUM_SPEED_RATE = 437, SPELL_AURA_PRELOAD_PHASE = 438, // NYI SPELL_AURA_439 = 439, SPELL_AURA_MOD_MULTISTRIKE_DAMAGE = 440, // NYI diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 32071512556..5fa8261dc4f 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -496,7 +496,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //434 &AuraEffect::HandleNULL, //435 &AuraEffect::HandleNULL, //436 SPELL_AURA_MOD_ENVIRONMENTAL_DAMAGE_TAKEN - &AuraEffect::HandleNULL, //437 + &AuraEffect::HandleAuraModMinimumSpeedRate, //437 SPELL_AURA_MOD_MINIMUM_SPEED_RATE &AuraEffect::HandleNULL, //438 SPELL_AURA_PRELOAD_PHASE &AuraEffect::HandleNULL, //439 &AuraEffect::HandleNULL, //440 SPELL_AURA_MOD_MULTISTRIKE_DAMAGE @@ -3168,6 +3168,16 @@ void AuraEffect::HandleAuraModUseNormalSpeed(AuraApplication const* aurApp, uint target->UpdateSpeed(MOVE_FLIGHT); } +void AuraEffect::HandleAuraModMinimumSpeedRate(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const +{ + if (!(mode & AURA_EFFECT_HANDLE_REAL)) + return; + + Unit* target = aurApp->GetTarget(); + + target->UpdateSpeed(MOVE_RUN); +} + /*********************************************************/ /*** IMMUNITY ***/ /*********************************************************/ diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 03f3de465b3..b1170bb772b 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -207,6 +207,7 @@ class TC_GAME_API AuraEffect void HandleAuraModIncreaseSwimSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModDecreaseSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModUseNormalSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleAuraModMinimumSpeedRate(AuraApplication const* aurApp, uint8 mode, bool apply) const; // immunity void HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModMechanicImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const; |