mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Core/Pets: corrected pet focus regeneration behaivior
* according to sniffs, focus is getting updated every second instead of every 4 seconds * corrected pet focus regeneration from 6 focus per second down to 5 per second
This commit is contained in:
@@ -55,7 +55,7 @@ Pet::Pet(Player* owner, PetType type) :
|
||||
}
|
||||
|
||||
m_name = "Pet";
|
||||
m_focusRegenTimer = PET_FOCUS_REGEN_INTERVAL;
|
||||
m_petFocusRegenTimer.Reset(PetFocusRegenInterval);
|
||||
}
|
||||
|
||||
Pet::~Pet()
|
||||
@@ -596,38 +596,16 @@ void Pet::Update(uint32 diff)
|
||||
}
|
||||
}
|
||||
|
||||
//regenerate focus for hunter pets or energy for deathknight's ghoul
|
||||
if (m_focusRegenTimer)
|
||||
// Regenerate Focus
|
||||
m_petFocusRegenTimer.Update(diff);
|
||||
if (m_petFocusRegenTimer.Passed())
|
||||
{
|
||||
if (m_focusRegenTimer > diff)
|
||||
m_focusRegenTimer -= diff;
|
||||
else
|
||||
{
|
||||
switch (getPowerType())
|
||||
{
|
||||
case POWER_FOCUS:
|
||||
Regenerate(POWER_FOCUS);
|
||||
m_focusRegenTimer += PET_FOCUS_REGEN_INTERVAL - diff;
|
||||
if (!m_focusRegenTimer) ++m_focusRegenTimer;
|
||||
if (getPowerType() == POWER_FOCUS)
|
||||
Regenerate(POWER_FOCUS);
|
||||
|
||||
// Reset if large diff (lag) causes focus to get 'stuck'
|
||||
if (m_focusRegenTimer > PET_FOCUS_REGEN_INTERVAL)
|
||||
m_focusRegenTimer = PET_FOCUS_REGEN_INTERVAL;
|
||||
|
||||
break;
|
||||
|
||||
// in creature::update
|
||||
//case POWER_ENERGY:
|
||||
// Regenerate(POWER_ENERGY);
|
||||
// m_regenTimer += CREATURE_REGEN_INTERVAL - diff;
|
||||
// if (!m_regenTimer) ++m_regenTimer;
|
||||
// break;
|
||||
default:
|
||||
m_focusRegenTimer = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_petFocusRegenTimer.Reset(PetFocusRegenInterval);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -649,11 +627,8 @@ void Creature::Regenerate(Powers power)
|
||||
switch (power)
|
||||
{
|
||||
case POWER_FOCUS:
|
||||
{
|
||||
// For hunter pets.
|
||||
addvalue = 24 * sWorld->getRate(RATE_POWER_FOCUS);
|
||||
addvalue = 5 * sWorld->getRate(RATE_POWER_FOCUS);
|
||||
break;
|
||||
}
|
||||
case POWER_ENERGY:
|
||||
{
|
||||
// For Death Knight Ghouls
|
||||
@@ -679,13 +654,8 @@ void Creature::Regenerate(Powers power)
|
||||
}
|
||||
|
||||
// Apply modifiers (if any).
|
||||
AuraEffectList const& ModPowerRegenPCTAuras = GetAuraEffectsByType(SPELL_AURA_MOD_POWER_REGEN_PERCENT);
|
||||
for (AuraEffectList::const_iterator i = ModPowerRegenPCTAuras.begin(); i != ModPowerRegenPCTAuras.end(); ++i)
|
||||
if (Powers((*i)->GetMiscValue()) == power)
|
||||
AddPct(addvalue, (*i)->GetAmount());
|
||||
|
||||
addvalue += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power) * (IsHunterPet()? PET_FOCUS_REGEN_INTERVAL : CREATURE_REGEN_INTERVAL) / (5 * IN_MILLISECONDS);
|
||||
|
||||
AddPct(addvalue, GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, power));
|
||||
addvalue += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, power) * (IsHunterPet() ? PetFocusRegenInterval : CREATURE_REGEN_INTERVAL) / (5 * IN_MILLISECONDS);
|
||||
ModifyPower(power, int32(addvalue));
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "PetDefines.h"
|
||||
#include "TemporarySummon.h"
|
||||
|
||||
#define PET_FOCUS_REGEN_INTERVAL 4 * IN_MILLISECONDS
|
||||
static constexpr uint32 const PetFocusRegenInterval = 1 * IN_MILLISECONDS;
|
||||
|
||||
enum StableResultCode
|
||||
{
|
||||
@@ -175,7 +175,7 @@ class TC_GAME_API Pet : public Guardian
|
||||
int32 m_duration; // time until unsummon (used mostly for summoned guardians and not used for controlled pets)
|
||||
uint64 m_auraRaidUpdateMask;
|
||||
bool m_loading;
|
||||
uint32 m_focusRegenTimer;
|
||||
TimeTrackerSmall m_petFocusRegenTimer;
|
||||
|
||||
DeclinedName* m_declinedname;
|
||||
uint32 m_petSlot;
|
||||
|
||||
Reference in New Issue
Block a user