diff --git a/data/sql/updates/pending_db_world/rev_1646326494303486400.sql b/data/sql/updates/pending_db_world/rev_1646326494303486400.sql new file mode 100644 index 000000000..58cb67db8 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1646326494303486400.sql @@ -0,0 +1,5 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1646326494303486400'); + +DELETE FROM `creature_text` WHERE `CreatureID` = 10184 AND `GroupID` = 5; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(10184, 5, 0, 'You seek to lure me from my clutch? You shall pay for your insolence!', 14, 0, 100, 0, 0, 0, 8570, 0, 'Onyxia - Boundary Evade'); diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index b2d7144b5..107e00e6e 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -106,14 +106,12 @@ static sOnyxMove OnyxiaMoveData[] = enum Yells { - // Say SAY_AGGRO = 0, SAY_KILL = 1, SAY_PHASE_2_TRANS = 2, SAY_PHASE_3_TRANS = 3, - - // Emote - EMOTE_BREATH = 4 + EMOTE_BREATH = 4, + SAY_EVADE = 5 }; struct boss_onyxia : public BossAI @@ -187,6 +185,8 @@ public: instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); // just in case at reset some players already left the instance instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); BossAI::EnterCombat(who); + + me->SummonCreature(NPC_ONYXIAN_LAIR_GUARD, -167.837936f, -200.549332f, -66.343231f, 5.598287f, TEMPSUMMON_MANUAL_DESPAWN); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override @@ -204,11 +204,18 @@ public: void JustSummoned(Creature* summon) override { + summons.Summon(summon); + if (summon->GetEntry() != NPC_ONYXIAN_WHELP && summon->GetEntry() != NPC_ONYXIAN_LAIR_GUARD) { return; } + if (summon->GetEntry() == NPC_ONYXIAN_LAIR_GUARD && Phase != PHASE_LANDED) + { + return; + } + if (Unit* target = summon->SelectNearestTarget(300.0f)) { summon->AI()->AttackStart(target); @@ -287,9 +294,21 @@ public: } } + bool CheckInRoom() + { + if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 95.0f) + { + Talk(SAY_EVADE); + EnterEvadeMode(); + return false; + } + + return true; + } + void UpdateAI(uint32 diff) override { - if (!UpdateVictim()) + if (!UpdateVictim() || !CheckInRoom()) { return; }