Scripts/NeltharionsLair: Implement Rokmora encounter (#31162)
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
SET @ATSPAWN := 276;
|
||||
SET @ATPROP := 171;
|
||||
SET @ATID := 180;
|
||||
|
||||
-- Creature
|
||||
DELETE FROM `creature_template_addon` WHERE `entry`=97720;
|
||||
INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
|
||||
(97720, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, ''); -- 97720 (Blightshard Skitter)
|
||||
|
||||
UPDATE `creature_template` SET `faction`=16, `speed_run`=1.428571462631225585, `BaseAttackTime`=2000, `unit_flags2`=0x820, `unit_flags3`=0x80000 WHERE `entry`=97720; -- Blightshard Skitter
|
||||
UPDATE `creature_template` SET `unit_flags`=0x8140, `ScriptName` = 'boss_rokmora' WHERE `entry`=91003;
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_rokmora_navarrogg_intro' WHERE `entry` = 100700;
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (105300, 97720);
|
||||
|
||||
-- Difficulty
|
||||
UPDATE `creature_template_difficulty` SET `LevelScalingDeltaMin`=2, `LevelScalingDeltaMax`=2, `ContentTuningID`=629, `StaticFlags1`=0x10000000, `VerifiedBuild`=61967 WHERE (`Entry`=100700 AND `DifficultyID`=0); -- 100700 (Navarrogg) - CanSwim
|
||||
UPDATE `creature_template_difficulty` SET `ContentTuningID`=629, `StaticFlags1`=0x10000000, `VerifiedBuild`=61967 WHERE (`Entry`=97720 AND `DifficultyID`=23); -- 97720 (Blightshard Skitter) - CanSwim
|
||||
|
||||
-- Areatrigger
|
||||
DELETE FROM `areatrigger` WHERE `SpawnId`=@ATSPAWN;
|
||||
INSERT INTO `areatrigger` (`SpawnId`, `AreaTriggerCreatePropertiesId`, `IsCustom`, `MapId`, `SpawnDifficulties`, `PosX`, `PosY`, `PosZ`, `Orientation`, `PhaseUseFlags`, `PhaseId`, `PhaseGroup`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES
|
||||
(@ATSPAWN, @ATPROP, 1, 1458, '23,2,8,1', 2921.3066, 1394.1822, -2.4048, 5.180378, 0, 0, 0, 'at_rokmora_intro', 'Neltharion\'s Lair - Rokmora Intro', 0);
|
||||
|
||||
DELETE FROM `areatrigger_create_properties` WHERE `Id`=@ATPROP AND `IsCustom`=1;
|
||||
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
|
||||
(@ATPROP, 1, @ATID, 1, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 0, 0, 0, 20, 20, 0, 0, 0, 0, 0, 0, '', 0);
|
||||
|
||||
DELETE FROM `areatrigger_template` WHERE `Id`=@ATID AND `IsCustom`=1;
|
||||
INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `ActionSetId`, `ActionSetFlags`, `VerifiedBuild`) VALUES
|
||||
(@ATID, 1, 1, 0, 0, 0);
|
||||
|
||||
DELETE FROM `areatrigger_create_properties` WHERE (`IsCustom`=0 AND `Id` IN (4953,7415));
|
||||
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
|
||||
(4953, 0, 9669, 0, 0, 0, 0, 0, 0, -1, 0, 426, NULL, 300000, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 'at_rokmora_choking_dust', 61967), -- Spell: 192799 (Choking Dust)
|
||||
(7415, 0, 11860, 0, 2, 0, 1958, 0, 0, -1, 0, 64, NULL, 10000, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 'at_rokmora_crystalline_ground', 61967); -- Spell: 216470 (Crystalline Ground)
|
||||
|
||||
-- Instance
|
||||
DELETE FROM `instance_template` WHERE `map`=1458;
|
||||
INSERT INTO `instance_template` (`map`, `parent`, `script`) VALUES
|
||||
(1458, 0, 'instance_neltharions_lair');
|
||||
|
||||
-- Conversation
|
||||
DELETE FROM `conversation_actors` WHERE (`Idx`=0 AND `ConversationId` IN (1885, 822, 823, 824, 825) OR (`Idx`=1 AND `ConversationId` IN (1885)));
|
||||
INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `ConversationActorGuid`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES
|
||||
(822, 50446, 6004276, 0, 0, 0, 0, 0, 61967), -- Full: 0x20197CB64058DEC0006D9F00000266A8 Creature/0 R1631/S28063 Map: 1458 (Neltharion's Lair) Entry: 91003 (Rokmora) Low: 157352
|
||||
(823, 50446, 6004276, 0, 0, 0, 0, 0, 61967), -- Full: 0x20197CB64058DEC0006D9F00000266A8 Creature/0 R1631/S28063 Map: 1458 (Neltharion's Lair) Entry: 91003 (Rokmora) Low: 157352
|
||||
(824, 50446, 6004276, 0, 0, 0, 0, 0, 61967), -- Full: 0x20197CB64058DEC0006D9F00000266A8 Creature/0 R1631/S28063 Map: 1458 (Neltharion's Lair) Entry: 91003 (Rokmora) Low: 157352
|
||||
(825, 50446, 6004276, 0, 0, 0, 0, 0, 61967), -- Full: 0x20197CB64058DEC0006D9F00000266A8 Creature/0 R1631/S28063 Map: 1458 (Neltharion's Lair) Entry: 91003 (Rokmora) Low: 157352
|
||||
(1885, 52526, 6004308, 0, 105300, 0, 0, 0, 61967), -- Full: 0x20197CB64066D500006D9F00000266A8 Creature/0 R1631/S28063 Map: 1458 (Neltharion's Lair) Entry: 105300 (Ularogg Cragshaper) Low: 157352
|
||||
(1885, 52530, 0, 1, 100700, 0, 0, 0, 61967); -- Full: 0x20197CB640625700006D9F00000266FB Creature/0 R1631/S28063 Map: 1458 (Neltharion's Lair) Entry: 100700 (Navarrogg) Low: 157435
|
||||
|
||||
DELETE FROM `conversation_template` WHERE `Id` IN (822, 823, 824, 825, 1885);
|
||||
INSERT INTO `conversation_template` (`Id`, `FirstLineId`, `TextureKitId`, `Flags`, `ScriptName`, `VerifiedBuild`) VALUES
|
||||
(822, 2010, 0, 0, '', 61967),
|
||||
(823, 2011, 0, 0, '', 61967),
|
||||
(824, 2012, 0, 0, '', 61967),
|
||||
(825, 2013, 0, 0, '', 61967),
|
||||
(1885, 3990, 0, 0, 'conversation_rokmora_intro', 61967);
|
||||
|
||||
DELETE FROM `conversation_line_template` WHERE `Id` IN (3992, 3991, 3990, 2013, 2012, 2011, 2010);
|
||||
INSERT INTO `conversation_line_template` (`Id`, `UiCameraID`, `ActorIdx`, `Flags`, `ChatType`, `VerifiedBuild`) VALUES
|
||||
(2010, 0, 0, 0, 1, 61967),
|
||||
(2011, 0, 0, 0, 1, 61967),
|
||||
(2012, 0, 0, 0, 1, 61967),
|
||||
(2013, 0, 0, 0, 1, 61967),
|
||||
(3992, 0, 0, 0, 1, 61967),
|
||||
(3991, 0, 1, 0, 1, 61967),
|
||||
(3990, 0, 0, 0, 1, 61967);
|
||||
|
||||
-- Texts
|
||||
DELETE FROM `creature_text` WHERE `CreatureID` = 91003;
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||
(91003, 0, 0, 'Rok SMASH!', 14, 0, 100, 0, 0, 54551, 102714, 0, 'Rokmora'),
|
||||
(91003, 1, 0, 'Rokmora creates |cFFFF0000|Hspell:215898|h[Crystaline Ground]|h|r! Don\'t move!', 41, 0, 100, 0, 0, 0, 114681, 0, 'Rokmora'),
|
||||
(91003, 2, 0, 'Rokmora rears back for |cFFFF0000|Hspell:188169|h[Razor Shards]|h|r!', 41, 0, 100, 0, 0, 0, 108748, 0, 'Rokmora'),
|
||||
(91003, 3, 0, 'Rok... no... break', 14, 0, 100, 0, 0, 54549, 102713, 0, 'Rokmora');
|
||||
|
||||
-- Conditions
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (209390, 200247);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ConditionStringValue1`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(13, 1, 209390, 0, 0, 51, 0, 5, 91003, 0, '', 0, 0, 0, '', 'Spell \'Boss 01 Intro Ularogg Cast\' can only hit Rokmora'),
|
||||
(13, 1, 200247, 0, 0, 51, 0, 5, 97720, 0, '', 0, 0, 0, '', 'Spell \'Shatter\' can only hit \'Blightshard Skitter\'');
|
||||
|
||||
-- SAI
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=105300 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
|
||||
(105300, 0, 0, 0, '', 63, 0, 100, 0, 0, 0, 0, 0, 0, '', 85, 209390, 2, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Ularogg - On Just Created - Cast Self: Boss 01 Intro Ularogg Cast'),
|
||||
(105300, 0, 1, 0, '', 40, 0, 100, 0, 5, 10530000, 0, 0, 0, '', 41, 1, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Ularogg - On waypoint 5 reached - Despawn');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=97720 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
|
||||
(97720, 0, 0, 0, '', 6, 0, 100, 0, 0, 0, 0, 0, 0, '', 85, 192799, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Blightshard Skitter - On Just Died - Cast \'Choking Dust\''),
|
||||
(97720, 0, 1, 0, '2,8,23', 6, 0, 100, 0, 0, 0, 0, 0, 0, '', 85, 215929, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Blightshard Skitter (Difficulties Heroic, Mythic and M+) - On Just Died - Cast \'Rupturing Skitter\'');
|
||||
|
||||
-- Spells
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_rokmora_crystalline_ground_periodic', 'spell_rokmora_emerge', 'spell_rokmora_razor_shards', 'spell_rokmora_shatter', 'spell_rokmora_update_interactions');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(215898, 'spell_rokmora_crystalline_ground_periodic'),
|
||||
(209394, 'spell_rokmora_emerge'),
|
||||
(188169, 'spell_rokmora_razor_shards'),
|
||||
(188114, 'spell_rokmora_shatter'),
|
||||
(134730, 'spell_rokmora_update_interactions');
|
||||
|
||||
-- Waypoints
|
||||
SET @ENTRY := 105300;
|
||||
SET @PATHOFFSET := 0;
|
||||
SET @PATH := @ENTRY * 100 + @PATHOFFSET;
|
||||
DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
|
||||
INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
|
||||
(@PATH, 1, 0, 'Neltharion\'s Lair - Ularogg Rokmora Intro Path');
|
||||
|
||||
DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
|
||||
INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
|
||||
(@PATH, 0, 2884.442, 1397.453, -2.405085, NULL, 0),
|
||||
(@PATH, 1, 2871.429, 1382.59, -2.403809, NULL, 0),
|
||||
(@PATH, 2, 2864.82, 1372.012, -2.044964, NULL, 0),
|
||||
(@PATH, 3, 2847.353, 1358.851, -0.1555594, NULL, 0),
|
||||
(@PATH, 4, 2828.669, 1352.583, 0.9565357, NULL, 0),
|
||||
(@PATH, 5, 2816.361, 1353.323, 4.334983, NULL, 0);
|
||||
|
||||
SET @ENTRY := 100700;
|
||||
SET @PATHOFFSET := 0;
|
||||
SET @PATH := @ENTRY * 100 + @PATHOFFSET;
|
||||
DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
|
||||
INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Comment`) VALUES
|
||||
(@PATH, 1, 0, 'Neltharion\'s Lair - Navarrogg Rokmora Intro Path');
|
||||
|
||||
DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
|
||||
INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
|
||||
(@PATH, 0, 2899.39, 1406.309, -2.405086, NULL, 0),
|
||||
(@PATH, 1, 2886.757, 1399.142, -2.405085, NULL, 0),
|
||||
(@PATH, 2, 2876.358, 1391.255, -2.405085, NULL, 0),
|
||||
(@PATH, 3, 2865.902, 1373.759, -2.163703, NULL, 0),
|
||||
(@PATH, 4, 2858.577, 1366.91, -1.52154, NULL, 0),
|
||||
(@PATH, 5, 2840.839, 1355.285, -0.3443635, NULL, 0),
|
||||
(@PATH, 6, 2830.136, 1352.953, 0.7276564, NULL, 0),
|
||||
(@PATH, 7, 2822.574, 1353.08, 2.647024, NULL, 0);
|
||||
@@ -0,0 +1,583 @@
|
||||
/*
|
||||
* 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 "Conversation.h"
|
||||
#include "ConversationAI.h"
|
||||
#include "Creature.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "Map.h"
|
||||
#include "MotionMaster.h"
|
||||
#include "PathGenerator.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellScript.h"
|
||||
#include "TemporarySummon.h"
|
||||
#include "neltharions_lair.h"
|
||||
|
||||
enum RokmoraSpells
|
||||
{
|
||||
// Intro Spells
|
||||
SPELL_JUMP_TO_GROUND_COSMETIC = 184483,
|
||||
SPELL_BOSS_INTRO_CONVERSATION = 209374,
|
||||
SPELL_BOSS_INTRO_EMERGE = 209394,
|
||||
SPELL_UPDATE_INTERACTIONS = 134730,
|
||||
SPELL_ULAROGG_COSMETIC = 209390,
|
||||
|
||||
// Combat
|
||||
SPELL_CHOKING_DUST_DAMAGE = 192800,
|
||||
SPELL_CRYSTALLINE_GROUND = 198024,
|
||||
SPELL_CRYSTALLINE_GROUND_AREATRIGGER = 216470,
|
||||
SPELL_CRYSTALLINE_GROUND_DAMAGE = 198028,
|
||||
SPELL_CRYSTALLINE_GROUND_PERIODIC = 215898,
|
||||
SPELL_CRYSTALLINE_GROUND_VISUAL = 216488,
|
||||
// SPELL_CRYSTALLINE_GROUND_UNK = 470381 unknown purpose
|
||||
SPELL_GAIN_ENERGY = 193245,
|
||||
SPELL_RAZOR_SHARDS = 188169,
|
||||
SPELL_RAZOR_SHARDS_VISUAL = 188207,
|
||||
SPELL_RAZOR_SHARDS_VISUAL_2 = 197920,
|
||||
SPELL_RUPTURING_SKITTER = 215929,
|
||||
SPELL_SHATTER = 188114,
|
||||
SPELL_SHATTER_KILL_SKITTERS = 200247,
|
||||
|
||||
SPELL_ROKMORA_COMBAT_CONVO_1 = 198122, // Rok shatter!
|
||||
SPELL_ROKMORA_COMBAT_CONVO_2 = 198125, // Rok stronger! (unused?)
|
||||
SPELL_ROKMORA_COMBAT_CONVO_3 = 198135, // Tiny piddle, big puddle.
|
||||
SPELL_ROKMORA_COMBAT_CONVO_4 = 198136 // Nothing beat Rok!
|
||||
};
|
||||
|
||||
enum RokmoraEvents
|
||||
{
|
||||
EVENT_SHATTER = 1,
|
||||
EVENT_RAZOR_SHARDS,
|
||||
EVENT_CRYSTALLINE_GROUND,
|
||||
EVENT_CHECK_ENERGY,
|
||||
|
||||
EVENT_ROKMORA_INTRO_MOVE
|
||||
};
|
||||
|
||||
enum RokmoraTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_CRYSTALLINE_GROUND_WARNING = 1,
|
||||
SAY_RAZOR_SHARDS_WARNING = 2,
|
||||
SAY_DIED = 3
|
||||
};
|
||||
|
||||
enum RokmoraConversation
|
||||
{
|
||||
POINT_NAVAROGG_JUMP = 0,
|
||||
POINT_NAVAROGG_INTRO = 1,
|
||||
CONVO_ACTOR_NAVARROGG = 52530,
|
||||
CONVO_ULAROGG_INTRO_LINE_03 = 3992,
|
||||
|
||||
CONVO_ACTOR_ID_ULAROGG = 0,
|
||||
CONVO_ACTOR_ID_NAVARROGG = 1,
|
||||
|
||||
PATH_ULAROGG = 10530000,
|
||||
PATH_NAVARROGG = 10070000,
|
||||
|
||||
WAYPOINT_DESPAWN = 7
|
||||
};
|
||||
|
||||
enum RokmoraMisc
|
||||
{
|
||||
NPC_NAVARROGG = 100700,
|
||||
NPC_ULAROGG = 105300,
|
||||
NPC_SKITTER = 97720
|
||||
};
|
||||
|
||||
constexpr Position NavarroggIntroPosition = { 2959.8716f, 1390.5312f, 53.52835f, 2.721162f };
|
||||
constexpr Position NavarroggIntroPosition2 = { 2917.3196f, 1402.2882f, -2.405084f };
|
||||
constexpr Position NavarroggJumpIntroPosition = { 2930.9895f, 1395.7848f, -2.641485f, 2.721162f };
|
||||
|
||||
// 91003 - Rokmora
|
||||
struct boss_rokmora : public BossAI
|
||||
{
|
||||
boss_rokmora(Creature* creature) : BossAI(creature, DATA_ROKMORA) { }
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (instance->GetData(DATA_ROKMORA_INTRO_STATE) == DONE)
|
||||
me->SetImmuneToPC(false);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
_JustDied();
|
||||
Talk(SAY_DIED);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) override
|
||||
{
|
||||
if (victim->GetEntry() == NPC_SKITTER)
|
||||
{
|
||||
uint32 spellId = RAND(SPELL_ROKMORA_COMBAT_CONVO_3, SPELL_ROKMORA_COMBAT_CONVO_4);
|
||||
DoCastSelf(spellId);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
|
||||
DoCastSelf(SPELL_GAIN_ENERGY);
|
||||
me->SetMaxPower(POWER_ENERGY, 100); // power is set to 0 in Creature::UpdateMaxPower
|
||||
|
||||
events.ScheduleEvent(EVENT_RAZOR_SHARDS, 29100ms);
|
||||
events.ScheduleEvent(EVENT_CHECK_ENERGY, 500ms);
|
||||
|
||||
if (IsHeroicOrHigher()) // Casted once
|
||||
events.ScheduleEvent(EVENT_CRYSTALLINE_GROUND, 3400ms);
|
||||
}
|
||||
|
||||
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_RAZOR_SHARDS:
|
||||
{
|
||||
Talk(SAY_RAZOR_SHARDS_WARNING);
|
||||
DoCastVictim(SPELL_RAZOR_SHARDS);
|
||||
events.Repeat(29200ms);
|
||||
break;
|
||||
}
|
||||
case EVENT_CRYSTALLINE_GROUND:
|
||||
{
|
||||
Talk(SAY_CRYSTALLINE_GROUND_WARNING);
|
||||
DoCastSelf(SPELL_CRYSTALLINE_GROUND);
|
||||
break;
|
||||
}
|
||||
case EVENT_CHECK_ENERGY:
|
||||
{
|
||||
if (me->GetPower(POWER_ENERGY) >= 100)
|
||||
{
|
||||
DoCastSelf(SPELL_ROKMORA_COMBAT_CONVO_1);
|
||||
DoCastSelf(SPELL_SHATTER);
|
||||
}
|
||||
events.Repeat(500ms);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 215898 - Crystalline Ground
|
||||
class spell_rokmora_crystalline_ground_periodic : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_CRYSTALLINE_GROUND_DAMAGE, SPELL_CRYSTALLINE_GROUND_VISUAL });
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const* aurEff) const
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
|
||||
target->CastSpell(target, SPELL_CRYSTALLINE_GROUND_VISUAL, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
|
||||
if (target->isMoving())
|
||||
caster->CastSpell(target, SPELL_CRYSTALLINE_GROUND_DAMAGE, CastSpellExtraArgsInit{
|
||||
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
|
||||
.TriggeringAura = aurEff
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_rokmora_crystalline_ground_periodic::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
// 188114 - Shatter
|
||||
class spell_rokmora_shatter : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_CRYSTALLINE_GROUND_AREATRIGGER, SPELL_SHATTER_KILL_SKITTERS });
|
||||
}
|
||||
|
||||
void HandleShatter() const
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
CastSpellExtraArgs args;
|
||||
args.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR;
|
||||
caster->CastSpell(caster, SPELL_SHATTER_KILL_SKITTERS, args);
|
||||
|
||||
if (caster->GetMap()->IsHeroicOrHigher())
|
||||
caster->CastSpell(caster->GetPosition(), SPELL_CRYSTALLINE_GROUND_AREATRIGGER, args);
|
||||
|
||||
caster->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_rokmora_shatter::HandleShatter);
|
||||
}
|
||||
};
|
||||
|
||||
// 188169 - Razor Shards
|
||||
class spell_rokmora_razor_shards : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_RAZOR_SHARDS_VISUAL, SPELL_RAZOR_SHARDS_VISUAL_2 });
|
||||
}
|
||||
|
||||
Position GetRandomRazorShardPosition(Unit* caster) const
|
||||
{
|
||||
Position pos(*caster);
|
||||
float randomAngle = frand(float(M_PI) / -7.0f, float(M_PI) / 7.0f);
|
||||
float randomDist = frand(2.0f, 40.0f);
|
||||
|
||||
float angleToOrigin = caster->GetAbsoluteAngle(_targetOrigin);
|
||||
caster->MovePosition(pos, randomDist, randomAngle - caster->GetOrientation() + angleToOrigin);
|
||||
return pos;
|
||||
}
|
||||
|
||||
void OnPrecast() override
|
||||
{
|
||||
Unit* target = GetExplTargetUnit();
|
||||
_targetOrigin = target->GetPosition();
|
||||
}
|
||||
|
||||
void HandleCast() const
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
|
||||
for (uint8 i = 0; i < 20; ++i)
|
||||
{
|
||||
caster->CastSpell(GetRandomRazorShardPosition(caster), SPELL_RAZOR_SHARDS_VISUAL, CastSpellExtraArgsInit{
|
||||
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
|
||||
.TriggeringSpell = GetSpell()
|
||||
});
|
||||
}
|
||||
|
||||
for (uint8 i = 0; i < 7; ++i)
|
||||
caster->CastSpell(GetRandomRazorShardPosition(caster), SPELL_RAZOR_SHARDS_VISUAL_2, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_rokmora_razor_shards::HandleCast);
|
||||
}
|
||||
|
||||
private:
|
||||
Position _targetOrigin;
|
||||
};
|
||||
|
||||
// 192799 - Choking Dust
|
||||
// ID - 4953
|
||||
struct at_rokmora_choking_dust : AreaTriggerAI
|
||||
{
|
||||
using AreaTriggerAI::AreaTriggerAI;
|
||||
|
||||
void OnUnitEnter(Unit* unit) override
|
||||
{
|
||||
if (!unit->IsPlayer())
|
||||
return;
|
||||
|
||||
Unit* caster = at->GetCaster();
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
caster->CastSpell(unit, SPELL_CHOKING_DUST_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
}
|
||||
|
||||
void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override
|
||||
{
|
||||
unit->RemoveAurasDueToSpell(SPELL_CHOKING_DUST_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
// 198024 - Crystalline Ground and 216470 - Crystalline Ground
|
||||
// ID - 7415
|
||||
struct at_rokmora_crystalline_ground : AreaTriggerAI
|
||||
{
|
||||
using AreaTriggerAI::AreaTriggerAI;
|
||||
|
||||
void OnUnitEnter(Unit* unit) override
|
||||
{
|
||||
if (!unit->IsPlayer())
|
||||
return;
|
||||
|
||||
unit->CastSpell(unit, SPELL_CRYSTALLINE_GROUND_PERIODIC, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
}
|
||||
|
||||
void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override
|
||||
{
|
||||
unit->RemoveAurasDueToSpell(SPELL_CRYSTALLINE_GROUND_PERIODIC);
|
||||
}
|
||||
};
|
||||
|
||||
// Id - XXX
|
||||
struct at_rokmora_intro : AreaTriggerAI
|
||||
{
|
||||
at_rokmora_intro(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { }
|
||||
|
||||
void OnUnitEnter(Unit* unit) override
|
||||
{
|
||||
Player* player = unit->ToPlayer();
|
||||
if (!player || player->IsGameMaster())
|
||||
return;
|
||||
|
||||
if (TempSummon* navarrogg = unit->SummonCreature(NPC_NAVARROGG, NavarroggIntroPosition))
|
||||
navarrogg->SetScriptStringId("RokmoraIntro");
|
||||
|
||||
at->Remove();
|
||||
}
|
||||
};
|
||||
|
||||
// 100700 - Navarrogg
|
||||
struct npc_rokmora_navarrogg_intro : public ScriptedAI
|
||||
{
|
||||
npc_rokmora_navarrogg_intro(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (me->HasStringId("RokmoraIntro"))
|
||||
TriggerRokmoraIntro();
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 waypointId, uint32 pathId) override
|
||||
{
|
||||
if (pathId == PATH_NAVARROGG && waypointId == WAYPOINT_DESPAWN)
|
||||
me->DespawnOrUnsummon(1s);
|
||||
}
|
||||
|
||||
void TriggerRokmoraIntro()
|
||||
{
|
||||
Seconds delay = 1s;
|
||||
|
||||
_scheduler.Schedule(delay, [this](TaskContext)
|
||||
{
|
||||
DoCastSelf(SPELL_JUMP_TO_GROUND_COSMETIC);
|
||||
me->GetMotionMaster()->MoveJump(POINT_NAVAROGG_JUMP, NavarroggJumpIntroPosition, 50.0f, 50.0f);
|
||||
});
|
||||
|
||||
delay += 2s;
|
||||
|
||||
_scheduler.Schedule(delay, [this](TaskContext)
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_JUMP_TO_GROUND_COSMETIC);
|
||||
});
|
||||
|
||||
delay += 1s;
|
||||
|
||||
_scheduler.Schedule(delay, [this](TaskContext)
|
||||
{
|
||||
if (Creature* ularogg = me->FindNearestCreature(NPC_ULAROGG, 50.0f))
|
||||
{
|
||||
ularogg->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
ularogg->SetFacingTo(5.480333f);
|
||||
}
|
||||
|
||||
InstanceScript* instance = me->GetInstanceScript();
|
||||
if (!instance)
|
||||
return;
|
||||
|
||||
Creature* rokmora = instance->GetCreature(DATA_ROKMORA);
|
||||
if (!rokmora)
|
||||
return;
|
||||
|
||||
rokmora->AI()->DoCastSelf(SPELL_BOSS_INTRO_EMERGE);
|
||||
|
||||
me->GetMotionMaster()->MovePoint(POINT_NAVAROGG_INTRO, NavarroggIntroPosition2);
|
||||
});
|
||||
|
||||
delay += 1s;
|
||||
|
||||
_scheduler.Schedule(delay, [this](TaskContext)
|
||||
{
|
||||
if (Creature* ularogg = me->FindNearestCreature(NPC_ULAROGG, 50.0f))
|
||||
ularogg->CastSpell(ularogg->GetPosition(), SPELL_BOSS_INTRO_CONVERSATION);
|
||||
});
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_scheduler.Update(diff);
|
||||
}
|
||||
|
||||
private:
|
||||
TaskScheduler _scheduler;
|
||||
};
|
||||
|
||||
// 209374 - Boss 01 Intro Convo
|
||||
// Id - 1885
|
||||
class conversation_rokmora_intro : public ConversationAI
|
||||
{
|
||||
public:
|
||||
using ConversationAI::ConversationAI;
|
||||
|
||||
void OnCreate(Unit* creator) override
|
||||
{
|
||||
Creature* navarrogg = creator->FindNearestCreatureWithOptions(50.0f, { .CreatureId = NPC_NAVARROGG, .StringId = "RokmoraIntro" });
|
||||
if (!navarrogg)
|
||||
return;
|
||||
|
||||
conversation->AddActor(CONVO_ACTOR_NAVARROGG, CONVO_ACTOR_ID_NAVARROGG, navarrogg->GetGUID());
|
||||
}
|
||||
|
||||
void OnStart() override
|
||||
{
|
||||
if (Milliseconds const* ularoggMoveStartTime = conversation->GetLineStartTime(DEFAULT_LOCALE, CONVO_ULAROGG_INTRO_LINE_03))
|
||||
_events.ScheduleEvent(EVENT_ROKMORA_INTRO_MOVE, *ularoggMoveStartTime + 3s);
|
||||
}
|
||||
|
||||
void OnUpdate(uint32 diff) override
|
||||
{
|
||||
_events.Update(diff);
|
||||
|
||||
switch (_events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_ROKMORA_INTRO_MOVE:
|
||||
{
|
||||
Creature* ularogg = conversation->GetActorCreature(CONVO_ACTOR_ID_ULAROGG);
|
||||
Creature* navarrogg = conversation->GetActorCreature(CONVO_ACTOR_ID_NAVARROGG);
|
||||
if (!ularogg || !navarrogg)
|
||||
break;
|
||||
|
||||
ularogg->GetMotionMaster()->MovePath(PATH_ULAROGG, false);
|
||||
navarrogg->GetMotionMaster()->MovePath(PATH_NAVARROGG, false);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
// 209394 - Boss 01 Intro Emerge
|
||||
class spell_rokmora_emerge : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_UPDATE_INTERACTIONS });
|
||||
}
|
||||
|
||||
void HandleShatter() const
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
InstanceScript* instance = caster->GetInstanceScript();
|
||||
if (!instance)
|
||||
return;
|
||||
|
||||
caster->CastSpell(caster, SPELL_UPDATE_INTERACTIONS, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
|
||||
instance->SetData(DATA_ROKMORA_INTRO_STATE, DONE);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_rokmora_emerge::HandleShatter);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_rokmora_emerge_aura : public AuraScript
|
||||
{
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const
|
||||
{
|
||||
GetCaster()->AddUnitState(UNIT_STATE_ROOT);
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const
|
||||
{
|
||||
GetCaster()->ClearUnitState(UNIT_STATE_ROOT);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_rokmora_emerge_aura::OnApply, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_rokmora_emerge_aura::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 134730 - Update Interactions
|
||||
class spell_rokmora_update_interactions : public SpellScript
|
||||
{
|
||||
void HandleScript(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
Creature* caster = GetCaster()->ToCreature();
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
caster->SetImmuneToPC(false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_rokmora_update_interactions::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_rokmora()
|
||||
{
|
||||
RegisterNeltharionsLairCreatureAI(boss_rokmora);
|
||||
|
||||
RegisterSpellScript(spell_rokmora_crystalline_ground_periodic);
|
||||
RegisterSpellScript(spell_rokmora_shatter);
|
||||
RegisterSpellScript(spell_rokmora_razor_shards);
|
||||
|
||||
RegisterAreaTriggerAI(at_rokmora_choking_dust);
|
||||
RegisterAreaTriggerAI(at_rokmora_crystalline_ground);
|
||||
|
||||
// Intro
|
||||
RegisterAreaTriggerAI(at_rokmora_intro);
|
||||
RegisterNeltharionsLairCreatureAI(npc_rokmora_navarrogg_intro);
|
||||
RegisterConversationAI(conversation_rokmora_intro);
|
||||
RegisterSpellAndAuraScriptPair(spell_rokmora_emerge, spell_rokmora_emerge_aura);
|
||||
RegisterSpellScript(spell_rokmora_update_interactions);
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 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 "AreaBoundary.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "neltharions_lair.h"
|
||||
|
||||
BossBoundaryData const boundaries =
|
||||
{
|
||||
{ DATA_ROKMORA, new RectangleBoundary(2855.4377f, 2953.1074f, 1360.5552f, 1438.9974f) }
|
||||
};
|
||||
|
||||
ObjectData const creatureData[] =
|
||||
{
|
||||
{ BOSS_ROKMORA, DATA_ROKMORA },
|
||||
{ BOSS_ULAROGG_CRAGSHAPER, DATA_ULAROGG_CRAGSHAPER },
|
||||
{ BOSS_NARAXAS, DATA_NARAXAS },
|
||||
{ BOSS_DARGRUL_THE_UNDERKING, DATA_DARGRUL_THE_UNDERKING },
|
||||
{ 0, 0 } // END
|
||||
};
|
||||
|
||||
DungeonEncounterData const encounters[] =
|
||||
{
|
||||
{ DATA_ROKMORA, {{ 1790 }} },
|
||||
{ DATA_ULAROGG_CRAGSHAPER, {{ 1791 }} },
|
||||
{ DATA_NARAXAS, {{ 1792 }} },
|
||||
{ DATA_DARGRUL_THE_UNDERKING, {{ 1793 }} },
|
||||
};
|
||||
|
||||
static DoorData const doorData[] =
|
||||
{
|
||||
{ GO_MYSTIC_BARRIER, DATA_ROKMORA, EncounterDoorBehavior::OpenWhenDone },
|
||||
{ 0, 0, EncounterDoorBehavior::OpenWhenNotInProgress }
|
||||
};
|
||||
|
||||
class instance_neltharions_lair : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_neltharions_lair() : InstanceMapScript(NLScriptName, 1458) { }
|
||||
|
||||
struct instance_neltharions_lair_InstanceMapScript: public InstanceScript
|
||||
{
|
||||
instance_neltharions_lair_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadObjectData(creatureData, nullptr);
|
||||
LoadDoorData(doorData);
|
||||
LoadBossBoundaries(boundaries);
|
||||
LoadDungeonEncounterData(encounters);
|
||||
|
||||
_rokmoraIntroState = NOT_STARTED;
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 dataId) const override
|
||||
{
|
||||
switch (dataId)
|
||||
{
|
||||
case DATA_ROKMORA_INTRO_STATE:
|
||||
return _rokmoraIntroState;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 dataId, uint32 value) override
|
||||
{
|
||||
switch (dataId)
|
||||
{
|
||||
case DATA_ROKMORA_INTRO_STATE:
|
||||
_rokmoraIntroState = value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
uint8 _rokmoraIntroState;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
{
|
||||
return new instance_neltharions_lair_InstanceMapScript(map);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_neltharions_lair()
|
||||
{
|
||||
new instance_neltharions_lair();
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef DEF_NELTHARIONS_LAIR_H_
|
||||
#define DEF_NELTHARIONS_LAIR_H_
|
||||
|
||||
#include "CreatureAIImpl.h"
|
||||
|
||||
#define DataHeader "NeltharionsLair"
|
||||
#define NLScriptName "instance_neltharions_lair"
|
||||
|
||||
constexpr uint32 EncounterCount = 4;
|
||||
|
||||
enum NLDataTypes : uint8
|
||||
{
|
||||
// Encounters
|
||||
DATA_ROKMORA = 0,
|
||||
DATA_ULAROGG_CRAGSHAPER,
|
||||
DATA_NARAXAS,
|
||||
DATA_DARGRUL_THE_UNDERKING,
|
||||
|
||||
DATA_ROKMORA_INTRO_STATE
|
||||
};
|
||||
|
||||
enum NLCreatureIds
|
||||
{
|
||||
// Bosses
|
||||
BOSS_ROKMORA = 91003,
|
||||
BOSS_ULAROGG_CRAGSHAPER = 91004,
|
||||
BOSS_NARAXAS = 91005,
|
||||
BOSS_DARGRUL_THE_UNDERKING = 91007
|
||||
};
|
||||
|
||||
enum NLGameObjects
|
||||
{
|
||||
GO_MYSTIC_BARRIER = 248871
|
||||
};
|
||||
|
||||
template <class AI, class T>
|
||||
inline AI* GetNeltharionsLairAI(T* obj)
|
||||
{
|
||||
return GetInstanceAI<AI>(obj, NLScriptName);
|
||||
}
|
||||
|
||||
#define RegisterNeltharionsLairCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetNeltharionsLairAI)
|
||||
|
||||
#endif
|
||||
@@ -32,6 +32,10 @@ void AddSC_instance_trial_of_valor();
|
||||
void AddSC_boss_amalgam_of_souls();
|
||||
void AddSC_instance_black_rook_hold();
|
||||
|
||||
// Neltharion's Lair
|
||||
void AddSC_boss_rokmora();
|
||||
void AddSC_instance_neltharions_lair();
|
||||
|
||||
// Orderhalls
|
||||
void AddSC_orderhall_warrior();
|
||||
void AddSC_orderhall_rogue();
|
||||
@@ -55,6 +59,10 @@ void AddBrokenIslesScripts()
|
||||
AddSC_boss_amalgam_of_souls();
|
||||
AddSC_instance_black_rook_hold();
|
||||
|
||||
// Neltharion's Lair
|
||||
AddSC_boss_rokmora();
|
||||
AddSC_instance_neltharions_lair();
|
||||
|
||||
// Orderhalls
|
||||
AddSC_orderhall_warrior();
|
||||
AddSC_orderhall_rogue();
|
||||
|
||||
Reference in New Issue
Block a user