From ed99f050faa61307a159963f5e20d1e1ab0d55ae Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 27 Jan 2025 07:34:59 -0300 Subject: [PATCH] fix(Scripts/MagisterTerrace): Rescript Kael's intro (#21278) --- .../rev_1737933911029419400.sql | 26 +++++++++++ .../boss_felblood_kaelthas.cpp | 46 +++++++++---------- .../instance_magisters_terrace.cpp | 1 + .../MagistersTerrace/magisters_terrace.h | 6 ++- 4 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1737933911029419400.sql diff --git a/data/sql/updates/pending_db_world/rev_1737933911029419400.sql b/data/sql/updates/pending_db_world/rev_1737933911029419400.sql new file mode 100644 index 00000000000000..d0de6c8e8361fa --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1737933911029419400.sql @@ -0,0 +1,26 @@ +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra` |134217728 WHERE `entry` IN (24698, 24684, 24697, 24696, 24683, 24686); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -96841) AND (`source_type` = 0) AND (`id` IN (0)); +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 +(-96841, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 205, 3, 1, 0, 0, 0, 0, 0, 0, 'Coilskar Witch - On Just Died - Felblood Kaeltas Do Action ID 0'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -96781) AND (`source_type` = 0) AND (`id` IN (0)); +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 +(-96781, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 205, 3, 1, 0, 0, 0, 0, 0, 0, 'Sunblade Blood Knight - On Just Died - Felblood Kaeltas Do Action ID 0'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -96809) AND (`source_type` = 0) AND (`id` IN (0)); +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 +(-96809, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 205, 3, 1, 0, 0, 0, 0, 0, 0, 'Sunblade Warlock - On Just Died - Felblood Kaeltas Do Action ID 0'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -96770) AND (`source_type` = 0) AND (`id` IN (0)); +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 +(-96770, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 205, 3, 1, 0, 0, 0, 0, 0, 0, 'Sunblade Mage Guard - On Just Died - Felblood Kaeltas Do Action ID 0'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -96850) AND (`source_type` = 0) AND (`id` IN (0)); +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 +(-96850, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 205, 3, 1, 0, 0, 0, 0, 0, 0, 'Ethereum Smuggler - On Just Died - Felblood Kaeltas Do Action ID 0'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -96847) AND (`source_type` = 0) AND (`id` IN (0)); +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 +(-96847, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 205, 3, 1, 0, 0, 0, 0, 0, 0, 'Sister of Torment - On Just Died - Felblood Kaeltas Do Action ID 0'); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 88eb14b6f592ac..61bb9f3337b5f6 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -67,10 +67,7 @@ enum Misc struct boss_felblood_kaelthas : public BossAI { - boss_felblood_kaelthas(Creature* creature) : BossAI(creature, DATA_KAELTHAS) - { - _hasDoneIntro = false; - } + boss_felblood_kaelthas(Creature* creature) : BossAI(creature, DATA_KAELTHAS) { } void Reset() override { @@ -78,7 +75,6 @@ struct boss_felblood_kaelthas : public BossAI _OOCScheduler.CancelAll(); _gravityLapseCounter = 0; me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); - me->SetImmuneToAll(false); ScheduleHealthCheckEvent(50, [&]{ me->CastStop(); @@ -125,12 +121,6 @@ struct boss_felblood_kaelthas : public BossAI }); } - void InitializeAI() override - { - BossAI::InitializeAI(); - me->SetImmuneToAll(true); - } - void JustDied(Unit* killer) override { BossAI::JustDied(killer); @@ -161,20 +151,31 @@ struct boss_felblood_kaelthas : public BossAI }, 50s); } - void MoveInLineOfSight(Unit* who) override + void DoAction(int32 actionId) override { - if (!_hasDoneIntro && me->IsWithinDistInMap(who, 40.0f) && who->IsPlayer()) + if (actionId == DATA_KAEL_INTRO) { - Talk(SAY_AGGRO); - Talk(SAY_AGGRO_2, 20s); - _hasDoneIntro = true; - _OOCScheduler.Schedule(35s, [this](TaskContext){ - me->SetReactState(REACT_AGGRESSIVE); - me->SetImmuneToAll(false); - me->SetInCombatWithZone(); - }); + uint32 counter = instance->GetPersistentData(DATA_KAEL_INTRO); + instance->StorePersistentData(DATA_KAEL_INTRO, ++counter); + + if (counter == 6 && !me->IsInCombat()) + { + me->SetEmoteState(EMOTE_STATE_TALK); + Talk(SAY_AGGRO); + + me->m_Events.AddEventAtOffset([&] { + me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH_NO_SHEATHE); + }, 15s); + + Talk(SAY_AGGRO_2, 20s); + me->SetImmuneToAll(true); + _OOCScheduler.Schedule(35s, [this](TaskContext) { + me->ClearEmoteState(); + me->SetReactState(REACT_AGGRESSIVE); + me->SetImmuneToAll(false); + }); + } } - BossAI::MoveInLineOfSight(who); } void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override @@ -229,7 +230,6 @@ struct boss_felblood_kaelthas : public BossAI } private: TaskScheduler _OOCScheduler; - bool _hasDoneIntro; 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 ac265bcec31e15..5971f8369ef68f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -64,6 +64,7 @@ class instance_magisters_terrace : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); + SetPersistentDataCount(MAX_PERSISTENT_DATA); LoadObjectData(creatureData, gameobjectData); LoadDoorData(doorData); LoadSummonData(summonerData); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h index 44d66b8cfa5ad3..35b04fc67ce66b 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h @@ -32,7 +32,11 @@ enum MTData MAX_ENCOUNTER = 4, DATA_KALECGOS = 5, - DATA_ESCAPE_ORB = 6 + DATA_ESCAPE_ORB = 6, + + // Persistent data + DATA_KAEL_INTRO = 0, + MAX_PERSISTENT_DATA = 1 }; enum MTCreatures