aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2025_04_09_00_world.sql151
-rw-r--r--src/server/game/Spells/SpellMgr.cpp25
-rw-r--r--src/server/scripts/Zandalar/Underrot/boss_sporecaller_zancha.cpp691
-rw-r--r--src/server/scripts/Zandalar/Underrot/instance_underrot.cpp7
-rw-r--r--src/server/scripts/Zandalar/zandalar_script_loader.cpp2
5 files changed, 865 insertions, 11 deletions
diff --git a/sql/updates/world/master/2025_04_09_00_world.sql b/sql/updates/world/master/2025_04_09_00_world.sql
new file mode 100644
index 00000000000..1a5d04e0ad1
--- /dev/null
+++ b/sql/updates/world/master/2025_04_09_00_world.sql
@@ -0,0 +1,151 @@
+SET @ATSPAWNID := 199;
+SET @ATID := 105;
+SET @ATPROPERTIESID := 100;
+
+-- Creatures
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=58911 WHERE (`Entry`=144306 AND `DifficultyID`=23); -- 144306 (Bloodsworn Defiler) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=58911 WHERE (`Entry`=138740 AND `DifficultyID`=23); -- 138740 (Musashitake) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=58911 WHERE (`Entry`=131383 AND `DifficultyID`=23); -- 131383 (Sporecaller Zancha) - CanSwim
+
+DELETE FROM `creature_template_difficulty` WHERE (`DifficultyID`=23 AND `Entry` IN (139127,131597));
+INSERT INTO `creature_template_difficulty` (`Entry`, `DifficultyID`, `LevelScalingDeltaMin`, `LevelScalingDeltaMax`, `ContentTuningID`, `StaticFlags1`, `StaticFlags2`, `StaticFlags3`, `StaticFlags4`, `StaticFlags5`, `StaticFlags6`, `StaticFlags7`, `StaticFlags8`, `VerifiedBuild`) VALUES
+(139127, 23, 0, 0, 502, 0x20000100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 58911), -- 139127 (Volatile Pod) - Sessile, Floating
+(131597, 23, 0, 0, 502, 0x20000100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 58911); -- 131597 (Spore Pod) - Sessile, Floating
+
+UPDATE `creature_template_difficulty` SET `HealthScalingExpansion`=7, `CreatureDifficultyID`=145910 WHERE `Entry`=139127; -- Volatile Pod
+UPDATE `creature_template_difficulty` SET `HealthScalingExpansion`=7, `CreatureDifficultyID`=137515, `StaticFlags1`=0x20000100 WHERE `Entry`=131597; -- Spore Pod
+
+UPDATE `creature_template` SET `unit_flags3`=0x41000001, `AIName`='SmartAI' WHERE `entry`=139127; -- Volatile Pod
+UPDATE `creature_template` SET `faction`=16, `BaseAttackTime`=2000, `unit_flags`=0x2000200, `unit_flags2`=0x800, `unit_flags3`=0x41080001, `AIName`='SmartAI' WHERE `entry`=131597; -- Spore Pod
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=144306; -- Bloodsworn Defiler
+UPDATE `creature_template` SET `ScriptName`='boss_sporecaller_zancha' WHERE `entry`=131383;
+UPDATE `creature_template` SET `ScriptName`='npc_sporecaller_zancha_musashitake' WHERE `entry`=138740;
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (131597);
+INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
+(131597, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '259727'); -- 131597 (Spore Pod) - Boundless Rot
+
+-- Conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (272104, 259720, 272511, 272457, 259732);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ConditionStringValue1`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 272104, 0, 0, 51, 0, 5, 131383, 0, '', 0, 0, 0, '', 'Spell \'Infusion\' can only hit \'Sporecaller Zancha\''),
+(13, 4, 259720, 0, 0, 51, 0, 5, 131597, 0, '', 0, 0, 0, '', 'Spell \'Upheaval\' can only hit \'Spore Pod\''),
+(13, 4, 259720, 0, 1, 51, 0, 5, 138740, 0, '', 0, 0, 0, '', 'Spell \'Upheaval\' can only hit \'Musashitake\''),
+(13, 1, 272511, 0, 0, 51, 0, 5, 131383, 0, '', 0, 0, 0, '', 'Spell \'Upheaval\' can only hit \'Sporecaller Zancha\''),
+(13, 2, 272457, 0, 0, 51, 0, 5, 131597, 0, '', 0, 0, 0, '', 'Spell \'Shockwave\' can only hit \'Spore Pod\''),
+(13, 2, 272457, 0, 1, 51, 0, 5, 138740, 0, '', 0, 0, 0, '', 'Spell \'Shockwave\' can only hit \'Musashitake\''),
+(13, 1, 259732, 0, 0, 51, 0, 5, 131597, 0, '', 0, 0, 0, '', 'Spell \'Festering Harvest\' can only hit \'Spore Pod\'');
+
+-- Areatriggers
+-- INTRO
+DELETE FROM `areatrigger` WHERE `SpawnId`=@ATSPAWNID;
+INSERT INTO `areatrigger` (`SpawnId`, `AreaTriggerCreatePropertiesId`, `IsCustom`, `MapId`, `SpawnDifficulties`, `PosX`, `PosY`, `PosZ`, `Orientation`, `PhaseUseFlags`, `PhaseId`, `PhaseGroup`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES
+(@ATSPAWNID, @ATPROPERTIESID, 1, 1841, '1,2,8,23', 1032.939941, 1058.290039, 33.330898, 4.695440, 0, 0, 0, '', 'The Underrot - Sporecaller Zancha Intro', 56647);
+
+DELETE FROM `areatrigger_create_properties` WHERE `Id`=@ATPROPERTIESID 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
+(@ATPROPERTIESID, 1, @ATID, 1, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 0, 0, 0, 25, 25, 0, 0, 0, 0, 0, 0, 'at_sporecaller_zancha_intro', 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);
+
+-- SPELLS
+DELETE FROM `areatrigger_template` WHERE (`IsCustom`=0 AND `Id` IN (18227, 16966));
+INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `ActionSetFlags`, `VerifiedBuild`) VALUES
+(18227, 0, 0, 0x0800, 58911),
+(16966, 0, 0, 0, 49343);
+
+DELETE FROM `areatrigger_create_properties` WHERE (`IsCustom`=0 AND `Id` IN (12266, 13726));
+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
+(13726, 0, 18227, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 10000, 7.500002384185791015, 4, 2, 2, 10, 10, 3, 3, 0, 0, 'at_sporecaller_zancha_volatile_pod', 58911), -- Spell: 273300 (Volatile Pods)
+(12266, 0, 16966, 0, 4, 0, 0, 0, 0, -1, 0, 0, NULL, 0, 0, 4, 1, 1, 3, 3, 0.300000011920928955, 0.300000011920928955, 0, 0, 'at_sporecaller_zancha_boundless_rot', 49343); -- Spell: 259727 (Boundless Rot)
+
+-- Conversation
+DELETE FROM `conversation_actors` WHERE (`Idx`=0 AND `ConversationId` IN (9671, 8358));
+INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES
+(9671, 51642, 0, 119889, 26353, 0, 0, 58911),
+(8358, 64741, 0, 138740, 83603, 0, 0, 49343); -- Full: 0x204250E620877D0000613D000050E907 Creature/0 R4244/S24893 Map: 1841 (The Underrot) Entry: 138740 (Musashitake) Low: 5302535
+
+DELETE FROM `conversation_line_template` WHERE `Id` IN (22107, 18916);
+INSERT INTO `conversation_line_template` (`Id`, `UiCameraID`, `ActorIdx`, `Flags`, `ChatType`, `VerifiedBuild`) VALUES
+(22107, 90, 0, 0, 0, 58911),
+(18916, 0, 0, 0, 0, 49343);
+
+DELETE FROM `conversation_template` WHERE `Id` IN (9671, 8358);
+INSERT INTO `conversation_template` (`Id`, `FirstLineID`, `TextureKitId`, `VerifiedBuild`) VALUES
+(9671, 22107, 0, 58911),
+(8358, 18916, 0, 49343);
+
+-- Summon groups
+DELETE FROM `creature` WHERE `guid` IN (850863, 850860, 850857, 850855, 850842);
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=131383;
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES
+(131383, 0, 0, 144306, 1041.1, 1051.63, 33.536, 2.44391, 8, 0, 'Sporecaller Zancha - Group 0 - Bloodsworn Defiler'),
+(131383, 0, 0, 144306, 1040.15, 1066.87, 33.4068, 3.99352, 8, 0, 'Sporecaller Zancha - Group 0 - Bloodsworn Defiler'),
+(131383, 0, 0, 144306, 1024.94, 1050.99, 33.4707, 0.8341, 8, 0, 'Sporecaller Zancha - Group 0 - Bloodsworn Defiler'),
+(131383, 0, 0, 144306, 1025.44, 1066.86, 33.3309, 5.471, 8, 0, 'Sporecaller Zancha - Group 0 - Bloodsworn Defiler'),
+(131383, 0, 1, 138740, 987.078, 1089.9, 33.2575, 2.76614, 8, 0, 'Sporecaller Zancha - Group 1 - Musashitake'),
+(131383, 0, 2, 139127, 1029.8716, 1034.783, 33.64273, 1.443644, 8, 0, 'Sporecaller Zancha - Group 2 - Volatile Pods'),
+(131383, 0, 2, 139127, 1013.9844, 1074.3785, 33.120163, 5.567163, 8, 0, 'Sporecaller Zancha - Group 2 - Volatile Pods'),
+(131383, 0, 2, 139127, 1007.908, 1051.2622, 32.986603, 0.226441, 8, 0, 'Sporecaller Zancha - Group 2 - Volatile Pods'),
+(131383, 0, 2, 139127, 1052.5226, 1072.8438, 32.91686, 3.785604, 8, 0, 'Sporecaller Zancha - Group 2 - Volatile Pods'),
+(131383, 0, 2, 139127, 1049.1493, 1043.3004, 33.95835, 2.441261, 8, 0, 'Sporecaller Zancha - Group 2 - Volatile Pods'),
+(131383, 0, 2, 139127, 1035.6615, 1082.0781, 32.738506, 4.595758, 8, 0, 'Sporecaller Zancha - Group 2 - Volatile Pods');
+
+-- SAI
+DELETE FROM `smart_scripts` WHERE `entryorguid`=144306 AND `id`=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
+(144306, 0, 0, 0, '', 63, 0, 100, 0, 0, 0, 0, 0, 0, '', 85, 272104, 2, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Bloodsworn Defiler - On Created - Cast Self: Infusion');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=131597 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
+(131597, 0, 0, 0, '', 63, 0, 100, 0, 0, 0, 0, 0, 0, '', 8, 0, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Spore Pod - On Just Created - Set ReactState Passive'),
+(131597, 0, 1, 4, '', 8, 0, 100, 0, 272457, 0, 0, 0, 0, '', 85, 259862, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Spore Pod - On Spellhit - Cast \'Spore Pod hit by Boss Ability\''),
+(131597, 0, 2, 4, '', 8, 0, 100, 0, 259720, 0, 0, 0, 0, '', 85, 259862, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Spore Pod - On Spellhit - Cast \'Spore Pod hit by Boss Ability\''),
+(131597, 0, 3, 4, '', 8, 0, 100, 0, 259732, 0, 0, 0, 0, '', 85, 259958, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Spore Pod - On Spellhit - Cast \'BIG Spore Pod Detonation\''),
+(131597, 0, 4, 0, '', 61, 0, 100, 0, 0, 0, 0, 0, 0, '', 41, 100, 0, 0, 0, 0, 0, 0, NULL, 1, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 'Spore Pod - On Linked Event - Despawn');
+
+ -- Volatile Pod smart ai
+SET @ENTRY := 139127;
+UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryOrGuid` IN (13912700);
+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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `action_param7`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`, `Difficulties`) VALUES
+(@ENTRY, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 80, 13912700, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On respawn - Self: Start timed action list id #Volatile Pod #0 (13912700) (update always) // -inline', ''),
+(@ENTRY * 100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'After 0 seconds - Self: Set react state to Passive', ''),
+(@ENTRY * 100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 128, 7687, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'After 0 seconds - Self: Plays Anim with ID 7687', ''),
+(@ENTRY * 100, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 0, 85, 273285, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'After 4 seconds - Self: Cast spell 273285 on self', ''),
+(@ENTRY * 100, 9, 3, 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'After 0.1 seconds - Self: Despawn instantly', '');
+
+-- Texts
+DELETE FROM `creature_text` WHERE `CreatureID` IN (131383, 138740);
+INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(131383, 0, 0, 'Rot must spread!', 14, 0, 50, 0, 0, 109964, 143938, 0, 'Sporecaller Zancha'),
+(131383, 0, 1, 'Harvest!', 14, 0, 50, 0, 0, 109965, 143939, 0, 'Sporecaller Zancha'),
+(131383, 1, 0, '|TInterface\\Icons\\ABILITY_EARTHEN_PILLAR.BLP:20|t %s targets you with |cFFFF0000|Hspell:259720|h[Upheaval]|h|r!', 42, 0, 100, 0, 0, 0, 161956, 0, 'Sporecaller Zancha'),
+(131383, 2, 0, 'Grow!', 14, 0, 50, 0, 0, 109960, 143951, 0, 'Sporecaller Zancha'), -- BroadcastTextID: 86442 - 143951
+(131383, 2, 1, 'Corruption blooms!', 14, 0, 50, 0, 0, 109962, 143953, 0, 'Sporecaller Zancha'),
+(131383, 3, 0, 'Such fertile soil.', 14, 0, 100, 0, 0, 109969, 143948, 0, 'Sporecaller Zancha'),
+(131383, 4, 0, 'Must feed!', 14, 0, 100, 0, 0, 109968, 143955, 0, 'Sporecaller Zancha'),
+(131383, 5, 0, 'Everything... decays...', 14, 0, 100, 0, 0, 109966, 143960, 0, 'Sporecaller Zancha'),
+(138740, 0, 0, 'Nothing personal.', 12, 0, 100, 0, 0, 0, 157014, 0, 'Musashitake to Player'); -- BroadcastTextID: 31808 - 157014
+
+-- Spells
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (273285, 273271, 272511, 259888, 259845, 259732, 259718, 273226, 259717, 272786, 272787);
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(273285, 'spell_sporecaller_zancha_volatile_pods_explosion'),
+(273271, 'spell_sporecaller_zancha_volatile_pods'),
+(272511, 'spell_sporecaller_zancha_upheaval_script_effect'),
+(259888, 'spell_sporecaller_zancha_festering_harvest'),
+(259845, 'spell_sporecaller_zancha_boundless_rot'),
+(259732, 'spell_sporecaller_zancha_festering_harvest_pods_selector'),
+(259718, 'spell_sporecaller_zancha_upheaval_marker'),
+(259717, 'spell_sporecaller_zancha_upheaval_selector'),
+(272786, 'spell_sporecaller_zancha_musashitake_teleport_selector'),
+(272787, 'spell_sporecaller_zancha_musashitake_teleport');
+
+DELETE FROM `creature_template_addon` WHERE `entry`=139127;
+INSERT INTO `creature_template_addon` (`entry`, `AnimTier`) VALUES
+(139127, 0);
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index ef692760f78..4f161ad3ca6 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -4806,6 +4806,15 @@ void SpellMgr::LoadSpellInfoCorrections()
});
});
+ ApplySpellFix({
+ 260566, // Wildfire Missile
+ 260570 // Wildfire Missile Impact
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->AttributesEx9 |= SPELL_ATTR9_FORCE_DEST_LOCATION;
+ });
+
// ENDOF WAYCREST MANOR SPELLS
//
@@ -4937,19 +4946,19 @@ void SpellMgr::LoadSpellInfoCorrections()
//
//
- // WAYCREST MANOR SPELLS
+ // UNDERROT SPELLS
//
- ApplySpellFix({
- 260566, // Wildfire Missile
- 260570 // Wildfire Missile Impact
- }, [](SpellInfo* spellInfo)
+ // Boundless Rot
+ ApplySpellFix({ 259845 }, [](SpellInfo* spellInfo)
{
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->AttributesEx9 |= SPELL_ATTR9_FORCE_DEST_LOCATION;
+ ApplySpellEffectFix(spellInfo, EFFECT_0, [](SpellEffectInfo* spellEffectInfo)
+ {
+ spellEffectInfo->TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
});
- // ENDOF WAYCREST MANOR SPELLS
+ // ENDOF UNDERROT SPELLS
//
//
diff --git a/src/server/scripts/Zandalar/Underrot/boss_sporecaller_zancha.cpp b/src/server/scripts/Zandalar/Underrot/boss_sporecaller_zancha.cpp
new file mode 100644
index 00000000000..76b068b1e6c
--- /dev/null
+++ b/src/server/scripts/Zandalar/Underrot/boss_sporecaller_zancha.cpp
@@ -0,0 +1,691 @@
+/*
+ * 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 "CellImpl.h"
+#include "Containers.h"
+#include "Conversation.h"
+#include "Creature.h"
+#include "GridNotifiersImpl.h"
+#include "InstanceScript.h"
+#include "ObjectAccessor.h"
+#include "PathGenerator.h"
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "SpellAuraEffects.h"
+#include "SpellAuras.h"
+#include "SpellMgr.h"
+#include "SpellScript.h"
+#include "underrot.h"
+
+enum SporecallerZanchaSpells
+{
+ // Intro
+ SPELL_BOSS_3_INTRO = 280683,
+ SPELL_INFUSION = 272104,
+
+ SPELL_FESTERING_HARVEST = 259888,
+ SPELL_FESTERING_HARVEST_DAMAGE = 259732,
+ SPELL_BOUNDLESS_ROT = 259830,
+ SPELL_SHOCKWAVE = 272457,
+ SPELL_UPHEAVAL_SELECTOR = 259717,
+ SPELL_UPHEAVAL_AURA = 259718,
+ SPELL_UPHEAVAL_SCRIPT_EFFECT = 272511,
+ SPELL_UPHEAVAL_MISSILE = 274213,
+ SPELL_UPHEAVAL_DAMAGE = 259720,
+ SPELL_DECAYING_SPORES = 259714,
+ SPELL_SPORE_POD_BEAM = 259968,
+ SPELL_VOLATILE_PODS = 273271,
+ SPELL_VOLATILE_PODS_VISUAL = 273285,
+ SPELL_VOLATILE_PODS_AREATRIGGER = 273300,
+
+ // Musashitake
+ SPELL_ACHIEVEMENT_VISUAL = 272773,
+ SPELL_TELEPORT_BEHIND_YOU_SELECTOR = 272786,
+ SPELL_TELEPORT = 272787,
+ SPELL_THOUSAND_FOLD_BLADE = 272864
+};
+
+enum SporecallerZanchaEvents
+{
+ EVENT_CHECK_ENERGY = 1,
+ EVENT_SHOCKWAVE,
+ EVENT_UPHEAVAL,
+ EVENT_VOLATILE_PODS,
+ EVENT_BOUNDLESS_ROT,
+
+ // Musashitake
+ EVENT_TELEPORT
+};
+
+enum SporecallerZanchaTexts
+{
+ SAY_AGGRO = 0,
+ SAY_UPHEAVAL = 1,
+ SAY_FESTERING_HARVEST = 2,
+ SAY_WIPE = 3,
+ SAY_KILL = 4,
+ SAY_DEATH = 5,
+
+ // Musashitake
+ SAY_PERSONAL = 0
+};
+
+enum SporecallerZanchaSummonGroups
+{
+ SUMMON_GROUP_ZANCHA_INTRO = 0,
+ SUMMON_GROUP_MUSASHITAKE = 1,
+ SUMMON_GROUP_VOLATILE_PODS = 2
+};
+
+enum SporecallerZanchaActions
+{
+ ACTION_INTRO = 1
+};
+
+enum SporecallerZanchaCreatures
+{
+ NPC_SPORE_POD = 131597
+};
+
+enum MusashitakeMisc
+{
+ CONVERSATION_START = 8358
+};
+
+// 131383 - Sporecaller Zancha
+struct boss_sporecaller_zancha : public BossAI
+{
+ boss_sporecaller_zancha(Creature* creature) : BossAI(creature, DATA_SPORECALLER_ZANCHA), _shockwaveCount(1), _upheavalCount(1), _volatilePodsCount(1) { }
+
+ void JustAppeared() override
+ {
+ me->SummonCreatureGroup(SUMMON_GROUP_MUSASHITAKE);
+ me->SetPowerType(POWER_ENERGY);
+ me->SetPower(POWER_ENERGY, 0);
+ }
+
+ void KilledUnit(Unit* victim) override
+ {
+ if (!victim->IsPlayer())
+ return;
+
+ Talk(SAY_KILL);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
+
+ Talk(SAY_DEATH);
+ }
+
+ void Reset() override
+ {
+ _Reset();
+
+ _shockwaveCount = 1;
+ _upheavalCount = 1;
+ _volatilePodsCount = 1;
+ }
+
+ void EnterEvadeMode(EvadeReason /*why*/) override
+ {
+ instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
+ summons.DespawnAll();
+
+ Talk(SAY_WIPE);
+ _EnterEvadeMode();
+ _DespawnAtEvade();
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
+
+ Talk(SAY_AGGRO);
+
+ DoCastSelf(SPELL_BOUNDLESS_ROT);
+ DoCastSelf(SPELL_FESTERING_HARVEST);
+ events.ScheduleEvent(EVENT_CHECK_ENERGY, 500ms);
+
+ if (IsHeroicOrHigher() || IsMythicPlus())
+ {
+ events.ScheduleEvent(EVENT_SHOCKWAVE, 10600ms);
+ events.ScheduleEvent(EVENT_UPHEAVAL, 16600ms);
+ events.ScheduleEvent(EVENT_VOLATILE_PODS, 21600ms);
+ }
+ else
+ {
+ events.ScheduleEvent(EVENT_SHOCKWAVE, 10500ms);
+ events.ScheduleEvent(EVENT_UPHEAVAL, 16s);
+ }
+ }
+
+ void DoAction(int32 action) override
+ {
+ if (action != ACTION_INTRO)
+ return;
+
+ for (ObjectGuid summonGUID : summons)
+ {
+ if (Creature* defiler = ObjectAccessor::GetCreature(*me, summonGUID))
+ {
+ defiler->KillSelf();
+ defiler->DespawnOrUnsummon(20s);
+ }
+ }
+ me->SummonCreatureGroup(SUMMON_GROUP_MUSASHITAKE);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (events.ExecuteEvent())
+ {
+ case EVENT_CHECK_ENERGY:
+ {
+ if (me->GetPower(POWER_ENERGY) >= 100)
+ {
+ Talk(SAY_FESTERING_HARVEST);
+ DoCastSelf(SPELL_FESTERING_HARVEST_DAMAGE);
+ events.ScheduleEvent(EVENT_BOUNDLESS_ROT, 9s);
+ events.RescheduleEvent(EVENT_CHECK_ENERGY, 10s);
+ }
+ events.Repeat(500ms);
+ break;
+ }
+ case EVENT_SHOCKWAVE:
+ {
+ DoCastSelf(SPELL_SHOCKWAVE);
+ _shockwaveCount++;
+ if (IsHeroicOrHigher() || IsMythicPlus())
+ {
+ if (_shockwaveCount == 2)
+ events.Repeat(14600ms);
+ else if (_shockwaveCount == 3)
+ events.Repeat(45100ms);
+ else if (_shockwaveCount % 2 == 0)
+ events.Repeat(20700ms);
+ else
+ events.Repeat(30400ms);
+ }
+ else
+ {
+ if (_shockwaveCount == 2)
+ events.Repeat(14600ms);
+ else if (_shockwaveCount == 4)
+ events.Repeat(30400ms);
+ else if (_shockwaveCount % 2 == 0)
+ events.Repeat(40100ms);
+ else
+ events.Repeat(15800ms);
+ }
+ break;
+ }
+ case EVENT_UPHEAVAL:
+ {
+ DoCastSelf(SPELL_UPHEAVAL_SELECTOR);
+ _upheavalCount++;
+ if (IsHeroicOrHigher() || IsMythicPlus())
+ {
+ if (_upheavalCount == 3)
+ events.Repeat(24300ms);
+ else if (_upheavalCount % 2 == 0)
+ events.Repeat(20700ms);
+ else
+ events.Repeat(30400ms);
+ }
+ else
+ {
+ if (_upheavalCount == 3)
+ events.Repeat(30400ms);
+ else if (_upheavalCount % 3 == 0)
+ events.Repeat(24300ms);
+ else
+ events.Repeat(15800ms);
+ }
+ break;
+ }
+ case EVENT_VOLATILE_PODS:
+ {
+ DoCastSelf(SPELL_VOLATILE_PODS);
+ _volatilePodsCount++;
+ if (_volatilePodsCount == 4)
+ events.Repeat(27900ms);
+ else
+ events.Repeat(25500ms);
+ break;
+ }
+ case EVENT_BOUNDLESS_ROT:
+ {
+ DoCastSelf(SPELL_BOUNDLESS_ROT);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+private:
+ uint32 _shockwaveCount;
+ uint32 _upheavalCount;
+ uint32 _volatilePodsCount;
+};
+
+// 138740 - Musashitake
+struct npc_sporecaller_zancha_musashitake : public ScriptedAI
+{
+ npc_sporecaller_zancha_musashitake(Creature* creature) : ScriptedAI(creature) { }
+
+ void JustAppeared() override
+ {
+ me->SetReactState(REACT_PASSIVE);
+ }
+
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
+ {
+ if ((spellInfo->Id == SPELL_SHOCKWAVE || spellInfo->Id == SPELL_UPHEAVAL_DAMAGE) && me->HasReactState(REACT_PASSIVE))
+ {
+ if (IsHeroicOrHigher() || IsMythicPlus())
+ {
+ me->RemoveAurasDueToSpell(SPELL_ACHIEVEMENT_VISUAL);
+ Conversation::CreateConversation(CONVERSATION_START, me, me->GetPosition(), ObjectGuid::Empty);
+ me->SetUninteractible(false);
+ me->RemoveUnitFlag2(UNIT_FLAG2_UNTARGETABLE_BY_CLIENT);
+ me->SetReactState(REACT_AGGRESSIVE);
+ _events.ScheduleEvent(EVENT_TELEPORT, 3s);
+ }
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_TELEPORT:
+ {
+ Talk(SAY_PERSONAL);
+ DoCastSelf(SPELL_TELEPORT_BEHIND_YOU_SELECTOR);
+ _events.Repeat(20s);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+private:
+ EventMap _events;
+};
+
+// 259717 - Upheaval
+class spell_sporecaller_zancha_upheaval_selector : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_UPHEAVAL_AURA });
+ }
+
+ void HandleHitTarget(SpellEffIndex /*effIndex*/) const
+ {
+ if (Creature* creatureCaster = GetCaster()->ToCreature())
+ {
+ creatureCaster->CastSpell(GetHitUnit(), SPELL_UPHEAVAL_AURA, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ creatureCaster->AI()->Talk(SAY_UPHEAVAL, GetHitUnit());
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sporecaller_zancha_upheaval_selector::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 259718 - Upheaval
+class spell_sporecaller_zancha_upheaval_marker : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_UPHEAVAL_SCRIPT_EFFECT });
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
+ return;
+
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_UPHEAVAL_SCRIPT_EFFECT, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringAura = aurEff
+ });
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_sporecaller_zancha_upheaval_marker::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+// 272511 - Upheaval
+class spell_sporecaller_zancha_upheaval_script_effect : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_UPHEAVAL_MISSILE });
+ }
+
+ void HandleHitTarget(SpellEffIndex /*effIndex*/) const
+ {
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_UPHEAVAL_MISSILE, TRIGGERED_IGNORE_CAST_TIME);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sporecaller_zancha_upheaval_script_effect::HandleHitTarget, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 259888 - Festering Harvest
+class spell_sporecaller_zancha_festering_harvest : public AuraScript
+{
+ static constexpr std::array<uint8, 5> SporecallerEnergizeCycle = { 2, 2, 2, 2, 3 };
+
+ void PeriodicTick(AuraEffect const* aurEff) const
+ {
+ uint8 cycleIdx = aurEff->GetTickNumber() % SporecallerEnergizeCycle.size();
+ GetTarget()->ModifyPower(POWER_ENERGY, SporecallerEnergizeCycle[cycleIdx]);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_sporecaller_zancha_festering_harvest::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+};
+
+// 259732 - Festering Harvest
+class spell_sporecaller_zancha_festering_harvest_pods_selector : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_SPORE_POD_BEAM });
+ }
+
+ void OnPrecast() override
+ {
+ std::list<Creature*> sporePods;
+ Trinity::AllCreaturesOfEntryInRange checker(GetCaster(), NPC_SPORE_POD, 200.0f);
+ Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(GetCaster(), sporePods, checker);
+ Cell::VisitAllObjects(GetCaster(), searcher, 200.0f);
+
+ if (sporePods.empty())
+ return;
+
+ for (Creature* spore : sporePods)
+ {
+ spore->CastSpell(spore, SPELL_SPORE_POD_BEAM, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ }
+ }
+
+ void Register() override { }
+};
+
+// 259845 - Boundless Rot
+class spell_sporecaller_zancha_boundless_rot : public SpellScript
+{
+ static constexpr Position CenterPosition = { 1032.9444f, 1058.2899f, 33.330894f };
+
+ static void SetDest(SpellDestination& dest)
+ {
+ dest.Relocate(CenterPosition);
+ }
+
+ void Register() override
+ {
+ OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_sporecaller_zancha_boundless_rot::SetDest, EFFECT_0, TARGET_DEST_DEST);
+ }
+};
+
+// 273271 - Volatile Pods
+class spell_sporecaller_zancha_volatile_pods : public SpellScript
+{
+ void HandleHitTarget(SpellEffIndex /*effIndex*/) const
+ {
+ if (Creature* creatureCaster = GetCaster()->ToCreature())
+ creatureCaster->SummonCreatureGroup(SUMMON_GROUP_VOLATILE_PODS);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sporecaller_zancha_volatile_pods::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 273285 - Volatile Pods
+class spell_sporecaller_zancha_volatile_pods_explosion : public SpellScript
+{
+ static constexpr uint8 MAX_VOLATILE_PODS = 6;
+
+ void HandleHitTarget(SpellEffIndex /*effIndex*/) const
+ {
+ Unit* target = GetHitUnit();
+
+ for (uint8 i = 0; i < MAX_VOLATILE_PODS; ++i)
+ {
+ float angle = target->GetOrientation() + float(M_PI) / 6.0f + i * float(M_PI) / 3.0f;
+ Position dest(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), angle);
+ target->CastSpell(dest, SPELL_VOLATILE_PODS_AREATRIGGER, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sporecaller_zancha_volatile_pods_explosion::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 272786 - Teleport Behind You
+class spell_sporecaller_zancha_musashitake_teleport_selector : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_TELEPORT });
+ }
+
+ void HandleHitTarget(SpellEffIndex /*effIndex*/) const
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_TELEPORT, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sporecaller_zancha_musashitake_teleport_selector::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 272787 - Teleport
+class spell_sporecaller_zancha_musashitake_teleport : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_THOUSAND_FOLD_BLADE });
+ }
+
+ void HandleTeleport(SpellEffIndex /*effIndex*/) const
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_THOUSAND_FOLD_BLADE, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sporecaller_zancha_musashitake_teleport::HandleTeleport, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS);
+ }
+};
+
+// 259727 - Boundless Rot
+// ID - 12266
+struct at_sporecaller_zancha_boundless_rot : AreaTriggerAI
+{
+ using AreaTriggerAI::AreaTriggerAI;
+
+ void OnUnitEnter(Unit* unit) override
+ {
+ Player* player = unit->ToPlayer();
+ if (!player || player->IsGameMaster())
+ return;
+
+ Unit* caster = at->GetCaster();
+ if (!caster)
+ return;
+
+ player->CastSpell(player, SPELL_DECAYING_SPORES, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
+
+ if (Creature* creatureCaster = caster->ToCreature())
+ creatureCaster->DespawnOrUnsummon();
+ }
+};
+
+// 273300 - Volatile Pods
+// ID - 13726
+struct at_sporecaller_zancha_volatile_pod : AreaTriggerAI
+{
+ using AreaTriggerAI::AreaTriggerAI;
+
+ void OnInitialize() override
+ {
+ Position destPos = at->GetPosition();
+ at->MovePositionToFirstCollision(destPos, 200.0f, 0.0f);
+
+ PathGenerator path(at);
+ path.CalculatePath(destPos.GetPositionX(), destPos.GetPositionY(), destPos.GetPositionZ(), true);
+
+ at->InitSplines(path.GetPath());
+ }
+
+ void OnDestinationReached() override
+ {
+ at->Remove();
+ }
+
+ void OnUnitEnter(Unit* unit) override
+ {
+ if (!unit->IsPlayer())
+ return;
+
+ Unit* caster = at->GetCaster();
+ if (!caster)
+ return;
+
+ caster->CastSpell(unit, SPELL_DECAYING_SPORES, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
+ }
+};
+
+// Id 100 - Areatrigger
+struct at_sporecaller_zancha_intro : AreaTriggerAI
+{
+ using AreaTriggerAI::AreaTriggerAI;
+
+ void OnCreate(Spell const* /*creatingSpell*/) override
+ {
+ InstanceScript* instance = at->GetInstanceScript();
+ if (!instance)
+ return;
+
+ if (Creature* zancha = instance->GetCreature(DATA_SPORECALLER_ZANCHA))
+ {
+ if (zancha->IsAlive())
+ zancha->SummonCreatureGroup(SUMMON_GROUP_ZANCHA_INTRO);
+ }
+ }
+
+ void OnUnitEnter(Unit* unit) override
+ {
+ Player* player = unit->ToPlayer();
+ if (!player || player->IsGameMaster())
+ return;
+
+ InstanceScript* instance = at->GetInstanceScript();
+ if (!instance)
+ return;
+
+ Creature* zancha = instance->GetCreature(DATA_SPORECALLER_ZANCHA);
+ if (!zancha || !zancha->IsAlive())
+ return;
+
+ zancha->AI()->DoAction(ACTION_INTRO);
+ zancha->CastSpell(unit, SPELL_BOSS_3_INTRO);
+
+ at->Remove();
+ }
+};
+
+void AddSC_boss_sporecaller_zancha()
+{
+ RegisterUnderrotCreatureAI(boss_sporecaller_zancha);
+ RegisterUnderrotCreatureAI(npc_sporecaller_zancha_musashitake);
+
+ RegisterSpellScript(spell_sporecaller_zancha_upheaval_selector);
+ RegisterSpellScript(spell_sporecaller_zancha_upheaval_marker);
+ RegisterSpellScript(spell_sporecaller_zancha_upheaval_script_effect);
+ RegisterSpellScript(spell_sporecaller_zancha_festering_harvest);
+ RegisterSpellScript(spell_sporecaller_zancha_festering_harvest_pods_selector);
+ RegisterSpellScript(spell_sporecaller_zancha_boundless_rot);
+ RegisterSpellScript(spell_sporecaller_zancha_volatile_pods);
+ RegisterSpellScript(spell_sporecaller_zancha_volatile_pods_explosion);
+
+ // Musashitake
+ RegisterSpellScript(spell_sporecaller_zancha_musashitake_teleport_selector);
+ RegisterSpellScript(spell_sporecaller_zancha_musashitake_teleport);
+
+ RegisterAreaTriggerAI(at_sporecaller_zancha_boundless_rot);
+ RegisterAreaTriggerAI(at_sporecaller_zancha_volatile_pod);
+ RegisterAreaTriggerAI(at_sporecaller_zancha_intro);
+}
diff --git a/src/server/scripts/Zandalar/Underrot/instance_underrot.cpp b/src/server/scripts/Zandalar/Underrot/instance_underrot.cpp
index 12261013e50..5aa6629d1d7 100644
--- a/src/server/scripts/Zandalar/Underrot/instance_underrot.cpp
+++ b/src/server/scripts/Zandalar/Underrot/instance_underrot.cpp
@@ -23,7 +23,8 @@
BossBoundaryData const boundaries =
{
{ DATA_ELDER_LEAXA, new CircleBoundary(Position(869.502014f, 1230.199951f), 58.0f) },
- { DATA_CRAGMAW_THE_INFESTED, new CircleBoundary(Position(852.797974f, 982.133545f), 90.0f) }
+ { DATA_CRAGMAW_THE_INFESTED, new CircleBoundary(Position(852.797974f, 982.133545f), 90.0f) },
+ { BOSS_SPORECALLER_ZANCHA, new ZRangeBoundary(35.240f, 26.790f) }
};
ObjectData const creatureData[] =
@@ -44,8 +45,8 @@ DoorData const doorData[] =
DungeonEncounterData const encounters[] =
{
{ DATA_ELDER_LEAXA, {{ 2111 }} },
- { DATA_CRAGMAW_THE_INFESTED, {{ 2112 }} },
- { DATA_SPORECALLER_ZANCHA, {{ 2118 }} },
+ { DATA_CRAGMAW_THE_INFESTED, {{ 2118 }} },
+ { DATA_SPORECALLER_ZANCHA, {{ 2112 }} },
{ DATA_UNBOUND_ABOMINATION, {{ 2123 }} },
};
diff --git a/src/server/scripts/Zandalar/zandalar_script_loader.cpp b/src/server/scripts/Zandalar/zandalar_script_loader.cpp
index 7d755d37c6f..3a175088b49 100644
--- a/src/server/scripts/Zandalar/zandalar_script_loader.cpp
+++ b/src/server/scripts/Zandalar/zandalar_script_loader.cpp
@@ -27,6 +27,7 @@ void AddSC_boss_priestess_alun_za();
void AddSC_instance_underrot();
void AddSC_boss_elder_leaxa();
void AddSC_boss_cragmaw_the_infested();
+void AddSC_boss_sporecaller_zancha();
// KingsRest
void AddSC_instance_kings_rest();
@@ -47,6 +48,7 @@ void AddZandalarScripts()
AddSC_instance_underrot();
AddSC_boss_elder_leaxa();
AddSC_boss_cragmaw_the_infested();
+ AddSC_boss_sporecaller_zancha();
//KingsRest
AddSC_instance_kings_rest();