aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp11
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp12
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
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;