diff --git a/data/sql/updates/db_world/2025_01_28_00.sql b/data/sql/updates/db_world/2025_01_28_00.sql new file mode 100644 index 00000000000000..4b0445d8ea3153 --- /dev/null +++ b/data/sql/updates/db_world/2025_01_28_00.sql @@ -0,0 +1,8 @@ +-- DB update 2025_01_27_02 -> 2025_01_28_00 + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 23774; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 23774); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23774, 0, 0, 0, 0, 0, 100, 0, 5000, 8000, 12000, 15000, 0, 0, 11, 43292, 0, 0, 0, 0, 0, 19, 23834, 30, 0, 0, 0, 0, 0, 0, 'Amani\'shi Trainer - In Combat - Cast \'Incite Rage\''), +(23774, 0, 1, 0, 0, 0, 100, 0, 10000, 12000, 20000, 25000, 0, 0, 11, 20989, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Amani\'shi Trainer - In Combat - Cast \'Sleep\''); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 61bb9f3337b5f6..8feeadedcbe77b 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -52,7 +52,12 @@ enum Spells SPELL_GRAVITY_LAPSE_FLY = 44227, SPELL_GRAVITY_LAPSE_DOT = 44226, SPELL_GRAVITY_LAPSE_CHANNEL = 44251, - SPELL_POWER_FEEDBACK = 44233 + SPELL_POWER_FEEDBACK = 44233, + SPELL_CLEAR_FLIGHT = 44232, // Does nothing currently + + SPELL_EMOTE_EXCLAMATION = 48348, + SPELL_EMOTE_POINT = 48349, + SPELL_EMOTE_ROAR = 48350 }; enum Misc @@ -72,7 +77,6 @@ struct boss_felblood_kaelthas : public BossAI void Reset() override { BossAI::Reset(); - _OOCScheduler.CancelAll(); _gravityLapseCounter = 0; me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); @@ -169,11 +173,12 @@ struct boss_felblood_kaelthas : public BossAI Talk(SAY_AGGRO_2, 20s); me->SetImmuneToAll(true); - _OOCScheduler.Schedule(35s, [this](TaskContext) { + + me->m_Events.AddEventAtOffset([&] { me->ClearEmoteState(); me->SetReactState(REACT_AGGRESSIVE); me->SetImmuneToAll(false); - }); + }, 35s); } } } @@ -185,19 +190,35 @@ struct boss_felblood_kaelthas : public BossAI damage = me->GetHealth() - 1; if (me->isRegeneratingHealth()) { + me->CombatStop(); me->CastStop(); me->SetRegeneratingHealth(false); me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE); me->SetImmuneToAll(true); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->CombatStop(); me->SetReactState(REACT_PASSIVE); LapseAction(ACTION_REMOVE_FLY); scheduler.CancelAll(); - _OOCScheduler.Schedule(6s, [this](TaskContext){ - me->KillSelf(); - }); + summons.DespawnAll(); + Talk(SAY_DEATH); + DoCastSelf(SPELL_EMOTE_EXCLAMATION); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_EMOTE_POINT); + }, 3s); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_EMOTE_ROAR); + }, 7s); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_EMOTE_ROAR); + DoCastSelf(SPELL_CLEAR_FLIGHT); + }, 9s); + + me->m_Events.AddEventAtOffset([&] { + me->KillSelf(); + }, 11s); } } BossAI::DamageTaken(attacker, damage, damagetype, damageSchoolMask); @@ -208,6 +229,9 @@ struct boss_felblood_kaelthas : public BossAI _gravityLapseCounter = 0; me->GetMap()->DoForAllPlayers([&](Player* player) { + if (player->IsGameMaster()) + return; + if (action == ACTION_TELEPORT_PLAYERS) DoCast(player, SPELL_GRAVITY_LAPSE_PLAYER + _gravityLapseCounter, true); else if (action == ACTION_KNOCKUP) @@ -222,14 +246,7 @@ struct boss_felblood_kaelthas : public BossAI ++_gravityLapseCounter; }); } - - void UpdateAI(uint32 diff) override - { - _OOCScheduler.Update(diff); - BossAI::UpdateAI(diff); - } private: - TaskScheduler _OOCScheduler; uint8 _gravityLapseCounter; }; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index 5971f8369ef68f..74308a0bba2021 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -48,6 +48,7 @@ DoorData const doorData[] = { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_ROOM }, { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE }, { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE }, + { GO_KAEL_DOOR, DATA_KAELTHAS, DOOR_TYPE_ROOM }, { 0, 0, DOOR_TYPE_ROOM } // END }; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 74d7ff147c90b7..6f464d7d18bd16 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -189,10 +189,12 @@ struct npc_madrigosa : public NullCreatureAI { if (param == ACTION_START_EVENT) { + me->NearTeleportTo(1570.97f, 725.51f, 79.77f, 3.82f); me->SetDisableGravity(true); me->SetStandState(UNIT_STAND_STATE_STAND); me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); - me->NearTeleportTo(1570.97f, 725.51f, 79.77f, 3.82f); + me->SendMovementFlagUpdate(); + events.ScheduleEvent(EVENT_MAD_1, 2000); } else if (param == ACTION_SPAWN_FELMYST) @@ -212,9 +214,9 @@ struct npc_madrigosa : public NullCreatureAI brutallus->SetReactState(REACT_PASSIVE); brutallus->setActive(true); } - me->GetMotionMaster()->MovePoint(1, 1477.94f, 643.22f, 21.21f); + me->GetMotionMaster()->MoveTakeoff(1, 1477.94f, 643.22f, 21.21f); me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); - events.ScheduleEvent(EVENT_MAD_2, 6000); + events.ScheduleEvent(EVENT_MAD_2, 4000); break; case EVENT_MAD_2: Talk(SAY_MAD_1);