From 4cb25b4b5e057e161d016b58606145a3fa901d57 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:53:17 +0200 Subject: [PATCH] fix(Scripts/DurnholdeKeep): Captain Skarloc spawning double/wrong adds (#17667) * fix(Scripts/DurnholdeKeep): Captain Skarloc spawning double/wrong adds * Ss * DoForAllSummons --- .../boss_captain_skarloc.cpp | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp index 8cfe6d314..6082152a4 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp @@ -61,11 +61,13 @@ struct boss_captain_skarloc : public BossAI } SummonList summons; + bool _spawnedAdds; void Reset() override { _Reset(); summons.DespawnAll(); + _spawnedAdds = false; } void JustSummoned(Creature* summon) override @@ -108,27 +110,31 @@ struct boss_captain_skarloc : public BossAI if (type != ESCORT_MOTION_TYPE) return; - // Xinef: we can rely here on internal counting - if (id == 1) + if (!_spawnedAdds) { - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2038.549f, 273.303f, 63.420f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2032.810f, 269.416f, 63.561f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); - } - else if (id == 2) - { - me->Dismount(); - me->SetWalk(true); - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) + if (id == 1) { - if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) - { - summon->SetWalk(true); - } + me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2038.549f, 273.303f, 63.420f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); + me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2032.810f, 269.416f, 63.561f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); } - if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN)) + else if (id == 2) { - mount->SetImmuneToNPC(true); - mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->Dismount(); + me->SetWalk(true); + summons.DoForAllSummons([&](WorldObject* summon) + { + if (summon) + { + summon->ToCreature()->SetWalk(true); + } + }); + if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN)) + { + mount->SetImmuneToNPC(true); + mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } + + _spawnedAdds = true; } } @@ -140,17 +146,17 @@ struct boss_captain_skarloc : public BossAI { me->SetImmuneToAll(false); me->SetInCombatWithZone(); - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) + summons.DoForAllSummons([&](WorldObject* summon) { - if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) + if (Creature* adds = summon->ToCreature()) { - if (summon->GetEntry() != NPC_SKARLOC_MOUNT) + if (adds->GetEntry() != NPC_SKARLOC_MOUNT) { - summon->SetImmuneToAll(false); - summon->SetInCombatWithZone(); + adds->SetImmuneToAll(false); + adds->SetInCombatWithZone(); } } - } + }); }, 8s); } }