mirror of
https://github.com/mangosfour/server.git
synced 2025-12-19 04:37:06 +00:00
[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:
parent
24853d6410
commit
6f8aa617d0
5 changed files with 64 additions and 47 deletions
|
|
@ -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)
|
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
|
||||||
if(!isAlive())
|
if(!isAlive())
|
||||||
break;
|
break;
|
||||||
if(m_regenTimer > 0)
|
RegenerateAll(update_diff);
|
||||||
{
|
|
||||||
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;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CORPSE_FALLING:
|
case CORPSE_FALLING:
|
||||||
|
|
@ -637,6 +622,26 @@ void Creature::StopGroupLoot()
|
||||||
m_groupLootId = 0;
|
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()
|
void Creature::RegenerateMana()
|
||||||
{
|
{
|
||||||
uint32 curValue = GetPower(POWER_MANA);
|
uint32 curValue = GetPower(POWER_MANA);
|
||||||
|
|
|
||||||
|
|
@ -457,7 +457,9 @@ class MANGOS_DLL_SPEC Creature : public Unit
|
||||||
|
|
||||||
char const* GetSubName() const { return GetCreatureInfo()->SubName; }
|
char const* GetSubName() const { return GetCreatureInfo()->SubName; }
|
||||||
|
|
||||||
void Update(uint32 update_diff, uint32 time); // overwrite Unit::Update
|
void Update(uint32 update_diff, uint32 time); // overwrite Unit::Update
|
||||||
|
|
||||||
|
virtual void RegenerateAll(uint32 update_diff);
|
||||||
void GetRespawnCoord(float &x, float &y, float &z, float* ori = NULL, float* dist =NULL) const;
|
void GetRespawnCoord(float &x, float &y, float &z, float* ori = NULL, float* dist =NULL) const;
|
||||||
uint32 GetEquipmentId() const { return m_equipmentId; }
|
uint32 GetEquipmentId() const { return m_equipmentId; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -567,35 +567,6 @@ void Pet::Update(uint32 update_diff, uint32 diff)
|
||||||
return;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
@ -605,6 +576,44 @@ void Pet::Update(uint32 update_diff, uint32 diff)
|
||||||
Creature::Update(update_diff, 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)
|
void Pet::Regenerate(Powers power)
|
||||||
{
|
{
|
||||||
uint32 curValue = GetPower(power);
|
uint32 curValue = GetPower(power);
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@ class Pet : public Creature
|
||||||
return m_autospells[pos];
|
return m_autospells[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RegenerateAll(uint32 update_diff); // overwrite Creature::RegenerateAll
|
||||||
void Regenerate(Powers power);
|
void Regenerate(Powers power);
|
||||||
void LooseHappiness();
|
void LooseHappiness();
|
||||||
HappinessState GetHappinessState();
|
HappinessState GetHappinessState();
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "11353"
|
#define REVISION_NR "11354"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue