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:
Ovahlord
2019-12-09 20:47:15 +01:00
parent 66f76091a0
commit 3f4642d8b8
2 changed files with 13 additions and 43 deletions

View File

@@ -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));
}

View File

@@ -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;