Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core/Creatures: moved combat pulse into heartbeat handling and implemented CREATURE_STATIC_FLAG_2_FORCE_PARTY_MEMBERS_INTO_COMBAT #29946

Merged
merged 10 commits into from
Apr 28, 2024
7 changes: 7 additions & 0 deletions sql/updates/world/master/2024_04_28_00_world.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
UPDATE `creature_template_difficulty` SET `StaticFlags2`= `StaticFlags2` | 0x2 WHERE `Entry` IN (3977, 10162, 10184, 11380, 11382, 11502, 11583, 11981, 11982, 11983, 11988, 12017, 12018, 12056, 12057, 12098, 12118, 12259, 12264, 12435, 12804, 13020, 14020, 14352, 14507, 14509, 14510, 14515, 14517, 14601, 14834, 15082, 15083, 15084, 15085, 15114, 15263, 15275, 15276, 15277, 15299, 15339, 15340, 15341, 15348, 15369, 15370, 15385, 15386, 15388, 15389, 15390, 15391, 15392, 15509, 15510, 15511, 15516, 15517, 15543, 15544, 15550, 15589, 15608, 15687, 15688, 15689, 15690, 15691, 15727, 15928, 15929, 15930, 15931, 15932, 15936, 15952, 15953, 15954, 15956, 15989, 15990, 16011, 16028, 16042, 16060, 16061, 16062, 16063, 16064, 16065, 16097, 16101, 16102, 16103, 16104, 16151, 16152, 16179, 16180, 16181, 16457, 16524, 16775, 16776, 16777, 16778, 17225, 17256, 17257, 17307, 17521, 17533, 17534, 17535, 17536, 17537, 17543, 17546, 17547, 17548, 17602, 17767, 17808, 17842, 17888, 17968, 18040, 18041, 18168, 18254, 18472, 18473, 18780, 18805, 18829, 18831, 18832, 18834, 18835, 18836, 18847, 19044, 19389, 19514, 19516, 19622, 20051, 20060, 20062, 20063, 20064, 20905, 20906, 20908, 20909, 20910, 20911, 21174, 21212, 21213, 21214, 21215, 21216, 21217, 21219, 21253, 21268, 21269, 21270, 21271, 21272, 21273, 21274, 21350, 21785, 21845, 21875, 21932, 21958, 21964, 21965, 21966, 22009, 22036, 22055, 22056, 22140, 22361, 22409, 22841, 22856, 22871, 22887, 22898, 22917, 22947, 22948, 22949, 22950, 22951, 22952, 23035, 23054, 23126, 23195, 23394, 23418, 23419, 23420, 23576, 23812, 23863, 24143, 24850, 24882, 24892, 25038, 25165, 25166, 25315, 25319, 25740, 25741, 25840, 25960, 26631, 26632, 26650, 27656, 27696, 27767, 27769, 27770, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 28546, 28859, 28860, 29311, 30449, 30451, 30452, 30549, 31125, 32845, 32857, 32865, 32867, 32871, 32906, 32913, 32914, 32915, 32927, 32930, 32933, 32934, 33113, 33118, 33139, 33186, 33264, 33271, 33280, 33288, 33293, 33329, 33432, 33515, 33524, 33651, 33663, 33667, 33670, 33768, 33862, 33993, 34014, 34034, 34035, 34055, 34297, 34441, 34444, 34445, 34447, 34448, 34449, 34450, 34451, 34453, 34454, 34455, 34456, 34458, 34459, 34460, 34461, 34463, 34465, 34466, 34467, 34468, 34469, 34470, 34471, 34472, 34473, 34474, 34475, 34496, 34497, 34515, 34564, 34567, 34568, 34780, 34796, 34797, 34799, 34815, 34826, 34921, 35013, 35144, 35145, 36497, 36502, 36549, 36597, 36612, 36626, 36627, 36658, 36678, 36791, 36853, 36855, 36897, 36899, 37022, 37126, 37530, 37535, 37562, 37672, 37697, 37813, 37868, 37886, 37890, 37907, 37934, 37949, 37955, 37970, 37972, 37973, 38004, 38009, 38010, 38135, 38136, 38216, 38248, 38285, 38308, 38309, 38367, 38386, 38433, 38569, 38572, 38667, 38752, 38883, 39165, 39231, 39378, 39425, 39428, 39587, 39665, 39679, 39698, 39700, 39705, 39731, 39732, 39746, 39747, 39751, 39800, 39814, 39863, 39899, 40142, 40586, 40765, 40825, 40960, 41270, 41376, 41378, 41379, 41442, 41570, 42166, 42178, 42179, 42180, 42333, 42347, 42897, 43214, 43296, 43324, 43612, 43614, 43622, 43686, 43687, 43688, 43689, 43707, 43719, 43735, 43873, 43875, 43878, 43888, 43922, 44023, 44031, 44600, 44819, 44864, 44881, 45213, 45858, 45870, 45871, 45872, 45992, 45993, 46753, 46965, 47120, 48233, 48571, 49930, 49938, 50264, 51398, 51410, 51412, 51413, 51414, 51415, 51437, 51438, 51449, 51452, 51599, 51932, 52148, 52150, 52363, 52409, 52498, 52530, 52558, 52571, 52675, 53494, 53682, 53683, 53691, 53694, 53695, 53772, 53785, 53825, 53833, 53879, 53920, 54192, 54199, 54258, 54404, 54432, 55265, 55294, 55308, 55312, 55689, 55869, 56173, 56427, 56439, 56448, 56541, 56589, 56636, 56637, 56710, 56717, 56719, 56732, 56747, 56877, 56884, 56906, 57694, 57773, 57962, 58632, 58633, 58722, 58739, 58826, 59051, 59080, 59150, 59153, 59184, 59220, 59223, 59303, 59479, 59613, 59789, 59915, 60009, 60016, 60018, 60019, 60020, 60040, 60043, 60047, 60051, 60089, 60143, 60399, 60400, 60410, 60583, 60585, 60586, 60648, 60701, 60708, 60709, 60710, 60788, 60847, 60999, 61174, 61243, 61344, 61398, 61421, 61423, 61427, 61429, 61442, 61444, 61445, 61478, 61485, 61567, 61634, 61707, 62164, 62205, 62397, 62402, 62405, 62408, 62442, 62511, 62533, 62543, 62637, 62711, 62837, 62848, 62980, 62983, 63025, 63026, 63191, 63297, 63311, 63312, 63313, 63316, 63318, 63435, 63539, 63859, 63872, 64280, 64281, 64286, 64560, 64564, 64565, 64894, 65173, 65174, 65201, 65329, 65498, 65499, 65500, 66091, 66746, 66920, 67374, 67385, 67390, 67426, 67559, 67567, 67705, 67827, 67853, 67977, 68036, 68066, 68067, 68068, 68069, 68078, 68079, 68080, 68081, 68122, 68123, 68124, 68125, 68151, 68159, 68160, 68161, 68162, 68177, 68208, 68397, 68476, 68904, 68905, 69012, 69013, 69014, 69017, 69078, 69095, 69131, 69132, 69134, 69232, 69427, 69465, 69473, 69650, 69653, 69699, 69700, 69701, 69712, 69756, 69781, 69964, 70135, 70212, 70229, 70235, 70238, 70247, 70248, 70249, 70250, 70251, 70252, 70271, 70455, 70468, 70469, 70474, 70475, 70590, 70592, 70640, 70683, 70762, 70763, 70893, 70959, 70963, 71030, 71123, 71133, 71152, 71153, 71154, 71155, 71156, 71157, 71158, 71160, 71161, 71212, 71213, 71214, 71215, 71216, 71217, 71218, 71219, 71220, 71276, 71327, 71328, 71329, 71330, 71454, 71466, 71475, 71479, 71480, 71504, 71515, 71529, 71543, 71592, 71734, 71858, 71859, 71865, 71889, 71967, 72001, 72002, 72003, 72051, 72065, 72224, 72249, 72276, 72349, 72436, 72550, 72616, 72619, 72620, 72726, 72748, 72749, 72750, 73081, 73103, 73224, 73334, 73462, 73524, 73620, 73663, 73958);
-- Manually added flag for currently scripted post MoP raid bosses
UPDATE `creature_template_difficulty` SET `StaticFlags2`= `StaticFlags2` | 0x2 WHERE `Entry` = 122450; -- Garothi Worldbreaker
UPDATE `creature_template_difficulty` SET `StaticFlags2`= `StaticFlags2` | 0x2 WHERE `Entry` = 114323; -- Guarm
UPDATE `creature_template_difficulty` SET `StaticFlags2`= `StaticFlags2` | 0x2 WHERE `Entry` = 201261; -- Kazzara the Hellforged
UPDATE `creature_template_difficulty` SET `StaticFlags2`= `StaticFlags2` | 0x2 WHERE `Entry` = 175732; -- Sylvanas Windrunner
UPDATE `creature_template_difficulty` SET `StaticFlags2`= `StaticFlags2` | 0x2 WHERE `Entry` = 181954; -- Anduin Wrynn
3 changes: 0 additions & 3 deletions src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,6 @@ void BossAI::_Reset()
if (!me->IsAlive())
return;

me->SetCombatPulseDelay(0);
me->ResetLootMode();
events.Reset();
summons.DespawnAll();
Expand Down Expand Up @@ -579,9 +578,7 @@ void BossAI::_JustEngagedWith(Unit* who)
instance->SetBossState(_bossId, IN_PROGRESS);
}

me->SetCombatPulseDelay(5);
me->setActive(true);
DoZoneInCombat();
ScheduleTasks();
}

Expand Down
73 changes: 44 additions & 29 deletions src/server/game/Entities/Creature/Creature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)

Creature::Creature(bool isWorldObject) : Unit(isWorldObject), MapObject(), m_PlayerDamageReq(0), m_dontClearTapListOnEvade(false), _pickpocketLootRestore(0),
m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_ignoreCorpseDecayRatio(false), m_wanderDistance(0.0f),
m_boundaryCheckTime(2500), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE),
m_boundaryCheckTime(2500), 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_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(),
Expand Down Expand Up @@ -848,34 +848,6 @@ void Creature::Update(uint32 diff)
m_boundaryCheckTime -= diff;
}

// if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now
if (m_combatPulseDelay > 0 && IsEngaged() && GetMap()->IsDungeon())
{
if (diff > m_combatPulseTime)
m_combatPulseTime = 0;
else
m_combatPulseTime -= diff;

if (m_combatPulseTime == 0)
{
Map::PlayerList const& players = GetMap()->GetPlayers();
if (!players.isEmpty())
for (Map::PlayerList::const_iterator it = players.begin(); it != players.end(); ++it)
{
if (Player* player = it->GetSource())
{
if (player->IsGameMaster())
continue;

if (player->IsAlive() && IsHostileTo(player))
EngageWithTarget(player);
}
}

m_combatPulseTime = m_combatPulseDelay * IN_MILLISECONDS;
}
}

Unit::AIUpdateTick(diff);

DoMeleeAttackIfReady();
Expand Down Expand Up @@ -936,6 +908,14 @@ void Creature::Update(uint32 diff)
}
}

void Creature::Heartbeat()
{
Unit::Heartbeat();

// Creatures with CREATURE_STATIC_FLAG_2_FORCE_PARTY_MEMBERS_INTO_COMBAT periodically force party members into combat
ForcePartyMembersIntoCombat();
}

void Creature::Regenerate(Powers power)
{
uint32 curValue = GetPower(power);
Expand Down Expand Up @@ -3644,6 +3624,9 @@ void Creature::AtEngage(Unit* target)
ai->JustEngagedWith(target);
if (CreatureGroup* formation = GetFormation())
formation->MemberEngagingTarget(this, target);

// Creatures with CREATURE_STATIC_FLAG_2_FORCE_PARTY_MEMBERS_INTO_COMBAT periodically force party members into combat
ForcePartyMembersIntoCombat();

This comment was marked as resolved.

}

void Creature::AtDisengage()
Expand All @@ -3662,6 +3645,38 @@ void Creature::AtDisengage()
}
}

void Creature::ForcePartyMembersIntoCombat()
{
if (!_staticFlags.HasFlag(CREATURE_STATIC_FLAG_2_FORCE_PARTY_MEMBERS_INTO_COMBAT) || !IsEngaged())
return;

Trinity::Containers::FlatSet<Group const*> partiesToForceIntoCombat;
for (auto const& [_, combatReference] : GetCombatManager().GetPvECombatRefs())
{
if (combatReference->IsSuppressedFor(this))
continue;

Player* player = Object::ToPlayer(combatReference->GetOther(this));
if (!player || player->IsGameMaster())
continue;

if (Group const* group = player->GetGroup())
partiesToForceIntoCombat.insert(group);
}

for (Group const* partyToForceIntoCombat : partiesToForceIntoCombat)
{
for (GroupReference const* ref = partyToForceIntoCombat->GetFirstMember(); ref != nullptr; ref = ref->next())
{
Player* player = ref->GetSource();
if (!player || !player->IsInWorld() || player->GetMap() != GetMap() || player->IsGameMaster())
continue;

EngageWithTarget(player);
}
}
}

bool Creature::IsEscorted() const
{
if (CreatureAI const* ai = AI())
Expand Down
12 changes: 3 additions & 9 deletions src/server/game/Entities/Creature/Creature.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }

void Update(uint32 time) override; // overwrited Unit::Update
void Heartbeat() override;

void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist = nullptr) const;
bool IsSpawnedOnTransport() const { return m_creatureData && m_creatureData->mapId != GetMapId(); }

Expand Down Expand Up @@ -342,13 +344,6 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
void SetWanderDistance(float dist) { m_wanderDistance = dist; }

void DoImmediateBoundaryCheck() { m_boundaryCheckTime = 0; }
uint32 GetCombatPulseDelay() const { return m_combatPulseDelay; }
void SetCombatPulseDelay(uint32 delay) // (secs) interval at which the creature pulses the entire zone into combat (only works in dungeons)
{
m_combatPulseDelay = delay;
if (m_combatPulseTime == 0 || m_combatPulseTime > delay)
m_combatPulseTime = delay;
}

void SendZoneUnderAttackMessage(Player* attacker);

Expand Down Expand Up @@ -441,6 +436,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma

bool IsThreatFeedbackDisabled() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK); }
void SetNoThreatFeedback(bool noThreatFeedback) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK, noThreatFeedback); }
void ForcePartyMembersIntoCombat();

void OverrideSparringHealthPct(float healthPct) { _sparringHealthPct = healthPct; }
void OverrideSparringHealthPct(std::vector<float> const& healthPct);
Expand Down Expand Up @@ -493,8 +489,6 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool m_ignoreCorpseDecayRatio;
float m_wanderDistance;
uint32 m_boundaryCheckTime; // (msecs) remaining time for next evade boundary check
uint32 m_combatPulseTime; // (msecs) remaining time for next zone-in-combat pulse
uint32 m_combatPulseDelay; // (secs) how often the creature puts the entire zone in combat (only works in dungeons)

ReactStates m_reactState; // for AI, not charmInfo
void RegenerateHealth();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,6 @@ struct boss_headless_horseman : public ScriptedAI

void JustEngagedWith(Unit* /*who*/) override
{
me->SetCombatPulseDelay(5);
me->setActive(true);
_events.ScheduleEvent(EVENT_HORSEMAN_CLEAVE, 13s, 0, PHASE_1);
_events.ScheduleEvent(EVENT_RANDOM_LAUGH, 30s, 60s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,6 @@ struct npc_gatewatcher_petAI : public ScriptedAI
}
_JustEngagedWith();
ScriptedAI::JustEngagedWith(who);
me->SetCombatPulseDelay(5);
}

void SetData(uint32 data, uint32 value) override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,6 @@ struct boss_faction_championsAI : public BossAI
void JustEngagedWith(Unit* /*who*/) override
{
DoCast(me, SPELL_ANTI_AOE, true);
me->SetCombatPulseDelay(5);
me->setActive(true);
DoZoneInCombat();
if (Creature* pChampionController = instance->GetCreature(DATA_FACTION_CRUSADERS))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ struct boss_jaraxxus : public BossAI

void Reset() override
{
me->SetCombatPulseDelay(0);
me->ResetLootMode();
events.Reset();
summons.DespawnAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,6 @@ struct boss_northrend_beastsAI : public BossAI
events.SetPhase(PHASE_EVENT);
summons.DespawnAll();
me->SetReactState(REACT_PASSIVE);
me->SetCombatPulseDelay(0);
HandleInitialMovement();
}

Expand Down Expand Up @@ -248,7 +247,6 @@ struct boss_northrend_beastsAI : public BossAI

void JustEngagedWith(Unit* /*who*/) override
{
me->SetCombatPulseDelay(5);
me->setActive(true);
ScheduleTasks();
HandleInstanceProgress();
Expand Down Expand Up @@ -356,10 +354,7 @@ struct boss_gormok : public boss_northrend_beastsAI
me->SetReactState(REACT_AGGRESSIVE);
// Npc that should keep raid in combat while boss change
if (Creature* combatStalker = me->SummonCreature(NPC_BEASTS_COMBAT_STALKER, CombatStalkerPosition))
{
DoZoneInCombat(combatStalker);
combatStalker->SetCombatPulseDelay(5);
}
DoZoneInCombat();
events.SetPhase(PHASE_COMBAT);
DoCastSelf(SPELL_TANKING_GORMOK, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,6 @@ struct boss_twin_baseAI : public BossAI

Talk(SAY_AGGRO);
DoCast(me, SurgeSpellId);
me->SetCombatPulseDelay(5);
me->setActive(true);

events.ScheduleEvent(EVENT_TWIN_SPIKE, 20s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,6 @@ struct boss_blood_council_controller : public BossAI
return;
}

me->SetCombatPulseDelay(5);
me->setActive(true);
DoZoneInCombat();
instance->SetBossState(DATA_BLOOD_PRINCE_COUNCIL, IN_PROGRESS);
Expand Down Expand Up @@ -442,7 +441,6 @@ struct BloodPrincesBossAI : public BossAI
{
events.Reset();
summons.DespawnAll();
me->SetCombatPulseDelay(0);

me->SetImmuneToPC(false);
_isEmpowered = false;
Expand All @@ -452,7 +450,6 @@ struct BloodPrincesBossAI : public BossAI

void JustEngagedWith(Unit* /*who*/) override
{
me->SetCombatPulseDelay(5);
me->setActive(true);
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BLOOD_PRINCES_CONTROL)))
DoZoneInCombat(controller);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,6 @@ struct boss_lady_deathwhisper : public BossAI
}

_phase = PHASE_ONE;
me->SetCombatPulseDelay(5);
me->setActive(true);
DoZoneInCombat();
scheduler.CancelGroup(GROUP_INTRO);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ struct boss_professor_putricide : public BossAI
Talk(SAY_AGGRO);
DoCast(me, SPELL_OOZE_TANK_PROTECTION, true);
DoZoneInCombat(me);
me->SetCombatPulseDelay(5);
instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, IN_PROGRESS);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,6 @@ struct boss_sindragosa : public BossAI
DoCastSelf(SPELL_PERMAEATING_CHILL);
Talk(SAY_AGGRO);
instance->SetBossState(DATA_SINDRAGOSA, IN_PROGRESS);
me->SetCombatPulseDelay(5);
me->setActive(true);
me->SetFarVisible(true);
DoZoneInCombat();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,6 @@ struct boss_the_lich_king : public BossAI
}

me->setActive(true);
me->SetCombatPulseDelay(5);
DoZoneInCombat();

events.SetPhase(PHASE_ONE);
Expand Down
2 changes: 0 additions & 2 deletions src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@ struct boss_four_horsemen_baseAI : public BossAI
case ACTION_BEGIN_FIGHTING:
if (_ourMovementFinished)
break;
me->SetCombatPulseDelay(5);
BeginFighting();
_ourMovementFinished = true;
break;
Expand Down Expand Up @@ -305,7 +304,6 @@ struct boss_four_horsemen_baseAI : public BossAI
_ourMovementFinished = false;
me->SetReactState(REACT_AGGRESSIVE);
SetCombatMovement(false);
me->SetCombatPulseDelay(0);
me->ResetLootMode();
events.Reset();
summons.DespawnAll();
Expand Down
3 changes: 0 additions & 3 deletions src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -329,10 +329,7 @@ struct boss_gothik : public BossAI
{
summons.Summon(summon);
if (me->IsInCombat())
{
summon->AI()->DoAction(_gateIsOpen ? ACTION_GATE_OPENED : ACTION_ACQUIRE_TARGET);
summon->SetCombatPulseDelay(5);
}
else
summon->DespawnOrUnsummon();
}
Expand Down
2 changes: 0 additions & 2 deletions src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,6 @@ struct npc_kelthuzad_guardian : public ScriptedAI
me->SetVisible(false);
me->SetHomePosition(me->GetPosition());
DoZoneInCombat();
me->SetCombatPulseDelay(5);
_visibilityTimer = 2 * IN_MILLISECONDS;
_bloodTapTimer = 25 * IN_MILLISECONDS;
break;
Expand Down Expand Up @@ -781,7 +780,6 @@ struct npc_kelthuzad_guardian : public ScriptedAI

void Reset() override
{
me->SetCombatPulseDelay(0);
ScriptedAI::Reset();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,14 +317,12 @@ struct PalehoofMinionsBossAI : public BossAI

void Reset() override
{
me->SetCombatPulseDelay(0);
events.Reset();
DoCastSelf(SPELL_FREEZE, true);
}

void JustEngagedWith(Unit* /*who*/) override
{
me->SetCombatPulseDelay(5);
me->setActive(true);
ScheduleTasks();
}
Expand Down