aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-04-28 18:03:51 +0200
committerShauren <shauren.trinity@gmail.com>2022-01-01 22:49:58 +0100
commit679e9910e09a55dd1743f236dbd99b7fa48fe9c1 (patch)
treedf4d1b8d7b27c6efed3e17636b80e3afa2b4013f /src/server/game/Entities/Unit
parentc9443f190abdf2467386c64c0b476e2d6ec545f6 (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.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
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; }