aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp25
-rw-r--r--src/server/game/Entities/Creature/Creature.h9
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp2
11 files changed, 31 insertions, 31 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 44414d5b5ad..94ebacb2ab2 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1953,7 +1953,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
for (WorldObject* target : targets)
if (IsCreature(target))
- target->ToCreature()->setRegeneratingHealth(e.action.setHealthRegen.regenHealth != 0);
+ target->ToCreature()->SetRegenerateHealth(e.action.setHealthRegen.regenHealth != 0);
break;
}
case SMART_ACTION_SET_ROOT:
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 06e93dd3160..22b7fe930ce 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -281,14 +281,12 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
return true;
}
-Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(),
-m_groupLootTimer(0), m_PlayerDamageReq(0),
-_pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0),
-m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_boundaryCheckTime(2500), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE),
-m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(UI64LIT(0)), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
-m_AlreadySearchedAssistance(false), m_regenHealth(true), m_cannotReachTarget(false), m_cannotReachTimer(0), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL),
-m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_waypointID(0), m_path_id(0), m_formation(nullptr), m_triggerJustAppeared(true), m_respawnCompatibilityMode(false), m_focusSpell(nullptr), m_focusDelay(0), m_shouldReacquireTarget(false), m_suppressedOrientation(0.0f),
-_lastDamagedTime(0)
+Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(), m_groupLootTimer(0), m_PlayerDamageReq(0), _pickpocketLootRestore(0),
+ m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_boundaryCheckTime(2500), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE),
+ m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(UI64LIT(0)), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_cannotReachTarget(false), m_cannotReachTimer(0),
+ m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_waypointID(0), m_path_id(0),
+ m_formation(nullptr), m_triggerJustAppeared(true), m_respawnCompatibilityMode(false), m_focusSpell(nullptr), m_focusDelay(0), m_shouldReacquireTarget(false), m_suppressedOrientation(0.0f), _lastDamagedTime(0),
+ _regenerateHealth(true), _regenerateHealthLock(false)
{
m_regenTimer = CREATURE_REGEN_INTERVAL;
@@ -583,7 +581,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
CreatureTemplate const* cInfo = GetCreatureTemplate();
- m_regenHealth = cInfo->RegenHealth;
+ _regenerateHealth = cInfo->RegenHealth;
// creatures always have melee weapon ready if any unless specified otherwise
if (!GetCreatureAddon())
@@ -856,7 +854,7 @@ void Creature::Update(uint32 diff)
if (m_regenTimer == 0)
{
- bool bInCombat = IsInCombat() && (!GetVictim() || // if IsInCombat() is true and this has no victim
+ bool bInCombat = IsInCombat() && (!GetVictim() || // if IsInCombat() is true and this has no victim
!EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() || // or the victim/owner/charmer is not a player
!EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->IsGameMaster()); // or the victim/owner/charmer is not a GameMaster
@@ -940,7 +938,7 @@ void Creature::Regenerate(Powers power)
void Creature::RegenerateHealth()
{
- if (!isRegeneratingHealth())
+ if (!CanRegenerateHealth())
return;
uint32 curValue = GetHealth();
@@ -1752,8 +1750,11 @@ void Creature::LoadEquipment(int8 id, bool force /*= true*/)
void Creature::SetSpawnHealth()
{
+ if (_regenerateHealthLock)
+ return;
+
uint32 curhealth;
- if (m_creatureData && !m_regenHealth)
+ if (m_creatureData && !_regenerateHealth)
{
curhealth = m_creatureData->curhealth;
if (curhealth)
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 1efa1efa566..5798ea814e0 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -271,8 +271,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool hasQuest(uint32 quest_id) const override;
bool hasInvolvedQuest(uint32 quest_id) const override;
- bool isRegeneratingHealth() { return m_regenHealth; }
- void setRegeneratingHealth(bool regenHealth) { m_regenHealth = regenHealth; }
+ bool CanRegenerateHealth() { return !_regenerateHealthLock && _regenerateHealth; }
+ void SetRegenerateHealth(bool value) { _regenerateHealthLock = !value; }
virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; }
virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const;
float GetPetChaseDistance() const;
@@ -381,7 +381,6 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool m_AlreadyCallAssistance;
bool m_AlreadySearchedAssistance;
- bool m_regenHealth;
bool m_cannotReachTarget;
uint32 m_cannotReachTimer;
bool m_AI_locked;
@@ -424,6 +423,10 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
time_t _lastDamagedTime; // Part of Evade mechanics
CreatureTextRepeatGroup m_textRepeat;
+
+ // Regenerate health
+ bool _regenerateHealth; // Set on creation
+ bool _regenerateHealthLock; // Dynamically set
};
class TC_GAME_API AssistDelayEvent : public BasicEvent
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
index 2392d8e609c..041961ce91c 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
@@ -82,11 +82,7 @@ void HomeMovementGenerator<Creature>::DoFinalize(Creature* owner)
owner->SetWalk(true);
owner->LoadCreaturesAddon();
owner->AI()->JustReachedHome();
- if (owner->isRegeneratingHealth())
- {
- owner->SetFullHealth();
- owner->SetPower(POWER_MANA, owner->GetMaxPower(POWER_MANA));
- }
+ owner->SetSpawnHealth();
}
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index db30bde2134..837863205d2 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -310,7 +310,7 @@ struct boss_kalecgos : public BossAI
case EVENT_OUTRO_START:
events.Reset();
events.SetPhase(PHASE_OUTRO);
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
me->SetReactState(REACT_PASSIVE);
me->InterruptNonMeleeSpells(true);
me->RemoveAllAttackers();
diff --git a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp
index d25cb2f9fed..ed287bbe846 100644
--- a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp
@@ -445,7 +445,7 @@ public:
{
if (Creature* target = GetHitCreature())
{
- target->setRegeneratingHealth(false);
+ target->SetRegenerateHealth(false);
target->SetHealth(target->CountPctFromMaxHealth(10));
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index dbd4cb47909..a071eb87f2b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -551,7 +551,7 @@ struct gunship_npc_AI : public ScriptedAI
Instance(creature->GetInstanceScript()), Slot(nullptr), Index(uint32(-1))
{
BurningPitchId = Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_A : SPELL_BURNING_PITCH_H;
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
}
void SetData(uint32 type, uint32 data) override
@@ -677,7 +677,7 @@ class npc_gunship : public CreatureScript
_teamInInstance(creature->GetInstanceScript()->GetData(DATA_TEAM_IN_INSTANCE)),
_summonedFirstMage(false), _died(false)
{
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
}
void DamageTaken(Unit* /*source*/, uint32& damage) override
@@ -852,7 +852,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
{
_controller.ResetSlots(HORDE);
_controller.SetTransport(creature->GetTransport());
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
me->m_CombatDistance = 70.0f;
_firstMageCooldown = time(nullptr) + 60;
_axethrowersYellCooldown = time_t(0);
@@ -1121,7 +1121,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
{
_controller.ResetSlots(ALLIANCE);
_controller.SetTransport(creature->GetTransport());
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
me->m_CombatDistance = 70.0f;
_firstMageCooldown = time(nullptr) + 60;
_riflemanYellCooldown = time_t(0);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 3853594ca05..ec543fc1768 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -872,7 +872,7 @@ struct npc_expedition_defender : public ScriptedAI
{
npc_expedition_defender(Creature* creature) : ScriptedAI(creature), _myPositionNumber(0), _instance(creature->GetInstanceScript())
{
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
}
void Reset() override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index 6de234a6593..4e35b0b4fc5 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -344,7 +344,7 @@ public:
void Reset() override
{
me->SetReactState(REACT_PASSIVE);
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
me->SetSpeedRate(MOVE_RUN, 2.5f);
}
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index bf4caf3128f..55884eab019 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -432,7 +432,7 @@ public:
void Reset() override
{
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
DoCast(SPELL_THREAT_PULSE);
Talk(BANNER_SAY);
events.ScheduleEvent(EVENT_SPAWN, 3000);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
index aa5a5a9a170..b668c1a7989 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp
@@ -309,7 +309,7 @@ public:
void Initialize()
{
me->SetReactState(REACT_PASSIVE);
- me->setRegeneratingHealth(false);
+ me->SetRegenerateHealth(false);
DoCast(me, SPELL_FROZEN_CORE_GETS_HIT);
DoCast(me, SPELL_ICE_SPEAR_AURA);
}