diff options
author | Aqua Deus <95978183+aquadeus@users.noreply.github.com> | 2025-07-26 15:19:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-26 15:19:32 +0200 |
commit | 43644e4c296dc2036c4cea81854e79c76d81de81 (patch) | |
tree | fba242063eca9b512278d425fdcb68c047c2104b | |
parent | 6c51b005c26d57ff70cc479e71a6e227f717e1fd (diff) |
Scripts/ReturnToKarazhan: Implement The Curator encounter (#31146)
5 files changed, 433 insertions, 3 deletions
diff --git a/sql/updates/world/master/2025_07_26_00_world.sql b/sql/updates/world/master/2025_07_26_00_world.sql new file mode 100644 index 00000000000..b3737ceb62c --- /dev/null +++ b/sql/updates/world/master/2025_07_26_00_world.sql @@ -0,0 +1,87 @@ +SET @CGUID := 6005878; +SET @SPAWNGROUP := 1268; + +-- Creature +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+2; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `VerifiedBuild`) VALUES +(@CGUID+0, 116804, 1651, 8443, 8443, '23,2,8', '0', 0, 0, 0, -11140.375, -1886.9410400390625, 165.8487396240234375, 3.765622377395629882, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 61609), -- Scene Actor (Area: Karazhan - Difficulty: Mythic) CreateObject2 +(@CGUID+1, 115491, 1651, 8443, 8443, '23,2,8', '0', 0, 0, 0, -11168.97265625, -1911.078125, 165.8487548828125, 6.273388862609863281, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 61609), -- Medivh (Area: Karazhan - Difficulty: Mythic) CreateObject2 (Auras: 229485 - Vision) +(@CGUID+2, 114462, 1651, 8443, 8443, '23,2,8', '0', 0, 0, 0, -11164.689453125, -1912.8975830078125, 165.8487396240234375, 1.612735271453857421, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 61609); -- The Curator (Area: Karazhan - Difficulty: Mythic) CreateObject2 (Auras: 229609 - Vision) + +UPDATE `creature_template` SET `ScriptName`='boss_the_curator_rtk' WHERE `entry`=114247; +UPDATE `creature_template` SET `faction`=16, `BaseAttackTime`=2000, `unit_flags2`=0x800, `unit_flags3`=0x80000, `AIName`='SmartAI' WHERE `entry`=114249; -- Volatile Energy +UPDATE `creature_template` SET `unit_flags3`=0x1000001 WHERE `entry`=116804; -- Scene Actor +UPDATE `creature_template` SET `unit_flags`=0x300, `unit_flags2`=0x800 WHERE `entry`=114462; -- The Curator +UPDATE `creature_template` SET `unit_flags2`=0x800 WHERE `entry` IN (116124, 115491); -- Medivh + +DELETE FROM `creature_template_addon` WHERE `entry` IN (114462, 115491, 114249); +INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES +(114249, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '227268'), -- 114249 (Volatile Energy) - Volatile Energy Passive +(114462, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 4, '229609'), -- 114462 (The Curator) - Vision +(115491, 0, 0, 0, 0, 0, 1, 0, 0, 4817, 0, 0, 4, '229485'); -- 115491 (Medivh) - Vision + +-- Difficulty +DELETE FROM `creature_template_difficulty` WHERE (`DifficultyID`=23 AND `Entry` IN (114462,115491)); +INSERT INTO `creature_template_difficulty` (`Entry`, `DifficultyID`, `LevelScalingDeltaMin`, `LevelScalingDeltaMax`, `ContentTuningID`, `StaticFlags1`, `StaticFlags2`, `StaticFlags3`, `StaticFlags4`, `StaticFlags5`, `StaticFlags6`, `StaticFlags7`, `StaticFlags8`, `VerifiedBuild`) VALUES +(114462, 23, 0, 0, 629, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 61609), -- 114462 (The Curator) - +(115491, 23, 0, 0, 629, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 61609); -- 115491 (Medivh) - + +UPDATE `creature_template_difficulty` SET `HealthScalingExpansion`=6, `HealthModifier`=13.75, `CreatureDifficultyID`=119052, `TypeFlags`=0x4 WHERE (`Entry`=115491 AND `DifficultyID`=23); -- Medivh +UPDATE `creature_template_difficulty` SET `HealthScalingExpansion`=6, `HealthModifier`=44, `ManaModifier`=20, `CreatureDifficultyID`=117838, `TypeFlags`=0x24 WHERE (`Entry`=114462 AND `DifficultyID`=23); -- The Curator +UPDATE `creature_template_difficulty` SET `LevelScalingDeltaMin`=1, `LevelScalingDeltaMax`=1, `ContentTuningID`=629, `VerifiedBuild`=61609 WHERE (`Entry`=114249 AND `DifficultyID`=23); -- 114249 (Volatile Energy) - + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=114247; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES +(114247, 0, 0, 116804, -11140.375, -1886.9410400390625, 165.8487396240234375, 3.765622377395629882, 8, 0, 'The Curator - Summon group on death'), +(114247, 0, 0, 114462, -11164.689453125, -1912.8975830078125, 165.8487396240234375, 1.612735271453857421, 8, 0, 'The Curator - Summon group on death'), +(114247, 0, 0, 115491, -11168.97265625, -1911.078125, 165.8487548828125, 6.273388862609863281, 8, 0, 'The Curator - Summon group on death'); + +-- Spells +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_the_curator_rtk_summon_volatile_energy_selector', 'spell_the_curator_rtk_power_discharge_selector', 'spell_the_curator_rtk_arc_lightning_selector', 'spell_the_curator_rtk_static_charge_selector', 'spell_the_curator_rtk_overload'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(234416, 'spell_the_curator_rtk_summon_volatile_energy_selector'), +(227278, 'spell_the_curator_rtk_power_discharge_selector'), +(227269, 'spell_the_curator_rtk_arc_lightning_selector'), +(228735, 'spell_the_curator_rtk_static_charge_selector'), +(227256, 'spell_the_curator_rtk_overload'); + +-- Areatriggers +DELETE FROM `areatrigger_create_properties` WHERE (`IsCustom`=0 AND `Id` = 8780); +INSERT INTO `areatrigger_create_properties` (`Id`, `IsCustom`, `AreaTriggerId`, `IsAreatriggerCustom`, `Flags`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `SpellForVisuals`, `TimeToTargetScale`, `Speed`, `Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`, `ShapeData4`, `ShapeData5`, `ShapeData6`, `ShapeData7`, `ScriptName`, `VerifiedBuild`) VALUES +(8780, 0, 12848, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 'at_the_curator_rtk_power_discharge', 61609); -- Spell: 227289 (Power Discharge) + +DELETE FROM `areatrigger_template` WHERE (`IsCustom`=0 AND `Id` = 12848); +INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `VerifiedBuild`) VALUES +(12848, 0, 0, 61609); + +-- Texts +DELETE FROM `creature_text` WHERE `CreatureID` IN (115491, 114462, 114247); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(115491, 0, 0, 'Now you\'re ready to oversee the tower\'s protection in my absence.', 12, 0, 100, 1, 0, 78197, 124000, 0, 'Medivh'), +(115491, 1, 0, 'Hmm, I must remember to shut you down from time to time. Overuse might cause you to become... erratic.', 12, 0, 100, 25, 0, 78198, 124002, 0, 'Medivh'), +(114462, 0, 0, 'Defense protocols activated.', 14, 0, 100, 0, 0, 78201, 124001, 0, 'Curator to Medivh'), +(114247, 0, 0, 'Welcome to the-- TERMINATE INTRUDERS!', 14, 0, 100, 0, 0, 77229, 123421, 0, 'The Curator'), +(114247, 0, 1, 'The Menagerie is for-- ERADICATE! ERADICATE!', 14, 0, 100, 0, 0, 77181, 123138, 0, 'The Curator'), +(114247, 1, 0, 'Countermeasures deployed.', 12, 0, 100, 0, 0, 77224, 123423, 0, 'The Curator'), +(114247, 1, 1, 'DETERRENT ACTIVATED!', 12, 0, 100, 0, 0, 77227, 123424, 0, 'The Curator'), +(114247, 2, 0, 'Overload in progress. Prepare for-- PURGE! PURGE! PURGE!', 12, 0, 100, 0, 0, 77183, 123140, 0, 'The Curator'), +(114247, 3, 0, 'EXTERMINATED!', 12, 0, 100, 0, 0, 77184, 123141, 0, 'The Curator'), +(114247, 3, 1, 'Attention guests: DIE! DIE! DIE!', 12, 0, 100, 0, 0, 77185, 123142, 0, 'The Curator'), +(114247, 4, 0, 'Curator is no longer op... er... ation... al.', 14, 0, 100, 0, 0, 77182, 123139, 0, 'The Curator'), +(114247, 4, 1, 'System... failure... im... mi... nent...', 14, 0, 100, 0, 0, 77228, 123422, 0, 'The Curator'); + +-- SAI +DELETE FROM `smart_scripts` WHERE `entryorguid`=114249 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `Difficulties`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param_string`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `action_param7`, `action_param_string`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_param_string`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(114249, 0, 0, 0, '', 0, 0, 100, 0, 0, 1000, 6000, 6000, 0, '', 85, 228735, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Volatile Energy - In combat (6 seconds) - Cast "Static Charge"'); + +-- Spawngroup +DELETE FROM `spawn_group` WHERE `groupId`=@SPAWNGROUP; +INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES +(@SPAWNGROUP, 0, @CGUID+0), +(@SPAWNGROUP, 0, @CGUID+1), +(@SPAWNGROUP, 0, @CGUID+2); + +DELETE FROM `spawn_group_template` WHERE `groupId`=@SPAWNGROUP; +INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES +(@SPAWNGROUP, 'Karazhan - The Curator outro', 4); diff --git a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp new file mode 100644 index 00000000000..7c4673fdb98 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp @@ -0,0 +1,327 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "AreaTrigger.h" +#include "AreaTriggerAI.h" +#include "InstanceScript.h" +#include "ScriptedCreature.h" +#include "ScriptMgr.h" +#include "SpellAuras.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" +#include "return_to_karazhan.h" + +enum TheCuratorRTKSpells +{ + SPELL_COSMETIC_MANA_DRAIN = 228840, + SPELL_SUMMON_VOLATILE_ENERGY = 227267, + SPELL_SUMMON_VOLATILE_ENERGY_SELECTOR = 234416, + SPELL_POWER_DISCHARGE = 227279, + SPELL_POWER_DISCHARGE_AREATRIGGER = 227289, + SPELL_POWER_DISCHARGE_DAMAGE = 227465, + SPELL_POWER_DISCHARGE_SELECTOR = 227278, + SPELL_EVOCATION = 227254, + SPELL_OVERLOAD = 227256, + SPELL_OVERLOAD_DAMAGE = 227257, + SPELL_ARC_LIGHTNING_DAMAGE = 227270, + SPELL_STATIC_CHARGE = 228736 +}; + +enum TheCuratorRTKEvents +{ + EVENT_VOLATILE_ENERGY = 1, + EVENT_POWER_DISCHARGE, + EVENT_CHECK_MANA, +}; + +enum TheCuratorRTKTexts +{ + SAY_AGGRO = 0, + SAY_VOLATILE_ENERGY = 1, + SAY_EVOCATION = 2, + SAY_SLAY = 3, + SAY_DEAD = 4 +}; + +enum TheCuratorRTKMisc +{ + SUMMON_GROUP_MEDIVH_SCENE = 0 +}; + +// 114247 - The Curator +struct boss_the_curator_rtk : public BossAI +{ + boss_the_curator_rtk(Creature* creature) : BossAI(creature, DATA_THE_CURATOR_RTK) { } + + void RemoveAreaTriggers() const + { + for (AreaTrigger* powerDischarge : me->GetAreaTriggers(SPELL_POWER_DISCHARGE_AREATRIGGER)) + powerDischarge->Remove(); + } + + void JustDied(Unit* /*killer*/) override + { + instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); + _JustDied(); + Talk(SAY_DEAD); + RemoveAreaTriggers(); + + me->SummonCreatureGroup(SUMMON_GROUP_MEDIVH_SCENE); + } + + void EnterEvadeMode(EvadeReason /*why*/) override + { + instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); + summons.DespawnAll(); + RemoveAreaTriggers(); + _EnterEvadeMode(); + _DespawnAtEvade(); + } + + void KilledUnit(Unit* victim) override + { + if (!victim->IsPlayer()) + return; + + Talk(SAY_SLAY); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1); + + DoCastSelf(SPELL_COSMETIC_MANA_DRAIN); + + events.ScheduleEvent(EVENT_VOLATILE_ENERGY, 5s); + events.ScheduleEvent(EVENT_POWER_DISCHARGE, 12s); + events.ScheduleEvent(EVENT_CHECK_MANA, 500ms); + } + + void OnChannelFinished(SpellInfo const* spell) override + { + if (spell->Id != SPELL_EVOCATION) + return; + + DoCastSelf(SPELL_OVERLOAD); + DoCastSelf(SPELL_COSMETIC_MANA_DRAIN); + events.ScheduleEvent(EVENT_VOLATILE_ENERGY, 9200ms); + events.ScheduleEvent(EVENT_POWER_DISCHARGE, 12s); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_VOLATILE_ENERGY: + { + Talk(SAY_VOLATILE_ENERGY); + DoCastSelf(SPELL_SUMMON_VOLATILE_ENERGY_SELECTOR); + events.Repeat(9700ms); + break; + } + case EVENT_POWER_DISCHARGE: + { + DoCastSelf(SPELL_POWER_DISCHARGE_SELECTOR); + events.Repeat(12s); + break; + } + case EVENT_CHECK_MANA: + { + if (me->GetPower(POWER_MANA) <= 0) + { + Talk(SAY_EVOCATION); + me->RemoveAurasDueToSpell(SPELL_COSMETIC_MANA_DRAIN); + DoCastSelf(SPELL_EVOCATION); + me->SetReactState(REACT_PASSIVE); + events.CancelEvent(EVENT_VOLATILE_ENERGY); + events.CancelEvent(EVENT_POWER_DISCHARGE); + } + events.Repeat(500ms); + break; + } + default: + break; + } + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + } + } +}; + +// 234416 - Summon Volatile Energy +class spell_the_curator_rtk_summon_volatile_energy_selector : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_VOLATILE_ENERGY }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_VOLATILE_ENERGY, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_the_curator_rtk_summon_volatile_energy_selector::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 227278 - Power Discharge +class spell_the_curator_rtk_power_discharge_selector : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_POWER_DISCHARGE }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_POWER_DISCHARGE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_the_curator_rtk_power_discharge_selector::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 227269 - Arc Lightning +class spell_the_curator_rtk_arc_lightning_selector : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ARC_LIGHTNING_DAMAGE }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_ARC_LIGHTNING_DAMAGE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_the_curator_rtk_arc_lightning_selector::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 228735 - Static Charge +class spell_the_curator_rtk_static_charge_selector : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_STATIC_CHARGE }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_STATIC_CHARGE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_the_curator_rtk_static_charge_selector::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 227256 - Overload +class spell_the_curator_rtk_overload : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_OVERLOAD_DAMAGE }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + Creature* creatureCaster = GetCaster()->ToCreature(); + if (!creatureCaster) + return; + + creatureCaster->CastSpell(GetHitUnit(), SPELL_OVERLOAD_DAMAGE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + creatureCaster->SetReactState(REACT_AGGRESSIVE); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_the_curator_rtk_overload::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 227289 Power Discharge +struct at_the_curator_rtk_power_discharge : AreaTriggerAI +{ + using AreaTriggerAI::AreaTriggerAI; + + void OnUnitEnter(Unit* unit) override + { + if (!unit->IsPlayer()) + return; + + Unit* caster = at->GetCaster(); + if (!caster) + return; + + caster->CastSpell(unit, SPELL_POWER_DISCHARGE_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); + } + + void OnUnitExit(Unit* unit) override + { + unit->RemoveAurasDueToSpell(SPELL_POWER_DISCHARGE_DAMAGE, at->GetCasterGuid()); + } +}; + +void AddSC_boss_the_curator_rtk() +{ + RegisterReturnToKarazhanCreatureAI(boss_the_curator_rtk); + + RegisterSpellScript(spell_the_curator_rtk_summon_volatile_energy_selector); + RegisterSpellScript(spell_the_curator_rtk_power_discharge_selector); + RegisterSpellScript(spell_the_curator_rtk_arc_lightning_selector); + RegisterSpellScript(spell_the_curator_rtk_static_charge_selector); + RegisterSpellScript(spell_the_curator_rtk_overload); + + RegisterAreaTriggerAI(at_the_curator_rtk_power_discharge); +} diff --git a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/instance_return_to_karazhan.cpp b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/instance_return_to_karazhan.cpp index 2a13f3e6fdc..ca3066b5a75 100644 --- a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/instance_return_to_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/instance_return_to_karazhan.cpp @@ -28,16 +28,23 @@ BossBoundaryData const boundaries = ObjectData const creatureData[] = { { BOSS_MAIDEN_OF_VIRTUE_RTK, DATA_MAIDEN_OF_VIRTUE_RTK }, + { BOSS_THE_CURATOR_RTK, DATA_THE_CURATOR_RTK }, { 0, 0 } // END }; +DoorData const doorData[] = +{ + { GO_STRANGE_WALL, DATA_THE_CURATOR_RTK, EncounterDoorBehavior::OpenWhenDone }, + { 0, 0, EncounterDoorBehavior::OpenWhenNotInProgress } +}; + DungeonEncounterData const encounters[] = { { DATA_OPERA_HALL, {{ 1957 }} }, { DATA_MAIDEN_OF_VIRTUE_RTK, {{ 1954 }} }, { DATA_MOROES, {{ 1961 }} }, { DATA_ATTUMEN_THE_HUNTSMAN, {{ 1960 }} }, - { DATA_THE_CURATOR, {{ 1964 }} }, + { DATA_THE_CURATOR_RTK, {{ 1964 }} }, { DATA_SHADE_OF_MEDIVH, {{ 1965 }} }, { DATA_MANA_DEVOURER, {{ 1959 }} }, { DATA_VIZADUUM_THE_WATCHER, {{ 2017 }} }, @@ -57,6 +64,7 @@ class instance_return_to_karazhan : public InstanceMapScript SetBossNumber(EncounterCount); LoadObjectData(creatureData, nullptr); LoadBossBoundaries(boundaries); + LoadDoorData(doorData); LoadDungeonEncounterData(encounters); } }; diff --git a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/return_to_karazhan.h b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/return_to_karazhan.h index 0f6ad0c5a72..0448eb5823a 100644 --- a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/return_to_karazhan.h +++ b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/return_to_karazhan.h @@ -32,7 +32,7 @@ enum RTKDataTypes : uint8 DATA_MAIDEN_OF_VIRTUE_RTK, DATA_MOROES, DATA_ATTUMEN_THE_HUNTSMAN, - DATA_THE_CURATOR, + DATA_THE_CURATOR_RTK, DATA_SHADE_OF_MEDIVH, DATA_MANA_DEVOURER, DATA_VIZADUUM_THE_WATCHER, @@ -42,7 +42,13 @@ enum RTKDataTypes : uint8 enum RTKCreatureIds { // Bosses - BOSS_MAIDEN_OF_VIRTUE_RTK = 113971 + BOSS_MAIDEN_OF_VIRTUE_RTK = 113971, + BOSS_THE_CURATOR_RTK = 114247 +}; + +enum RTKGameObjectsIds +{ + GO_STRANGE_WALL = 266508 }; template <class AI, class T> diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp index 0961807ae42..34bd72b99b9 100644 --- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp +++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp @@ -207,6 +207,7 @@ void AddSC_undercity(); // Return to Karazhan void AddSC_instance_return_to_karazhan(); void AddSC_boss_maiden_of_virtue_rtk(); +void AddSC_boss_the_curator_rtk(); // The name of this function should match: // void Add${NameOfDirectory}Scripts() @@ -404,4 +405,5 @@ void AddEasternKingdomsScripts() // Return to Karazhan AddSC_instance_return_to_karazhan(); AddSC_boss_maiden_of_virtue_rtk(); + AddSC_boss_the_curator_rtk(); } |