Scripts/Trial of Crusader: Northrend Beasts Rework (#21031)

* Rewritten Gormok encounter
* Rewritten Snobold Vassal Script
* Rewritten Jormungars encounter
* Rewritten Icehowl encounter
* Added missing texts
* Added missing spells
* Implemented berserk mechanic on heroic diffs.
* Implemented Achievement requirement to make heroic diffs.
* Rewritten Barrett Ramsay scripts
* Added Barrett gossips and ported everything to DB.
* Added right Barrett in each encounter
* Removed a lot of hacks
* Rewritten Tirion Fordring script
* Rewritten Varian Wrynn script
* Rewritten Garrosh script
* Rewritten Wilfred event
* Rewritten Lich King event
* Updated codestyle
* Added missing spawns
* Fixed combat behavior before Gormok
* Fixed some visual stuff

(cherry picked from commit 2362e9c794)
This commit is contained in:
Keader
2017-12-23 22:03:57 -03:00
committed by funjoker
parent c6d6ece1c7
commit a5635526ed
9 changed files with 2672 additions and 2347 deletions

View File

@@ -0,0 +1,449 @@
SET @CGUID :=79369; -- 2 Guids needed
DELETE FROM `creature` WHERE `guid` IN(@CGUID, @CGUID+1);
INSERT INTO `creature` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnDifficulties`,`PhaseId`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`,`ScriptName`,`VerifiedBuild`) VALUES
(@CGUID,16980,649,0,0,'3,4,5,6',0,0,0,646.073,60.3333,394.856,0,7200,0,0,4120,0,0,0,0,0,'',0), -- Lich King voice
(@CGUID+1,34564,649,0,0,'3,4,5,6',0,0,0,783.9305,132.9722,142.6711,3.141593,7200,0,0,4120,0,0,0,0,0,'',0); -- Anub'arak
DELETE FROM `creature_text` WHERE `CreatureID`=16980 AND `GroupId` IN (4,5); -- The Lich King Voice
INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
(16980,4,0,'You will have your challenge, Fordring.',14,0,100,0,0,16321,35747,0,'The Lich King SAY CHALLENGE'),
(16980,5,0,'The souls of your fallen champions will be mine, Fordring.',14,0,100,0,0,16323,35749,0,'The Lich King SAY SOULS WILL BE MINE');
DELETE FROM `creature_text` WHERE `CreatureID`=35877; -- Lich King
INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
(35877,0,0,'The Nerubians built an empire beneath the frozen wastes of Northrend. An empire that you so foolishly built your structures upon. MY EMPIRE.',14,0,100,11,0,16322,35748,0,'The Lich King SAY EMPIRE');
DELETE FROM `creature` WHERE `id`=34816; -- Barrett
-- 34854 (Fire Bomb)
UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=34854;
DELETE FROM `creature_template_addon`WHERE `entry`=34854;
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
(34854,0,0,16908544,1,0,'66318'); -- Fire Bomb Aura
-- Added trigger flag in Slime Pool
UPDATE `creature_template` SET `ScriptName`='npc_jormungars_slime_pool' WHERE `entry`=35176;
DELETE FROM `creature_template_addon`WHERE `entry`=35176;
UPDATE `creature_template` SET `flags_extra`=128, `ScriptName`='npc_beasts_combat_stalker' WHERE `entry`=36549;
UPDATE `creature_template` SET `ScriptName`='npc_open_portal_target_toc' WHERE `entry`=17965;
UPDATE `conditions` SET `Comment`='Effect_0 hits Gormok the Impaler' WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=66636;
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=67888; -- Fel Lightning
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13,1,67888,0,0,31,0,3,35458,0,0,0,0,'','Effect_0 hits Wilfred Fizzlebang');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=67864; -- Open Portal
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13,1,67864,0,0,31,0,3,17965,0,0,0,0,'','Effect_0 hits Open Portal Target');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=69016; -- Corpse Teleport
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13,1,69016,0,0,31,0,3,34797,0,0,0,0,'','Effect_0 hits Icehowl'),
(13,1,69016,0,1,31,0,3,34780,0,0,0,0,'','Effect_0 hits Lord Jaraxxus'),
(13,1,69016,0,2,31,0,3,34496,0,0,0,0,'','Effect_0 hits Eydis Darkbane'),
(13,1,69016,0,3,31,0,3,34497,0,0,0,0,'','Effect_0 hits Fjola Lightbane');
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gormok_fire_bomb';
-- 66729 Furious Charge Summon Stalker (SERVERSIDE)
DELETE FROM `serverside_spell_effect` WHERE `SpellID`=66729 AND `EffectIndex`=0 AND `DifficultyID`=0;
INSERT INTO `serverside_spell_effect` (`SpellID`, `EffectIndex`, `DifficultyID`, `Effect`, `EffectAura`, `EffectAmplitude`, `EffectAttributes`, `EffectAuraPeriod`, `EffectBonusCoefficient`, `EffectChainAmplitude`, `EffectChainTargets`, `EffectItemType`, `EffectMechanic`, `EffectPointsPerResource`, `EffectPosFacing`, `EffectRealPointsPerLevel`, `EffectTriggerSpell`, `BonusCoefficientFromAP`, `PvpMultiplier`, `Coefficient`, `Variance`, `ResourceCoefficient`, `GroupSizeBasePointsCoefficient`, `EffectBasePoints`, `EffectMiscValue1`, `EffectMiscValue2`, `EffectRadiusIndex1`, `EffectRadiusIndex2`, `EffectSpellClassMask1`, `EffectSpellClassMask2`, `EffectSpellClassMask3`, `EffectSpellClassMask4`, `ImplicitTarget1`, `ImplicitTarget2`) VALUES
(66729, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35062, 64, 0, 0, 0, 0, 0, 0, 6, 53);
-- 66319 Summon Fire Bomb (SERVERSIDE)
DELETE FROM `serverside_spell` WHERE `Id`=66319;
INSERT INTO `serverside_spell` (`Id`, `DifficultyID`, `CategoryId`, `Dispel`, `Mechanic`, `Attributes`, `AttributesEx`, `AttributesEx2`, `AttributesEx3`, `AttributesEx4`, `AttributesEx5`, `AttributesEx6`, `AttributesEx7`, `AttributesEx8`, `AttributesEx9`, `AttributesEx10`, `AttributesEx11`, `AttributesEx12`, `AttributesEx13`, `AttributesEx14`, `Stances`, `StancesNot`, `Targets`, `TargetCreatureType`, `RequiresSpellFocus`, `FacingCasterFlags`, `CasterAuraState`, `TargetAuraState`, `ExcludeCasterAuraState`, `ExcludeTargetAuraState`, `CasterAuraSpell`, `TargetAuraSpell`, `ExcludeCasterAuraSpell`, `ExcludeTargetAuraSpell`, `CastingTimeIndex`, `RecoveryTime`, `CategoryRecoveryTime`, `StartRecoveryCategory`, `StartRecoveryTime`, `InterruptFlags`, `AuraInterruptFlags1`, `AuraInterruptFlags2`, `ChannelInterruptFlags1`, `ChannelInterruptFlags2`, `ProcFlags`, `ProcChance`, `ProcCharges`, `ProcCooldown`, `ProcBasePPM`, `MaxLevel`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `RangeIndex`, `Speed`, `LaunchDelay`, `StackAmount`, `EquippedItemClass`, `EquippedItemSubClassMask`, `EquippedItemInventoryTypeMask`, `ContentTuningId`, `SpellName`, `ConeAngle`, `ConeWidth`, `MaxTargetLevel`, `MaxAffectedTargets`, `SpellFamilyName`, `SpellFamilyFlags1`, `SpellFamilyFlags2`, `SpellFamilyFlags3`, `SpellFamilyFlags4`, `DmgClass`, `PreventionType`, `AreaGroupId`, `SchoolMask`, `ChargeCategoryId`) VALUES
(66319, 0, 0, 0, 0, 256, 268435456, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 13, 0, 0, 0, -1, 0, 0, 0, 'Summon Fire Bomb', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0);
DELETE FROM `serverside_spell_effect` WHERE `SpellID`=66319 AND `EffectIndex`=0 AND `DifficultyID`=0;
INSERT INTO `serverside_spell_effect` (`SpellID`, `EffectIndex`, `DifficultyID`, `Effect`, `EffectAura`, `EffectAmplitude`, `EffectAttributes`, `EffectAuraPeriod`, `EffectBonusCoefficient`, `EffectChainAmplitude`, `EffectChainTargets`, `EffectItemType`, `EffectMechanic`, `EffectPointsPerResource`, `EffectPosFacing`, `EffectRealPointsPerLevel`, `EffectTriggerSpell`, `BonusCoefficientFromAP`, `PvpMultiplier`, `Coefficient`, `Variance`, `ResourceCoefficient`, `GroupSizeBasePointsCoefficient`, `EffectBasePoints`, `EffectMiscValue1`, `EffectMiscValue2`, `EffectRadiusIndex1`, `EffectRadiusIndex2`, `EffectSpellClassMask1`, `EffectSpellClassMask2`, `EffectSpellClassMask3`, `EffectSpellClassMask4`, `ImplicitTarget1`, `ImplicitTarget2`) VALUES
(66319, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34854, 64, 0, 0, 0, 0, 0, 0, 6, 53);
DELETE FROM `spell_linked_spell` WHERE `spell_effect`=68667 AND `type`=0;
DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
'spell_icehowl_arctic_breath',
'spell_icehowl_trample',
'spell_icehowl_massive_crash',
'spell_lich_king_teleport_corpse',
'spell_jormungars_burning_bile');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(66688,'spell_icehowl_arctic_breath'),
(66734,'spell_icehowl_trample'),
(66683,'spell_icehowl_massive_crash'),
(69016,'spell_lich_king_teleport_corpse'),
(66870,'spell_jormungars_burning_bile'),
(67621,'spell_jormungars_burning_bile'),
(67622,'spell_jormungars_burning_bile'),
(67623,'spell_jormungars_burning_bile');
UPDATE `creature_text` SET `comment`='Icehowl - Roar' WHERE `CreatureID`=34797 AND`GroupID`=0 AND `ID`=0;
UPDATE `creature_text` SET `comment`='Icehowl - Fail' WHERE `CreatureID`=34797 and`GroupID`=1 AND `ID`=0;
UPDATE `creature_text` SET `comment`='Icehowl - Enrage' WHERE `CreatureID`=34797 and`GroupID`=2 AND `ID`=0;
-- Open Portal Target
UPDATE `creature_template` SET /*`modelid1`=20024, `modelid2`=0,*/ `ScriptName`='npc_open_portal_target_toc' WHERE `entry`=17965;
DELETE FROM `creature_template_addon`WHERE `entry`=17965;
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
(17965,0,0,16908544,50331648,0,'');
-- UPDATE `creature_template` SET `modelid1`=29890, `modelid2`=0, `modelid3`=0 WHERE `entry`=35651; -- Purple Ground Rune Argent Raid
DELETE FROM `creature_summon_groups` WHERE `summonerId`=34996;
INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`,`summonTime`) VALUES
(34996,0,1,34497,571.684,204.9028,399.263,4.590216,8,0), -- Fjola Lightbane
(34996,0,1,34496,555.4514,205.8889,399.2634,4.886922,8,0), -- Eydis Darkbane
(34996,0,1,34567,536.5504,164.5504,394.7856,0,8,0), -- Dark Essence
(34996,0,1,34567,588.2083,115.6667,394.5307,0,8,0), -- Dark Essence
(34996,0,1,34568,542.6441,117.3194,394.7847,0,8,0), -- Light Essence
(34996,0,1,34568,589.743,163.0955,394.7754,0,8,0); -- Light Essence
-- Barrett related stuffs
DELETE FROM `npc_text` WHERE `ID`=14852;
INSERT INTO `npc_text` (`ID`, `Probability0`, `Probability1`, `Probability2`, `Probability3`, `Probability4`, `Probability5`, `Probability6`, `Probability7`, `BroadcastTextID0`, `BroadcastTextID1`, `BroadcastTextID2`, `BroadcastTextID3`, `BroadcastTextID4`, `BroadcastTextID5`, `BroadcastTextID6`, `BroadcastTextID7`, `VerifiedBuild`) VALUES
(14852, 1, 0, 0, 0, 0, 0, 0, 0, 36084, 0, 0, 0, 0, 0, 0, 0, 0);
UPDATE `creature_template` SET `gossip_menu_id`=10692 WHERE `entry`=35771;
UPDATE `creature_template` SET `gossip_menu_id`=10704 WHERE `entry`=35909;
UPDATE `creature_template` SET `npcflag`=1, `ScriptName`='npc_barrett_toc' WHERE `entry` IN (34816,35035,35766,35770,35771,35909);
DELETE FROM `gossip_menu` WHERE `MenuID` IN (10692,10693,10704,10705,10706,10610,10609,10599,10678,10687,10679,10688,10600);
INSERT INTO `gossip_menu` (`MenuID`,`TextID`,`VerifiedBuild`) VALUES
(10599,14664,0),
(10599,14667,0),
(10600,14665,0),
(10600,14668,0),
(10609,14678,0),
(10609,14679,0),
(10610,14680,0),
(10610,14682,0),
(10678,14813,0),
(10678,14815,0),
(10679,14819,0),
(10679,14820,0),
(10687,14814,0),
(10687,14816,0),
(10688,14821,0),
(10688,14822,0),
(10692,14828,0),
(10693,14829,0),
(10704,14667,0),
(10704,14850,0),
(10705,14852,0),
(10706,14853,0);
DELETE FROM `gossip_menu_option` WHERE `MenuID` IN (10692,10693,10704,10705,10706,10610,10609,10599,10678,10687,10679,10688,10600);
INSERT INTO `gossip_menu_option` (`MenuID`,`OptionIndex`,`OptionIcon`,`OptionText`,`OptionBroadcastTextID`,`OptionType`,`OptionNpcFlag`) VALUES
(10599,0,0,'Yes. We are prepared for the challenges ahead of us.',35172,1,1),
(10599,1,0,'We want another shot at those beasts!',35215,1,1),
(10600,0,0,'Bring forth the first challenge!',35174,1,1),
(10600,1,0,'We\'re ready. This time things will be different.',35216,1,1),
(10609,0,0,'What new challenge awaits us?',35251,1,1),
(10609,1,0,'We\'re ready to fight the sorceror again.',35254,1,1),
(10610,0,0,'I am ready for the next challenge.',35538,1,1),
(10610,1,0,'Now.',35258,1,1),
(10678,0,0,'Of course!',35987,1,1),
(10678,1,0,'You\'ll be even more amazed after we take them out!',35991,1,1),
(10679,0,0,'That tough, huh?',36024,1,1),
(10679,1,0,'We\'ll just have to improve our own teamwork to match the two of them.',36025,1,1),
(10687,0,0,'Give the signal! We\'re ready to go!',35989,1,1),
(10687,1,0,'We\'re ready for anything!',35993,1,1),
(10688,0,0,'Val\'kyr? We\'re ready for them.',36027,1,1),
(10688,1,0,'Just bring them out again, then watch.',36029,1,1),
(10692,0,0,'Your words of praise are appreciated, Coliseum Master.',36047,1,1),
(10693,0,0,'That is strange...',36049,1,1),
(10704,0,0,'I have completed the Trial of the Crusader.',36082,1,1),
(10704,1,0,'I have not completed the Trial of the Crusader.',36083,1,1),
(10704,2,0,'We want another shot at those beasts!',35215,1,1),
(10706,0,0,'Yes. We are prepared for the challenges ahead of us.',35172,1,1);
DELETE FROM `gossip_menu_option_action` WHERE `MenuId` IN (10599,10609,10678,10679,10692,10704,10706);
INSERT INTO `gossip_menu_option_action` (`MenuId`, `OptionIndex`, `ActionMenuId`, `ActionPoiId`) VALUES
(10599, 0, 10600, 0),
(10599, 1, 10600, 0),
(10609, 0, 10610, 0),
(10609, 1, 10610, 0),
(10678, 0, 10687, 0),
(10678, 1, 10687, 0),
(10679, 0, 10688, 0),
(10679, 1, 10688, 0),
(10692, 0, 10693, 0),
(10704, 0, 10706, 0),
(10704, 1, 10705, 0),
(10704, 2, 10600, 0),
(10706, 0, 10600, 0);
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`IN(14,15) AND `SourceGroup` IN(10704,10600,10599,10609,10610,10678,10687,10679,10688);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(15,10704,0,0,0,17,0,3916,0,0,0,0,0,'','Show gossip option if player achieved Call of the Crusade (25 player)'),
(15,10704,0,0,0,19,0,8,0,0,0,0,0,'','Show gossip option if player is in 25 version'),
(15,10704,0,0,0,13,0,0,2,2,1,0,0,'','Show gossip option if player not failed to defeat Northrend Beasts'),
(15,10704,0,0,1,17,0,3917,0,0,0,0,0,'','Show gossip option if player achieved Call of the Crusade (10 player)'),
(15,10704,0,0,1,19,0,4,0,0,0,0,0,'','Show gossip option if player is in 10 version'),
(15,10704,0,0,1,13,0,0,2,2,1,0,0,'','Show gossip option if player not failed to defeat Northrend Beasts'),
(15,10704,1,0,0,17,0,3916,0,0,1,0,0,'','Show gossip option if player not achieved Call of the Crusade (25 player)'),
(15,10704,1,0,0,19,0,8,0,0,0,0,0,'','Show gossip option if player is in 25 version'),
(15,10704,1,0,0,13,0,0,2,2,1,0,0,'','Show gossip option if player not failed to defeat Northrend Beasts'),
(15,10704,1,0,1,17,0,3917,0,0,1,0,0,'','Show gossip option if player not achieved Call of the Crusade (10 player)'),
(15,10704,1,0,1,19,0,4,0,0,0,0,0,'','Show gossip option if player is in 10 version'),
(15,10704,1,0,1,13,0,0,2,2,1,0,0,'','Show gossip option if player not failed to defeat Northrend Beasts'),
(15,10704,2,0,0,13,0,0,2,2,0,0,0,'','Show gossip option if player failed to defeat Northrend Beasts'),
(14,10704,14667,0,0,13,0,0,2,2,0,0,0,'','Show gossip text if player failed to defeat Northrend Beasts'),
(14,10704,14850,0,0,13,0,0,2,2,1,0,0,'','Show gossip text if player not failed to defeat Northrend Beasts'),
(14,10600,14668,0,0,13,0,0,2,2,0,0,0,'','Show gossip text if player failed to defeat Northrend Beasts'),
(14,10600,14665,0,0,13,0,0,2,2,1,0,0,'','Show gossip text if player not failed to defeat Northrend Beasts'),
(15,10600,0,0,0,13,0,0,2,2,1,0,0,'','Show gossip option if player not failed to defeat Northrend Beasts'),
(15,10600,1,0,0,13,0,0,2,2,0,0,0,'','Show gossip option if player failed to defeat Northrend Beasts'),
(14,10599,14667,0,0,13,0,0,2,2,0,0,0,'','Show gossip text if player failed to defeat Northrend Beasts'),
(14,10599,14664,0,0,13,0,0,2,2,1,0,0,'','Show gossip text if player not failed to defeat Northrend Beasts'),
(15,10599,0,0,0,13,0,0,2,2,1,0,0,'','Show gossip option if player not failed to defeat Northrend Beasts'),
(15,10599,1,0,0,13,0,0,2,2,0,0,0,'','Show gossip option if player failed to defeat Northrend Beasts'),
(14,10609,14679,0,0,13,0,1,2,2,0,0,0,'','Show gossip text if player failed to defeat Jaraxxus'),
(14,10609,14678,0,0,13,0,1,2,2,1,0,0,'','Show gossip text if player not failed to defeat Jaraxxus'),
(15,10609,0,0,1,13,0,1,2,2,1,0,0,'','Show gossip option if player not failed to defeat Jaraxxus'),
(15,10609,1,0,0,13,0,1,2,2,0,0,0,'','Show gossip option if player failed to defeat Jaraxxus'),
(14,10610,14682,0,0,13,0,1,2,2,0,0,0,'','Show gossip text if player failed to defeat Jaraxxus'),
(14,10610,14680,0,0,13,0,1,2,2,1,0,0,'','Show gossip text if player not failed to defeat Jaraxxus'),
(15,10610,0,0,1,13,0,1,2,2,1,0,0,'','Show gossip option if player not failed to defeat Jaraxxus'),
(15,10610,1,0,0,13,0,1,2,2,0,0,0,'','Show gossip option if player failed to defeat Jaraxxus'),
(14,10678,14815,0,0,13,0,2,2,2,0,0,0,'','Show gossip text if player failed to defeat Faction Champions'),
(14,10678,14813,0,0,13,0,2,2,2,1,0,0,'','Show gossip text if player not failed to defeat Faction Champions'),
(15,10678,0,0,1,13,0,2,2,2,1,0,0,'','Show gossip option if player not failed to defeat Faction Champions'),
(15,10678,1,0,0,13,0,2,2,2,0,0,0,'','Show gossip option if player failed to defeat Faction Champions'),
(14,10687,14816,0,0,13,0,2,2,2,0,0,0,'','Show gossip text if player failed to defeat Faction Champions'),
(14,10687,14814,0,0,13,0,2,2,2,1,0,0,'','Show gossip text if player not failed to defeat Faction Champions'),
(15,10687,0,0,1,13,0,2,2,2,1,0,0,'','Show gossip option if player not failed to defeat Faction Champions'),
(15,10687,1,0,0,13,0,2,2,2,0,0,0,'','Show gossip option if player failed to defeat Faction Champions'),
(14,10679,14820,0,0,13,0,3,2,2,0,0,0,'','Show gossip text if player failed to defeat Valkyr'),
(14,10679,14819,0,0,13,0,3,2,2,1,0,0,'','Show gossip text if player not failed to defeat Valkyr'),
(15,10679,0,0,1,13,0,3,2,2,1,0,0,'','Show gossip option if player not failed to defeat Valkyr'),
(15,10679,1,0,0,13,0,3,2,2,0,0,0,'','Show gossip option if player failed to defeat Valkyr'),
(14,10688,14822,0,0,13,0,3,2,2,0,0,0,'','Show gossip text if player failed to defeat Valkyr'),
(14,10688,14821,0,0,13,0,3,2,2,1,0,0,'','Show gossip text if player not failed to defeat Valkyr'),
(15,10688,0,0,1,13,0,3,2,2,1,0,0,'','Show gossip option if player not failed to defeat Valkyrs'),
(15,10688,1,0,0,13,0,3,2,2,0,0,0,'','Show gossip option if player failed to defeat Valkyr');
-- Gormok
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34796 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34796, 1, 0, 4181, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34796 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34796, 1, 0, 0, 563.93580, 229.82990, 394.80610),
(34796, 1, 0, 1, 563.84190, 224.04790, 394.89610),
(34796, 1, 0, 2, 563.84190, 222.79790, 394.89610),
(34796, 1, 0, 3, 563.84190, 218.54790, 394.89610),
(34796, 1, 0, 4, 563.84190, 216.04790, 395.39610),
(34796, 1, 0, 5, 563.84190, 204.04790, 395.39610),
(34796, 1, 0, 6, 563.84190, 202.54790, 395.39610),
(34796, 1, 0, 7, 563.84190, 186.79790, 394.64610),
(34796, 1, 0, 8, 563.74800, 179.76600, 394.48620);
-- Dreadscale
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34799 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34799, 1, 0, 10805, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34799 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34799, 1, 0, 0, 564.36460, 231.48260, 394.83890),
(34799, 1, 0, 1, 564.32970, 232.48200, 394.83890),
(34799, 1, 0, 2, 564.36460, 231.48260, 394.83890),
(34799, 1, 0, 3, 564.12680, 236.13020, 394.70030),
(34799, 1, 0, 4, 564.49300, 221.61810, 394.64320),
(34799, 1, 0, 5, 563.88370, 194.52080, 395.24500),
(34799, 1, 0, 6, 567.82640, 182.76910, 395.20800),
(34799, 1, 0, 7, 576.53470, 168.95140, 394.70640),
(34799, 1, 0, 8, 576.53470, 168.95140, 394.70640);
-- Icehowl
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34797 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34797, 1, 0, 6729, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34797 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34797, 1, 0, 0, 563.71700, 230.39930, 394.81330),
(34797, 1, 0, 1, 563.73450, 231.39920, 394.81330),
(34797, 1, 0, 2, 563.71700, 230.39930, 394.81330),
(34797, 1, 0, 3, 563.60240, 228.03130, 394.70000),
(34797, 1, 0, 4, 563.71360, 192.86810, 394.63020),
(34797, 1, 0, 5, 563.85770, 176.58850, 394.44170),
(34797, 1, 0, 6, 563.85770, 176.58850, 394.44170);
-- Barrett Ramsay
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34816 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34816, 1, 0, 1544, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34816 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34816, 1, 0, 0, 559.14060, 90.272570, 395.27180),
(34816, 1, 0, 1, 561.59470, 84.008530, 395.22810),
(34816, 1, 0, 2, 563.54880, 78.744500, 395.18450);
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35909 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35909, 1, 0, 1544, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35909 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35909, 1, 0, 0, 559.14060, 90.272570, 395.27180),
(35909, 1, 0, 1, 561.59470, 84.008530, 395.22810),
(35909, 1, 0, 2, 563.54880, 78.744500, 395.18450);
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35035 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35035, 1, 0, 1544, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35035 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35035, 1, 0, 0, 559.14060, 90.272570, 395.27180),
(35035, 1, 0, 1, 561.59470, 84.008530, 395.22810),
(35035, 1, 0, 2, 563.54880, 78.744500, 395.18450);
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35766 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35766, 1, 0, 1544, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35766 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35766, 1, 0, 0, 559.14060, 90.272570, 395.27180),
(35766, 1, 0, 1, 561.59470, 84.008530, 395.22810),
(35766, 1, 0, 2, 563.54880, 78.744500, 395.18450);
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35770 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35770, 1, 0, 1544, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35770 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35770, 1, 0, 0, 559.14060, 90.272570, 395.27180),
(35770, 1, 0, 1, 561.59470, 84.008530, 395.22810),
(35770, 1, 0, 2, 563.54880, 78.744500, 395.18450);
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35771 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35771, 1, 0, 1544, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35771 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35771, 1, 0, 0, 559.14060, 90.272570, 395.27180),
(35771, 1, 0, 1, 561.59470, 84.008530, 395.22810),
(35771, 1, 0, 2, 563.54880, 78.744500, 395.18450);
-- Wilfred
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35458 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35458, 1, 0, 10626, 9969),
(35458, 1, 1, 4280, 3203),
(35458, 1, 2, 5631, 5266),
(35458, 1, 3, 5325, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35458 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35458, 1, 0, 0, 563.60070, 208.52780, 395.26960),
(35458, 1, 0, 1, 563.58330, 209.52760, 395.26960),
(35458, 1, 0, 2, 563.60070, 208.52780, 395.26960),
(35458, 1, 0, 3, 563.62780, 203.76760, 395.21350),
(35458, 1, 0, 4, 563.72610, 186.49170, 394.56950),
(35458, 1, 0, 5, 563.75180, 181.98090, 394.51520),
(35458, 1, 0, 6, 563.75180, 181.98090, 394.51520),
(35458, 1, 1, 0, 563.74210, 183.67530, 394.53560),
(35458, 1, 1, 1, 563.69400, 182.07720, 394.71280),
(35458, 1, 1, 2, 563.64580, 172.97920, 394.39000),
(35458, 1, 2, 0, 563.67610, 175.55330, 394.42580),
(35458, 1, 2, 1, 563.68090, 173.01620, 394.65770),
(35458, 1, 2, 2, 563.68090, 168.01620, 394.65770),
(35458, 1, 2, 3, 563.68580, 161.47920, 394.38960),
(35458, 1, 3, 0, 563.68260, 162.41400, 394.38780),
(35458, 1, 3, 1, 563.66330, 161.52210, 394.43900),
(35458, 1, 3, 2, 563.66330, 152.77210, 394.43900),
(35458, 1, 3, 3, 563.64410, 149.13020, 393.99010);
-- Jaraxxus
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34780 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34780, 1, 0, 1354, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34780 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34780, 1, 0, 0, 563.84390, 141.65610, 393.98610),
(34780, 1, 0, 1, 563.82640, 140.65630, 393.98610),
(34780, 1, 0, 2, 563.81340, 139.47290, 393.90840),
(34780, 1, 0, 3, 563.77460, 135.96830, 393.90840),
(34780, 1, 0, 4, 563.75520, 134.21640, 394.23520),
(34780, 1, 0, 5, 563.72220, 131.23440, 393.99010),
(34780, 1, 0, 6, 563.72220, 131.23440, 393.99010);
-- Fjola Lightbane
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34497 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34497, 1, 0, 3499, 2438),
(34497, 1, 1, 3586, 2437),
(34497, 1, 2, 3214, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34497 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34497, 1, 0, 0, 571.68400, 204.90280, 399.26300),
(34497, 1, 0, 1, 571.73790, 204.94450, 401.48890),
(34497, 1, 0, 2, 571.73790, 203.69450, 401.48890),
(34497, 1, 0, 3, 571.73790, 190.69450, 401.48890),
(34497, 1, 0, 4, 571.79170, 184.48610, 401.21480),
(34497, 1, 1, 0, 571.75040, 192.30170, 401.20640),
(34497, 1, 1, 1, 572.04100, 190.26200, 401.45710),
(34497, 1, 1, 2, 572.04100, 184.76200, 401.45710),
(34497, 1, 1, 3, 579.29100, 181.01200, 401.45710),
(34497, 1, 1, 4, 583.33160, 178.72220, 401.20780),
(34497, 1, 2, 0, 576.00200, 182.38320, 401.21590),
(34497, 1, 2, 1, 579.49060, 180.61520, 401.46680),
(34497, 1, 2, 2, 583.24060, 178.61520, 401.46680),
(34497, 1, 2, 3, 583.49060, 176.36520, 401.46680),
(34497, 1, 2, 4, 584.47920, 167.84720, 400.71780);
-- Eydis Darkbane
DELETE FROM `script_spline_chain_meta` WHERE `entry`=34496 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(34496, 1, 0, 4306, 3594),
(34496, 1, 1, 3304, 2437),
(34496, 1, 2, 2047, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=34496 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(34496, 1, 0, 0, 555.45140, 205.88890, 399.26340),
(34496, 1, 0, 1, 555.51310, 205.85760, 401.48250),
(34496, 1, 0, 2, 555.51310, 203.60760, 401.48250),
(34496, 1, 0, 3, 555.26310, 198.60760, 401.48250),
(34496, 1, 0, 4, 555.07460, 179.82640, 401.20160),
(34496, 1, 1, 0, 555.14360, 184.59820, 401.20050),
(34496, 1, 1, 1, 554.95030, 180.11680, 401.48760),
(34496, 1, 1, 2, 547.70030, 178.11680, 401.23760),
(34496, 1, 1, 3, 542.45030, 176.36680, 401.48760),
(34496, 1, 1, 4, 540.25700, 175.63540, 400.77480),
(34496, 1, 2, 0, 546.12530, 177.29520, 401.19950),
(34496, 1, 2, 1, 542.29610, 176.19790, 401.47940),
(34496, 1, 2, 2, 540.54610, 175.69790, 400.97940),
(34496, 1, 2, 3, 540.46700, 170.60070, 400.75930);
-- Lich King
DELETE FROM `script_spline_chain_meta` WHERE `entry`=35877 AND `chainId`=1;
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
(35877, 1, 0, 4474, 3594),
(35877, 1, 1, 2894, 0);
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=35877 AND `chainId`=1;
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
(35877, 1, 0, 0, 563.57120, 175.83510, 394.49540),
(35877, 1, 0, 1, 563.57120, 174.83510, 394.49540),
(35877, 1, 0, 2, 563.56950, 173.12000, 394.39130),
(35877, 1, 0, 3, 563.56410, 167.81720, 394.29680),
(35877, 1, 0, 4, 563.54860, 152.47400, 394.39250),
(35877, 1, 0, 5, 563.54860, 152.47400, 394.39250),
(35877, 1, 1, 0, 563.55220, 156.01330, 394.37050),
(35877, 1, 1, 1, 563.54960, 152.56310, 394.63950),
(35877, 1, 1, 2, 563.54960, 147.56310, 394.13950),
(35877, 1, 1, 3, 563.54960, 145.31310, 394.13950),
(35877, 1, 1, 4, 563.54960, 144.31310, 394.38950),
(35877, 1, 1, 5, 563.54690, 141.61290, 393.90840);

View File

@@ -28,11 +28,6 @@
#include "TemporarySummon.h"
#include "trial_of_the_crusader.h"
enum Yells
{
SAY_KILL_PLAYER = 6
};
enum AIs
{
AI_MELEE = 0,
@@ -209,7 +204,7 @@ enum Events
EVENT_REGROWTH = 3,
EVENT_REJUVENATION = 4,
EVENT_TRANQUILITY = 5,
EVENT_HEAL_BARKSKIN = 6,
EVENT_HEAL_BARKSKIN = 6,
EVENT_THORNS = 7,
EVENT_NATURE_GRASP = 8,
@@ -551,9 +546,7 @@ class boss_toc_champion_controller : public CreatureScript
case DONE:
{
_championsKilled++;
if (_championsKilled == 1)
instance->SetBossState(DATA_FACTION_CRUSADERS, SPECIAL);
else if (_championsKilled >= summons.size())
if (_championsKilled >= summons.size())
{
instance->SetBossState(DATA_FACTION_CRUSADERS, DONE);
summons.DespawnAll();
@@ -584,7 +577,7 @@ class boss_toc_champion_controller : public CreatureScript
struct boss_faction_championsAI : public BossAI
{
boss_faction_championsAI(Creature* creature, uint32 aitype) : BossAI(creature, DATA_FACTION_CHAMPIONS)
boss_faction_championsAI(Creature* creature, uint32 aitype) : BossAI(creature, DATA_FACTION_CHAMPIONS), _teamInstance(0)
{
_aiType = aitype;
SetBoundary(instance->GetBossBoundary(DATA_FACTION_CRUSADERS));
@@ -592,6 +585,7 @@ struct boss_faction_championsAI : public BossAI
void Reset() override
{
_teamInstance = instance->GetData(DATA_TEAM);
_events.ScheduleEvent(EVENT_THREAT, 5*IN_MILLISECONDS);
if (IsHeroic() && (_aiType != AI_PET))
_events.ScheduleEvent(EVENT_REMOVE_CC, 5*IN_MILLISECONDS);
@@ -656,22 +650,13 @@ struct boss_faction_championsAI : public BossAI
{
if (who->GetTypeId() == TYPEID_PLAYER)
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
uint32 TeamInInstance = 0;
if (!players.isEmpty())
if (Player* player = players.begin()->GetSource())
TeamInInstance = player->GetTeam();
if (TeamInInstance == ALLIANCE)
if (_teamInstance == ALLIANCE)
{
if (Creature* varian = instance->GetCreature(DATA_VARIAN))
varian->AI()->Talk(SAY_KILL_PLAYER);
varian->AI()->DoAction(ACTION_SAY_KILLED_PLAYER);
}
else
if (Creature* garrosh = instance->GetCreature(DATA_GARROSH))
garrosh->AI()->Talk(SAY_KILL_PLAYER);
else if (Creature* garrosh = instance->GetCreature(DATA_GARROSH))
garrosh->AI()->DoAction(ACTION_SAY_KILLED_PLAYER);
}
}
@@ -757,6 +742,7 @@ struct boss_faction_championsAI : public BossAI
private:
uint32 _aiType;
uint32 _teamInstance;
// make sure that every bosses separate events dont mix with these _events
EventMap _events;
};

View File

@@ -17,6 +17,8 @@
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "MotionMaster.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
#include "SpellScript.h"
@@ -49,19 +51,21 @@ enum Summons
enum BossSpells
{
SPELL_LEGION_FLAME = 66197, // player should run away from raid because he triggers Legion Flame
SPELL_LEGION_FLAME_EFFECT = 66201, // used by trigger npc
SPELL_NETHER_POWER = 66228, // +20% of spell damage per stack, stackable up to 5/10 times, must be dispelled/stealed
SPELL_FEL_LIGHTING = 66528, // jumps to nearby targets
SPELL_FEL_FIREBALL = 66532, // does heavy damage to the tank, interruptable
SPELL_INCINERATE_FLESH = 66237, // target must be healed or will trigger Burning Inferno
SPELL_BURNING_INFERNO = 66242, // triggered by Incinerate Flesh
SPELL_INFERNAL_ERUPTION = 66258, // summons Infernal Volcano
SPELL_INFERNAL_ERUPTION_EFFECT = 66252, // summons Felflame Infernal (3 at Normal and inifinity at Heroic)
SPELL_NETHER_PORTAL = 66269, // summons Nether Portal
SPELL_NETHER_PORTAL_EFFECT = 66263, // summons Mistress of Pain (1 at Normal and infinity at Heroic)
SPELL_LEGION_FLAME = 66197, // player should run away from raid because he triggers Legion Flame
SPELL_LEGION_FLAME_EFFECT = 66201, // used by trigger npc
SPELL_NETHER_POWER = 66228, // +20% of spell damage per stack, stackable up to 5/10 times, must be dispelled/stealed
SPELL_FEL_LIGHTING = 66528, // jumps to nearby targets
SPELL_FEL_FIREBALL = 66532, // does heavy damage to the tank, interruptable
SPELL_INCINERATE_FLESH = 66237, // target must be healed or will trigger Burning Inferno
SPELL_BURNING_INFERNO = 66242, // triggered by Incinerate Flesh
SPELL_INFERNAL_ERUPTION = 66258, // summons Infernal Volcano
SPELL_INFERNAL_ERUPTION_EFFECT = 66252, // summons Felflame Infernal (3 at Normal and inifinity at Heroic)
SPELL_NETHER_PORTAL = 66269, // summons Nether Portal
SPELL_NETHER_PORTAL_EFFECT = 66263, // summons Mistress of Pain (1 at Normal and infinity at Heroic)
SPELL_LORD_JARAXXUS_HITTIN_YA = 66327,
SPELL_FEL_LIGHTNING = 67888,
SPELL_BERSERK = 64238, // unused
SPELL_BERSERK = 64238, // unused
// Mistress of Pain spells
SPELL_SHIVAN_SLASH = 67098,
@@ -78,18 +82,31 @@ enum BossSpells
enum Events
{
// Lord Jaraxxus
EVENT_FEL_FIREBALL = 1,
EVENT_FEL_LIGHTNING = 2,
EVENT_INCINERATE_FLESH = 3,
EVENT_NETHER_POWER = 4,
EVENT_LEGION_FLAME = 5,
EVENT_SUMMONO_NETHER_PORTAL = 6,
EVENT_SUMMON_INFERNAL_ERUPTION = 7,
EVENT_INTRO = 1,
EVENT_FEL_FIREBALL,
EVENT_FEL_LIGHTNING,
EVENT_INCINERATE_FLESH,
EVENT_NETHER_POWER,
EVENT_LEGION_FLAME,
EVENT_SUMMONO_NETHER_PORTAL,
EVENT_SUMMON_INFERNAL_ERUPTION,
EVENT_TAUNT_GNOME,
EVENT_KILL_GNOME,
EVENT_CHANGE_ORIENTATION,
EVENT_START_COMBAT,
// Mistress of Pain
EVENT_SHIVAN_SLASH = 8,
EVENT_SPINNING_STRIKE = 9,
EVENT_MISTRESS_KISS = 10
EVENT_SHIVAN_SLASH,
EVENT_SPINNING_STRIKE,
EVENT_MISTRESS_KISS
};
enum Misc
{
PHASE_INTRO = 1,
PHASE_COMBAT = 2,
SPLINE_INITIAL_MOVEMENT = 1,
POINT_SUMMONED = 1
};
class boss_jaraxxus : public CreatureScript
@@ -104,22 +121,44 @@ class boss_jaraxxus : public CreatureScript
void Reset() override
{
_Reset();
events.ScheduleEvent(EVENT_FEL_FIREBALL, 5*IN_MILLISECONDS);
events.ScheduleEvent(EVENT_FEL_LIGHTNING, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS));
events.ScheduleEvent(EVENT_INCINERATE_FLESH, urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS));
events.ScheduleEvent(EVENT_NETHER_POWER, 40*IN_MILLISECONDS);
events.ScheduleEvent(EVENT_LEGION_FLAME, 30*IN_MILLISECONDS);
events.ScheduleEvent(EVENT_SUMMONO_NETHER_PORTAL, 20*IN_MILLISECONDS);
events.ScheduleEvent(EVENT_SUMMON_INFERNAL_ERUPTION, 80*IN_MILLISECONDS);
if (instance->GetBossState(DATA_JARAXXUS) == NOT_STARTED)
DoAction(ACTION_JARAXXUS_INTRO);
}
void JustReachedHome() override
{
_JustReachedHome();
instance->SetBossState(DATA_JARAXXUS, FAIL);
DoCast(me, SPELL_JARAXXUS_CHAINS);
me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
DoCastSelf(SPELL_JARAXXUS_CHAINS);
me->SetImmuneToPC(true);
me->SetReactState(REACT_PASSIVE);
}
void DoAction(int32 action) override
{
if (action == ACTION_JARAXXUS_INTRO)
{
me->SetReactState(REACT_PASSIVE);
events.SetPhase(PHASE_INTRO);
events.ScheduleEvent(EVENT_INTRO, 1s);
}
else if (action == ACTION_JARAXXUS_ENGAGE)
{
me->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
me->SetImmuneToPC(false);
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat();
}
}
void MovementInform(uint32 type, uint32 pointId) override
{
if (type == SPLINE_CHAIN_MOTION_TYPE && pointId == POINT_SUMMONED)
if (Creature* wilfred = instance->GetCreature(DATA_FIZZLEBANG))
{
me->SetFacingToObject(wilfred);
events.ScheduleEvent(EVENT_TAUNT_GNOME, 9s);
}
}
void KilledUnit(Unit* who) override
@@ -138,11 +177,18 @@ class boss_jaraxxus : public CreatureScript
{
_EnterCombat();
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_FEL_FIREBALL, 5 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_FEL_LIGHTNING, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS));
events.ScheduleEvent(EVENT_INCINERATE_FLESH, urand(20 * IN_MILLISECONDS, 25 * IN_MILLISECONDS));
events.ScheduleEvent(EVENT_NETHER_POWER, 40 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_LEGION_FLAME, 30 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_SUMMONO_NETHER_PORTAL, 20 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_SUMMON_INFERNAL_ERUPTION, 80 * IN_MILLISECONDS);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))
return;
events.Update(diff);
@@ -157,12 +203,12 @@ class boss_jaraxxus : public CreatureScript
case EVENT_FEL_FIREBALL:
DoCastVictim(SPELL_FEL_FIREBALL);
events.ScheduleEvent(EVENT_FEL_FIREBALL, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS));
return;
break;
case EVENT_FEL_LIGHTNING:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, true, -SPELL_LORD_HITTIN))
DoCast(target, SPELL_FEL_LIGHTING);
events.ScheduleEvent(EVENT_FEL_LIGHTNING, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS));
return;
break;
case EVENT_INCINERATE_FLESH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_LORD_HITTIN))
{
@@ -171,11 +217,11 @@ class boss_jaraxxus : public CreatureScript
DoCast(target, SPELL_INCINERATE_FLESH);
}
events.ScheduleEvent(EVENT_INCINERATE_FLESH, urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS));
return;
break;
case EVENT_NETHER_POWER:
me->CastCustomSpell(SPELL_NETHER_POWER, SPELLVALUE_AURA_STACK, RAID_MODE<uint32>(5, 10, 5, 10), me, true);
events.ScheduleEvent(EVENT_NETHER_POWER, 40*IN_MILLISECONDS);
return;
break;
case EVENT_LEGION_FLAME:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_LORD_HITTIN))
{
@@ -183,19 +229,42 @@ class boss_jaraxxus : public CreatureScript
DoCast(target, SPELL_LEGION_FLAME);
}
events.ScheduleEvent(EVENT_LEGION_FLAME, 30*IN_MILLISECONDS);
return;
break;
case EVENT_SUMMONO_NETHER_PORTAL:
Talk(EMOTE_NETHER_PORTAL);
Talk(SAY_MISTRESS_OF_PAIN);
DoCast(SPELL_NETHER_PORTAL);
events.ScheduleEvent(EVENT_SUMMONO_NETHER_PORTAL, 2*MINUTE*IN_MILLISECONDS);
return;
break;
case EVENT_SUMMON_INFERNAL_ERUPTION:
Talk(EMOTE_INFERNAL_ERUPTION);
Talk(SAY_INFERNAL_ERUPTION);
DoCast(SPELL_INFERNAL_ERUPTION);
events.ScheduleEvent(EVENT_SUMMON_INFERNAL_ERUPTION, 2*MINUTE*IN_MILLISECONDS);
return;
break;
case EVENT_INTRO:
DoCastSelf(SPELL_LORD_JARAXXUS_HITTIN_YA, true);
me->GetMotionMaster()->MoveAlongSplineChain(POINT_SUMMONED, SPLINE_INITIAL_MOVEMENT, true);
break;
case EVENT_TAUNT_GNOME:
Talk(SAY_INTRO);
events.ScheduleEvent(EVENT_KILL_GNOME, 9s);
break;
case EVENT_KILL_GNOME:
DoCastSelf(SPELL_FEL_LIGHTNING);
events.ScheduleEvent(EVENT_CHANGE_ORIENTATION, 3s);
break;
case EVENT_CHANGE_ORIENTATION:
me->SetFacingTo(4.729842f);
events.ScheduleEvent(EVENT_START_COMBAT, 7s);
break;
case EVENT_START_COMBAT:
me->SetImmuneToPC(false);
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat();
break;
default:
break;
}
if (me->HasUnitState(UNIT_STATE_CASTING))

View File

@@ -44,10 +44,14 @@ enum Texts
SAY_DEATH = 8
};
enum Equipment
enum Misc
{
EQUIP_MAIN_1 = 9423,
EQUIP_MAIN_2 = 37377
EQUIP_MAIN_1 = 9423,
EQUIP_MAIN_2 = 37377,
POINT_INITIAL_MOVEMENT = 1,
SPLINE_INITIAL_MOVEMENT = 1,
PHASE_EVENT = 1,
PHASE_COMBAT = 2
};
enum Summons
@@ -100,7 +104,8 @@ enum Events
EVENT_TWIN_SPIKE = 1,
EVENT_TOUCH = 2,
EVENT_SPECIAL_ABILITY = 3,
EVENT_BERSERK = 4
EVENT_BERSERK = 4,
EVENT_START_MOVE = 5
};
enum Stages
@@ -124,9 +129,7 @@ enum Actions
class OrbsDespawner : public BasicEvent
{
public:
explicit OrbsDespawner(Creature* creature) : _creature(creature)
{
}
explicit OrbsDespawner(Creature* creature) : _creature(creature) { }
bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override
{
@@ -177,7 +180,6 @@ struct boss_twin_baseAI : public BossAI
void Reset() override
{
me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetReactState(REACT_PASSIVE);
me->ModifyAuraState(AuraState, true);
/* Uncomment this once that they are floating above the ground
@@ -185,30 +187,26 @@ struct boss_twin_baseAI : public BossAI
me->SetFlying(true); */
summons.DespawnAll();
events.SetPhase(PHASE_EVENT);
events.ScheduleEvent(EVENT_START_MOVE, 4s);
}
void JustReachedHome() override
{
instance->SetBossState(DATA_TWIN_VALKIRIES, FAIL);
HandleRemoveAuras();
summons.DespawnAll();
me->DespawnOrUnsummon();
}
void MovementInform(uint32 uiType, uint32 uiId) override
void MovementInform(uint32 type, uint32 pointId) override
{
if (uiType != POINT_MOTION_TYPE)
return;
switch (uiId)
if (type == SPLINE_CHAIN_MOTION_TYPE && pointId == POINT_INITIAL_MOVEMENT)
{
case 1:
me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
me->SetImmuneToPC(false);
me->SetReactState(REACT_AGGRESSIVE);
break;
default:
break;
me->SetImmuneToPC(false);
me->SetReactState(REACT_AGGRESSIVE);
if (me->GetEntry() == NPC_FJOLA_LIGHTBANE) // avoid call twice
instance->DoCloseDoorOrButton(instance->GetGuidData(DATA_MAIN_GATE));
}
}
@@ -218,25 +216,13 @@ struct boss_twin_baseAI : public BossAI
Talk(SAY_KILL_PLAYER);
}
void SummonedCreatureDespawn(Creature* summoned) override
void HandleRemoveAuras()
{
switch (summoned->GetEntry())
{
case NPC_LIGHT_ESSENCE:
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_LIGHT_ESSENCE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POWERING_UP);
break;
case NPC_DARK_ESSENCE:
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DARK_ESSENCE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POWERING_UP);
break;
case NPC_BULLET_CONTROLLER:
me->m_Events.AddEvent(new OrbsDespawner(me), me->m_Events.CalculateTime(100));
break;
default:
break;
}
summons.Despawn(summoned);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_LIGHT_ESSENCE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POWERING_UP);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DARK_ESSENCE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POWERING_UP);
me->m_Events.AddEventAtOffset(new OrbsDespawner(me), 100ms);
}
void JustDied(Unit* /*killer*/) override
@@ -250,6 +236,7 @@ struct boss_twin_baseAI : public BossAI
pSister->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
events.Reset();
summons.DespawnAll();
HandleRemoveAuras();
instance->SetBossState(DATA_TWIN_VALKIRIES, DONE);
}
else
@@ -332,11 +319,35 @@ struct boss_twin_baseAI : public BossAI
DoCast(me, SPELL_BERSERK);
Talk(SAY_BERSERK);
break;
case EVENT_START_MOVE:
events.SetPhase(PHASE_COMBAT);
me->GetMotionMaster()->MoveAlongSplineChain(POINT_INITIAL_MOVEMENT, SPLINE_INITIAL_MOVEMENT, false);
break;
default:
break;
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !events.IsInPhase(PHASE_EVENT))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
ExecuteEvent(eventId);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
}
DoMeleeAttackIfReady();
}
protected:
AuraStateType AuraState;
uint32 Weapon;

View File

@@ -22,10 +22,13 @@
#include "Log.h"
#include "Map.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "TemporarySummon.h"
#include "trial_of_the_crusader.h"
#include <sstream>
// ToDo: Remove magic numbers of events
BossBoundaryData const boundaries =
{
{ DATA_NORTHREND_BEASTS, new CircleBoundary(Position(563.26f, 139.6f), 75.0) },
@@ -37,23 +40,25 @@ BossBoundaryData const boundaries =
ObjectData const creatureData[] =
{
{ NPC_GORMOK, DATA_GORMOK_THE_IMPALER },
{ NPC_ACIDMAW, DATA_ACIDMAW },
{ NPC_DREADSCALE, DATA_DREADSCALE },
{ NPC_ICEHOWL, DATA_ICEHOWL },
{ NPC_JARAXXUS, DATA_JARAXXUS },
{ NPC_CHAMPIONS_CONTROLLER, DATA_FACTION_CRUSADERS },
{ NPC_FJOLA_LIGHTBANE, DATA_FJOLA_LIGHTBANE },
{ NPC_EYDIS_DARKBANE, DATA_EYDIS_DARKBANE },
{ NPC_LICH_KING, DATA_LICH_KING },
{ NPC_ANUBARAK, DATA_ANUBARAK },
{ NPC_BARRET_RAMSEY, DATA_BARRET_RAMSEY },
{ NPC_TIRION_FORDRING, DATA_FORDRING },
{ NPC_TIRION_FORDRING_ANUBARAK, DATA_FORDRING_ANUBARAK },
{ NPC_VARIAN, DATA_VARIAN },
{ NPC_GARROSH, DATA_GARROSH },
{ NPC_FIZZLEBANG, DATA_FIZZLEBANG },
{ 0, 0 } // END
{ NPC_GORMOK, DATA_GORMOK_THE_IMPALER },
{ NPC_ACIDMAW, DATA_ACIDMAW },
{ NPC_DREADSCALE, DATA_DREADSCALE },
{ NPC_ICEHOWL, DATA_ICEHOWL },
{ NPC_BEASTS_COMBAT_STALKER, DATA_BEASTS_COMBAT_STALKER },
{ NPC_FURIOUS_CHARGE_STALKER, DATA_FURIOUS_CHARGE },
{ NPC_JARAXXUS, DATA_JARAXXUS },
{ NPC_CHAMPIONS_CONTROLLER, DATA_FACTION_CRUSADERS },
{ NPC_FJOLA_LIGHTBANE, DATA_FJOLA_LIGHTBANE },
{ NPC_EYDIS_DARKBANE, DATA_EYDIS_DARKBANE },
{ NPC_LICH_KING, DATA_LICH_KING },
{ NPC_ANUBARAK, DATA_ANUBARAK },
{ NPC_TIRION_FORDRING, DATA_FORDRING },
{ NPC_TIRION_FORDRING_ANUBARAK, DATA_FORDRING_ANUBARAK },
{ NPC_VARIAN, DATA_VARIAN },
{ NPC_GARROSH, DATA_GARROSH },
{ NPC_FIZZLEBANG, DATA_FIZZLEBANG },
{ NPC_LICH_KING_VOICE, DATA_LICH_KING_VOICE },
{ 0, 0 } // END
};
ObjectData const gameObjectData[] =
@@ -77,6 +82,17 @@ ObjectData const gameObjectData[] =
{ 0, 0 } // END
};
DoorData const doorData[] =
{
{ GO_EAST_PORTCULLIS, DATA_NORTHREND_BEASTS, DOOR_TYPE_ROOM },
{ GO_EAST_PORTCULLIS, DATA_JARAXXUS, DOOR_TYPE_ROOM },
{ GO_EAST_PORTCULLIS, DATA_FACTION_CRUSADERS, DOOR_TYPE_ROOM },
{ GO_EAST_PORTCULLIS, DATA_TWIN_VALKIRIES, DOOR_TYPE_ROOM },
{ GO_EAST_PORTCULLIS, DATA_LICH_KING, DOOR_TYPE_ROOM },
{ GO_WEB_DOOR, DATA_ANUBARAK, DOOR_TYPE_ROOM },
{ 0, 0, DOOR_TYPE_ROOM } // END
};
class instance_trial_of_the_crusader : public InstanceMapScript
{
public:
@@ -90,9 +106,12 @@ class instance_trial_of_the_crusader : public InstanceMapScript
SetBossNumber(EncounterCount);
LoadBossBoundaries(boundaries);
LoadObjectData(creatureData, gameObjectData);
LoadDoorData(doorData);
TrialCounter = 50;
EventStage = 0;
NorthrendBeasts = NOT_STARTED;
NorthrendBeastsCount = 4;
Team = TEAM_OTHER;
EventTimer = 1000;
NotOneButTwoJormungarsTimer = 0;
ResilienceWillFixItTimer = 0;
@@ -102,19 +121,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
NeedSave = false;
}
bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < EncounterCount; ++i)
if (GetBossState(i) == IN_PROGRESS)
return true;
// Special state is set at Faction Champions after first champ dead, encounter is still in combat
if (GetBossState(DATA_FACTION_CRUSADERS) == SPECIAL)
return true;
return false;
}
void OnPlayerEnter(Player* player) override
{
if (instance->IsHeroic())
@@ -125,36 +131,27 @@ class instance_trial_of_the_crusader : public InstanceMapScript
else
player->SendUpdateWorldState(UPDATE_STATE_UI_SHOW, 0);
// make sure Anub'arak isnt missing
if (GetBossState(DATA_LICH_KING) == DONE && TrialCounter && GetBossState(DATA_ANUBARAK) != DONE)
if (!GetCreature(DATA_ANUBARAK))
player->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
}
if (Team == TEAM_OTHER)
Team = player->GetTeam();
void OpenDoor(ObjectGuid guid)
{
if (!guid)
return;
if (GameObject* go = instance->GetGameObject(guid))
go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
}
void CloseDoor(ObjectGuid guid)
{
if (!guid)
return;
if (GameObject* go = instance->GetGameObject(guid))
go->SetGoState(GO_STATE_READY);
if (NorthrendBeasts == GORMOK_IN_PROGRESS)
player->CreateVehicleKit(PLAYER_VEHICLE_ID, 0);
}
void OnCreatureCreate(Creature* creature) override
{
InstanceScript::OnCreatureCreate(creature);
if (creature->GetEntry() == NPC_BARRET_RAMSEY)
if (!TrialCounter)
creature->DespawnOrUnsummon();
if (creature->GetEntry() == NPC_SNOBOLD_VASSAL)
snoboldGUIDS.push_back(creature->GetGUID());
}
// Summon prevention to heroic modes
uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override
{
if (!TrialCounter)
return 0;
return data->id;
}
void OnGameObjectCreate(GameObject* go) override
@@ -182,23 +179,28 @@ class instance_trial_of_the_crusader : public InstanceMapScript
case DATA_NORTHREND_BEASTS:
break;
case DATA_JARAXXUS:
// Cleanup Icehowl
if (Creature* icehowl = GetCreature(DATA_ICEHOWL))
icehowl->DespawnOrUnsummon();
if (state == DONE)
if (state == FAIL)
{
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_JARAXXUS_WIPE);
}
else if (state == DONE)
{
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_JARAXXUS_DEFEATED);
EventStage = 2000;
}
break;
case DATA_FACTION_CRUSADERS:
// Cleanup Jaraxxus
if (Creature* jaraxxus = GetCreature(DATA_JARAXXUS))
jaraxxus->DespawnOrUnsummon();
if (Creature* fizzlebang = GetCreature(DATA_FIZZLEBANG))
fizzlebang->DespawnOrUnsummon();
switch (state)
{
case IN_PROGRESS:
ResilienceWillFixItTimer = 0;
break;
case FAIL:
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_FACTION_WIPE);
break;
case SPECIAL: //Means the first blood
ResilienceWillFixItTimer = 60*IN_MILLISECONDS;
state = IN_PROGRESS;
@@ -210,6 +212,8 @@ class instance_trial_of_the_crusader : public InstanceMapScript
DoRespawnGameObject(GetGuidData(DATA_CRUSADERS_CHEST), 7 * DAY);
if (GameObject* cache = GetGameObject(DATA_CRUSADERS_CHEST))
cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_CHAMPIONS_DEFEATED);
EventStage = 3100;
break;
default:
@@ -223,12 +227,12 @@ class instance_trial_of_the_crusader : public InstanceMapScript
switch (state)
{
case FAIL:
if (GetBossState(DATA_TWIN_VALKIRIES) == NOT_STARTED)
state = NOT_STARTED;
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_VALKYR_WIPE);
break;
case SPECIAL:
if (GetBossState(DATA_TWIN_VALKIRIES) == SPECIAL)
state = DONE;
case DONE:
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_VALKYR_DEFEATED);
break;
default:
break;
@@ -292,17 +296,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
break;
}
if (IsEncounterInProgress())
{
CloseDoor(GetGuidData(DATA_EAST_PORTCULLIS));
CloseDoor(GetGuidData(DATA_WEB_DOOR));
}
else
{
OpenDoor(GetGuidData(DATA_EAST_PORTCULLIS));
OpenDoor(GetGuidData(DATA_WEB_DOOR));
}
if (type < EncounterCount)
{
TC_LOG_DEBUG("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state);
@@ -320,9 +313,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
// if theres no more attemps allowed
if (!TrialCounter)
{
if (Unit* announcer = GetCreature(DATA_BARRET_RAMSEY))
announcer->ToCreature()->DespawnOrUnsummon();
if (Creature* anubarak = GetCreature(DATA_ANUBARAK))
anubarak->DespawnOrUnsummon();
}
@@ -333,15 +323,41 @@ class instance_trial_of_the_crusader : public InstanceMapScript
}
if (state == DONE || NeedSave)
{
if (Unit* announcer = GetCreature(DATA_BARRET_RAMSEY))
announcer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Save();
}
}
return true;
}
void HandleNorthrendBeastsDone()
{
--NorthrendBeastsCount;
if (!NorthrendBeastsCount)
{
SetData(TYPE_NORTHREND_BEASTS, DONE);
SetBossState(DATA_NORTHREND_BEASTS, DONE);
SetData(DATA_DESPAWN_SNOBOLDS, 0);
EventStage = 400;
if (Creature* combatStalker = GetCreature(DATA_BEASTS_COMBAT_STALKER))
combatStalker->DespawnOrUnsummon();
HandlePlayerVehicle(false);
if (Creature* fordring = GetCreature(DATA_FORDRING))
fordring->AI()->DoAction(ACTION_NORTHREND_BEASTS_DEFEATED);
}
}
void HandlePlayerVehicle(bool apply)
{
Map::PlayerList const &players = instance->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (Player* player = itr->GetSource())
{
if (apply)
player->CreateVehicleKit(PLAYER_VEHICLE_ID, 0);
else
player->RemoveVehicleKit();
}
}
void SetData(uint32 type, uint32 data) override
{
switch (type)
@@ -362,34 +378,49 @@ class instance_trial_of_the_crusader : public InstanceMapScript
NorthrendBeasts = data;
switch (data)
{
case GORMOK_IN_PROGRESS:
SetBossState(DATA_NORTHREND_BEASTS, IN_PROGRESS);
NorthrendBeastsCount = 4;
HandlePlayerVehicle(true);
break;
case GORMOK_DONE:
EventStage = 200;
SetData(TYPE_NORTHREND_BEASTS, IN_PROGRESS);
if (Creature* tirion = GetCreature(DATA_FORDRING))
tirion->AI()->DoAction(ACTION_START_JORMUNGARS);
HandleNorthrendBeastsDone();
break;
case SNAKES_IN_PROGRESS:
NotOneButTwoJormungarsTimer = 0;
break;
case SNAKES_SPECIAL:
NotOneButTwoJormungarsTimer = 10*IN_MILLISECONDS;
HandleNorthrendBeastsDone();
break;
case SNAKES_DONE:
if (NotOneButTwoJormungarsTimer > 0)
DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_WORMS_KILLED_IN_10_SECONDS);
EventStage = 300;
SetData(TYPE_NORTHREND_BEASTS, IN_PROGRESS);
if (Creature* tirion = GetCreature(DATA_FORDRING))
tirion->AI()->DoAction(ACTION_START_ICEHOWL);
HandleNorthrendBeastsDone();
break;
case ICEHOWL_DONE:
EventStage = 400;
SetData(TYPE_NORTHREND_BEASTS, DONE);
SetBossState(DATA_NORTHREND_BEASTS, DONE);
HandleNorthrendBeastsDone();
break;
case FAIL:
HandlePlayerVehicle(false);
SetBossState(DATA_NORTHREND_BEASTS, FAIL);
if (Creature* tirion = GetCreature(DATA_FORDRING))
tirion->AI()->DoAction(ACTION_NORTHREND_BEASTS_WIPE);
break;
default:
break;
}
break;
case DATA_DESPAWN_SNOBOLDS:
for (ObjectGuid const guid : snoboldGUIDS)
if (Creature* snobold = instance->GetCreature(guid))
snobold->DespawnOrUnsummon();
snoboldGUIDS.clear();
break;
//Achievements
case DATA_SNOBOLD_COUNT:
if (data == INCREASE)
@@ -412,6 +443,8 @@ class instance_trial_of_the_crusader : public InstanceMapScript
{
switch (type)
{
case DATA_TEAM:
return Team;
case TYPE_COUNTER:
return TrialCounter;
case TYPE_EVENT:
@@ -524,7 +557,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
NotOneButTwoJormungarsTimer -= diff;
}
if (GetBossState(DATA_FACTION_CRUSADERS) == SPECIAL && ResilienceWillFixItTimer)
if (GetBossState(DATA_FACTION_CRUSADERS) == IN_PROGRESS && ResilienceWillFixItTimer)
{
if (ResilienceWillFixItTimer <= diff)
ResilienceWillFixItTimer = 0;
@@ -624,15 +657,18 @@ class instance_trial_of_the_crusader : public InstanceMapScript
uint32 EventStage;
uint32 EventTimer;
uint32 NorthrendBeasts;
bool NeedSave;
uint32 Team;
bool NeedSave;
std::string SaveDataBuffer;
GuidVector snoboldGUIDS;
// Achievement stuff
uint32 NotOneButTwoJormungarsTimer;
uint32 ResilienceWillFixItTimer;
uint8 SnoboldCount;
uint8 MistressOfPainCount;
bool TributeToImmortalityEligible;
uint8 SnoboldCount;
uint8 MistressOfPainCount;
uint8 NorthrendBeastsCount;
bool TributeToImmortalityEligible;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override

View File

@@ -37,13 +37,12 @@ enum TCRDataTypes
DATA_ANUBARAK = 5,
// Additional Data
DATA_GORMOK_THE_IMPALER = 5,
DATA_ACIDMAW = 6,
DATA_DREADSCALE = 7,
DATA_ICEHOWL = 8,
DATA_FJOLA_LIGHTBANE = 9,
DATA_EYDIS_DARKBANE = 10,
DATA_BARRET_RAMSEY = 11,
DATA_GORMOK_THE_IMPALER = 6,
DATA_ACIDMAW = 7,
DATA_DREADSCALE = 8,
DATA_ICEHOWL = 9,
DATA_FJOLA_LIGHTBANE = 10,
DATA_EYDIS_DARKBANE = 11,
DATA_FORDRING = 12,
DATA_FORDRING_ANUBARAK = 13,
DATA_VARIAN = 14,
@@ -57,9 +56,14 @@ enum TCRDataTypes
DATA_EAST_PORTCULLIS = 21,
DATA_WEB_DOOR = 22,
DATA_TRIBUTE_CHEST = 23,
DATA_BEASTS_COMBAT_STALKER = 24,
DATA_FURIOUS_CHARGE = 25,
DATA_DESPAWN_SNOBOLDS = 26,
DATA_TEAM = 27,
DATA_LICH_KING_VOICE = 28,
TYPE_COUNTER = 24,
TYPE_EVENT = 25,
TYPE_COUNTER = 29,
TYPE_EVENT = 30,
TYPE_EVENT_TIMER = 101,
TYPE_EVENT_NPC = 102,
@@ -69,20 +73,54 @@ enum TCRDataTypes
DATA_MISTRESS_OF_PAIN_COUNT = 302,
INCREASE = 501,
DECREASE = 502,
DECREASE = 502
};
enum TCRSpellIds
{
SPELL_WILFRED_PORTAL = 68424,
SPELL_OPEN_PORTAL = 67864,
SPELL_JARAXXUS_CHAINS = 67924,
SPELL_CORPSE_TELEPORT = 69016,
SPELL_DESTROY_FLOOR_KNOCKUP = 68193,
SPELL_ARTHAS_PORTAL = 51807,
SPELL_LK_FROST_NOVA = 68198,
SPELL_CORPSE_TELEPORT = 69016
};
enum TCRMiscData
enum TCRMisc
{
DESPAWN_TIME = 1200000
DESPAWN_TIME = 1200000,
PLAYER_VEHICLE_ID = 444
};
enum TCRActions
{
ACTION_START_GORMOK = 1,
ACTION_START_GORMOK_FAIL,
ACTION_START_JORMUNGARS,
ACTION_START_ICEHOWL,
ACTION_NORTHREND_BEASTS_WIPE,
ACTION_NORTHREND_BEASTS_DEFEATED,
ACTION_START_JARAXXUS_EVENT,
ACTION_KILL_JARAXXUS,
ACTION_JARAXXUS_DEFEATED,
ACTION_START_CHAMPIONS,
ACTION_SUMMON_CHAMPIONS,
ACTION_TIRION_ALLOW,
ACTION_CHAMPIONS_DEFEATED,
ACTION_SUMMON_JARAXXUS,
ACTION_JARAXXUS_INTRO,
ACTION_START_VALKYR,
ACTION_START_LK_EVENT,
ACTION_SAY_KILLED_PLAYER,
ACTION_VALKYR_DEFEATED,
ACTION_LK_EVENT_FINISHED,
ACTION_JARAXXUS_ENGAGE,
ACTION_START_CHAMPIONS_ENGAGE,
ACTION_START_VALKYR_ENGAGE,
ACTION_JARAXXUS_WIPE,
ACTION_FACTION_WIPE,
ACTION_VALKYR_WIPE
};
extern Position const ToCCommonLoc[];
@@ -119,7 +157,12 @@ enum AnnouncerMessages
enum TCRCreatureIds
{
NPC_BARRET_RAMSEY = 34816,
NPC_BARRETT_BEASTS = 34816,
NPC_BARRETT_BEASTS_HC = 35909,
NPC_BARRETT_JARAXXUS = 35035,
NPC_BARRETT_FACTION = 35766,
NPC_BARRETT_VALKYR = 35770,
NPC_BARRETT_LK = 35771,
NPC_TIRION_FORDRING = 34996,
NPC_TIRION_FORDRING_ANUBARAK = 36095,
NPC_ARGENT_MAGE = 36097,
@@ -131,17 +174,19 @@ enum TCRCreatureIds
NPC_THRALL = 34994,
NPC_PROUDMOORE = 34992,
NPC_WILFRED_PORTAL = 17965,
NPC_TRIGGER = 35651,
NPC_PURPLE_GROUND = 35651,
NPC_ICEHOWL = 34797,
NPC_GORMOK = 34796,
NPC_DREADSCALE = 34799,
NPC_ACIDMAW = 35144,
NPC_BEASTS_COMBAT_STALKER = 36549,
NPC_FURIOUS_CHARGE_STALKER = 35062,
NPC_SNOBOLD_VASSAL = 34800,
NPC_JARAXXUS = 34780,
NPC_CHAMPIONS_CONTROLLER = 34781,
NPC_ALLIANCE_DEATH_KNIGHT = 34461,
NPC_ALLIANCE_DRUID_BALANCE = 34460,
NPC_ALLIANCE_DRUID_RESTORATION = 34469,
@@ -178,6 +223,9 @@ enum TCRCreatureIds
NPC_DARK_ESSENCE = 34567,
NPC_LIGHT_ESSENCE = 34568,
NPC_LICH_KING_VOICE = 16980,
NPC_ARTHAS_PORTAL = 22517,
NPC_ANUBARAK = 34564
};
@@ -247,4 +295,6 @@ inline AI* GetTrialOfTheCrusaderAI(T* obj)
return GetInstanceAI<AI>(obj, ToCrScriptName);
}
#define RegisterTrialOfTheCrusaderCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetTrialOfTheCrusaderAI)
#endif

View File

@@ -2701,7 +2701,8 @@ class spell_gen_spectator_cheer_trigger : public SpellScript
void HandleDummy(SpellEffIndex /*effIndex*/)
{
GetCaster()->HandleEmoteCommand(EmoteArray[urand(0, 2)]);
if (roll_chance_i(40))
GetCaster()->HandleEmoteCommand(EmoteArray[urand(0, 2)]);
}
void Register() override