diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-04-28 18:03:51 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-01-01 22:49:58 +0100 |
| commit | 679e9910e09a55dd1743f236dbd99b7fa48fe9c1 (patch) | |
| tree | df4d1b8d7b27c6efed3e17636b80e3afa2b4013f /src/server/game/Entities/Unit | |
| parent | c9443f190abdf2467386c64c0b476e2d6ec545f6 (diff) | |
Core/Auras: Prevent getting negative scale with auras
Closes #24040
(cherry picked from commit 50576fa1f5044ca81baf633d84174cef2346acc5)
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9902e97bbe8..158b9d05e1f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9929,6 +9929,14 @@ bool Unit::IsPolymorphed() const return spellInfo->GetSpellSpecific() == SPELL_SPECIFIC_MAGE_POLYMORPH; } +void Unit::RecalculateObjectScale() +{ + int32 scaleAuras = GetTotalAuraModifier(SPELL_AURA_MOD_SCALE) + GetTotalAuraModifier(SPELL_AURA_MOD_SCALE_2); + float scale = GetNativeObjectScale() + CalculatePct(1.0f, scaleAuras); + float scaleMin = GetTypeId() == TYPEID_PLAYER ? 0.1 : 0.01; + SetObjectScale(std::max(scale, scaleMin)); +} + void Unit::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayID), modelId); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 778de3299a2..d2c60b1086d 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1622,6 +1622,8 @@ class TC_GAME_API Unit : public WorldObject } void UpdateInterruptMask(); + virtual float GetNativeObjectScale() const { return 1.0f; } + virtual void RecalculateObjectScale(); uint32 GetDisplayId() const { return m_unitData->DisplayID; } virtual void SetDisplayId(uint32 modelId, float displayScale = 1.f); uint32 GetNativeDisplayId() const { return m_unitData->NativeDisplayID; } |
