From 01be5d1860785d9c188ce7d5750b4cc0ffbb4705 Mon Sep 17 00:00:00 2001 From: maximius Date: Sun, 27 Sep 2009 15:48:30 -0700 Subject: *Do not regenerate the health of controlled or charmed creatures instantly out of combat --HG-- branch : trunk --- src/game/Creature.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/game/Creature.cpp') 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; } -- cgit v1.2.3