From 65ad4b1b49f2a7a01ee0094be029913bfe2f1099 Mon Sep 17 00:00:00 2001 From: Fazzul Date: Sun, 20 Jul 2025 11:40:08 -0500 Subject: [PATCH] fix(Scripts/Ulduar): Phase 1 of Thorim (#22037) --- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 79 +++++++++++-------- 1 file changed, 47 insertions(+), 32 deletions(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 6be19da41..d2b1aee4c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -187,17 +187,20 @@ enum ThorimEvents EVENT_THORIM_CHARGE_ORB = 3, EVENT_THORIM_LIGHTNING_ORB = 4, EVENT_THORIM_NOT_REACH_IN_TIME = 5, - EVENT_THORIM_FILL_ARENA = 6, - EVENT_THORIM_UNBALANCING_STRIKE = 7, - EVENT_THORIM_LIGHTNING_CHARGE = 8, - EVENT_THORIM_CHAIN_LIGHTNING = 9, - EVENT_THORIM_BERSERK = 10, - EVENT_THORIM_AGGRO = 11, - EVENT_THORIM_AGGRO2 = 12, - EVENT_THORIM_OUTRO1 = 13, - EVENT_THORIM_OUTRO2 = 14, - EVENT_THORIM_OUTRO3 = 15, - EVENT_THORIM_OUTRO4 = 16, + EVENT_THORIM_ARENA_SPAWN_WARBRINGER = 6, + EVENT_THORIM_ARENA_SPAWN_EVOKER = 7, + EVENT_THORIM_ARENA_SPAWN_COMMONER = 8, + EVENT_THORIM_ARENA_SPAWN_CHAMPION = 9, + EVENT_THORIM_UNBALANCING_STRIKE = 10, + EVENT_THORIM_LIGHTNING_CHARGE = 11, + EVENT_THORIM_CHAIN_LIGHTNING = 12, + EVENT_THORIM_BERSERK = 13, + EVENT_THORIM_AGGRO = 14, + EVENT_THORIM_AGGRO2 = 15, + EVENT_THORIM_OUTRO1 = 16, + EVENT_THORIM_OUTRO2 = 17, + EVENT_THORIM_OUTRO3 = 18, + EVENT_THORIM_OUTRO4 = 19, EVENT_DR_ACOLYTE_GH = 20, EVENT_DR_ACOLYTE_HS = 21, @@ -323,8 +326,6 @@ enum Misc const Position Middle = {2134.68f, -263.13f, 419.44f, M_PI * 1.5f}; -const uint32 RollTable[3] = { 32877, 32878, 32876 }; - class boss_thorim : public CreatureScript { public: @@ -561,7 +562,7 @@ public: me->AddThreat(player, 1000.0f); } - if (damage >= me->GetHealth()) + if (damage >= me->GetHealth()|| me->GetHealth()<2) { damage = 0; if (!_encounterFinished) @@ -604,22 +605,22 @@ public: } } - void SpawnArenaNPCs() + void SpawnAnArenaNPC(uint32 arenaNpc) { Creature* cr; - uint8 rnd; - if (_spawnCommoners || urand(0, 2)) - _spawnCommoners = !_spawnCommoners; + uint8 rnd = urand(0,13); + if ((cr = me->SummonCreature(arenaNpc, ArenaNPCs[rnd], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000))) + cr->GetMotionMaster()->MoveJump( + Middle.GetPositionX() + urand(19, 24) * cos(Middle.GetAngle(cr)), + Middle.GetPositionY() + urand(19, 24) * std::sin(Middle.GetAngle(cr)), + Middle.GetPositionZ(), 20, 20); + } - for (uint8 i = 0; i < (_spawnCommoners ? 7 : 2); ++i) - { - rnd = urand(0, 13); - if ((cr = me->SummonCreature((_spawnCommoners ? NPC_DARK_RUNE_COMMONER : RollTable[urand(0, 2)]), ArenaNPCs[rnd], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000))) - cr->GetMotionMaster()->MoveJump( - Middle.GetPositionX() + urand(19, 24) * cos(Middle.GetAngle(cr)), - Middle.GetPositionY() + urand(19, 24) * std::sin(Middle.GetAngle(cr)), - Middle.GetPositionZ(), 20, 20); - } + void SpawnCommoners() + { + uint8 rnd = urand(6,7); + for (uint8 i = 0; i < rnd; ++i) + SpawnAnArenaNPC(NPC_DARK_RUNE_COMMONER); } void SpellHit(Unit* caster, SpellInfo const* spellInfo) override @@ -685,10 +686,12 @@ public: { events.ScheduleEvent(EVENT_THORIM_STORMHAMMER, 8s, 0, EVENT_PHASE_START); events.ScheduleEvent(EVENT_THORIM_CHARGE_ORB, 14s, 0, EVENT_PHASE_START); - events.ScheduleEvent(EVENT_THORIM_FILL_ARENA, 0ms, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_ARENA_SPAWN_WARBRINGER, 0ms, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_ARENA_SPAWN_EVOKER, 5s, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_ARENA_SPAWN_COMMONER, 7s, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_ARENA_SPAWN_CHAMPION, 10s, 0, EVENT_PHASE_START); events.ScheduleEvent(EVENT_THORIM_LIGHTNING_ORB, 5s, 0, EVENT_PHASE_START); // checked every 5 secs if there are players on arena events.ScheduleEvent(EVENT_THORIM_NOT_REACH_IN_TIME, 5min, 0, EVENT_PHASE_START); - EntryCheckPredicate pred(NPC_SIF); summons.DoAction(ACTION_SIF_START_DOMINION, pred); break; @@ -724,9 +727,21 @@ public: me->CastSpell(me, SPELL_BERSERK_FRIENDS, true); me->SummonCreature(NPC_LIGHTNING_ORB, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); break; - case EVENT_THORIM_FILL_ARENA: - SpawnArenaNPCs(); - events.Repeat(10s); + case EVENT_THORIM_ARENA_SPAWN_WARBRINGER: + SpawnAnArenaNPC(NPC_DARK_RUNE_WARBRINGER); + events.Repeat(15s); + break; + case EVENT_THORIM_ARENA_SPAWN_EVOKER: + SpawnAnArenaNPC(NPC_DARK_RUNE_EVOKER); + events.Repeat(20s); + break; + case EVENT_THORIM_ARENA_SPAWN_COMMONER: + SpawnCommoners(); + events.Repeat(21s); + break; + case EVENT_THORIM_ARENA_SPAWN_CHAMPION: + SpawnAnArenaNPC(NPC_DARK_RUNE_CHAMPION); + events.Repeat(25s); break; case EVENT_THORIM_UNBALANCING_STRIKE: me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false);