From 52c216a016a509dbfc283ea7a3380776a0d25156 Mon Sep 17 00:00:00 2001 From: sogladev Date: Mon, 20 Jul 2026 01:55:50 +0200 Subject: [PATCH] fix(Scripts/Ulduar): Auriaya spawn and Sanctum Sentry formation (#26631) --- .../rev_1784115921544417667.sql | 35 ++++++++++++++ .../Northrend/Ulduar/Ulduar/boss_auriaya.cpp | 48 +++++++++++-------- 2 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1784115921544417667.sql diff --git a/data/sql/updates/pending_db_world/rev_1784115921544417667.sql b/data/sql/updates/pending_db_world/rev_1784115921544417667.sql new file mode 100644 index 000000000..8df70e75b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1784115921544417667.sql @@ -0,0 +1,35 @@ +-- Auriaya and Sanctum Sentry: DB-based spawns and creature_formations +SET @CGUID := 137532; +SET @AURI := 137496; +SET @X := 1938.7361; +SET @Y := 42.06429; +SET @Z := 411.5189; +SET @O := 1.818165; + +-- Update Auriaya's spawn to sniff position +UPDATE `creature` SET `position_x` = @X, `position_y` = @Y, `position_z` = @Z, `orientation` = @O WHERE `id` = 33515 AND `guid` = @AURI; + +-- Add Sanctum Sentry spawns (10-man: 2 sentries, 25-man: 4 sentries) +DELETE FROM `creature` WHERE `id` = 34014 AND `map` = 603; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES +-- 10-man sentries +(@CGUID+0, 34014, 603, 0, 0, 1, 1, 0, @X, @Y, @Z, @O, 604800, 0, 0, '', 'Sanctum Sentry - follows Auriaya', 0), +(@CGUID+1, 34014, 603, 0, 0, 1, 1, 0, @X, @Y, @Z, @O, 604800, 0, 0, '', 'Sanctum Sentry - follows Auriaya', 0), +-- 25-man sentries +(@CGUID+2, 34014, 603, 0, 0, 2, 1, 0, @X, @Y, @Z, @O, 604800, 0, 0, '', 'Sanctum Sentry - follows Auriaya', 0), +(@CGUID+3, 34014, 603, 0, 0, 2, 1, 0, @X, @Y, @Z, @O, 604800, 0, 0, '', 'Sanctum Sentry - follows Auriaya', 0), +(@CGUID+4, 34014, 603, 0, 0, 2, 1, 0, @X, @Y, @Z, @O, 604800, 0, 0, '', 'Sanctum Sentry - follows Auriaya', 0), +(@CGUID+5, 34014, 603, 0, 0, 2, 1, 0, @X, @Y, @Z, @O, 604800, 0, 0, '', 'Sanctum Sentry - follows Auriaya', 0); + +-- Set creature_formations: sentries follow Auriaya +DELETE FROM `creature_formations` WHERE `leaderGUID` = 137496; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(@AURI, @AURI, 0, 0, 2, 0, 0), +-- 10-man sentries +(@AURI, @CGUID+0, 7.0, 166, 519, 0, 0), +(@AURI, @CGUID+1, 7.0, 194, 519, 0, 0), +-- 25-man sentries +(@AURI, @CGUID+2, 7.0, 166, 519, 0, 0), +(@AURI, @CGUID+3, 7.0, 194, 519, 0, 0), +(@AURI, @CGUID+4, 12.0, 204, 519, 0, 0), +(@AURI, @CGUID+5, 12.0, 152, 519, 0, 0); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index 015436c7a..913e2c32d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -17,6 +17,7 @@ #include "AchievementCriteriaScript.h" #include "CreatureScript.h" +#include "CreatureGroups.h" #include "Player.h" #include "ScriptedCreature.h" #include "SpellAuraEffects.h" @@ -90,6 +91,7 @@ enum Misc ACTION_FERAL_DEATH = 2, ACTION_DESPAWN_ADDS = 3, ACTION_FERAL_DEATH_WITH_STACK = 4, + ACTION_SENTRY_DEATH = 5, DATA_CRAZY_CAT = 10, DATA_NINE_LIVES = 11, @@ -102,6 +104,19 @@ struct boss_auriaya : public BossAI bool _feralDied{false}; bool _nineLives{false}; + void DespawnFormationMembers(bool onEvade = false) + { + if (CreatureGroup* formation = me->GetFormation()) + for (auto const& [member, info] : formation->GetMembers()) + if (member && member != me) + { + if (onEvade) + member->DespawnOnEvade(); + else + member->DespawnOrUnsummon(); + } + } + void Reset() override { _feralDied = false; @@ -110,10 +125,10 @@ struct boss_auriaya : public BossAI EntryCheckPredicate pred(NPC_FERAL_DEFENDER); summons.DoAction(ACTION_DESPAWN_ADDS, pred); - BossAI::Reset(); + if (me->IsInEvadeMode()) + DespawnFormationMembers(true); - for (uint8 i = 0; i < RAID_MODE(2, 4); ++i) - me->SummonCreature(NPC_SANCTUM_SENTRY, me->GetPositionX() + urand(4, 12), me->GetPositionY() + urand(4, 12), me->GetPositionZ()); + BossAI::Reset(); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); } @@ -128,22 +143,6 @@ struct boss_auriaya : public BossAI return 0; } - void JustSummoned(Creature* cr) override - { - if (cr->GetEntry() == NPC_SANCTUM_SENTRY) - cr->GetMotionMaster()->MoveFollow(me, 6, rand_norm() * 2 * 3.14f); - else - cr->SetInCombatWithZone(); - - summons.Summon(cr); - } - - void SummonedCreatureDies(Creature* cr, Unit*) override - { - if (cr->GetEntry() == NPC_SANCTUM_SENTRY) - _feralDied = true; - } - void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); @@ -171,6 +170,8 @@ struct boss_auriaya : public BossAI EntryCheckPredicate pred(NPC_FERAL_DEFENDER); summons.DoAction(ACTION_DESPAWN_ADDS, pred); + DespawnFormationMembers(); + BossAI::JustDied(killer); Talk(EMOTE_DEATH); } @@ -181,6 +182,8 @@ struct boss_auriaya : public BossAI events.ScheduleEvent(EVENT_RESPAWN_FERAL_DEFENDER, 25s); else if (param == ACTION_FERAL_DEATH) _nineLives = true; + else if (param == ACTION_SENTRY_DEATH) + _feralDied = true; } void ExecuteEvent(uint32 eventId) override @@ -228,6 +231,13 @@ struct npc_auriaya_sanctum_sentry : public ScriptedAI { npc_auriaya_sanctum_sentry(Creature* creature) : ScriptedAI(creature) { } + void JustDied(Unit*) override + { + if (InstanceScript* instance = me->GetInstanceScript()) + if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA)) + auriaya->AI()->DoAction(ACTION_SENTRY_DEATH); + } + void JustEngagedWith(Unit*) override { if (InstanceScript* instance = me->GetInstanceScript())