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/Pet | |
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/Pet')
-rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 33 | ||||
-rw-r--r-- | src/server/game/Entities/Pet/Pet.h | 1 |
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; } |