diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 7092f27782..31c29df92d 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1962,6 +1962,4 @@ void Pet::UpdatePetScalingAuras() if (Aura* aura = GetAura(spellId)) aura->RecalculateAmountOfEffects(); } - - UpdateAllStats(); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 758c129e70..d336feb0fc 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -413,6 +413,7 @@ Player::Player(WorldSession* session): Unit(true) m_reputationMgr = new ReputationMgr(this); _hasValidLFGLeavePoint = false; _archaeology = new Archaeology(this); + m_petScalingSynchTimer.Reset(1000); } Player::~Player() @@ -1371,6 +1372,14 @@ void Player::Update(uint32 p_time) //if (pet && !pet->IsWithinDistInMap(this, GetMap()->GetVisibilityDistance()) && (GetCharmGUID() && (pet->GetGUID() != GetCharmGUID()))) RemovePet(pet, PET_SAVE_DISMISS, true); + m_petScalingSynchTimer.Update(p_time); + if (m_petScalingSynchTimer.Passed()) + { + if (pet) + pet->UpdatePetScalingAuras(); + m_petScalingSynchTimer.Reset(1000); + } + if (IsAlive()) { if (m_hostileReferenceCheckTimer <= p_time) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index da89290b97..0221df8c5e 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2751,6 +2751,8 @@ class TC_GAME_API Player : public Unit, public GridObject Archaeology* _archaeology; std::vector PlayerPetDataStore; + + TimeTrackerSmall m_petScalingSynchTimer; }; TC_GAME_API void AddItemsSetItem(Player* player, Item* item); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b299bd5433..b7ac173463 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9772,10 +9772,6 @@ bool Unit::HandleStatModifier(UnitMods unitMod, UnitModifierType modifierType, f break; } - // Do not update pet stats one by one. We will update all stats in one big chunk after updating all scaling auras - if (IsPet()) - return false; - if (!CanModifyStats()) return false; @@ -9829,10 +9825,6 @@ bool Unit::HandleStatModifier(UnitMods unitMod, UnitModifierType modifierType, f break; } - if (Player* player = ToPlayer()) - if (Pet* pet = player->GetPet()) - pet->UpdatePetScalingAuras(); - return true; } diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp index d41063cd9e..1403bb8d5c 100644 --- a/src/server/scripts/Spells/spell_pet.cpp +++ b/src/server/scripts/Spells/spell_pet.cpp @@ -514,7 +514,7 @@ class spell_hun_pet_scaling_01 : public AuraScript if (Player* owner = pet->GetOwner()) { // Base Health value for all pets at level 85 is 32,474 - int32 bonus = int32(owner->GetCreateHealth() * 0.79743633f); + int32 bonus = int32(owner->GetCreateHealth() * 0.831877f); // Apply health scaling bonuses based on pet type float mod = 0.0f;