aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/Creature.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp
index 218d24f060c..f1909adb157 100644
--- a/src/game/Creature.cpp
+++ b/src/game/Creature.cpp
@@ -529,15 +529,19 @@ void Creature::Update(uint32 diff)
if(!isAlive())
break;
- bool bNotInCombatOrIsPolymorphed = (!isInCombat() || IsPolymorphed() || getThreatManager().isThreatListEmpty() ||
- (getVictim() && getVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() &&
- getVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->isGameMaster()));
-
- if(m_regenTimer > diff && !bNotInCombatOrIsPolymorphed)
+ bool bIsPolymorphed = IsPolymorphed();
+ bool bNotInCombat = !isInCombat() || getThreatManager().isThreatListEmpty() ||
+ (getVictim() && getVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() &&
+ getVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->isGameMaster());
+ bool bControlledOrOwnedByPlayer = GetCharmerOrOwner() && GetCharmerOrOwner()->GetTypeId() == TYPEID_PLAYER;
+
+ if(m_regenTimer > diff && !bIsPolymorphed && // if polymorphed, skip the timer
+ ((bNotInCombat && bControlledOrOwnedByPlayer) || // if not in combat and a pet, do not skip the timer
+ !bNotInCombat)) // if in combat, do not skip the timer
m_regenTimer -= diff;
else
{
- if(bNotInCombatOrIsPolymorphed)
+ if(bNotInCombat || bIsPolymorphed) // regenerate health if not in combat or polymorphed
RegenerateHealth();
if(getPowerType() == POWER_ENERGY)
@@ -546,7 +550,7 @@ void Creature::Update(uint32 diff)
else
RegenerateMana();
- if(!bNotInCombatOrIsPolymorphed)
+ if(!bNotInCombat && !bIsPolymorphed) // only increase the timer if not in combat and not polymorphed
m_regenTimer += 2000 - diff;
}