Skip to content

Commit 6192d4f

Browse files
Merge AzerothCore 3.3.5 to ElunaAzerothcore [skip ci]
2 parents 6b9ceda + d20b9db commit 6192d4f

9 files changed

Lines changed: 189 additions & 210 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- DB update 2026_02_24_00 -> 2026_03_30_00
2+
--
3+
ALTER TABLE `bugreport`
4+
ADD COLUMN `State` TINYINT NOT NULL DEFAULT 1,
5+
ADD COLUMN `Assignee` VARCHAR(255) DEFAULT NULL,
6+
ADD COLUMN `Comment` LONGTEXT DEFAULT NULL;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
-- DB update 2026_03_29_02 -> 2026_03_30_00
2+
-- Move Majordomo Executus Ragnaros summoning gossip chain to database
3+
-- Previously handled entirely in C++ script (sGossipHello/sGossipSelect)
4+
5+
-- Add gossip_menu entries (MenuID -> TextID) for the gossip chain
6+
DELETE FROM `gossip_menu` WHERE `MenuID` IN (4093, 4108, 4109);
7+
INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES
8+
(4093, 4995),
9+
(4109, 5011),
10+
(4108, 5012);

src/server/game/AI/CreatureAI.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,8 @@ void CreatureAI::EngagementOver()
309309

310310
void CreatureAI::JustExitedCombat()
311311
{
312-
EngagementOver();
313-
314-
// If creature is alive, in world, and not already evading, trigger evade to return home
315-
// Check IsInWorld to avoid evade during server shutdown/cleanup
316-
if (me->IsAlive() && me->IsInWorld() && !me->IsInEvadeMode())
317-
EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
312+
// Creatures evade through UpdateVictim() detecting out-of-combat state.
313+
// Scripts that need custom combat-exit behavior should override this.
318314
}
319315

320316
/*void CreatureAI::AttackedBy(Unit* attacker)

src/server/game/Entities/Unit/Unit.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5697,6 +5697,9 @@ void Unit::RemoveAllAurasExceptType(AuraType type)
56975697
// Xinef: We should not remove passive auras on evade, if npc has player owner (scripted one cast auras)
56985698
void Unit::RemoveEvadeAuras()
56995699
{
5700+
if (IsCharmedOwnedByPlayerOrPlayer())
5701+
return;
5702+
57005703
for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
57015704
{
57025705
Aura const* aura = iter->second->GetBase();

src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp

Lines changed: 7 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,7 @@ enum Events
9595

9696
enum Misc
9797
{
98-
TEXT_ID_SUMMON_1 = 4995,
99-
TEXT_ID_SUMMON_2 = 5011,
100-
TEXT_ID_SUMMON_3 = 5012,
101-
102-
GOSSIP_ITEM_SUMMON_1 = 4093,
103-
GOSSIP_ITEM_SUMMON_2 = 4109,
104-
GOSSIP_ITEM_SUMMON_3 = 4108,
98+
MENU_ID_RAGNAROS_SUMMON = 4108,
10599

106100
FACTION_MAJORDOMO_FRIENDLY = 1080,
107101
SUMMON_GROUP_ADDS = 1,
@@ -507,48 +501,14 @@ struct boss_majordomo : public BossAI
507501
}
508502
}
509503

510-
void sGossipHello(Player* player) override
504+
void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
511505
{
512-
ClearGossipMenuFor(player);
513-
AddGossipItemFor(player, GOSSIP_ITEM_SUMMON_1, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
514-
SendGossipMenuFor(player, TEXT_ID_SUMMON_1, me->GetGUID());
515-
}
516-
517-
void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
518-
{
519-
uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
520-
ClearGossipMenuFor(player);
521-
switch (action)
506+
if (menuId == MENU_ID_RAGNAROS_SUMMON)
522507
{
523-
case GOSSIP_ACTION_INFO_DEF:
524-
{
525-
AddGossipItemFor(player, GOSSIP_ITEM_SUMMON_2, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
526-
SendGossipMenuFor(player, TEXT_ID_SUMMON_2, me->GetGUID());
527-
break;
528-
}
529-
case GOSSIP_ACTION_INFO_DEF+1:
530-
{
531-
AddGossipItemFor(player, GOSSIP_ITEM_SUMMON_2, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
532-
SendGossipMenuFor(player, TEXT_ID_SUMMON_2, me->GetGUID());
533-
break;
534-
}
535-
case GOSSIP_ACTION_INFO_DEF+2:
536-
{
537-
AddGossipItemFor(player, GOSSIP_ITEM_SUMMON_3, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
538-
SendGossipMenuFor(player, TEXT_ID_SUMMON_3, me->GetGUID());
539-
break;
540-
}
541-
case GOSSIP_ACTION_INFO_DEF+3:
542-
{
543-
CloseGossipMenuFor(player);
544-
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
545-
Talk(SAY_RAG_SUM_1, player);
546-
DoAction(ACTION_START_RAGNAROS_INTRO);
547-
break;
548-
}
549-
default:
550-
CloseGossipMenuFor(player);
551-
break;
508+
CloseGossipMenuFor(player);
509+
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
510+
Talk(SAY_RAG_SUM_1, player);
511+
DoAction(ACTION_START_RAGNAROS_INTRO);
552512
}
553513
}
554514

src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -688,14 +688,14 @@ class npc_gunship : public CreatureScript
688688
if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
689689
return;
690690

691+
// Blizzlike: ship wipes when all players are in cannons (vehicles) with nobody on deck
692+
// See: azerothcore/azerothcore-wotlk#17856
691693
bool playerOnDeck = false;
692694
me->GetMap()->DoForAllPlayers([&](Player* player)
693695
{
694696
if (!player->GetVehicle() && player->IsAlive())
695697
playerOnDeck = true;
696698
});
697-
698-
// Wipe if no player is on the deck
699699
if (!playerOnDeck)
700700
{
701701
// Script runs on enemy ship. We want to kill our ship.

src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,8 @@ class boss_the_lich_king : public CreatureScript
653653
_lastTalkTimeBuff = 0;
654654
_bFrostmournePhase = false;
655655
_bFordringMustFallYell = false;
656+
me->SetRegeneratingHealth(true);
657+
me->SetIsCombatDisallowed(false);
656658

657659
_Reset();
658660
DoAction(ACTION_RESTORE_LIGHT);
@@ -792,12 +794,15 @@ class boss_the_lich_king : public CreatureScript
792794
if (_phase == PHASE_THREE && HealthBelowPct(10) && !me->HasUnitState(UNIT_STATE_CASTING))
793795
{
794796
_phase = PHASE_OUTRO;
797+
me->SetRegeneratingHealth(false);
798+
me->SetIsCombatDisallowed(true);
795799
EntryCheckPredicate pred(NPC_STRANGULATE_VEHICLE);
796800
summons.DoAction(ACTION_TELEPORT_BACK, pred);
797801
events.Reset();
798802
summons.DespawnAll();
799803
me->SetReactState(REACT_PASSIVE);
800804
me->AttackStop();
805+
me->CombatStop(true);
801806
me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FURY_OF_FROSTMOURNE);
802807
me->InterruptNonMeleeSpells(true);
803808
me->CastSpell((Unit*)nullptr, SPELL_FURY_OF_FROSTMOURNE, false);
@@ -1253,6 +1258,9 @@ class boss_the_lich_king : public CreatureScript
12531258

12541259
void EnterEvadeMode(EvadeReason why) override
12551260
{
1261+
if (_phase == PHASE_OUTRO || _phase == PHASE_FROSTMOURNE)
1262+
return;
1263+
12561264
EntryCheckPredicate pred(NPC_STRANGULATE_VEHICLE);
12571265
summons.DoAction(ACTION_TELEPORT_BACK, pred);
12581266
instance->SetBossState(DATA_THE_LICH_KING, FAIL);

0 commit comments

Comments
 (0)