[11354] Resolve porblems with Pet regeneration timer conflict with Creature version.

* Creature regeneration code moved to new virtual function RegenerateAll
* Pet instead direct call own regeneration code overwrite now RegenerateAll

Big thanks to Vladskywolf for problem research and original patch version.
This commit is contained in:
VladimirMangos 2011-04-15 02:11:14 +04:00
parent 24853d6410
commit 6f8aa617d0
5 changed files with 64 additions and 47 deletions

View file

@ -567,35 +567,6 @@ void Pet::Update(uint32 update_diff, uint32 diff)
return;
}
}
//regenerate focus for hunter pets or energy for deathknight's ghoul
if(m_regenTimer <= update_diff)
{
switch (getPowerType())
{
case POWER_FOCUS:
case POWER_ENERGY:
Regenerate(getPowerType());
break;
default:
break;
}
m_regenTimer = 4000;
}
else
m_regenTimer -= update_diff;
if(getPetType() != HUNTER_PET)
break;
if(m_happinessTimer <= update_diff)
{
LooseHappiness();
m_happinessTimer = 7500;
}
else
m_happinessTimer -= update_diff;
break;
}
default:
@ -605,6 +576,44 @@ void Pet::Update(uint32 update_diff, uint32 diff)
Creature::Update(update_diff, diff);
}
void Pet::RegenerateAll( uint32 update_diff )
{
//regenerate focus for hunter pets or energy for deathknight's ghoul
if (m_regenTimer <= update_diff)
{
switch (getPowerType())
{
case POWER_FOCUS:
case POWER_ENERGY:
Regenerate(getPowerType());
break;
default:
break;
}
if (!isInCombat() || IsPolymorphed())
RegenerateHealth();
RegenerateMana();
m_regenTimer = 4000;
}
else
m_regenTimer -= update_diff;
if (getPetType() != HUNTER_PET)
return;
if(m_happinessTimer <= update_diff)
{
LooseHappiness();
m_happinessTimer = 7500;
}
else
m_happinessTimer -= update_diff;
}
void Pet::Regenerate(Powers power)
{
uint32 curValue = GetPower(power);