[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

@ -592,22 +592,7 @@ void Creature::Update(uint32 update_diff, uint32 diff)
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
if(!isAlive())
break;
if(m_regenTimer > 0)
{
if(update_diff >= m_regenTimer)
m_regenTimer = 0;
else
m_regenTimer -= update_diff;
}
if (m_regenTimer != 0)
break;
if (!isInCombat() || IsPolymorphed())
RegenerateHealth();
RegenerateMana();
m_regenTimer = REGEN_TIME_FULL;
RegenerateAll(update_diff);
break;
}
case CORPSE_FALLING:
@ -637,6 +622,26 @@ void Creature::StopGroupLoot()
m_groupLootId = 0;
}
void Creature::RegenerateAll(uint32 update_diff)
{
if (m_regenTimer > 0)
{
if(update_diff >= m_regenTimer)
m_regenTimer = 0;
else
m_regenTimer -= update_diff;
}
if (m_regenTimer != 0)
return;
if (!isInCombat() || IsPolymorphed())
RegenerateHealth();
RegenerateMana();
m_regenTimer = REGEN_TIME_FULL;
}
void Creature::RegenerateMana()
{
uint32 curValue = GetPower(POWER_MANA);