aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Pet
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/Pet
parentc9443f190abdf2467386c64c0b476e2d6ec545f6 (diff)
Core/Auras: Prevent getting negative scale with auras
Closes #24040 (cherry picked from commit 50576fa1f5044ca81baf633d84174cef2346acc5)
Diffstat (limited to 'src/server/game/Entities/Pet')
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp33
-rw-r--r--src/server/game/Entities/Pet/Pet.h1
2 files changed, 21 insertions, 13 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 9fd8e9eb258..25029227159 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -806,19 +806,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
SetBaseAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME);
//scale
- CreatureFamilyEntry const* cFamily = sCreatureFamilyStore.LookupEntry(cinfo->family);
- if (cFamily && cFamily->MinScale > 0.0f && petType == HUNTER_PET)
- {
- float scale;
- if (GetLevel() >= cFamily->MaxScaleLevel)
- scale = cFamily->MaxScale;
- else if (GetLevel() <= cFamily->MinScaleLevel)
- scale = cFamily->MinScale;
- else
- scale = cFamily->MinScale + float(GetLevel() - cFamily->MinScaleLevel) / cFamily->MaxScaleLevel * (cFamily->MaxScale - cFamily->MinScale);
-
- SetObjectScale(scale);
- }
+ SetObjectScale(GetNativeObjectScale());
// Resistance
// Hunters pet should not inherit resistances from creature_template, they have separate auras for that
@@ -1765,6 +1753,25 @@ Player* Pet::GetOwner() const
return Minion::GetOwner()->ToPlayer();
}
+float Pet::GetNativeObjectScale() const
+{
+ CreatureFamilyEntry const* creatureFamily = sCreatureFamilyStore.LookupEntry(GetCreatureTemplate()->family);
+ if (creatureFamily && creatureFamily->MinScale > 0.0f && getPetType() == HUNTER_PET)
+ {
+ float scale;
+ if (GetLevel() >= creatureFamily->MaxScaleLevel)
+ scale = creatureFamily->MaxScale;
+ else if (GetLevel() <= creatureFamily->MinScaleLevel)
+ scale = creatureFamily->MinScale;
+ else
+ scale = creatureFamily->MinScale + float(GetLevel() - creatureFamily->MinScaleLevel) / creatureFamily->MaxScaleLevel * (creatureFamily->MaxScale - creatureFamily->MinScale);
+
+ return scale;
+ }
+
+ return Guardian::GetNativeObjectScale();
+}
+
void Pet::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/)
{
Guardian::SetDisplayId(modelId, displayScale);
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index 8a6f6571105..88880884ed6 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -51,6 +51,7 @@ class TC_GAME_API Pet : public Guardian
void AddToWorld() override;
void RemoveFromWorld() override;
+ float GetNativeObjectScale() const override;
void SetDisplayId(uint32 modelId, float displayScale = 1.f) override;
PetType getPetType() const { return m_petType; }