diff options
Diffstat (limited to 'src/server/scripts/Northrend')
96 files changed, 2897 insertions, 2600 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 3bc91855d36..11ef00775d0 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -44,17 +44,12 @@ enum Creatures // not in db enum Yells { - SAY_INTRO = -1601010, - SAY_AGGRO = -1601000, - SAY_SLAY_1 = -1601001, - SAY_SLAY_2 = -1601002, - SAY_SLAY_3 = -1601003, - SAY_LOCUST_1 = -1601005, - SAY_LOCUST_2 = -1601006, - SAY_LOCUST_3 = -1601007, - SAY_SUBMERGE_1 = -1601008, - SAY_SUBMERGE_2 = -1601009, - SAY_DEATH = -1601004 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_LOCUST = 3, + SAY_SUBMERGE = 4, + SAY_INTRO = 5 }; enum @@ -161,7 +156,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DelayTimer = 0; if (instance) instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); @@ -338,7 +333,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); Summons.DespawnAll(); if (instance) instance->SetData(DATA_ANUBARAK_EVENT, DONE); @@ -348,7 +343,7 @@ public: { if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } void JustSummoned(Creature* summon) diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 1acc3b77a61..4c817fa9465 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -61,19 +61,12 @@ enum Mobs enum Yells { - SAY_AGGRO = -1601011, - SAY_SLAY_1 = -1601012, - SAY_SLAY_2 = -1601013, - SAY_DEATH = -1601014, - //Not in db - SAY_SEND_GROUP_1 = -1601020, - SAY_SEND_GROUP_2 = -1601021, - SAY_SEND_GROUP_3 = -1601022, - SAY_SWARM_1 = -1601015, - SAY_SWARM_2 = -1601016, - SAY_PREFIGHT_1 = -1601017, - SAY_PREFIGHT_2 = -1601018, - SAY_PREFIGHT_3 = -1601019 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SWARM = 3, + SAY_PREFIGHT = 4, + SAY_SEND_GROUP = 5 }; const Position SpawnPoint[] = @@ -117,7 +110,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); Summon(); uiSummonTimer = 15*IN_MILLISECONDS; @@ -180,7 +173,7 @@ public: } void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DONE); @@ -191,7 +184,7 @@ public: if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void JustSummoned(Creature* summoned) diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index e20b08c515e..6d4b4bc9379 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -23,30 +23,25 @@ #include "CellImpl.h" #include "obsidian_sanctum.h" -enum eEnums +enum Enums { //Sartharion Yell - SAY_SARTHARION_AGGRO = -1615018, - SAY_SARTHARION_BERSERK = -1615019, - SAY_SARTHARION_BREATH = -1615020, - SAY_SARTHARION_CALL_SHADRON = -1615021, - SAY_SARTHARION_CALL_TENEBRON = -1615022, - SAY_SARTHARION_CALL_VESPERON = -1615023, - SAY_SARTHARION_DEATH = -1615024, - SAY_SARTHARION_SPECIAL_1 = -1615025, - SAY_SARTHARION_SPECIAL_2 = -1615026, - SAY_SARTHARION_SPECIAL_3 = -1615027, - SAY_SARTHARION_SPECIAL_4 = -1615028, - SAY_SARTHARION_SLAY_1 = -1615029, - SAY_SARTHARION_SLAY_2 = -1615030, - SAY_SARTHARION_SLAY_3 = -1615031, - - WHISPER_LAVA_CHURN = -1615032, - - WHISPER_SHADRON_DICIPLE = -1615008, - WHISPER_VESPERON_DICIPLE = -1615041, - WHISPER_HATCH_EGGS = -1615017, - WHISPER_OPEN_PORTAL = -1615042, // whisper, shared by two dragons + SAY_SARTHARION_AGGRO = 0, + SAY_SARTHARION_BERSERK = 1, + SAY_SARTHARION_BREATH = 2, + SAY_SARTHARION_CALL_SHADRON = 3, + SAY_SARTHARION_CALL_TENEBRON = 4, + SAY_SARTHARION_CALL_VESPERON = 5, + SAY_SARTHARION_DEATH = 6, + SAY_SARTHARION_SPECIAL = 7, + SAY_SARTHARION_SLAY = 8, + WHISPER_LAVA_CHURN = 9, + + WHISPER_HATCH_EGGS = 6, + WHISPER_OPEN_PORTAL = 6, // whisper, shared by two dragons + + WHISPER_SHADRON_DICIPLE = 7, + WHISPER_VESPERON_DICIPLE = 7, //Sartharion Spells SPELL_BERSERK = 61632, // Increases the caster's attack speed by 150% and all damage it deals by 500% for 5 min. @@ -357,7 +352,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_SARTHARION_AGGRO, me); + Talk(SAY_SARTHARION_AGGRO); DoZoneInCombat(); if (instance) @@ -369,7 +364,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_SARTHARION_DEATH, me); + Talk(SAY_SARTHARION_DEATH); if (instance) { @@ -389,7 +384,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SARTHARION_SLAY_1, SAY_SARTHARION_SLAY_2, SAY_SARTHARION_SLAY_3), me); + Talk(SAY_SARTHARION_SLAY); } // me->ResetLootMode() is called from Reset() @@ -511,7 +506,7 @@ public: break; } - DoScriptText(iTextId, me); + Talk(iTextId); } } } @@ -527,7 +522,7 @@ public: if (!PlayerList.isEmpty()) for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) if (i->getSource() && i->getSource()->isAlive()) - DoScriptText(WHISPER_LAVA_CHURN, me, i->getSource()); + Talk(WHISPER_LAVA_CHURN, i->getSource()->GetGUID()); } } @@ -566,7 +561,7 @@ public: if (!m_bIsBerserk && !HealthAbovePct(35) && ((pTene && pTene->isAlive()) || (pShad && pShad->isAlive()) || (pVesp && pVesp->isAlive()))) { - DoScriptText(SAY_SARTHARION_BERSERK, me); + Talk(SAY_SARTHARION_BERSERK); DoCast(me, SPELL_BERSERK); m_bIsBerserk = true; } @@ -624,7 +619,7 @@ public: // flame breath if (m_uiFlameBreathTimer <= uiDiff) { - DoScriptText(SAY_SARTHARION_BREATH, me); + Talk(SAY_SARTHARION_BREATH); DoCast(me->getVictim(), RAID_MODE(SPELL_FLAME_BREATH, SPELL_FLAME_BREATH_H)); m_uiFlameBreathTimer = urand(25000, 35000); } @@ -657,7 +652,7 @@ public: CastLavaStrikeOnTarget(target); if (urand(0, 5) == 0) - DoScriptText(RAND(SAY_SARTHARION_SPECIAL_1, SAY_SARTHARION_SPECIAL_2, SAY_SARTHARION_SPECIAL_3), me); + Talk(SAY_SARTHARION_SPECIAL); } m_uiLavaStrikeTimer = (m_bIsSoftEnraged ? urand(1400, 2000) : urand(5000, 20000)); } @@ -701,38 +696,32 @@ public: enum TeneText { - SAY_TENEBRON_AGGRO = -1615009, - SAY_TENEBRON_SLAY_1 = -1615010, - SAY_TENEBRON_SLAY_2 = -1615011, - SAY_TENEBRON_DEATH = -1615012, - SAY_TENEBRON_BREATH = -1615013, - SAY_TENEBRON_RESPOND = -1615014, - SAY_TENEBRON_SPECIAL_1 = -1615015, - SAY_TENEBRON_SPECIAL_2 = -1615016 + SAY_TENEBRON_AGGRO = 0, + SAY_TENEBRON_SLAY = 1, + SAY_TENEBRON_DEATH = 2, + SAY_TENEBRON_BREATH = 3, + SAY_TENEBRON_RESPOND = 4, + SAY_TENEBRON_SPECIAL = 5 }; enum ShadText { - SAY_SHADRON_AGGRO = -1615000, - SAY_SHADRON_SLAY_1 = -1615001, - SAY_SHADRON_SLAY_2 = -1615002, - SAY_SHADRON_DEATH = -1615003, - SAY_SHADRON_BREATH = -1615004, - SAY_SHADRON_RESPOND = -1615005, - SAY_SHADRON_SPECIAL_1 = -1615006, - SAY_SHADRON_SPECIAL_2 = -1615007 + SAY_SHADRON_AGGRO = 0, + SAY_SHADRON_SLAY = 1, + SAY_SHADRON_DEATH = 2, + SAY_SHADRON_BREATH = 3, + SAY_SHADRON_RESPOND = 4, + SAY_SHADRON_SPECIAL = 5 }; enum VespText { - SAY_VESPERON_AGGRO = -1615033, - SAY_VESPERON_SLAY_1 = -1615034, - SAY_VESPERON_SLAY_2 = -1615035, - SAY_VESPERON_DEATH = -1615036, - SAY_VESPERON_BREATH = -1615037, - SAY_VESPERON_RESPOND = -1615038, - SAY_VESPERON_SPECIAL_1 = -1615039, - SAY_VESPERON_SPECIAL_2 = -1615040 + SAY_VESPERON_AGGRO = 0, + SAY_VESPERON_SLAY = 1, + SAY_VESPERON_DEATH = 2, + SAY_VESPERON_BREATH = 3, + SAY_VESPERON_RESPOND = 4, + SAY_VESPERON_SPECIAL = 5, }; //to control each dragons common abilities @@ -829,7 +818,7 @@ struct dummy_dragonAI : public ScriptedAI if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - DoScriptText(iTextId, me, i->getSource()); + Talk(iTextId, i->getSource()->GetGUID()); } } } @@ -943,7 +932,7 @@ struct dummy_dragonAI : public ScriptedAI break; } - DoScriptText(iTextId, me); + Talk(iTextId); me->RemoveAurasDueToSpell(uiSpellId); @@ -1019,13 +1008,13 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_TENEBRON_AGGRO, me); + Talk(SAY_TENEBRON_AGGRO); DoZoneInCombat(); } void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_TENEBRON_SLAY_1, SAY_TENEBRON_SLAY_2), me); + Talk(SAY_TENEBRON_SLAY); } void UpdateAI(const uint32 uiDiff) @@ -1060,7 +1049,7 @@ public: // shadow breath if (m_uiShadowBreathTimer <= uiDiff) { - DoScriptText(SAY_TENEBRON_BREATH, me); + Talk(SAY_TENEBRON_BREATH); DoCast(me->getVictim(), RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); m_uiShadowBreathTimer = urand(20000, 25000); } @@ -1114,13 +1103,13 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_SHADRON_AGGRO, me); + Talk(SAY_SHADRON_AGGRO); DoZoneInCombat(); } void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SHADRON_SLAY_1, SAY_SHADRON_SLAY_2), me); + Talk(SAY_SHADRON_SLAY); } void UpdateAI(const uint32 uiDiff) @@ -1164,7 +1153,7 @@ public: // shadow breath if (m_uiShadowBreathTimer <= uiDiff) { - DoScriptText(SAY_SHADRON_BREATH, me); + Talk(SAY_SHADRON_BREATH); DoCast(me->getVictim(), RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); m_uiShadowBreathTimer = urand(20000, 25000); } @@ -1212,13 +1201,13 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_VESPERON_AGGRO, me); + Talk(SAY_VESPERON_AGGRO); DoZoneInCombat(); } void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_VESPERON_SLAY_1, SAY_VESPERON_SLAY_2), me); + Talk(SAY_VESPERON_SLAY); } void UpdateAI(const uint32 uiDiff) @@ -1259,7 +1248,7 @@ public: // shadow breath if (m_uiShadowBreathTimer <= uiDiff) { - DoScriptText(SAY_VESPERON_BREATH, me); + Talk(SAY_VESPERON_BREATH); DoCast(me->getVictim(), RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); m_uiShadowBreathTimer = urand(20000, 25000); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index d77c84b2978..3c20acf34a6 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -27,10 +27,34 @@ EndScriptData */ #include "SpellScript.h" #include "trial_of_the_champion.h" #include "ScriptedEscortAI.h" - -enum eSpells +/* +enum Yells +{ + // Eadric the Pure + SAY_INTRO = 0, + SAY_AGGRO = 1, + EMOTE_RADIANCE = 2, + EMOTE_HAMMER_RIGHTEOUS = 3, + SAY_HAMMER_RIGHTEOUS = 4, + SAY_KILL_PLAYER = 5, + SAY_DEFEATED = 6, + + // Argent Confessor Paletress + SAY_INTRO_1 = 0, + SAY_INTRO_2 = 1, + SAY_AGGRO = 2, + SAY_MEMORY_SUMMON = 3, + SAY_MEMORY_DEATH = 4, + SAY_KILL_PLAYER = 5, + SAY_DEFEATED = 6, + + // Memory of X + EMOTE_WAKING_NIGHTMARE = 0 +}; +*/ +enum Spells { - //Eadric + // Eadric the Pure SPELL_EADRIC_ACHIEVEMENT = 68197, SPELL_HAMMER_JUSTICE = 66863, SPELL_HAMMER_RIGHTEOUS = 66867, diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index c56d44ceb08..c1a2f9c07d2 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -27,7 +27,7 @@ EndScriptData */ #include "ScriptedEscortAI.h" #include "trial_of_the_champion.h" -enum eSpells +enum Spells { //phase 1 SPELL_PLAGUE_STRIKE = 67884, @@ -61,13 +61,13 @@ enum eSpells SPELL_KILL_CREDIT = 68663 }; -enum eModels +enum Models { MODEL_SKELETON = 29846, MODEL_GHOST = 21300 }; -enum ePhases +enum Phases { PHASE_UNDEAD = 1, PHASE_SKELETON = 2, diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index ffda3d12e2f..9c0b894bfa7 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -33,6 +33,18 @@ EndContentData */ #include "Vehicle.h" #include "Player.h" +enum Yells +{ + SAY_INTRO_1 = 0, + SAY_INTRO_2 = 1, + SAY_INTRO_3 = 2, + SAY_AGGRO = 3, + SAY_PHASE_2 = 4, + SAY_PHASE_3 = 5, + SAY_KILL_PLAYER = 6, + SAY_DEATH = 7 +}; + #define GOSSIP_START_EVENT1 "I'm ready to start challenge." #define GOSSIP_START_EVENT2 "I'm ready for the next challenge." diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index cb3a43acdd0..6116a150334 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -19,7 +19,7 @@ #ifndef DEF_TOC_H #define DEF_TOC_H -enum eData +enum Data { BOSS_GRAND_CHAMPIONS, BOSS_ARGENT_CHALLENGE_E, @@ -46,7 +46,7 @@ enum Data64 DATA_GRAND_CHAMPION_3 }; -enum eNpcs +enum CreatureIds { // Horde Champions NPC_MOKRA = 35572, @@ -78,7 +78,7 @@ enum eNpcs NPC_ARELAS = 35005 }; -enum eGameObjects +enum GameObjects { GO_MAIN_GATE = 195647, @@ -92,7 +92,7 @@ enum eGameObjects GO_PALETRESS_LOOT_H = 195324 }; -enum eVehicles +enum Vehicles { //Grand Champions Alliance Vehicles VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT = 35637, diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index f618d0e04e7..a9dc9cf394d 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -25,6 +25,7 @@ #include "ScriptedCreature.h" #include "trial_of_the_crusader.h" #include "SpellScript.h" +#include "SpellAuraEffects.h" #include <limits> enum Yells @@ -53,54 +54,54 @@ enum Summons enum BossSpells { - SPELL_FREEZE_SLASH = 66012, - SPELL_PENETRATING_COLD = 66013, - SPELL_LEECHING_SWARM = 66118, - SPELL_LEECHING_HEAL = 66125, - SPELL_LEECHING_DAMAGE = 66240, - SPELL_MARK = 67574, - SPELL_SPIKE_CALL = 66169, - SPELL_SUBMERGE_ANUBARAK = 65981, - SPELL_CLEAR_ALL_DEBUFFS = 34098, - SPELL_EMERGE_ANUBARAK = 65982, - SPELL_SUMMON_BEATLES = 66339, - SPELL_SUMMON_BURROWER = 66332, + SPELL_FREEZE_SLASH = 66012, + SPELL_PENETRATING_COLD = 66013, + SPELL_LEECHING_SWARM = 66118, + SPELL_LEECHING_SWARM_HEAL = 66125, + SPELL_LEECHING_SWARM_DMG = 66240, + SPELL_MARK = 67574, + SPELL_SPIKE_CALL = 66169, + SPELL_SUBMERGE_ANUBARAK = 65981, + SPELL_CLEAR_ALL_DEBUFFS = 34098, + SPELL_EMERGE_ANUBARAK = 65982, + SPELL_SUMMON_BEATLES = 66339, + SPELL_SUMMON_BURROWER = 66332, // Burrow - SPELL_CHURNING_GROUND = 66969, + SPELL_CHURNING_GROUND = 66969, // Scarab - SPELL_DETERMINATION = 66092, - SPELL_ACID_MANDIBLE = 65774, //Passive - Triggered + SPELL_DETERMINATION = 66092, + SPELL_ACID_MANDIBLE = 65774, //Passive - Triggered // Burrower - SPELL_SPIDER_FRENZY = 66128, - SPELL_EXPOSE_WEAKNESS = 67720, //Passive - Triggered - SPELL_SHADOW_STRIKE = 66134, - SPELL_SUBMERGE_EFFECT = 68394, - SPELL_AWAKENED = 66311, - SPELL_EMERGE_EFFECT = 65982, + SPELL_SPIDER_FRENZY = 66128, + SPELL_EXPOSE_WEAKNESS = 67720, //Passive - Triggered + SPELL_SHADOW_STRIKE = 66134, + SPELL_SUBMERGE_EFFECT = 68394, + SPELL_AWAKENED = 66311, + SPELL_EMERGE_EFFECT = 65982, - SPELL_PERSISTENT_DIRT = 68048, + SPELL_PERSISTENT_DIRT = 68048, - SUMMON_SCARAB = NPC_SCARAB, - SUMMON_FROSTSPHERE = NPC_FROST_SPHERE, - SPELL_BERSERK = 26662, + SUMMON_SCARAB = NPC_SCARAB, + SUMMON_FROSTSPHERE = NPC_FROST_SPHERE, + SPELL_BERSERK = 26662, //Frost Sphere - SPELL_FROST_SPHERE = 67539, - SPELL_PERMAFROST = 66193, - SPELL_PERMAFROST_VISUAL = 65882, - SPELL_PERMAFROST_MODEL = 66185, + SPELL_FROST_SPHERE = 67539, + SPELL_PERMAFROST = 66193, + SPELL_PERMAFROST_VISUAL = 65882, + SPELL_PERMAFROST_MODEL = 66185, //Spike - SPELL_SUMMON_SPIKE = 66169, - SPELL_SPIKE_SPEED1 = 65920, - SPELL_SPIKE_TRAIL = 65921, - SPELL_SPIKE_SPEED2 = 65922, - SPELL_SPIKE_SPEED3 = 65923, - SPELL_SPIKE_FAIL = 66181, - SPELL_SPIKE_TELE = 66170 + SPELL_SUMMON_SPIKE = 66169, + SPELL_SPIKE_SPEED1 = 65920, + SPELL_SPIKE_TRAIL = 65921, + SPELL_SPIKE_SPEED2 = 65922, + SPELL_SPIKE_SPEED3 = 65923, + SPELL_SPIKE_FAIL = 66181, + SPELL_SPIKE_TELE = 66170 }; #define SPELL_PERMAFROST_HELPER RAID_MODE<uint32>(66193, 67855, 67856, 67857) @@ -841,6 +842,49 @@ class spell_impale : public SpellScriptLoader } }; +class spell_anubarak_leeching_swarm : public SpellScriptLoader +{ + public: + spell_anubarak_leeching_swarm() : SpellScriptLoader("spell_anubarak_leeching_swarm") { } + + class spell_anubarak_leeching_swarm_AuraScript : public AuraScript + { + PrepareAuraScript(spell_anubarak_leeching_swarm_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_DMG) || !sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_HEAL)) + return false; + return true; + } + + void HandleEffectPeriodic(AuraEffect const* aurEff) + { + Unit* caster = GetCaster(); + if (Unit* target = GetTarget()) + { + int32 lifeLeeched = target->CountPctFromCurHealth(aurEff->GetAmount()); + if (lifeLeeched < 250) + lifeLeeched = 250; + // Damage + caster->CastCustomSpell(target, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, false); + // Heal + caster->CastCustomSpell(caster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, false); + } + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_anubarak_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_anubarak_leeching_swarm_AuraScript(); + } +}; + void AddSC_boss_anubarak_trial() { new boss_anubarak_trial(); @@ -850,4 +894,5 @@ void AddSC_boss_anubarak_trial() new mob_frost_sphere(); new spell_impale(); + new spell_anubarak_leeching_swarm(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index a99aa373602..a99aa373602 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index e2068cabb95..e2068cabb95 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 2d09feef089..2d09feef089 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 01d3bcbfe90..01d3bcbfe90 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index fb084ec1e3c..fb084ec1e3c 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index b4d35afa8fb..b4d35afa8fb 100755..100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 6ce56958d60..1ad776a0b46 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -36,12 +36,11 @@ enum Spells //not in db enum Yells { - SAY_AGGRO = -1600000, - SAY_KILL = -1600001, - SAY_DEATH = -1600002, - SAY_NECRO_ADD = -1600003, - SAY_REUBBLE_1 = -1600004, - SAY_REUBBLE_2 = -1600005 + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DEATH = 2, + SAY_NECRO_ADD = 3, + SAY_REUBBLE = 4 }; enum Creatures @@ -123,7 +122,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); Phase = PHASE_1; uiCrystalHandlerTimer = 30*IN_MILLISECONDS; uiTimer = 1*IN_MILLISECONDS; @@ -159,7 +158,7 @@ public: { if (uiCrystalHandlerTimer <= diff) { - DoScriptText(SAY_NECRO_ADD, me); + Talk(SAY_NECRO_ADD); Creature* pCrystalHandler = me->SummonCreature(CREATURE_CRYSTAL_HANDLER, CrystalHandlerSpawnPoint, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20*IN_MILLISECONDS); pCrystalHandler->GetMotionMaster()->MovePoint(0, AddDestinyPoint); uiCrystalHandlerTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS); @@ -181,7 +180,7 @@ public: } void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_NOVOS_EVENT, DONE); lSummons.DespawnAll(); @@ -191,7 +190,7 @@ public: { if (victim == me) return; - DoScriptText(SAY_KILL, me); + Talk(SAY_KILL); } void JustSummoned(Creature* summon) diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index 79739280055..4cbabe2449a 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -44,14 +44,11 @@ enum Spells enum Yells { - SAY_AGGRO = -1600011, - SAY_KILL_1 = -1600012, - SAY_KILL_2 = -1600013, - SAY_FLESH_1 = -1600014, - SAY_FLESH_2 = -1600015, - SAY_SKELETON_1 = -1600016, - SAY_SKELETON_2 = -1600017, - SAY_DEATH = -1600018 + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_FLESH = 2, + SAY_SKELETON = 3, + SAY_DEATH = 4 }; enum Models { @@ -104,7 +101,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_THARON_JA_EVENT, IN_PROGRESS); @@ -150,7 +147,7 @@ public: case GOING_FLESH: if (uiPhaseTimer < diff) { - DoScriptText(RAND(SAY_FLESH_1, SAY_FLESH_2), me); + Talk(SAY_FLESH); me->SetDisplayId(MODEL_FLESH); std::list<Unit*> playerList; @@ -200,7 +197,7 @@ public: case GOING_SKELETAL: if (uiPhaseTimer < diff) { - DoScriptText(RAND(SAY_SKELETON_1, SAY_SKELETON_2), me); + Talk(SAY_SKELETON); me->DeMorph(); Phase = SKELETAL; uiPhaseTimer = 20*IN_MILLISECONDS; @@ -224,12 +221,12 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_KILL_1, SAY_KILL_2), me); + Talk(SAY_KILL); } void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) { diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index d8c720b6f95..60001e048a3 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -39,11 +39,11 @@ enum Spells enum Yells { - SAY_AGGRO = -1600006, - SAY_KILL = -1600007, - SAY_CONSUME = -1600008, - SAY_EXPLODE = -1600009, - SAY_DEATH = -1600010 + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_CONSUME = 2, + SAY_EXPLODE = 3, + SAY_DEATH = 4 }; enum Creatures @@ -102,7 +102,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_TROLLGORE_EVENT, IN_PROGRESS); @@ -124,7 +124,7 @@ public: if (uiConsumeTimer <= diff) { - DoScriptText(SAY_CONSUME, me); + Talk(SAY_CONSUME); DoCast(SPELL_CONSUME); uiConsumeTimer = 15*IN_MILLISECONDS; } else uiConsumeTimer -= diff; @@ -151,7 +151,7 @@ public: if (uiExplodeCorpseTimer <= diff) { DoCast(SPELL_CORPSE_EXPLODE); - DoScriptText(SAY_EXPLODE, me); + Talk(SAY_EXPLODE); uiExplodeCorpseTimer = urand(15*IN_MILLISECONDS, 19*IN_MILLISECONDS); } else uiExplodeCorpseTimer -= diff; @@ -160,7 +160,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); lSummons.DespawnAll(); @@ -180,7 +180,7 @@ public: { if (victim == me) return; - DoScriptText(SAY_KILL, me); + Talk(SAY_KILL); } void JustSummoned(Creature* summon) diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index b790ed518d5..1940ff4e2af 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -23,12 +23,11 @@ enum Yells { - SAY_AGGRO = -1632001, - SAY_SLAY_1 = -1632002, - SAY_SLAY_2 = -1632003, - SAY_DEATH = -1632004, - SAY_SOUL_STORM = -1632005, - SAY_CORRUPT_SOUL = -1632006, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SOUL_STORM = 3, + SAY_CORRUPT_SOUL = 4, }; enum Spells @@ -98,7 +97,7 @@ class boss_bronjahm : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); me->RemoveAurasDueToSpell(SPELL_SOULSTORM_CHANNEL); instance->SetBossState(DATA_BRONJAHM, IN_PROGRESS); @@ -106,7 +105,7 @@ class boss_bronjahm : public CreatureScript void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); instance->SetBossState(DATA_BRONJAHM, DONE); } @@ -114,7 +113,7 @@ class boss_bronjahm : public CreatureScript void KilledUnit(Unit* who) { if (who->GetTypeId() == TYPEID_PLAYER) - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) @@ -163,13 +162,13 @@ class boss_bronjahm : public CreatureScript case EVENT_CORRUPT_SOUL: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) { - DoScriptText(SAY_CORRUPT_SOUL, me); + Talk(SAY_CORRUPT_SOUL); DoCast(target, SPELL_CORRUPT_SOUL); } events.ScheduleEvent(EVENT_CORRUPT_SOUL, urand(25000, 35000), 0, PHASE_1); break; case EVENT_SOULSTORM: - DoScriptText(SAY_SOUL_STORM, me); + Talk(SAY_SOUL_STORM); me->CastSpell(me, SPELL_SOULSTORM_VISUAL, true); me->CastSpell(me, SPELL_SOULSTORM, false); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index 714e5df6444..248fe3c6eb0 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -29,40 +29,32 @@ enum Yells { - SAY_FACE_ANGER_AGGRO = -1632010, - SAY_FACE_DESIRE_AGGRO = -1632011, - SAY_FACE_ANGER_SLAY_1 = -1632012, - SAY_FACE_SORROW_SLAY_1 = -1632013, - SAY_FACE_DESIRE_SLAY_1 = -1632014, - SAY_FACE_ANGER_SLAY_2 = -1632015, - SAY_FACE_SORROW_SLAY_2 = -1632016, - SAY_FACE_DESIRE_SLAY_2 = -1632017, - SAY_FACE_SORROW_DEATH = -1632019, - SAY_FACE_DESIRE_DEATH = -1632020, - EMOTE_MIRRORED_SOUL = -1632021, - EMOTE_UNLEASH_SOUL = -1632022, - SAY_FACE_ANGER_UNLEASH_SOUL = -1632023, - SAY_FACE_SORROW_UNLEASH_SOUL = -1632024, - SAY_FACE_DESIRE_UNLEASH_SOUL = -1632025, - EMOTE_WAILING_SOUL = -1632026, - SAY_FACE_ANGER_WAILING_SOUL = -1632027, - SAY_FACE_DESIRE_WAILING_SOUL = -1632028, - - SAY_JAINA_OUTRO = -1632029, - SAY_SYLVANAS_OUTRO = -1632030, + SAY_FACE_AGGRO = 0, + SAY_FACE_ANGER_SLAY = 1, + SAY_FACE_SORROW_SLAY = 2, + SAY_FACE_DESIRE_SLAY = 3, + SAY_FACE_DEATH = 4, + EMOTE_MIRRORED_SOUL = 5, + EMOTE_UNLEASH_SOUL = 6, + SAY_FACE_UNLEASH_SOUL = 7, + EMOTE_WAILING_SOUL = 8, + SAY_FACE_WAILING_SOUL = 9, + + SAY_JAINA_OUTRO = 0, + SAY_SYLVANAS_OUTRO = 0 }; enum Spells { - SPELL_PHANTOM_BLAST = 68982, - H_SPELL_PHANTOM_BLAST = 70322, - SPELL_MIRRORED_SOUL = 69051, - SPELL_WELL_OF_SOULS = 68820, - SPELL_UNLEASHED_SOULS = 68939, - SPELL_WAILING_SOULS_STARTING = 68912, // Initial spell cast at begining of wailing souls phase - SPELL_WAILING_SOULS_BEAM = 68875, // the beam visual - SPELL_WAILING_SOULS = 68873, // the actual spell - H_SPELL_WAILING_SOULS = 70324, + SPELL_PHANTOM_BLAST = 68982, + H_SPELL_PHANTOM_BLAST = 70322, + SPELL_MIRRORED_SOUL = 69051, + SPELL_WELL_OF_SOULS = 68820, + SPELL_UNLEASHED_SOULS = 68939, + SPELL_WAILING_SOULS_STARTING = 68912, // Initial spell cast at begining of wailing souls phase + SPELL_WAILING_SOULS_BEAM = 68875, // the beam visual + SPELL_WAILING_SOULS = 68873, // the actual spell + H_SPELL_WAILING_SOULS = 70324, // 68871, 68873, 68875, 68876, 68899, 68912, 70324, // 68899 trigger 68871 }; @@ -157,7 +149,7 @@ class boss_devourer_of_souls : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(RAND(SAY_FACE_ANGER_AGGRO, SAY_FACE_DESIRE_AGGRO), me); + Talk(SAY_FACE_AGGRO); if (!me->FindNearestCreature(NPC_CRUCIBLE_OF_SOULS, 60)) // Prevent double spawn instance->instance->SummonCreature(NPC_CRUCIBLE_OF_SOULS, CrucibleSummonPos); @@ -196,20 +188,20 @@ class boss_devourer_of_souls : public CreatureScript switch (me->GetDisplayId()) { case DISPLAY_ANGER: - textId = RAND(SAY_FACE_ANGER_SLAY_1, SAY_FACE_ANGER_SLAY_2); + textId = SAY_FACE_ANGER_SLAY; break; case DISPLAY_SORROW: - textId = RAND(SAY_FACE_SORROW_SLAY_1, SAY_FACE_SORROW_SLAY_2); + textId = SAY_FACE_SORROW_SLAY; break; case DISPLAY_DESIRE: - textId = RAND(SAY_FACE_DESIRE_SLAY_1, SAY_FACE_DESIRE_SLAY_2); + textId = SAY_FACE_DESIRE_SLAY; break; default: break; } if (textId) - DoScriptText(textId, me); + Talk(textId); } void JustDied(Unit* /*killer*/) @@ -218,7 +210,7 @@ class boss_devourer_of_souls : public CreatureScript Position spawnPoint = {5618.139f, 2451.873f, 705.854f, 0}; - DoScriptText(RAND(SAY_FACE_SORROW_DEATH, SAY_FACE_DESIRE_DEATH), me); + Talk(SAY_FACE_DEATH); instance->SetData(DATA_DEVOURER_EVENT, DONE); @@ -234,9 +226,9 @@ class boss_devourer_of_souls : public CreatureScript { summon->GetMotionMaster()->MovePoint(0, outroPositions[i].movePosition); if (summon->GetEntry() == NPC_JAINA_PART2) - DoScriptText(SAY_JAINA_OUTRO, summon); + summon->AI()->Talk(SAY_JAINA_OUTRO); else if (summon->GetEntry() == NPC_SYLVANAS_PART2) - DoScriptText(SAY_SYLVANAS_OUTRO, summon); + summon->AI()->Talk(SAY_SYLVANAS_OUTRO); } } } @@ -279,7 +271,7 @@ class boss_devourer_of_souls : public CreatureScript { mirroredSoulTarget = target->GetGUID(); DoCast(target, SPELL_MIRRORED_SOUL); - DoScriptText(EMOTE_MIRRORED_SOUL, me); + Talk(EMOTE_MIRRORED_SOUL); } events.ScheduleEvent(EVENT_MIRRORED_SOUL, urand(15000, 30000)); break; @@ -292,8 +284,8 @@ class boss_devourer_of_souls : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_UNLEASHED_SOULS); me->SetDisplayId(DISPLAY_SORROW); - DoScriptText(RAND(SAY_FACE_ANGER_UNLEASH_SOUL, SAY_FACE_SORROW_UNLEASH_SOUL, SAY_FACE_DESIRE_UNLEASH_SOUL), me); - DoScriptText(EMOTE_UNLEASH_SOUL, me); + Talk(SAY_FACE_UNLEASH_SOUL); + Talk(EMOTE_UNLEASH_SOUL); events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 30000); events.ScheduleEvent(EVENT_FACE_ANGER, 5000); break; @@ -303,8 +295,8 @@ class boss_devourer_of_souls : public CreatureScript case EVENT_WAILING_SOULS: me->SetDisplayId(DISPLAY_DESIRE); - DoScriptText(RAND(SAY_FACE_ANGER_WAILING_SOUL, SAY_FACE_DESIRE_WAILING_SOUL), me); - DoScriptText(EMOTE_WAILING_SOUL, me); + Talk(SAY_FACE_WAILING_SOUL); + Talk(EMOTE_WAILING_SOUL); DoCast(me, SPELL_WAILING_SOULS_STARTING); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index 2f89d3bd503..895efd84580 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -42,21 +42,21 @@ enum Events enum Yells { - SAY_JAINA_INTRO_1 = -1632040, - SAY_JAINA_INTRO_2 = -1632041, - SAY_JAINA_INTRO_3 = -1632042, - SAY_JAINA_INTRO_4 = -1632043, - SAY_JAINA_INTRO_5 = -1632044, - SAY_JAINA_INTRO_6 = -1632045, - SAY_JAINA_INTRO_7 = -1632046, - SAY_JAINA_INTRO_8 = -1632047, - - SAY_SYLVANAS_INTRO_1 = -1632050, - SAY_SYLVANAS_INTRO_2 = -1632051, - SAY_SYLVANAS_INTRO_3 = -1632052, - SAY_SYLVANAS_INTRO_4 = -1632053, - SAY_SYLVANAS_INTRO_5 = -1632054, - SAY_SYLVANAS_INTRO_6 = -1632055, + SAY_JAINA_INTRO_1 = 0, + SAY_JAINA_INTRO_2 = 1, + SAY_JAINA_INTRO_3 = 2, + SAY_JAINA_INTRO_4 = 3, + SAY_JAINA_INTRO_5 = 4, + SAY_JAINA_INTRO_6 = 5, + SAY_JAINA_INTRO_7 = 6, + SAY_JAINA_INTRO_8 = 7, + + SAY_SYLVANAS_INTRO_1 = 0, + SAY_SYLVANAS_INTRO_2 = 1, + SAY_SYLVANAS_INTRO_3 = 2, + SAY_SYLVANAS_INTRO_4 = 3, + SAY_SYLVANAS_INTRO_5 = 4, + SAY_SYLVANAS_INTRO_6 = 5, }; enum eSylvanas @@ -120,32 +120,32 @@ public: switch (events.ExecuteEvent()) { case EVENT_INTRO_1: - DoScriptText(SAY_SYLVANAS_INTRO_1, me); + Talk(SAY_SYLVANAS_INTRO_1); events.ScheduleEvent(EVENT_INTRO_2, 11500); break; case EVENT_INTRO_2: - DoScriptText(SAY_SYLVANAS_INTRO_2, me); + Talk(SAY_SYLVANAS_INTRO_2); events.ScheduleEvent(EVENT_INTRO_3, 10500); break; case EVENT_INTRO_3: - DoScriptText(SAY_SYLVANAS_INTRO_3, me); + Talk(SAY_SYLVANAS_INTRO_3); events.ScheduleEvent(EVENT_INTRO_4, 9500); break; case EVENT_INTRO_4: - DoScriptText(SAY_SYLVANAS_INTRO_4, me); + Talk(SAY_SYLVANAS_INTRO_4); events.ScheduleEvent(EVENT_INTRO_5, 10500); break; case EVENT_INTRO_5: - DoScriptText(SAY_SYLVANAS_INTRO_5, me); + Talk(SAY_SYLVANAS_INTRO_5); events.ScheduleEvent(EVENT_INTRO_6, 9500); break; case EVENT_INTRO_6: - DoScriptText(SAY_SYLVANAS_INTRO_6, me); + Talk(SAY_SYLVANAS_INTRO_6); // End of Intro phase = PHASE_NORMAL; break; @@ -246,42 +246,42 @@ public: switch (events.ExecuteEvent()) { case EVENT_INTRO_1: - DoScriptText(SAY_JAINA_INTRO_1, me); + Talk(SAY_JAINA_INTRO_1); events.ScheduleEvent(EVENT_INTRO_2, 8000); break; case EVENT_INTRO_2: - DoScriptText(SAY_JAINA_INTRO_2, me); + Talk(SAY_JAINA_INTRO_2); events.ScheduleEvent(EVENT_INTRO_3, 8500); break; case EVENT_INTRO_3: - DoScriptText(SAY_JAINA_INTRO_3, me); + Talk(SAY_JAINA_INTRO_3); events.ScheduleEvent(EVENT_INTRO_4, 8000); break; case EVENT_INTRO_4: - DoScriptText(SAY_JAINA_INTRO_4, me); + Talk(SAY_JAINA_INTRO_4); events.ScheduleEvent(EVENT_INTRO_5, 10000); break; case EVENT_INTRO_5: - DoScriptText(SAY_JAINA_INTRO_5, me); + Talk(SAY_JAINA_INTRO_5); events.ScheduleEvent(EVENT_INTRO_6, 8000); break; case EVENT_INTRO_6: - DoScriptText(SAY_JAINA_INTRO_6, me); + Talk(SAY_JAINA_INTRO_6); events.ScheduleEvent(EVENT_INTRO_7, 12000); break; case EVENT_INTRO_7: - DoScriptText(SAY_JAINA_INTRO_7, me); + Talk(SAY_JAINA_INTRO_7); events.ScheduleEvent(EVENT_INTRO_8, 8000); break; case EVENT_INTRO_8: - DoScriptText(SAY_JAINA_INTRO_8, me); + Talk(SAY_JAINA_INTRO_8); // End of Intro phase = PHASE_NORMAL; break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index 4df13d32bf8..bb3028518ec 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -21,12 +21,11 @@ enum Yells { - SAY_AGGRO = -1668050, - SAY_SLAY_1 = -1668051, - SAY_SLAY_2 = -1668052, - SAY_DEATH = -1668053, - SAY_IMPENDING_DESPAIR = -1668054, - SAY_DEFILING_HORROR = -1668055, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_IMPENDING_DESPAIR = 3, + SAY_DEFILING_HORROR = 4, }; enum Spells @@ -74,7 +73,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_FALRIC_EVENT, IN_PROGRESS); @@ -85,7 +84,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_FALRIC_EVENT, DONE); @@ -93,7 +92,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void UpdateAI(const uint32 diff) @@ -116,7 +115,7 @@ public: case EVENT_IMPENDING_DESPAIR: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) { - DoScriptText(SAY_IMPENDING_DESPAIR, me); + Talk(SAY_IMPENDING_DESPAIR); DoCast(target, SPELL_IMPENDING_DESPAIR); } events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000); diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index 8334a199791..697e8cfb664 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -21,12 +21,10 @@ enum Yells { - SAY_AGGRO = -1668060, - SAY_SLAY_1 = -1668061, - SAY_SLAY_2 = -1668062, - SAY_DEATH = -1668063, - SAY_CORRUPTED_FLESH_1 = -1668064, - SAY_CORRUPTED_FLESH_2 = -1668065, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_CORRUPTED_FLESH = 3 }; enum Spells @@ -70,7 +68,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_MARWYN_EVENT, IN_PROGRESS); @@ -82,7 +80,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_MARWYN_EVENT, DONE); @@ -90,7 +88,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void UpdateAI(const uint32 diff) @@ -115,7 +113,7 @@ public: events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); break; case EVENT_CORRUPTED_FLESH: - DoScriptText(RAND(SAY_CORRUPTED_FLESH_1, SAY_CORRUPTED_FLESH_2), me); + Talk(SAY_CORRUPTED_FLESH); DoCast(SPELL_CORRUPTED_FLESH); events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 4f80fd746ee..c1a3a432407 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -23,52 +23,54 @@ enum Yells { - SAY_JAINA_INTRO_1 = -1668001, - SAY_JAINA_INTRO_2 = -1668002, - SAY_JAINA_INTRO_3 = -1668003, - SAY_JAINA_INTRO_4 = -1668004, - SAY_UTHER_INTRO_A2_1 = -1668005, - SAY_JAINA_INTRO_5 = -1668006, - SAY_UTHER_INTRO_A2_2 = -1668007, - SAY_JAINA_INTRO_6 = -1668008, - SAY_UTHER_INTRO_A2_3 = -1668009, - SAY_JAINA_INTRO_7 = -1668010, - SAY_UTHER_INTRO_A2_4 = -1668011, - SAY_JAINA_INTRO_8 = -1668012, - SAY_UTHER_INTRO_A2_5 = -1668013, - SAY_JAINA_INTRO_9 = -1668014, - SAY_UTHER_INTRO_A2_6 = -1668015, - SAY_UTHER_INTRO_A2_7 = -1668016, - SAY_JAINA_INTRO_10 = -1668017, - SAY_UTHER_INTRO_A2_8 = -1668018, - SAY_JAINA_INTRO_11 = -1668019, - SAY_UTHER_INTRO_A2_9 = -1668020, - - SAY_SYLVANAS_INTRO_1 = -1668021, - SAY_SYLVANAS_INTRO_2 = -1668022, - SAY_SYLVANAS_INTRO_3 = -1668023, - SAY_UTHER_INTRO_H2_1 = -1668024, - SAY_SYLVANAS_INTRO_4 = -1668025, - SAY_UTHER_INTRO_H2_2 = -1668026, - SAY_SYLVANAS_INTRO_5 = -1668027, - SAY_UTHER_INTRO_H2_3 = -1668028, - SAY_SYLVANAS_INTRO_6 = -1668029, - SAY_UTHER_INTRO_H2_4 = -1668030, - SAY_SYLVANAS_INTRO_7 = -1668031, - SAY_UTHER_INTRO_H2_5 = -1668032, - SAY_UTHER_INTRO_H2_6 = -1668033, - SAY_SYLVANAS_INTRO_8 = -1668034, - SAY_UTHER_INTRO_H2_7 = -1668035, - - SAY_LK_INTRO_1 = -1668036, - SAY_LK_INTRO_2 = -1668037, - SAY_LK_INTRO_3 = -1668038, - SAY_FALRIC_INTRO_1 = -1668039, - SAY_MARWYN_INTRO_1 = -1668040, - SAY_FALRIC_INTRO_2 = -1668041, - - SAY_JAINA_INTRO_END = -1668042, - SAY_SYLVANAS_INTRO_END = -1668043, + SAY_JAINA_INTRO_1 = 0, + SAY_JAINA_INTRO_2 = 1, + SAY_JAINA_INTRO_3 = 2, + SAY_JAINA_INTRO_4 = 3, + SAY_JAINA_INTRO_5 = 4, + SAY_JAINA_INTRO_6 = 5, + SAY_JAINA_INTRO_7 = 6, + SAY_JAINA_INTRO_8 = 7, + SAY_JAINA_INTRO_9 = 8, + SAY_JAINA_INTRO_10 = 9, + SAY_JAINA_INTRO_11 = 10, + SAY_JAINA_INTRO_END = 11, + + SAY_SYLVANAS_INTRO_1 = 0, + SAY_SYLVANAS_INTRO_2 = 1, + SAY_SYLVANAS_INTRO_3 = 2, + SAY_SYLVANAS_INTRO_4 = 3, + SAY_SYLVANAS_INTRO_5 = 4, + SAY_SYLVANAS_INTRO_6 = 5, + SAY_SYLVANAS_INTRO_7 = 6, + SAY_SYLVANAS_INTRO_8 = 7, + SAY_SYLVANAS_INTRO_END = 8, + + SAY_UTHER_INTRO_A2_1 = 0, + SAY_UTHER_INTRO_A2_2 = 1, + SAY_UTHER_INTRO_A2_3 = 2, + SAY_UTHER_INTRO_A2_4 = 3, + SAY_UTHER_INTRO_A2_5 = 4, + SAY_UTHER_INTRO_A2_6 = 5, + SAY_UTHER_INTRO_A2_7 = 6, + SAY_UTHER_INTRO_A2_8 = 7, + SAY_UTHER_INTRO_A2_9 = 8, + SAY_UTHER_INTRO_H2_1 = 9, + SAY_UTHER_INTRO_H2_2 = 10, + SAY_UTHER_INTRO_H2_3 = 11, + SAY_UTHER_INTRO_H2_4 = 12, + SAY_UTHER_INTRO_H2_5 = 13, + SAY_UTHER_INTRO_H2_6 = 14, + SAY_UTHER_INTRO_H2_7 = 15, + + SAY_LK_INTRO_1 = 0, + SAY_LK_INTRO_2 = 1, + SAY_LK_INTRO_3 = 2, + + SAY_FALRIC_INTRO_1 = 5, + SAY_FALRIC_INTRO_2 = 6, + + SAY_MARWYN_INTRO_1 = 4 }; enum Events @@ -214,8 +216,8 @@ public: } InstanceScript* instance; - uint64 uiUther; - uint64 uiLichKing; + uint64 utherGUID; + uint64 lichkingGUID; EventMap events; @@ -223,8 +225,8 @@ public: { events.Reset(); - uiUther = 0; - uiLichKing = 0; + utherGUID = 0; + lichkingGUID = 0; me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -260,11 +262,11 @@ public: // A2 Intro Events case EVENT_INTRO_A2_1: - DoScriptText(SAY_JAINA_INTRO_3, me); + Talk(SAY_JAINA_INTRO_3); events.ScheduleEvent(EVENT_INTRO_A2_2, 5000); break; case EVENT_INTRO_A2_2: - DoScriptText(SAY_JAINA_INTRO_4, me); + Talk(SAY_JAINA_INTRO_4); events.ScheduleEvent(EVENT_INTRO_A2_3, 10000); break; case EVENT_INTRO_A2_3: @@ -274,197 +276,197 @@ public: break; case EVENT_INTRO_A2_4: // spawn UTHER during speach 2 - if (Creature* pUther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) { - pUther->GetMotionMaster()->MoveIdle(); - pUther->SetReactState(REACT_PASSIVE); // be sure he will not aggro arthas - uiUther = pUther->GetGUID(); + uther->GetMotionMaster()->MoveIdle(); + uther->SetReactState(REACT_PASSIVE); // be sure he will not aggro arthas + utherGUID = uther->GetGUID(); } events.ScheduleEvent(EVENT_INTRO_A2_5, 2000); break; case EVENT_INTRO_A2_5: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_1, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_1); events.ScheduleEvent(EVENT_INTRO_A2_6, 3000); break; case EVENT_INTRO_A2_6: - DoScriptText(SAY_JAINA_INTRO_5, me); + Talk(SAY_JAINA_INTRO_5); events.ScheduleEvent(EVENT_INTRO_A2_7, 6000); break; case EVENT_INTRO_A2_7: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_2, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_2); events.ScheduleEvent(EVENT_INTRO_A2_8, 6500); break; case EVENT_INTRO_A2_8: - DoScriptText(SAY_JAINA_INTRO_6, me); + Talk(SAY_JAINA_INTRO_6); events.ScheduleEvent(EVENT_INTRO_A2_9, 2000); break; case EVENT_INTRO_A2_9: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_3, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_3); events.ScheduleEvent(EVENT_INTRO_A2_10, 9000); break; case EVENT_INTRO_A2_10: - DoScriptText(SAY_JAINA_INTRO_7, me); + Talk(SAY_JAINA_INTRO_7); events.ScheduleEvent(EVENT_INTRO_A2_11, 5000); break; case EVENT_INTRO_A2_11: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_4, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_4); events.ScheduleEvent(EVENT_INTRO_A2_12, 11000); break; case EVENT_INTRO_A2_12: - DoScriptText(SAY_JAINA_INTRO_8, me); + Talk(SAY_JAINA_INTRO_8); events.ScheduleEvent(EVENT_INTRO_A2_13, 4000); break; case EVENT_INTRO_A2_13: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_5, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_5); events.ScheduleEvent(EVENT_INTRO_A2_14, 12500); break; case EVENT_INTRO_A2_14: - DoScriptText(SAY_JAINA_INTRO_9, me); + Talk(SAY_JAINA_INTRO_9); events.ScheduleEvent(EVENT_INTRO_A2_15, 10000); break; case EVENT_INTRO_A2_15: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_6, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_6); events.ScheduleEvent(EVENT_INTRO_A2_16, 22000); break; case EVENT_INTRO_A2_16: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_A2_7, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_7); events.ScheduleEvent(EVENT_INTRO_A2_17, 4000); break; case EVENT_INTRO_A2_17: - DoScriptText(SAY_JAINA_INTRO_10, me); + Talk(SAY_JAINA_INTRO_10); events.ScheduleEvent(EVENT_INTRO_A2_18, 2000); break; case EVENT_INTRO_A2_18: - if (Creature* pUther = me->GetCreature(*me, uiUther)) + if (Creature* uther = me->GetCreature(*me, utherGUID)) { - pUther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - DoScriptText(SAY_UTHER_INTRO_A2_8, pUther); + uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); + uther->AI()->Talk(SAY_UTHER_INTRO_A2_8); } events.ScheduleEvent(EVENT_INTRO_A2_19, 11000); break; case EVENT_INTRO_A2_19: - DoScriptText(SAY_JAINA_INTRO_11, me); + Talk(SAY_JAINA_INTRO_11); events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); break; // H2 Intro Events case EVENT_INTRO_H2_1: - DoScriptText(SAY_SYLVANAS_INTRO_1, me); + Talk(SAY_SYLVANAS_INTRO_1); events.ScheduleEvent(EVENT_INTRO_H2_2, 8000); break; case EVENT_INTRO_H2_2: - DoScriptText(SAY_SYLVANAS_INTRO_2, me); + Talk(SAY_SYLVANAS_INTRO_2); events.ScheduleEvent(EVENT_INTRO_H2_3, 6000); break; case EVENT_INTRO_H2_3: - DoScriptText(SAY_SYLVANAS_INTRO_3, me); + Talk(SAY_SYLVANAS_INTRO_3); // TODO: she's doing some kind of spell casting emote events.ScheduleEvent(EVENT_INTRO_H2_4, 6000); break; case EVENT_INTRO_H2_4: // spawn UTHER during speach 2 - if (Creature* pUther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) { - pUther->GetMotionMaster()->MoveIdle(); - pUther->SetReactState(REACT_PASSIVE); // be sure he will not aggro arthas - uiUther = pUther->GetGUID(); + uther->GetMotionMaster()->MoveIdle(); + uther->SetReactState(REACT_PASSIVE); // be sure he will not aggro arthas + utherGUID = uther->GetGUID(); } events.ScheduleEvent(EVENT_INTRO_H2_5, 2000); break; case EVENT_INTRO_H2_5: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_H2_1, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_1); events.ScheduleEvent(EVENT_INTRO_H2_6, 11000); break; case EVENT_INTRO_H2_6: - DoScriptText(SAY_SYLVANAS_INTRO_4, me); + Talk(SAY_SYLVANAS_INTRO_4); events.ScheduleEvent(EVENT_INTRO_H2_7, 3000); break; case EVENT_INTRO_H2_7: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_H2_2, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_2); events.ScheduleEvent(EVENT_INTRO_H2_8, 6000); break; case EVENT_INTRO_H2_8: - DoScriptText(SAY_SYLVANAS_INTRO_5, me); + Talk(SAY_SYLVANAS_INTRO_5); events.ScheduleEvent(EVENT_INTRO_H2_9, 5000); break; case EVENT_INTRO_H2_9: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_H2_3, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_3); events.ScheduleEvent(EVENT_INTRO_H2_10, 19000); break; case EVENT_INTRO_H2_10: - DoScriptText(SAY_SYLVANAS_INTRO_6, me); + Talk(SAY_SYLVANAS_INTRO_6); events.ScheduleEvent(EVENT_INTRO_H2_11, 1500); break; case EVENT_INTRO_H2_11: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_H2_4, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_4); events.ScheduleEvent(EVENT_INTRO_H2_12, 19500); break; case EVENT_INTRO_H2_12: - DoScriptText(SAY_SYLVANAS_INTRO_7, me); + Talk(SAY_SYLVANAS_INTRO_7); events.ScheduleEvent(EVENT_INTRO_H2_13, 2000); break; case EVENT_INTRO_H2_13: - if (Creature* pUther = me->GetCreature(*me, uiUther)) + if (Creature* uther = me->GetCreature(*me, utherGUID)) { - pUther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - DoScriptText(SAY_UTHER_INTRO_H2_5, pUther); + uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); + uther->AI()->Talk(SAY_UTHER_INTRO_H2_5); } events.ScheduleEvent(EVENT_INTRO_H2_14, 12000); break; case EVENT_INTRO_H2_14: - if (Creature* pUther = me->GetCreature(*me, uiUther)) - DoScriptText(SAY_UTHER_INTRO_H2_6, pUther); + if (Creature* uther = me->GetCreature(*me, utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_6); events.ScheduleEvent(EVENT_INTRO_H2_15, 8000); break; case EVENT_INTRO_H2_15: - DoScriptText(SAY_SYLVANAS_INTRO_8, me); + Talk(SAY_SYLVANAS_INTRO_8); events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); break; // Remaining Intro Events common for both faction case EVENT_INTRO_LK_1: // Spawn LK in front of door, and make him move to the sword. - if (Creature* pLichKing = me->SummonCreature(NPC_LICH_KING_EVENT, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_EVENT, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) { - pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); - pLichKing->SetReactState(REACT_PASSIVE); - uiLichKing = pLichKing->GetGUID(); + lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); + lichking->SetReactState(REACT_PASSIVE); + lichkingGUID = lichking->GetGUID(); } - if (Creature* pUther = me->GetCreature(*me, uiUther)) + if (Creature* uther = me->GetCreature(*me, utherGUID)) { if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoScriptText(SAY_UTHER_INTRO_A2_9, pUther); + uther->AI()->Talk(SAY_UTHER_INTRO_A2_9); else - DoScriptText(SAY_UTHER_INTRO_H2_7, pUther); + uther->AI()->Talk(SAY_UTHER_INTRO_H2_7); } events.ScheduleEvent(EVENT_INTRO_LK_2, 11000); break; case EVENT_INTRO_LK_2: - if (Creature* pLichKing = me->GetCreature(*me, uiLichKing)) - DoScriptText(SAY_LK_INTRO_1, pLichKing); + if (Creature* lichking = me->GetCreature(*me, lichkingGUID)) + lichking->AI()->Talk(SAY_LK_INTRO_1); events.ScheduleEvent(EVENT_INTRO_LK_3, 2000); break; case EVENT_INTRO_LK_3: // The Lich King banishes Uther to the abyss. - if (Creature* pUther = me->GetCreature(*me, uiUther)) + if (Creature* uther = me->GetCreature(*me, utherGUID)) { - pUther->DisappearAndDie(); - uiUther = 0; + uther->DisappearAndDie(); + utherGUID = 0; } // He steps forward and removes the runeblade from the heap of skulls. @@ -473,8 +475,8 @@ public: break; case EVENT_INTRO_LK_4: - if (Creature* pLichKing = me->GetCreature(*me, uiLichKing)) - DoScriptText(SAY_LK_INTRO_2, pLichKing); + if (Creature* lichking = me->GetCreature(*me, lichkingGUID)) + lichking->AI()->Talk(SAY_LK_INTRO_2); events.ScheduleEvent(EVENT_INTRO_LK_5, 10000); break; @@ -485,41 +487,41 @@ public: if (Creature* pMarwyn = me->GetCreature(*me, instance->GetData64(DATA_MARWYN))) pMarwyn->SetVisible(true); - if (Creature* pLichKing = me->GetCreature(*me, uiLichKing)) + if (Creature* lichking = me->GetCreature(*me, lichkingGUID)) { - pLichKing->GetMotionMaster()->MovePoint(0, LichKingSpawnPos); - DoScriptText(SAY_LK_INTRO_3, pLichKing); + lichking->GetMotionMaster()->MovePoint(0, LichKingSpawnPos); + lichking->AI()->Talk(SAY_LK_INTRO_3); } events.ScheduleEvent(EVENT_INTRO_LK_6, 8000); break; case EVENT_INTRO_LK_6: - if (Creature* pFalric = me->GetCreature(*me, instance->GetData64(DATA_FALRIC))) - DoScriptText(SAY_FALRIC_INTRO_1, pFalric); + if (Creature* falric = me->GetCreature(*me, instance->GetData64(DATA_FALRIC))) + falric->AI()->Talk(SAY_FALRIC_INTRO_1); events.ScheduleEvent(EVENT_INTRO_LK_7, 2000); break; case EVENT_INTRO_LK_7: - if (Creature* pMarwyn = me->GetCreature(*me, instance->GetData64(DATA_MARWYN))) - DoScriptText(SAY_MARWYN_INTRO_1, pMarwyn); + if (Creature* marwyn = me->GetCreature(*me, instance->GetData64(DATA_MARWYN))) + marwyn->AI()->Talk(SAY_MARWYN_INTRO_1); events.ScheduleEvent(EVENT_INTRO_LK_8, 2000); break; case EVENT_INTRO_LK_8: - if (Creature* pFalric = me->GetCreature(*me, instance->GetData64(DATA_FALRIC))) - DoScriptText(SAY_FALRIC_INTRO_2, pFalric); + if (Creature* falric = me->GetCreature(*me, instance->GetData64(DATA_FALRIC))) + falric->AI()->Talk(SAY_FALRIC_INTRO_2); events.ScheduleEvent(EVENT_INTRO_LK_9, 5000); break; case EVENT_INTRO_LK_9: if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoScriptText(SAY_JAINA_INTRO_END, me); + Talk(SAY_JAINA_INTRO_END); else - DoScriptText(SAY_SYLVANAS_INTRO_END, me); + Talk(SAY_SYLVANAS_INTRO_END); me->GetMotionMaster()->MovePoint(0, LichKingSpawnPos); // TODO: Loralen/Koreln shall run also diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index cdc21eb25ec..e8557482420 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -23,15 +23,15 @@ enum Yells { - SAY_AGGRO = 0, - SAY_PHASE2 = 1, - SAY_PHASE3 = 2, - SAY_DEATH = 3, - SAY_SLAY = 4, - SAY_THROW_SARONITE = 5, - SAY_CAST_DEEP_FREEZE = 6, - - SAY_TYRANNUS_DEATH = -1658007, // todo + SAY_AGGRO = 0, + SAY_PHASE2 = 1, + SAY_PHASE3 = 2, + SAY_DEATH = 3, + SAY_SLAY = 4, + SAY_THROW_SARONITE = 5, + SAY_CAST_DEEP_FREEZE = 6, + + SAY_TYRANNUS_DEATH = 0 }; enum Spells @@ -48,16 +48,6 @@ enum Spells #define SPELL_PERMAFROST_HELPER RAID_MODE<uint32>(68786, 70336) #define SPELL_FORGE_BLADE_HELPER RAID_MODE<uint32>(68774, 70334) -enum Events -{ - EVENT_THROW_SARONITE = 1, - EVENT_CHILLING_WAVE = 2, - EVENT_DEEP_FREEZE = 3, - EVENT_JUMP = 4, - EVENT_FORGING = 5, - EVENT_RESUME_ATTACK = 6, -}; - enum Phases { PHASE_ONE = 1, @@ -82,6 +72,15 @@ Position const southForgePos = {639.257f, -210.1198f, 529.015f, 0.523599f}; class boss_garfrost : public CreatureScript { +enum Events +{ + EVENT_THROW_SARONITE = 1, + EVENT_CHILLING_WAVE = 2, + EVENT_DEEP_FREEZE = 3, + EVENT_JUMP = 4, + EVENT_FORGING = 5, + EVENT_RESUME_ATTACK = 6, +}; public: boss_garfrost() : CreatureScript("boss_garfrost") { } @@ -130,7 +129,7 @@ class boss_garfrost : public CreatureScript Talk(SAY_DEATH); if (Creature* tyrannus = me->GetCreature(*me, instance->GetData64(DATA_TYRANNUS))) - DoScriptText(SAY_TYRANNUS_DEATH, tyrannus); + tyrannus->AI()->Talk(SAY_TYRANNUS_DEATH); instance->SetBossState(DATA_GARFROST, DONE); } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 41cfc300958..ed196d2cd0c 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -48,33 +48,30 @@ enum Spells enum Yells { // Krick - SAY_KRICK_AGGRO = -1658010, - SAY_KRICK_SLAY_1 = -1658011, - SAY_KRICK_SLAY_2 = -1658012, - SAY_KRICK_BARRAGE_1 = -1658013, - SAY_KRICK_BARRAGE_2 = -1658014, - SAY_KRICK_POISON_NOVA = -1658015, - SAY_KRICK_CHASE_1 = -1658016, - SAY_KRICK_CHASE_2 = -1658017, - SAY_KRICK_CHASE_3 = -1658018, + SAY_KRICK_AGGRO = 0, + SAY_KRICK_SLAY = 1, + SAY_KRICK_BARRAGE_1 = 2, + SAY_KRICK_BARRAGE_2 = 3, + SAY_KRICK_POISON_NOVA = 4, + SAY_KRICK_CHASE = 5, + SAY_KRICK_OUTRO_1 = 6, + SAY_KRICK_OUTRO_3 = 7, + SAY_KRICK_OUTRO_5 = 8, + SAY_KRICK_OUTRO_8 = 9, // Ick - SAY_ICK_POISON_NOVA = -1658020, - SAY_ICK_CHASE_1 = -1658021, + SAY_ICK_POISON_NOVA = 0, + SAY_ICK_CHASE_1 = 1, // OUTRO - SAY_KRICK_OUTRO_1 = -1658030, - SAY_JAYNA_OUTRO_2 = -1658031, - SAY_SYLVANAS_OUTRO_2 = -1658032, - SAY_KRICK_OUTRO_3 = -1658033, - SAY_JAYNA_OUTRO_4 = -1658034, - SAY_SYLVANAS_OUTRO_4 = -1658035, - SAY_KRICK_OUTRO_5 = -1658036, - SAY_TYRANNUS_OUTRO_7 = -1658037, - SAY_KRICK_OUTRO_8 = -1658038, - SAY_TYRANNUS_OUTRO_9 = -1658039, - SAY_JAYNA_OUTRO_10 = -1658040, - SAY_SYLVANAS_OUTRO_10 = -1658041, + SAY_JAYNA_OUTRO_2 = 0, + SAY_JAYNA_OUTRO_4 = 1, + SAY_JAYNA_OUTRO_10 = 2, + SAY_SYLVANAS_OUTRO_2 = 0, + SAY_SYLVANAS_OUTRO_4 = 1, + SAY_SYLVANAS_OUTRO_10 = 2, + SAY_TYRANNUS_OUTRO_7 = 1, + SAY_TYRANNUS_OUTRO_9 = 2, }; enum Events @@ -167,7 +164,7 @@ class boss_ick : public CreatureScript void EnterCombat(Unit* /*who*/) { if (Creature* krick = GetKrick()) - DoScriptText(SAY_KRICK_AGGRO, krick); + krick->AI()->Talk(SAY_KRICK_AGGRO); events.ScheduleEvent(EVENT_MIGHTY_KICK, 20000); events.ScheduleEvent(EVENT_TOXIC_WASTE, 5000); @@ -250,8 +247,8 @@ class boss_ick : public CreatureScript case EVENT_EXPLOSIVE_BARRAGE: if (Creature* krick = GetKrick()) { - DoScriptText(SAY_KRICK_BARRAGE_1, krick); - DoScriptText(SAY_KRICK_BARRAGE_2, krick); + krick->AI()->Talk(SAY_KRICK_BARRAGE_1); + krick->AI()->Talk(SAY_KRICK_BARRAGE_2); krick->CastSpell(krick, SPELL_EXPLOSIVE_BARRAGE_KRICK, true); DoCast(me, SPELL_EXPLOSIVE_BARRAGE_ICK); } @@ -259,14 +256,14 @@ class boss_ick : public CreatureScript break; case EVENT_POISON_NOVA: if (Creature* krick = GetKrick()) - DoScriptText(SAY_KRICK_POISON_NOVA, krick); + krick->AI()->Talk(SAY_KRICK_POISON_NOVA); - DoScriptText(SAY_ICK_POISON_NOVA, me); + Talk(SAY_ICK_POISON_NOVA); DoCast(me, SPELL_POISON_NOVA); break; case EVENT_PURSUIT: if (Creature* krick = GetKrick()) - DoScriptText(RAND(SAY_KRICK_CHASE_1, SAY_KRICK_CHASE_2, SAY_KRICK_CHASE_3), krick); + krick->AI()->Talk(SAY_KRICK_CHASE); DoCast(me, SPELL_PURSUIT); break; default: @@ -328,7 +325,7 @@ class boss_krick : public CreatureScript if (victim == me) return; - DoScriptText(RAND(SAY_KRICK_SLAY_1, SAY_KRICK_SLAY_2), me); + Talk(SAY_KRICK_SLAY); } void JustSummoned(Creature* summon) @@ -362,7 +359,7 @@ class boss_krick : public CreatureScript if (type != POINT_MOTION_TYPE || id != POINT_KRICK_INTRO) return; - DoScriptText(SAY_KRICK_OUTRO_1, me); + Talk(SAY_KRICK_OUTRO_1); _phase = PHASE_OUTRO; _events.Reset(); _events.ScheduleEvent(EVENT_OUTRO_1, 1000); @@ -404,28 +401,28 @@ class boss_krick : public CreatureScript jainaOrSylvanas->SetFacingToObject(me); me->SetFacingToObject(jainaOrSylvanas); if (_instanceScript->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoScriptText(SAY_JAYNA_OUTRO_2, jainaOrSylvanas); + jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_2); else - DoScriptText(SAY_SYLVANAS_OUTRO_2, jainaOrSylvanas); + jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_2); } _events.ScheduleEvent(EVENT_OUTRO_3, 5000); break; case EVENT_OUTRO_3: - DoScriptText(SAY_KRICK_OUTRO_3, me); + Talk(SAY_KRICK_OUTRO_3); _events.ScheduleEvent(EVENT_OUTRO_4, 18000); break; case EVENT_OUTRO_4: if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID)) { if (_instanceScript->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoScriptText(SAY_JAYNA_OUTRO_4, jainaOrSylvanas); + jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_4); else - DoScriptText(SAY_SYLVANAS_OUTRO_4, jainaOrSylvanas); + jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_4); } _events.ScheduleEvent(EVENT_OUTRO_5, 5000); break; case EVENT_OUTRO_5: - DoScriptText(SAY_KRICK_OUTRO_5, me); + Talk(SAY_KRICK_OUTRO_5); _events.ScheduleEvent(EVENT_OUTRO_6, 1000); break; case EVENT_OUTRO_6: @@ -439,7 +436,7 @@ class boss_krick : public CreatureScript break; case EVENT_OUTRO_7: if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID)) - DoScriptText(SAY_TYRANNUS_OUTRO_7, tyrannus); + tyrannus->AI()->Talk(SAY_TYRANNUS_OUTRO_7); _events.ScheduleEvent(EVENT_OUTRO_8, 5000); break; case EVENT_OUTRO_8: @@ -450,7 +447,7 @@ class boss_krick : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_9, 2000); break; case EVENT_OUTRO_9: - DoScriptText(SAY_KRICK_OUTRO_8, me); + Talk(SAY_KRICK_OUTRO_8); // TODO: Tyrannus starts killing Krick. // there shall be some visual spell effect if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID)) @@ -472,16 +469,16 @@ class boss_krick : public CreatureScript break; case EVENT_OUTRO_12: if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID)) - DoScriptText(SAY_TYRANNUS_OUTRO_9, tyrannus); + tyrannus->AI()->Talk(SAY_TYRANNUS_OUTRO_9); _events.ScheduleEvent(EVENT_OUTRO_13, 2000); break; case EVENT_OUTRO_13: if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID)) { if (_instanceScript->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoScriptText(SAY_JAYNA_OUTRO_10, jainaOrSylvanas); + jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_10); else - DoScriptText(SAY_SYLVANAS_OUTRO_10, jainaOrSylvanas); + jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_10); } // End of OUTRO. for now... _events.ScheduleEvent(EVENT_OUTRO_END, 3000); @@ -636,19 +633,18 @@ class spell_krick_pursuit : public SpellScriptLoader void HandleScriptEffect(SpellEffIndex /*effIndex*/) { - if (GetCaster()->GetTypeId() != TYPEID_UNIT) - return; - - Unit* caster = GetCaster(); - CreatureAI* ickAI = caster->ToCreature()->AI(); - if (Unit* target = ickAI->SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true)) - { - DoScriptText(SAY_ICK_CHASE_1, caster, target); - caster->AddAura(GetSpellInfo()->Id, target); - CAST_AI(boss_ick::boss_ickAI, ickAI)->SetTempThreat(caster->getThreatManager().getThreat(target)); - caster->AddThreat(target, float(GetEffectValue())); - target->AddThreat(caster, float(GetEffectValue())); - } + if (GetCaster()) + if (Creature* ick = GetCaster()->ToCreature()) + { + if (Unit* target = ick->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true)) + { + ick->AI()->Talk(SAY_ICK_CHASE_1, target->GetGUID()); + ick->AddAura(GetSpellInfo()->Id, target); + CAST_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->getThreatManager().getThreat(target)); + ick->AddThreat(target, float(GetEffectValue())); + target->AddThreat(ick, float(GetEffectValue())); + } + } } void Register() diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 44d9230a8d2..51eca327810 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -25,32 +25,36 @@ enum Yells { - SAY_AMBUSH_1 = -1658050, - SAY_AMBUSH_2 = -1658051, - SAY_GAUNTLET_START = -1658052, - SAY_TYRANNUS_INTRO_1 = -1658053, - SAY_GORKUN_INTRO_2 = -1658054, - SAY_TYRANNUS_INTRO_3 = -1658055, - - SAY_AGGRO = -1658056, - SAY_SLAY_1 = -1658057, - SAY_SLAY_2 = -1658058, - SAY_DEATH = -1658059, - SAY_MARK_RIMEFANG_1 = -1658060, - SAY_MARK_RIMEFANG_2 = -1658061, - SAY_DARK_MIGHT_1 = -1658062, - SAY_DARK_MIGHT_2 = -1658063, - - SAY_GORKUN_OUTRO_1 = -1658064, - SAY_GORKUN_OUTRO_2 = -1658065, - SAY_JAYNA_OUTRO_3 = -1658066, - SAY_SYLVANAS_OUTRO_3 = -1658067, - SAY_JAYNA_OUTRO_4 = -1658068, - SAY_SYLVANAS_OUTRO_4 = -1658069, - SAY_JAYNA_OUTRO_5 = -1658070, + //Gorkun + SAY_GORKUN_INTRO_2 = 0, + SAY_GORKUN_OUTRO_1 = 1, + SAY_GORKUN_OUTRO_2 = 2, + + //Tyrannus + SAY_AMBUSH_1 = 3, + SAY_AMBUSH_2 = 4, + SAY_GAUNTLET_START = 5, + SAY_TYRANNUS_INTRO_1 = 6, + SAY_TYRANNUS_INTRO_3 = 7, + SAY_AGGRO = 8, + SAY_SLAY = 9, + SAY_DEATH = 10, + SAY_MARK_RIMEFANG_1 = 11, + SAY_MARK_RIMEFANG_2 = 12, + SAY_DARK_MIGHT_1 = 13, + SAY_DARK_MIGHT_2 = 14, + + //Jaina + SAY_JAYNA_OUTRO_3 = 3, + SAY_JAYNA_OUTRO_4 = 4, + SAY_JAYNA_OUTRO_5 = 5, + + //Sylvanas + SAY_SYLVANAS_OUTRO_3 = 3, + SAY_SYLVANAS_OUTRO_4 = 4 }; -enum Spells +enum Spelsl { SPELL_OVERLORD_BRAND = 69172, SPELL_OVERLORD_BRAND_HEAL = 69190, @@ -156,7 +160,7 @@ class boss_tyrannus : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); } void AttackStart(Unit* victim) @@ -180,12 +184,12 @@ class boss_tyrannus : public CreatureScript void KilledUnit(Unit* victim) { if (victim->GetTypeId() == TYPEID_PLAYER) - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); instance->SetBossState(DATA_TYRANNUS, DONE); // Prevent corpse despawning @@ -201,7 +205,7 @@ class boss_tyrannus : public CreatureScript { if (actionId == ACTION_START_INTRO) { - DoScriptText(SAY_TYRANNUS_INTRO_1, me); + Talk(SAY_TYRANNUS_INTRO_1); events.SetPhase(PHASE_INTRO); events.ScheduleEvent(EVENT_INTRO_1, 14000, 0, PHASE_INTRO); events.ScheduleEvent(EVENT_INTRO_2, 22000, 0, PHASE_INTRO); @@ -223,10 +227,10 @@ class boss_tyrannus : public CreatureScript switch (eventId) { case EVENT_INTRO_1: - //DoScriptText(SAY_GORKUN_INTRO_2, pGorkunOrVictus); + //Talk(SAY_GORKUN_INTRO_2, pGorkunOrVictus); break; case EVENT_INTRO_2: - DoScriptText(SAY_TYRANNUS_INTRO_3, me); + Talk(SAY_TYRANNUS_INTRO_3); break; case EVENT_INTRO_3: me->ExitVehicle(); @@ -254,16 +258,16 @@ class boss_tyrannus : public CreatureScript events.ScheduleEvent(EVENT_UNHOLY_POWER, 1000); break; case EVENT_UNHOLY_POWER: - DoScriptText(SAY_DARK_MIGHT_1, me); - DoScriptText(SAY_DARK_MIGHT_2, me); + Talk(SAY_DARK_MIGHT_1); + Talk(SAY_DARK_MIGHT_2); DoCast(me, SPELL_UNHOLY_POWER); events.ScheduleEvent(EVENT_FORCEFUL_SMASH, urand(40000, 48000)); break; case EVENT_MARK_OF_RIMEFANG: - DoScriptText(SAY_MARK_RIMEFANG_1, me); + Talk(SAY_MARK_RIMEFANG_1); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) { - DoScriptText(SAY_MARK_RIMEFANG_2, me, target); + Talk(SAY_MARK_RIMEFANG_2, target->GetGUID()); DoCast(target, SPELL_MARK_OF_RIMEFANG); } events.ScheduleEvent(EVENT_MARK_OF_RIMEFANG, urand(24000, 26000)); diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 595331d99d7..a7933fed046 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -38,16 +38,12 @@ enum Spells //Yells enum Yells { - SAY_AGGRO = -1604000, - SAY_SLAY_1 = -1604001, - SAY_SLAY_2 = -1604002, - SAY_SLAY_3 = -1604003, - SAY_DEATH = -1604004, - SAY_SUMMON_RHINO_1 = -1604005, - SAY_SUMMON_RHINO_2 = -1604006, - SAY_SUMMON_RHINO_3 = -1604007, - SAY_TRANSFORM_1 = -1604008, //Phase change - SAY_TRANSFORM_2 = -1604009 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SUMMON_RHINO = 3, + SAY_TRANSFORM_1 = 4, + SAY_TRANSFORM_2 = 5 }; enum Displays @@ -125,7 +121,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_GAL_DARAH_EVENT, IN_PROGRESS); @@ -146,7 +142,7 @@ public: me->SetDisplayId(DISPLAY_RHINO); Phase = RHINO; uiPhaseCounter = 0; - DoScriptText(SAY_TRANSFORM_1, me); + Talk(SAY_TRANSFORM_1); uiTransformationTimer = 5*IN_MILLISECONDS; bStartOfTransformation = true; me->ClearUnitState(UNIT_STATE_STUNNED|UNIT_STATE_ROOT); @@ -169,7 +165,7 @@ public: if (uiStampedeTimer <= diff) { DoCast(me, SPELL_STAMPEDE); - DoScriptText(RAND(SAY_SUMMON_RHINO_1, SAY_SUMMON_RHINO_2, SAY_SUMMON_RHINO_3), me); + Talk(SAY_SUMMON_RHINO); uiStampedeTimer = 15*IN_MILLISECONDS; } else uiStampedeTimer -= diff; @@ -189,7 +185,7 @@ public: me->SetDisplayId(DISPLAY_TROLL); Phase = TROLL; uiPhaseCounter = 0; - DoScriptText(SAY_TRANSFORM_2, me); + Talk(SAY_TRANSFORM_2); uiTransformationTimer = 9*IN_MILLISECONDS; bStartOfTransformation = true; me->ClearUnitState(UNIT_STATE_STUNNED|UNIT_STATE_ROOT); @@ -268,7 +264,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_GAL_DARAH_EVENT, DONE); @@ -279,7 +275,7 @@ public: if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } }; diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index 45c55f7ec9b..d5e10aedd70 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -34,14 +34,12 @@ enum eSpells enum eSays { - SAY_AGGRO = -1604010, - //SAY_SLAY_1 = -1604011, // not in db - SAY_SLAY_2 = -1604012, - SAY_SLAY_3 = -1604013, - SAY_DEATH = -1604014, - SAY_TRANSFORM = -1604015, - SAY_QUAKE = -1604016, - EMOTE_TRANSFORM = -1604017 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_TRANSFORM = 3, + SAY_QUAKE = 4, + EMOTE_TRANSFORM = 5 }; #define DATA_LESS_RABI 1 @@ -86,7 +84,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DoCast(me, SPELL_MOJO_FRENZY, true); if (instance) @@ -107,7 +105,7 @@ public: if (uiGroundTremorTimer <= uiDiff) { - DoScriptText(SAY_QUAKE, me); + Talk(SAY_QUAKE); if (bPhase) DoCast(me->getVictim(), SPELL_QUAKE, true); else @@ -135,8 +133,8 @@ public: if (!bPhase && uiTransformationTImer <= uiDiff) { - DoScriptText(EMOTE_TRANSFORM, me); - DoScriptText(SAY_TRANSFORM, me); + Talk(EMOTE_TRANSFORM); + Talk(SAY_TRANSFORM); DoCast(me, SPELL_TRANSFORMATION, false); uiTransformationTImer = 10*IN_MILLISECONDS; } else uiTransformationTImer -= uiDiff; @@ -154,7 +152,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_MOORABI_EVENT, DONE); @@ -165,7 +163,7 @@ public: if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } }; diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index f35228d44d9..cdbce68e337 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -35,13 +35,12 @@ enum Spells //Yell enum Yells { - SAY_AGGRO = -1604017, - SAY_SLAY_1 = -1604018, - SAY_SLAY_2 = -1604019, - SAY_SLAY_3 = -1604020, - SAY_DEATH = -1604021, - SAY_SUMMON_SNAKES = -1604022, - SAY_SUMMON_CONSTRICTORS = -1604023 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SUMMON_SNAKES = 3, + SAY_SUMMON_CONSTRICTORS = 4, + EMOTE_NOVA = 5 }; //Creatures @@ -117,7 +116,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_SLAD_RAN_EVENT, IN_PROGRESS); @@ -132,6 +131,7 @@ public: if (uiPoisonNovaTimer <= diff) { DoCast(me->getVictim(), SPELL_POISON_NOVA); + Talk(EMOTE_NOVA); uiPoisonNovaTimer = 15*IN_MILLISECONDS; } else uiPoisonNovaTimer -= diff; @@ -163,13 +163,13 @@ public: if (uiPhase == 0 && HealthBelowPct(30)) { - DoScriptText(SAY_SUMMON_SNAKES, me); + Talk(SAY_SUMMON_SNAKES); uiPhase = 1; } if (uiPhase == 1 && HealthBelowPct(25)) { - DoScriptText(SAY_SUMMON_CONSTRICTORS, me); + Talk(SAY_SUMMON_CONSTRICTORS); uiPhase = 2; } @@ -178,7 +178,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); lSummons.DespawnAll(); if (instance) @@ -187,7 +187,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } void JustSummoned(Creature* summoned) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 0d092ec86b2..2b240bc93d8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -37,6 +37,7 @@ enum Texts SAY_WIPE = 9, SAY_BERSERK = 10, SAY_DEATH = 11, + EMOTE_BERSERK_RAID = 12 }; enum Spells @@ -336,7 +337,7 @@ class boss_blood_queen_lana_thel : public CreatureScript switch (eventId) { case EVENT_BERSERK: - DoScriptText(EMOTE_GENERIC_BERSERK_RAID, me); + Talk(EMOTE_BERSERK_RAID); Talk(SAY_BERSERK); DoCast(me, SPELL_BERSERK); break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 9ee4bcea4d9..9ee4bcea4d9 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 9c0f2139b1b..9c0f2139b1b 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 8e7f891663e..8e7f891663e 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 263d70c6a50..263d70c6a50 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 4727504a4bd..4727504a4bd 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index a12a38b2f62..96cabfed918 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -36,6 +36,7 @@ enum Texts // A flaw of mortality... SAY_BERSERK = 9, // Enough! I tire of these games! SAY_DEATH = 10, // Free...at last... + EMOTE_BERSERK_RAID = 11 }; enum Spells @@ -440,7 +441,7 @@ class boss_sindragosa : public CreatureScript switch (eventId) { case EVENT_BERSERK: - DoScriptText(EMOTE_GENERIC_BERSERK_RAID, me); + Talk(EMOTE_BERSERK_RAID); Talk(SAY_BERSERK); DoCast(me, SPELL_BERSERK); break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 4e117d9f3e3..4e117d9f3e3 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp index 7ff995d4bcf..7ff995d4bcf 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 89d7b0f764d..89d7b0f764d 100755..100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 8901a61e79d..61ce8817b17 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -19,11 +19,14 @@ #include "ScriptedCreature.h" #include "naxxramas.h" -#define SAY_GREET RAND(-1533000, -1533004, -1533005, -1533006, -1533007) -#define SAY_AGGRO RAND(-1533001, -1533002, -1533003) -#define SAY_SLAY -1533008 +enum Anubrekhan +{ + SAY_AGGRO = 0, + SAY_GREET = 1, + SAY_SLAY = 2, -#define MOB_CRYPT_GUARD 16573 + MOB_CRYPT_GUARD = 16573 +}; const Position GuardSummonPos = {3333.72f, -3476.30f, 287.1f, 6.2801f}; @@ -97,7 +100,7 @@ public: if (victim->GetTypeId() == TYPEID_PLAYER) victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, NULL, NULL, me->GetGUID()); - DoScriptText(SAY_SLAY, me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) @@ -111,7 +114,7 @@ public: void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000)); events.ScheduleEvent(EVENT_LOCUST, 90000); events.ScheduleEvent(EVENT_BERSERK, 600000); @@ -124,7 +127,7 @@ public: { if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER) { - DoScriptText(SAY_GREET, me); + Talk(SAY_GREET); hasTaunted = true; } ScriptedAI::MoveInLineOfSight(who); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index a75f87e91af..58db1d9caea 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -22,14 +22,10 @@ enum Yells { - SAY_GREET = -1533009, - SAY_AGGRO_1 = -1533010, - SAY_AGGRO_2 = -1533011, - SAY_AGGRO_3 = -1533012, - SAY_AGGRO_4 = -1533013, - SAY_SLAY_1 = -1533014, - SAY_SLAY_2 = -1533015, - SAY_DEATH = -1533016 + SAY_GREET = 0, + SAY_AGGRO = 1, + SAY_SLAY = 2, + SAY_DEATH = 3 }; enum Spells @@ -71,7 +67,7 @@ class boss_faerlina : public CreatureScript void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2, SAY_AGGRO_3, SAY_AGGRO_4), me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_POISON, urand(10000, 15000)); events.ScheduleEvent(EVENT_FIRE, urand(6000, 18000)); events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000)); @@ -88,7 +84,7 @@ class boss_faerlina : public CreatureScript { if (!_introDone && who->GetTypeId() == TYPEID_PLAYER) { - DoScriptText(SAY_GREET, me); + Talk(SAY_GREET); _introDone = true; } @@ -98,13 +94,13 @@ class boss_faerlina : public CreatureScript void KilledUnit(Unit* /*victim*/) { if (!urand(0, 2)) - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } void SpellHit(Unit* caster, SpellInfo const* spell) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 29a0a11af9b..7785044e7d1 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -73,17 +73,14 @@ const uint32 SPELL_SECONDARY_H[]= {0, 57464, 0, 57465}; const uint32 SPELL_PUNISH[] = {0, 57381, 0, 57377}; #define SPELL_BERSERK 26662 -// used by 16063, 16064, 16065, 30549, but signed for 16063 -const int32 SAY_AGGRO[] = {-1533051, -1533044, -1533065, -1533058}; -const int32 SAY_TAUNT[3][4] ={ {-1533052, -1533045, -1533071, -1533059}, - {-1533053, -1533046, -1533072, -1533060}, - {-1533054, -1533047, -1533073, -1533061}, }; -const int32 SAY_SPECIAL[] = {-1533055, -1533048, -1533070, -1533062}; -const int32 SAY_SLAY[] = {-1533056, -1533049, -1533068, -1533063}; -const int32 SAY_DEATH[] = {-1533057, -1533050, -1533074, -1533064}; - -#define SAY_BARON_AGGRO RAND(-1533065, -1533066, -1533067) -#define SAY_BARON_SLAY RAND(-1533068, -1533069) +enum FourHorsemen +{ + SAY_AGGRO = 0, + SAY_TAUNT = 1, + SAY_SPECIAL = 2, + SAY_SLAY = 3, + SAY_DEATH = 4 +}; class boss_four_horsemen : public CreatureScript { @@ -295,12 +292,7 @@ public: void KilledUnit(Unit* /*victim*/) { if (!(rand()%5)) - { - if (id == HORSEMEN_BARON) - DoScriptText(SAY_BARON_SLAY, me); - else - DoScriptText(SAY_SLAY[id], me); - } + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) @@ -321,17 +313,13 @@ public: instance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 59450); } - DoScriptText(SAY_DEATH[id], me); + Talk(SAY_DEATH); } void EnterCombat(Unit* /*who*/) { _EnterCombat(); - - if (id == HORSEMEN_BARON) - DoScriptText(SAY_BARON_AGGRO, me); - else - DoScriptText(SAY_AGGRO[id], me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_MARK, 15000); events.ScheduleEvent(EVENT_CAST, 20000+rand()%5000); @@ -360,13 +348,13 @@ public: { case EVENT_MARK: if (!(rand()%5)) - DoScriptText(SAY_SPECIAL[id], me); + Talk(SAY_SPECIAL); DoCastAOE(SPELL_MARK[id]); events.ScheduleEvent(EVENT_MARK, 15000); break; case EVENT_CAST: if (!(rand()%5)) - DoScriptText(SAY_TAUNT[rand()%3][id], me); + Talk(SAY_TAUNT); if (caster) { @@ -379,7 +367,7 @@ public: events.ScheduleEvent(EVENT_CAST, 15000); break; case EVENT_BERSERK: - DoScriptText(SAY_SPECIAL[id], me); + Talk(SAY_SPECIAL); DoCast(me, EVENT_BERSERK); break; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index d335d36e112..14043f00939 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -24,10 +24,10 @@ enum Yells { - SAY_SPEECH = -1533040, - SAY_KILL = -1533041, - SAY_DEATH = -1533042, - SAY_TELEPORT = -1533043 + SAY_SPEECH = 0, + SAY_KILL = 1, + SAY_DEATH = 2, + SAY_TELEPORT = 3 }; //Gothik @@ -209,7 +209,7 @@ class boss_gothik : public CreatureScript waveCount = 0; events.ScheduleEvent(EVENT_SUMMON, 30000); DoTeleportTo(PosPlatform); - DoScriptText(SAY_SPEECH, me); + Talk(SAY_SPEECH); if (instance) instance->SetData(DATA_GOTHIK_GATE, GO_STATE_READY); } @@ -239,7 +239,7 @@ class boss_gothik : public CreatureScript void KilledUnit(Unit* /*victim*/) { if (!(rand()%5)) - DoScriptText(SAY_KILL, me); + Talk(SAY_KILL); } void JustDied(Unit* /*killer*/) @@ -247,7 +247,7 @@ class boss_gothik : public CreatureScript LiveTriggerGUID.clear(); DeadTriggerGUID.clear(); _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_GOTHIK_GATE, GO_STATE_ACTIVE); } @@ -452,7 +452,7 @@ class boss_gothik : public CreatureScript else { phaseTwo = true; - DoScriptText(SAY_TELEPORT, me); + Talk(SAY_TELEPORT); DoTeleportTo(PosGroundLiveSide); me->SetReactState(REACT_AGGRESSIVE); DummyEntryCheckPredicate pred; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index e7126ba7e33..8be4ac6b8b6 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -21,14 +21,17 @@ #include "naxxramas.h" #include "Player.h" -#define SAY_AGGRO RAND(-1533109, -1533110, -1533111) -#define SAY_SLAY -1533112 -#define SAY_TAUNT RAND(-1533113, -1533114, -1533115, -1533116, -1533117) -#define SAY_DEATH -1533118 - -#define SPELL_SPELL_DISRUPTION 29310 -#define SPELL_DECREPIT_FEVER RAID_MODE(29998, 55011) -#define SPELL_PLAGUE_CLOUD 29350 +enum Heigan +{ + SPELL_DECREPIT_FEVER = 29998, // 25-man: 55011 + SPELL_SPELL_DISRUPTION = 29310, + SPELL_PLAGUE_CLOUD = 29350, + + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_TAUNT = 2, + SAY_DEATH = 3 +}; enum Events { @@ -70,7 +73,7 @@ public: void KilledUnit(Unit* who) { if (!(rand()%5)) - DoScriptText(SAY_SLAY, me); + Talk(SAY_SLAY); if (who->GetTypeId() == TYPEID_PLAYER) safetyDance = false; } @@ -92,13 +95,13 @@ public: void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); EnterPhase(PHASE_FIGHT); safetyDance = true; } @@ -114,12 +117,16 @@ public: events.ScheduleEvent(EVENT_FEVER, urand(15000, 20000)); events.ScheduleEvent(EVENT_PHASE, 90000); events.ScheduleEvent(EVENT_ERUPT, 15000); + me->GetMotionMaster()->MoveChase(me->getVictim()); } else { float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->NearTeleportTo(x, y, z, o); + me->NearTeleportTo(x, y, z, o - G3D::halfPi()); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveIdle(); + me->SetTarget(0); DoCastAOE(SPELL_PLAGUE_CLOUD); events.ScheduleEvent(EVENT_PHASE, 45000); events.ScheduleEvent(EVENT_ERUPT, 8000); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 9167db45d20..183fb40e5a0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -33,32 +33,23 @@ EndScriptData */ enum Yells { //when shappiron dies. dialog between kel and lich king (in this order) - SAY_SAPP_DIALOG1 = -1533084, //not used - SAY_SAPP_DIALOG2_LICH = -1533085, //not used - SAY_SAPP_DIALOG3 = -1533086, //not used - SAY_SAPP_DIALOG4_LICH = -1533087, //not used - SAY_SAPP_DIALOG5 = -1533088, //not used - SAY_CAT_DIED = -1533089, //when cat dies, not used + SAY_SAPP_DIALOG1 = 0, //not used + SAY_SAPP_DIALOG2_LICH = 1, //not used + SAY_SAPP_DIALOG3 = 2, //not used + SAY_SAPP_DIALOG4_LICH = 3, //not used + SAY_SAPP_DIALOG5 = 4, //not used + SAY_CAT_DIED = 5, //when cat dies, not used //when each of the 4 wing bosses dies - SAY_TAUNT1 = -1533090, //not used - SAY_TAUNT2 = -1533091, //not used - SAY_TAUNT3 = -1533092, //not used - SAY_TAUNT4 = -1533093, //not used - SAY_SUMMON_MINIONS = -1533105, //start of phase 1 - SAY_AGGRO_1 = -1533094, //start of phase 2 - SAY_AGGRO_2 = -1533095, - SAY_AGGRO_3 = -1533096, - SAY_SLAY_1 = -1533097, - SAY_SLAY_2 = -1533098, - SAY_DEATH = -1533099, - SAY_CHAIN_1 = -1533100, - SAY_CHAIN_2 = -1533101, - SAY_FROST_BLAST = -1533102, - SAY_SPECIAL_1 = -1533106, - SAY_SPECIAL_2 = -1533107, - SAY_SPECIAL_3 = -1533108, - SAY_REQUEST_AID = -1533103, //start of phase 3 - SAY_ANSWER_REQUEST = -1533104 //lich king answer + SAY_TAUNT = 6, + SAY_AGGRO = 7, + SAY_SLAY = 8, + SAY_DEATH = 9, + SAY_CHAIN = 10, + SAY_FROST_BLAST = 11, + SAY_REQUEST_AID = 12, //start of phase 3 + SAY_ANSWER_REQUEST = 13, //lich king answer + SAY_SUMMON_MINIONS = 14, //start of phase 1 + SAY_SPECIAL = 15 }; enum Events @@ -341,13 +332,13 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); std::map<uint64, float>::const_iterator itr; for (itr = chained.begin(); itr != chained.end(); ++itr) @@ -370,7 +361,7 @@ public: pPortal->ResetDoorOrButton(); } DoCast(me, SPELL_KELTHUZAD_CHANNEL, false); - DoScriptText(SAY_SUMMON_MINIONS, me); + Talk(SAY_SUMMON_MINIONS); Phase = 1; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE); me->SetFloatValue(UNIT_FIELD_COMBATREACH, 4); @@ -435,7 +426,7 @@ public: break; case EVENT_PHASE: events.Reset(); - DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2, SAY_AGGRO_3), me); + Talk(SAY_AGGRO); spawns.DespawnAll(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE); me->CastStop(); @@ -464,10 +455,10 @@ public: if (HealthBelowPct(45)) { Phase = 3; - DoScriptText(SAY_REQUEST_AID, me); + Talk(SAY_REQUEST_AID); //here Lich King should respond to KelThuzad but I don't know which Creature to make talk //so for now just make Kelthuzad says it. - DoScriptText(SAY_ANSWER_REQUEST, me); + Talk(SAY_ANSWER_REQUEST); for (uint8 i = 0; i <= 3; ++i) { @@ -523,7 +514,7 @@ public: } } if (!chained.empty()) - DoScriptText(RAND(SAY_CHAIN_1, SAY_CHAIN_2), me); + Talk(SAY_CHAIN); events.RepeatEvent(urand(100000, 180000)); break; } @@ -627,7 +618,7 @@ public: std::vector<Unit*>::const_iterator itr = unitList.begin(); advance(itr, rand()%unitList.size()); DoCast(*itr, SPELL_MANA_DETONATION); - DoScriptText(RAND(SAY_SPECIAL_1, SAY_SPECIAL_2, SAY_SPECIAL_3), me); + Talk(SAY_SPECIAL); } events.RepeatEvent(urand(20000, 50000)); @@ -642,7 +633,7 @@ public: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, RAID_MODE(1, 0), 0, true)) DoCast(target, SPELL_FROST_BLAST); if (rand()%2) - DoScriptText(SAY_FROST_BLAST, me); + Talk(SAY_FROST_BLAST); events.RepeatEvent(urand(30000, 90000)); break; default: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index d106b99ace0..b670e36fa96 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -19,21 +19,25 @@ #include "ScriptedCreature.h" #include "naxxramas.h" -#define SAY_AGGRO RAND(-1533075, -1533076, -1533077) -#define SAY_SUMMON -1533078 -#define SAY_SLAY RAND(-1533079, -1533080) -#define SAY_DEATH -1533081 +enum Noth +{ + SAY_AGGRO = 0, + SAY_SUMMON = 1, + SAY_SLAY = 2, + SAY_DEATH = 3, -#define SOUND_DEATH 8848 + SOUND_DEATH = 8848, -#define SPELL_CURSE_PLAGUEBRINGER RAID_MODE(29213, 54835) -#define SPELL_BLINK RAND(29208, 29209, 29210, 29211) -#define SPELL_CRIPPLE RAID_MODE(29212, 54814) -#define SPELL_TELEPORT 29216 + SPELL_CURSE_PLAGUEBRINGER = 29213, // 25-man: 54835 + SPELL_CRIPPLE = 29212, // 25-man: 54814 + SPELL_TELEPORT = 29216, -#define MOB_WARRIOR 16984 -#define MOB_CHAMPION 16983 -#define MOB_GUARDIAN 16981 + MOB_WARRIOR = 16984, + MOB_CHAMPION = 16983, + MOB_GUARDIAN = 16981 +}; + +#define SPELL_BLINK RAND(29208, 29209, 29210, 29211) // Teleport position of Noth on his balcony #define TELE_X 2631.370f @@ -90,7 +94,7 @@ public: void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); balconyCount = 0; EnterPhaseGround(); } @@ -115,7 +119,7 @@ public: void KilledUnit(Unit* /*victim*/) { if (!(rand()%5)) - DoScriptText(SAY_SLAY, me); + Talk(SAY_SLAY); } void JustSummoned(Creature* summon) @@ -128,7 +132,7 @@ public: void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } void SummonUndead(uint32 entry, uint32 num) @@ -157,7 +161,7 @@ public: events.ScheduleEvent(EVENT_CURSE, urand(50000, 60000)); return; case EVENT_WARRIOR: - DoScriptText(SAY_SUMMON, me); + Talk(SAY_SUMMON); SummonUndead(MOB_WARRIOR, RAID_MODE(2, 3)); events.ScheduleEvent(EVENT_WARRIOR, 30000); return; @@ -178,7 +182,7 @@ public: waveCount = 0; return; case EVENT_WAVE: - DoScriptText(SAY_SUMMON, me); + Talk(SAY_SUMMON); switch (balconyCount) { case 0: SummonUndead(MOB_CHAMPION, RAID_MODE(2, 4)); break; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index b1b57836a89..d4b3f5ddce0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -30,12 +30,11 @@ enum Spells enum Yells { - SAY_AGGRO_1 = -1533017, - SAY_AGGRO_2 = -1533018, - SAY_SLAY = -1533019, - SAY_DEATH = -1533020, - EMOTE_BERSERK = -1533021, - EMOTE_ENRAGE = -1533022, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + EMOTE_BERSERK = 3, + EMOTE_ENRAGE = 4 }; enum Events @@ -78,20 +77,20 @@ public: void KilledUnit(Unit* /*Victim*/) { if (!(rand()%5)) - DoScriptText(SAY_SLAY, me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } void EnterCombat(Unit* /*who*/) { _EnterCombat(); Enraged = false; - DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2), me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_HATEFUL, 1000); events.ScheduleEvent(EVENT_BERSERK, 360000); @@ -137,7 +136,7 @@ public: } case EVENT_BERSERK: DoCast(me, SPELL_BERSERK, true); - DoScriptText(EMOTE_BERSERK, me); + Talk(EMOTE_BERSERK); events.ScheduleEvent(EVENT_SLIME, 2000); break; case EVENT_SLIME: @@ -150,7 +149,7 @@ public: if (!Enraged && HealthBelowPct(5)) { DoCast(me, SPELL_FRENZY, true); - DoScriptText(EMOTE_ENRAGE, me); + Talk(EMOTE_ENRAGE); Enraged = true; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 5a8f004788d..aebd7fdc19c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -17,45 +17,45 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "naxxramas.h" #include "Player.h" #include "SpellInfo.h" +#include "naxxramas.h" -#define EMOTE_BREATH -1533082 -#define EMOTE_ENRAGE -1533083 - -#define SPELL_FROST_AURA RAID_MODE(28531, 55799) -#define SPELL_CLEAVE 19983 -#define SPELL_TAIL_SWEEP RAID_MODE(55697, 55696) -#define SPELL_SUMMON_BLIZZARD 28560 -#define SPELL_LIFE_DRAIN RAID_MODE(28542, 55665) -#define SPELL_ICEBOLT 28522 -#define SPELL_FROST_BREATH 29318 -#define SPELL_FROST_EXPLOSION 28524 -#define SPELL_FROST_MISSILE 30101 -#define SPELL_BERSERK 26662 -#define SPELL_DIES 29357 - -#define SPELL_CHILL RAID_MODE(28547, 55699) - -#define MOB_BLIZZARD 16474 -#define GO_ICEBLOCK 181247 +enum Yells +{ + EMOTE_AIR_PHASE = 0, + EMOTE_GROUND_PHASE = 1, + EMOTE_BREATH = 2, + EMOTE_ENRAGE = 3 +}; -#define ACHIEVEMENT_THE_HUNDRED_CLUB RAID_MODE(2146, 2147) -#define MAX_FROST_RESISTANCE 100 +enum Spells +{ + SPELL_FROST_AURA = 28531, + SPELL_CLEAVE = 19983, + SPELL_TAIL_SWEEP = 55697, + SPELL_SUMMON_BLIZZARD = 28560, + SPELL_LIFE_DRAIN = 28542, + SPELL_ICEBOLT = 28522, + SPELL_FROST_BREATH = 29318, + SPELL_FROST_EXPLOSION = 28524, + SPELL_FROST_MISSILE = 30101, + SPELL_BERSERK = 26662, + SPELL_DIES = 29357, + SPELL_CHILL = 28547, +}; enum Phases { - PHASE_NULL = 0, + PHASE_NULL = 0, PHASE_BIRTH, PHASE_GROUND, - PHASE_FLIGHT, + PHASE_FLIGHT }; enum Events { - EVENT_NONE, - EVENT_BERSERK, + EVENT_BERSERK = 1, EVENT_CLEAVE, EVENT_TAIL, EVENT_DRAIN, @@ -67,342 +67,362 @@ enum Events EVENT_EXPLOSION, EVENT_LAND, EVENT_GROUND, - EVENT_BIRTH, + EVENT_BIRTH +}; + +enum Misc +{ + NPC_BLIZZARD = 16474, + GO_ICEBLOCK = 181247, + + // The Hundred Club + DATA_THE_HUNDRED_CLUB = 21462147, + MAX_FROST_RESISTANCE = 100 }; typedef std::map<uint64, uint64> IceBlockMap; class boss_sapphiron : public CreatureScript { -public: - boss_sapphiron() : CreatureScript("boss_sapphiron") { } - - CreatureAI* GetAI(Creature* creature) const - { - return new boss_sapphironAI (creature); - } - - struct boss_sapphironAI : public BossAI - { - boss_sapphironAI(Creature* creature) : BossAI(creature, BOSS_SAPPHIRON) - , phase(PHASE_NULL) + public: + boss_sapphiron() : CreatureScript("boss_sapphiron") { } + + struct boss_sapphironAI : public BossAI { - map = me->GetMap(); - } + boss_sapphironAI(Creature* creature) : BossAI(creature, BOSS_SAPPHIRON) + , _phase(PHASE_NULL) + { + _map = me->GetMap(); + } - Phases phase; - uint32 iceboltCount; - IceBlockMap iceblocks; + void InitializeAI() + { + float x, y, z; + me->GetPosition(x, y, z); + me->SummonGameObject(GO_BIRTH, x, y, z, 0, 0, 0, 0, 0, 0); + me->SetVisible(false); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->SetReactState(REACT_PASSIVE); + + BossAI::InitializeAI(); + } - bool CanTheHundredClub; // needed for achievement: The Hundred Club(2146, 2147) - uint32 CheckFrostResistTimer; - Map* map; + void Reset() + { + _Reset(); - void InitializeAI() - { - float x, y, z; - me->GetPosition(x, y, z); - me->SummonGameObject(GO_BIRTH, x, y, z, 0, 0, 0, 0, 0, 0); - me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetReactState(REACT_PASSIVE); - - ScriptedAI::InitializeAI(); - } + if (_phase == PHASE_FLIGHT) + ClearIceBlock(); - void Reset() - { - _Reset(); + _phase = PHASE_NULL; - if (phase == PHASE_FLIGHT) - ClearIceBlock(); + _canTheHundredClub = true; + _checkFrostResistTimer = 5 * IN_MILLISECONDS; + } - phase = PHASE_NULL; + void EnterCombat(Unit* /*who*/) + { + _EnterCombat(); - CanTheHundredClub = true; - CheckFrostResistTimer = 5000; - } + me->CastSpell(me, SPELL_FROST_AURA, true); - void EnterCombat(Unit* /*who*/) - { - _EnterCombat(); + events.ScheduleEvent(EVENT_BERSERK, 15 * MINUTE * IN_MILLISECONDS); + EnterPhaseGround(); - me->CastSpell(me, SPELL_FROST_AURA, true); + CheckPlayersFrostResist(); + } - events.ScheduleEvent(EVENT_BERSERK, 15*60000); - EnterPhaseGround(); + void SpellHitTarget(Unit* target, SpellInfo const* spell) + { + if (spell->Id == SPELL_ICEBOLT) + { + IceBlockMap::iterator itr = _iceblocks.find(target->GetGUID()); + if (itr != _iceblocks.end() && !itr->second) + { + if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25000)) + itr->second = iceblock->GetGUID(); + } + } + } - CheckPlayersFrostResist(); - } + void JustDied(Unit* /*killer*/) + { + _JustDied(); + me->CastSpell(me, SPELL_DIES, true); - void SpellHitTarget(Unit* target, const SpellInfo* spell) - { - if (spell->Id == SPELL_ICEBOLT) + CheckPlayersFrostResist(); + } + + void MovementInform(uint32 /*type*/, uint32 id) + { + if (id == 1) + events.ScheduleEvent(EVENT_LIFTOFF, 0); + } + + void DoAction(int32 const param) { - IceBlockMap::iterator itr = iceblocks.find(target->GetGUID()); - if (itr != iceblocks.end() && !itr->second) + if (param == DATA_SAPPHIRON_BIRTH) { - if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25000)) - itr->second = iceblock->GetGUID(); + _phase = PHASE_BIRTH; + events.ScheduleEvent(EVENT_BIRTH, 23 * IN_MILLISECONDS); } } - } - - void JustDied(Unit* /*killer*/) - { - _JustDied(); - me->CastSpell(me, SPELL_DIES, true); - CheckPlayersFrostResist(); - if (CanTheHundredClub) + void CheckPlayersFrostResist() { - AchievementEntry const* AchievTheHundredClub = sAchievementStore.LookupEntry(ACHIEVEMENT_THE_HUNDRED_CLUB); - if (AchievTheHundredClub) + if (_canTheHundredClub && _map && _map->IsRaid()) { - if (map && map->IsDungeon()) + Map::PlayerList const &players = _map->GetPlayers(); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { - Map::PlayerList const &players = map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - itr->getSource()->CompletedAchievement(AchievTheHundredClub); + if (itr->getSource()->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) + { + _canTheHundredClub = false; + break; + } } } } - } - - void MovementInform(uint32, uint32 id) - { - if (id == 1) - events.ScheduleEvent(EVENT_LIFTOFF, 0); - } - void DoAction(const int32 param) - { - if (param == DATA_SAPPHIRON_BIRTH) + void EnterPhaseGround() { - phase = PHASE_BIRTH; - events.ScheduleEvent(EVENT_BIRTH, 23000); + _phase = PHASE_GROUND; + me->SetReactState(REACT_AGGRESSIVE); + events.SetPhase(PHASE_GROUND); + events.ScheduleEvent(EVENT_CLEAVE, urand(5, 15) * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_TAIL, urand(5, 15) * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_DRAIN, 24 * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_BLIZZARD, urand(5, 10) * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_FLIGHT, 45 * IN_MILLISECONDS); } - } - void CheckPlayersFrostResist() - { - if (CanTheHundredClub && map && map->IsDungeon()) + void ClearIceBlock() { - Map::PlayerList const &players = map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + for (IceBlockMap::const_iterator itr = _iceblocks.begin(); itr != _iceblocks.end(); ++itr) { - if (itr->getSource()->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) - { - CanTheHundredClub = false; - break; - } + if (Player* player = ObjectAccessor::GetPlayer(*me, itr->first)) + player->RemoveAura(SPELL_ICEBOLT); + + if (GameObject* go = ObjectAccessor::GetGameObject(*me, itr->second)) + go->Delete(); } + _iceblocks.clear(); } - } - void EnterPhaseGround() - { - phase = PHASE_GROUND; - me->SetReactState(REACT_AGGRESSIVE); - events.SetPhase(PHASE_GROUND); - events.ScheduleEvent(EVENT_CLEAVE, 5000+rand()%10000, 0, PHASE_GROUND); - events.ScheduleEvent(EVENT_TAIL, 5000+rand()%10000, 0, PHASE_GROUND); - events.ScheduleEvent(EVENT_DRAIN, 24000, 0, PHASE_GROUND); - events.ScheduleEvent(EVENT_BLIZZARD, 5000+rand()%5000, 0, PHASE_GROUND); - events.ScheduleEvent(EVENT_FLIGHT, 45000); - } - - void ClearIceBlock() - { - for (IceBlockMap::const_iterator itr = iceblocks.begin(); itr != iceblocks.end(); ++itr) + uint32 GetData(uint32 data) const { - if (Player* player = Unit::GetPlayer(*me, itr->first)) - player->RemoveAura(SPELL_ICEBOLT); - if (GameObject* go = GameObject::GetGameObject(*me, itr->second)) - go->Delete(); + if (data == DATA_THE_HUNDRED_CLUB) + return _canTheHundredClub; + + return 0; } - iceblocks.clear(); - } - void UpdateAI(const uint32 diff) - { - if (!phase) - return; + void UpdateAI(uint32 const diff) + { + if (!_phase) + return; - events.Update(diff); + events.Update(diff); - if ((phase != PHASE_BIRTH && !UpdateVictim()) || !CheckInRoom()) - return; + if ((_phase != PHASE_BIRTH && !UpdateVictim()) || !CheckInRoom()) + return; - if (CanTheHundredClub) - { - if (CheckFrostResistTimer <= diff) + if (_canTheHundredClub) { - CheckPlayersFrostResist(); - CheckFrostResistTimer = (rand() % 5 + 5) * 1000; - } else CheckFrostResistTimer -= diff; - } + if (_checkFrostResistTimer <= diff) + { + CheckPlayersFrostResist(); + _checkFrostResistTimer = 5 * IN_MILLISECONDS; + } + else + _checkFrostResistTimer -= diff; + } - if (phase == PHASE_GROUND) - { - while (uint32 eventId = events.ExecuteEvent()) + if (_phase == PHASE_GROUND) { - switch (eventId) + while (uint32 eventId = events.ExecuteEvent()) { - case EVENT_BERSERK: - DoScriptText(EMOTE_ENRAGE, me); - DoCast(me, SPELL_BERSERK); - return; - case EVENT_CLEAVE: - DoCast(me->getVictim(), SPELL_CLEAVE); - events.ScheduleEvent(EVENT_CLEAVE, 5000+rand()%10000, 0, PHASE_GROUND); - return; - case EVENT_TAIL: - DoCastAOE(SPELL_TAIL_SWEEP); - events.ScheduleEvent(EVENT_TAIL, 5000+rand()%10000, 0, PHASE_GROUND); - return; - case EVENT_DRAIN: - DoCastAOE(SPELL_LIFE_DRAIN); - events.ScheduleEvent(EVENT_DRAIN, 24000, 0, PHASE_GROUND); - return; - case EVENT_BLIZZARD: + switch (eventId) { - //DoCastAOE(SPELL_SUMMON_BLIZZARD); - if (Creature* summon = DoSummon(MOB_BLIZZARD, me, 0.0f, urand(25000, 30000), TEMPSUMMON_TIMED_DESPAWN)) - summon->GetMotionMaster()->MoveRandom(40); - events.ScheduleEvent(EVENT_BLIZZARD, RAID_MODE(20000, 7000), 0, PHASE_GROUND); - break; - } - case EVENT_FLIGHT: - if (HealthAbovePct(10)) - { - phase = PHASE_FLIGHT; - events.SetPhase(PHASE_FLIGHT); - me->SetReactState(REACT_PASSIVE); - me->AttackStop(); - float x, y, z, o; - me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(1, x, y, z); + case EVENT_BERSERK: + Talk(EMOTE_ENRAGE); + DoCast(me, SPELL_BERSERK); + return; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + events.ScheduleEvent(EVENT_CLEAVE, urand(5, 15) * IN_MILLISECONDS, 0, PHASE_GROUND); + return; + case EVENT_TAIL: + DoCastAOE(SPELL_TAIL_SWEEP); + events.ScheduleEvent(EVENT_TAIL, urand(5, 15) * IN_MILLISECONDS, 0, PHASE_GROUND); + return; + case EVENT_DRAIN: + DoCastAOE(SPELL_LIFE_DRAIN); + events.ScheduleEvent(EVENT_DRAIN, 24 * IN_MILLISECONDS, 0, PHASE_GROUND); return; + case EVENT_BLIZZARD: + { + //DoCastAOE(SPELL_SUMMON_BLIZZARD); + if (Creature* summon = DoSummon(NPC_BLIZZARD, me, 0.0f, urand(25, 30) * IN_MILLISECONDS, TEMPSUMMON_TIMED_DESPAWN)) + summon->GetMotionMaster()->MoveRandom(40); + events.ScheduleEvent(EVENT_BLIZZARD, RAID_MODE(20, 7) * IN_MILLISECONDS, 0, PHASE_GROUND); + break; } - break; + case EVENT_FLIGHT: + if (HealthAbovePct(10)) + { + _phase = PHASE_FLIGHT; + events.SetPhase(PHASE_FLIGHT); + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); + float x, y, z, o; + me->GetHomePosition(x, y, z, o); + me->GetMotionMaster()->MovePoint(1, x, y, z); + return; + } + break; + } } - } - DoMeleeAttackIfReady(); - } - else - { - if (uint32 eventId = events.ExecuteEvent()) + DoMeleeAttackIfReady(); + } + else { - switch (eventId) + if (uint32 eventId = events.ExecuteEvent()) { - case EVENT_LIFTOFF: - me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - me->SetDisableGravity(true); - me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_ICEBOLT, 1500); - iceboltCount = RAID_MODE(2, 3); - return; - case EVENT_ICEBOLT: + switch (eventId) { - std::vector<Unit*> targets; - std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin(); - for (; i != me->getThreatManager().getThreatList().end(); ++i) - if ((*i)->getTarget()->GetTypeId() == TYPEID_PLAYER && !(*i)->getTarget()->HasAura(SPELL_ICEBOLT)) - targets.push_back((*i)->getTarget()); - - if (targets.empty()) - iceboltCount = 0; - else + case EVENT_LIFTOFF: + Talk(EMOTE_AIR_PHASE); + me->SetDisableGravity(true); + me->SendMovementFlagUpdate(); + events.ScheduleEvent(EVENT_ICEBOLT, 1500); + _iceboltCount = RAID_MODE(2, 3); + return; + case EVENT_ICEBOLT: { - std::vector<Unit*>::const_iterator itr = targets.begin(); - advance(itr, rand()%targets.size()); - iceblocks.insert(std::make_pair((*itr)->GetGUID(), 0)); - DoCast(*itr, SPELL_ICEBOLT); - --iceboltCount; + std::vector<Unit*> targets; + std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin(); + for (; i != me->getThreatManager().getThreatList().end(); ++i) + if ((*i)->getTarget()->GetTypeId() == TYPEID_PLAYER && !(*i)->getTarget()->HasAura(SPELL_ICEBOLT)) + targets.push_back((*i)->getTarget()); + + if (targets.empty()) + _iceboltCount = 0; + else + { + std::vector<Unit*>::const_iterator itr = targets.begin(); + advance(itr, rand()%targets.size()); + _iceblocks.insert(std::make_pair((*itr)->GetGUID(), 0)); + DoCast(*itr, SPELL_ICEBOLT); + --_iceboltCount; + } + + if (_iceboltCount) + events.ScheduleEvent(EVENT_ICEBOLT, 1 * IN_MILLISECONDS); + else + events.ScheduleEvent(EVENT_BREATH, 1 * IN_MILLISECONDS); + return; } - - if (iceboltCount) - events.ScheduleEvent(EVENT_ICEBOLT, 1000); - else - events.ScheduleEvent(EVENT_BREATH, 1000); - return; - } - case EVENT_BREATH: - { - DoScriptText(EMOTE_BREATH, me); - DoCastAOE(SPELL_FROST_MISSILE); - events.ScheduleEvent(EVENT_EXPLOSION, 8000); - return; + case EVENT_BREATH: + { + Talk(EMOTE_BREATH); + DoCastAOE(SPELL_FROST_MISSILE); + events.ScheduleEvent(EVENT_EXPLOSION, 8 * IN_MILLISECONDS); + return; + } + case EVENT_EXPLOSION: + CastExplosion(); + ClearIceBlock(); + events.ScheduleEvent(EVENT_LAND, 3 * IN_MILLISECONDS); + return; + case EVENT_LAND: + me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); + Talk(EMOTE_GROUND_PHASE); + me->SetDisableGravity(false); + me->SendMovementFlagUpdate(); + events.ScheduleEvent(EVENT_GROUND, 1500); + return; + case EVENT_GROUND: + EnterPhaseGround(); + return; + case EVENT_BIRTH: + me->SetVisible(true); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->SetReactState(REACT_AGGRESSIVE); + return; } - case EVENT_EXPLOSION: - CastExplosion(); - ClearIceBlock(); - events.ScheduleEvent(EVENT_LAND, 3000); - return; - case EVENT_LAND: - me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); - me->SetDisableGravity(false); - me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_GROUND, 1500); - return; - case EVENT_GROUND: - EnterPhaseGround(); - return; - case EVENT_BIRTH: - me->SetVisible(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetReactState(REACT_AGGRESSIVE); - return; } - }//if (uint32 eventId = events.ExecuteEvent()) - }//if (phase == PHASE_GROUND) - } + } + } - void CastExplosion() - { - DoZoneInCombat(); // make sure everyone is in threatlist - std::vector<Unit*> targets; - std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin(); - for (; i != me->getThreatManager().getThreatList().end(); ++i) + void CastExplosion() { - Unit* target = (*i)->getTarget(); - if (target->GetTypeId() != TYPEID_PLAYER) - continue; - - if (target->HasAura(SPELL_ICEBOLT)) + DoZoneInCombat(); // make sure everyone is in threatlist + std::vector<Unit*> targets; + std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin(); + for (; i != me->getThreatManager().getThreatList().end(); ++i) { - target->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, true); - targets.push_back(target); - continue; - } + Unit* target = (*i)->getTarget(); + if (target->GetTypeId() != TYPEID_PLAYER) + continue; - for (IceBlockMap::const_iterator itr = iceblocks.begin(); itr != iceblocks.end(); ++itr) - { - if (GameObject* go = GameObject::GetGameObject(*me, itr->second)) + if (target->HasAura(SPELL_ICEBOLT)) { - if (go->IsInBetween(me, target, 2.0f) - && me->GetExactDist2d(target->GetPositionX(), target->GetPositionY()) - me->GetExactDist2d(go->GetPositionX(), go->GetPositionY()) < 5.0f) + target->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, true); + targets.push_back(target); + continue; + } + + for (IceBlockMap::const_iterator itr = _iceblocks.begin(); itr != _iceblocks.end(); ++itr) + { + if (GameObject* go = GameObject::GetGameObject(*me, itr->second)) { - target->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, true); - targets.push_back(target); - break; + if (go->IsInBetween(me, target, 2.0f) + && me->GetExactDist2d(target->GetPositionX(), target->GetPositionY()) - me->GetExactDist2d(go->GetPositionX(), go->GetPositionY()) < 5.0f) + { + target->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, true); + targets.push_back(target); + break; + } } } } + + me->CastSpell(me, SPELL_FROST_EXPLOSION, true); + + for (std::vector<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) + (*itr)->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, false); } - me->CastSpell(me, SPELL_FROST_EXPLOSION, true); + private: + Phases _phase; + uint32 _iceboltCount; + IceBlockMap _iceblocks; + bool _canTheHundredClub; + uint32 _checkFrostResistTimer; + Map* _map; + }; - for (std::vector<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) - (*itr)->ApplySpellImmune(0, IMMUNITY_ID, SPELL_FROST_EXPLOSION, false); + CreatureAI* GetAI(Creature* creature) const + { + return new boss_sapphironAI (creature); } - }; +}; +class achievement_the_hundred_club : public AchievementCriteriaScript +{ + public: + achievement_the_hundred_club() : AchievementCriteriaScript("achievement_the_hundred_club") { } + + bool OnCheck(Player* /*source*/, Unit* target) + { + return target && target->GetAI()->GetData(DATA_THE_HUNDRED_CLUB); + } }; void AddSC_boss_sapphiron() { new boss_sapphiron(); + new achievement_the_hundred_club(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 482f8a1200d..c86cf1e9f28 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -24,9 +24,9 @@ //Stalagg enum StalaggYells { - SAY_STAL_AGGRO = -1533023, //not used - SAY_STAL_SLAY = -1533024, //not used - SAY_STAL_DEATH = -1533025 //not used + SAY_STAL_AGGRO = 0, + SAY_STAL_SLAY = 1, + SAY_STAL_DEATH = 2 }; enum StalagSpells @@ -40,9 +40,9 @@ enum StalagSpells //Feugen enum FeugenYells { - SAY_FEUG_AGGRO = -1533026, //not used - SAY_FEUG_SLAY = -1533027, //not used - SAY_FEUG_DEATH = -1533028 //not used + SAY_FEUG_AGGRO = 0, + SAY_FEUG_SLAY = 1, + SAY_FEUG_DEATH = 2 }; enum FeugenSpells @@ -67,17 +67,12 @@ enum ThaddiusActions //Thaddius enum ThaddiusYells { - SAY_GREET = -1533029, //not used - SAY_AGGRO_1 = -1533030, - SAY_AGGRO_2 = -1533031, - SAY_AGGRO_3 = -1533032, - SAY_SLAY = -1533033, - SAY_ELECT = -1533034, //not used - SAY_DEATH = -1533035, - SAY_SCREAM1 = -1533036, //not used - SAY_SCREAM2 = -1533037, //not used - SAY_SCREAM3 = -1533038, //not used - SAY_SCREAM4 = -1533039 //not used + SAY_GREET = 0, + SAY_AGGRO = 1, + SAY_SLAY = 2, + SAY_ELECT = 3, + SAY_DEATH = 4, + SAY_SCREAM = 5 }; enum ThaddiusSpells @@ -155,13 +150,13 @@ public: void KilledUnit(Unit* /*victim*/) { if (!(rand()%5)) - DoScriptText(SAY_SLAY, me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } void DoAction(const int32 action) @@ -198,7 +193,7 @@ public: void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2, SAY_AGGRO_3), me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_SHIFT, 30000); events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000)); events.ScheduleEvent(EVENT_BERSERK, 360000); @@ -315,13 +310,21 @@ public: magneticPullTimer = 20000; } + void KilledUnit(Unit* /*victim*/) + { + if (!(rand()%5)) + Talk(SAY_STAL_SLAY); + } + void EnterCombat(Unit* /*who*/) { + Talk(SAY_STAL_AGGRO); DoCast(SPELL_STALAGG_TESLA); } void JustDied(Unit* /*killer*/) { + Talk(SAY_STAL_DEATH); if (instance) if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS))) if (pThaddius->AI()) @@ -399,13 +402,21 @@ public: staticFieldTimer = 5000; } + void KilledUnit(Unit* /*victim*/) + { + if (!(rand()%5)) + Talk(SAY_FEUG_SLAY); + } + void EnterCombat(Unit* /*who*/) { + Talk(SAY_FEUG_AGGRO); DoCast(SPELL_FEUGEN_TESLA); } void JustDied(Unit* /*killer*/) { + Talk(SAY_FEUG_DEATH); if (instance) if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS))) if (pThaddius->AI()) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 80a5336a30c..2d89e5db0f0 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -38,10 +38,10 @@ enum Adds enum Yells { - SAY_AGGRO = -1576010, - SAY_DEATH = -1576011, - SAY_RIFT = -1576012, - SAY_SHIELD = -1576013 + SAY_AGGRO = 0, + SAY_DEATH = 1, + SAY_RIFT = 2, + SAY_SHIELD = 3 }; enum RiftSpells @@ -96,7 +96,7 @@ class boss_anomalus : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_ANOMALUS_EVENT, IN_PROGRESS); @@ -104,7 +104,7 @@ class boss_anomalus : public CreatureScript void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_ANOMALUS_EVENT, DONE); @@ -155,7 +155,7 @@ class boss_anomalus : public CreatureScript if ((Phase == 0) && HealthBelowPct(50)) { Phase = 1; - DoScriptText(SAY_SHIELD, me); + Talk(SAY_SHIELD); DoCast(me, SPELL_RIFT_SHIELD); if (Creature* Rift = me->SummonCreature(MOB_CHAOTIC_RIFT, RiftLocation[urand(0, 5)], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000)) { @@ -163,7 +163,7 @@ class boss_anomalus : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) Rift->AI()->AttackStart(target); uiChaoticRiftGUID = Rift->GetGUID(); - DoScriptText(SAY_RIFT, me); + Talk(SAY_RIFT); } } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index bbd86ec6a9f..c110a4a3e85 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -40,11 +40,11 @@ enum Spells enum Yells { //Yell - SAY_AGGRO = -1576040, - SAY_SLAY = -1576041, - SAY_ENRAGE = -1576042, - SAY_DEATH = -1576043, - SAY_CRYSTAL_NOVA = -1576044 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_ENRAGE = 2, + SAY_DEATH = 3, + SAY_CRYSTAL_NOVA = 4 }; enum Misc @@ -100,7 +100,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DoCastAOE(SPELL_INTENSE_COLD); if (instance) @@ -109,7 +109,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_KERISTRASZA_EVENT, DONE); @@ -117,7 +117,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(SAY_SLAY, me); + Talk(SAY_SLAY); } bool CheckContainmentSpheres(bool remove_prison = false) @@ -174,7 +174,7 @@ public: if (!bEnrage && HealthBelowPct(25)) { - DoScriptText(SAY_ENRAGE, me); + Talk(SAY_ENRAGE); DoCast(me, SPELL_ENRAGE); bEnrage = true; } @@ -193,7 +193,7 @@ public: if (uiCrystalChainsCrystalizeTimer <= diff) { - DoScriptText(SAY_CRYSTAL_NOVA, me); + Talk(SAY_CRYSTAL_NOVA); if (IsHeroic()) DoCast(me, SPELL_CRYSTALIZE); else if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 317a9845e87..c8d3cc6416c 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -43,12 +43,11 @@ enum Creatures enum Yells { - SAY_AGGRO = -1576000, - SAY_KILL = -1576001, - SAY_DEATH = -1576002, - SAY_MERGE = -1576003, - SAY_SPLIT_1 = -1576004, - SAY_SPLIT_2 = -1576005, + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DEATH = 2, + SAY_MERGE = 3, + SAY_SPLIT = 4 }; #define ACTION_MAGUS_DEAD 1 @@ -122,7 +121,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_MAGUS_TELESTRA_EVENT, IN_PROGRESS); @@ -130,7 +129,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE); @@ -138,7 +137,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(SAY_KILL, me); + Talk(SAY_KILL); } void DoAction(int32 const action) @@ -251,7 +250,7 @@ public: uiArcaneMagusGUID = 0; bIsWaitingToAppear = true; uiIsWaitingToAppearTimer = 4*IN_MILLISECONDS; - DoScriptText(SAY_MERGE, me); + Talk(SAY_MERGE); } else return; @@ -270,7 +269,7 @@ public: bFireMagusDead = false; bFrostMagusDead = false; bArcaneMagusDead = false; - DoScriptText(RAND(SAY_SPLIT_1, SAY_SPLIT_2), me); + Talk(SAY_SPLIT); return; } @@ -287,7 +286,7 @@ public: bFireMagusDead = false; bFrostMagusDead = false; bArcaneMagusDead = false; - DoScriptText(RAND(SAY_SPLIT_1, SAY_SPLIT_2), me); + Talk(SAY_SPLIT); return; } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp index 38808bc718d..1af1edcdf71 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp @@ -26,17 +26,15 @@ Script Data End */ #include "ScriptMgr.h" #include "ScriptedCreature.h" -#define SPELL_BATTLE_SHOUT 31403 -#define SPELL_CHARGE 60067 -#define SPELL_FRIGHTENING_SHOUT 19134 -#define SPELL_WHIRLWIND_1 38619 -#define SPELL_WHIRLWIND_2 38618 +enum CommanderStoutbeard +{ + SPELL_BATTLE_SHOUT = 31403, + SPELL_CHARGE = 60067, + SPELL_FRIGHTENING_SHOUT = 19134, + SPELL_WHIRLWIND_1 = 38619, + SPELL_WHIRLWIND_2 = 38618 +}; -//not used -//Yell -#define SAY_AGGRO -1576021 -#define SAY_KILL -1576022 -#define SAY_DEATH -1576023 class boss_commander_stoutbeard : public CreatureScript { @@ -53,10 +51,6 @@ public: boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) {} void Reset() {} - void EnterCombat(Unit* /*who*/) - { - DoScriptText(SAY_AGGRO, me); - } void AttackStart(Unit* /*who*/) {} void MoveInLineOfSight(Unit* /*who*/) {} void UpdateAI(const uint32 /*diff*/) @@ -67,10 +61,6 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) - { - DoScriptText(SAY_DEATH, me); - } }; }; diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 035e1a9a6df..60f9a3ddc9a 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -31,18 +31,11 @@ enum Spells enum Yells { - SAY_AGGRO = -1578005, - SAY_KILL_1 = -1578006, - SAY_KILL_2 = -1578007, - SAY_KILL_3 = -1578008, - SAY_DEATH = -1578009, - SAY_PULL_1 = -1578010, - SAY_PULL_2 = -1578011, - SAY_PULL_3 = -1578012, - SAY_PULL_4 = -1578013, - SAY_STOMP_1 = -1578014, - SAY_STOMP_2 = -1578015, - SAY_STOMP_3 = -1578016 + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DEATH = 2, + SAY_PULL = 3, + SAY_STOMP = 4 }; enum DrakosAchievement @@ -85,7 +78,7 @@ public: void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); } void UpdateAI(const uint32 diff) @@ -122,7 +115,7 @@ public: events.ScheduleEvent(EVENT_MAGIC_PULL, 15000); break; case EVENT_STOMP: - DoScriptText(RAND(SAY_STOMP_1, SAY_STOMP_2, SAY_STOMP_3), me); + Talk(SAY_STOMP); DoCast(SPELL_THUNDERING_STOMP); events.ScheduleEvent(EVENT_STOMP, 17000); break; @@ -136,7 +129,7 @@ public: { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); // start achievement timer (kill Eregos within 20 min) instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); @@ -144,7 +137,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_KILL_1, SAY_KILL_2, SAY_KILL_3), me); + Talk(SAY_KILL); } private: bool postPull; diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index 4bbb4c1a5ed..b17c471c81b 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -34,9 +34,12 @@ enum Events enum Says { - SAY_AGGRO = 0, - SAY_ENRAGE = 1, - SAY_DEATH = 2 + SAY_SPAWN = 0, + SAY_AGGRO = 1, + SAY_ENRAGE = 2, + SAY_KILL = 3, + SAY_DEATH = 4, + SAY_SHIELD = 5, }; enum Spells @@ -101,6 +104,11 @@ public: DoAction(ACTION_SET_NORMAL_EVENTS); } + void KilledUnit(Unit* /*victim*/) + { + Talk(SAY_KILL); + } + void EnterCombat(Unit* /*who*/) { _EnterCombat(); @@ -176,6 +184,7 @@ public: events.Reset(); _phase = (me->GetHealthPct() < 60.0f && me->GetHealthPct() > 20.0f) ? PHASE_FIRST_PLANAR : PHASE_SECOND_PLANAR; + Talk(SAY_SHIELD); DoCast(SPELL_PLANAR_SHIFT); // not sure about the amount, and if we should despawn previous spawns (dragon trashs) diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 51e476785ff..ffd5e53e787 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -45,11 +45,14 @@ enum Spells enum Yells { - SAY_AGGRO_1 = -1578000, - SAY_AGGRO_2 = -1578001, - SAY_AGGRO_3 = -1578002, - SAY_AGGRO_4 = -1578003, - SAY_TELEPORT = -1578004, + SAY_SUMMON_1 = 0, + SAY_SUMMON_2 = 1, + SAY_SUMMON_3 = 2, + SAY_AGGRO = 3, + EMOTE_ARCANE_EXPLOSION = 4, + SAY_ARCANE_EXPLOSION = 5, + SAY_DEATH = 6, + SAY_PLAYER_KILL = 7 }; enum eCreature @@ -84,11 +87,6 @@ static uint32 TeleportSpells[]= SPELL_SUMMON_MENAGERIE, SPELL_SUMMON_MENAGERIE_2, SPELL_SUMMON_MENAGERIE_3 }; -static int32 SayAggro[]= -{ - SAY_AGGRO_1, SAY_AGGRO_2, SAY_AGGRO_3, SAY_AGGRO_4 -}; - class boss_urom : public CreatureScript { public: @@ -153,7 +151,7 @@ public: { if (me->Attack(who, true)) { - DoScriptText(SayAggro[3], me); + Talk(SAY_AGGRO); me->SetInCombatWith(who); who->SetInCombatWith(me); @@ -209,6 +207,22 @@ public: { SetPosition(i); me->SummonCreature(Group[group[instance->GetData(DATA_UROM_PLATAFORM)]].entry[i], x, y, me->GetPositionZ(), me->GetOrientation()); + + // teleport to next platform and spawn adds + switch (instance->GetData(DATA_UROM_PLATAFORM)) + { + case 1: + Talk(SAY_SUMMON_1); + break; + case 2: + Talk(SAY_SUMMON_2); + break; + case 3: + Talk(SAY_SUMMON_3); + break; + default: + break; + } } } @@ -217,13 +231,17 @@ public: if (!instance || instance->GetData(DATA_UROM_PLATAFORM) > 2) return; - DoScriptText(SayAggro[instance->GetData(DATA_UROM_PLATAFORM)], me); + Talk(instance->GetData(DATA_UROM_PLATAFORM) < 5 ? instance->GetData(DATA_UROM_PLATAFORM) : 0); DoCast(TeleportSpells[instance->GetData(DATA_UROM_PLATAFORM)]); } + void KilledUnit(Unit* /*victim*/) + { + Talk(SAY_PLAYER_KILL); + } + void UpdateAI(const uint32 uiDiff) { - //Return since we have no target if (!UpdateVictim()) return; @@ -233,7 +251,6 @@ public: if (teleportTimer <= uiDiff) { me->InterruptNonMeleeSpells(false); - DoScriptText(SAY_TELEPORT, me); me->GetMotionMaster()->MoveIdle(); DoCast(SPELL_TELEPORT); teleportTimer = urand(30000, 35000); @@ -262,6 +279,9 @@ public: me->GetMotionMaster()->MoveChase(me->getVictim(), 0, 0); me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); + Talk(EMOTE_ARCANE_EXPLOSION); + Talk(SAY_ARCANE_EXPLOSION); + canCast = false; canGoBack = false; arcaneExplosionTimer = 9000; @@ -291,6 +311,7 @@ public: void JustDied(Unit* /*killer*/) { _JustDied(); + Talk(SAY_DEATH); DoCast(me, SPELL_DEATH_SPELL, true); // we cast the spell as triggered or the summon effect does not occur } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index 33e6e2846e4..a7dae9aba78 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -29,7 +29,7 @@ EndScriptData */ #include "Player.h" #include "SpellInfo.h" -enum eEnums +enum Enums { SAY_AGGRO = 0, SAY_FORGE = 1, @@ -62,7 +62,7 @@ enum eEnums MAX_GOLEM = 2, - ACHIEVEMENT_SHATTER_RESISTANT = 2042 + DATA_SHATTER_RESISTANT = 2042 }; /*###### @@ -152,21 +152,6 @@ public: if (instance) instance->SetData(TYPE_VOLKHAN, DONE); - - if (IsHeroic() && GolemsShattered < 5) - { - AchievementEntry const* AchievShatterResistant = sAchievementStore.LookupEntry(ACHIEVEMENT_SHATTER_RESISTANT); - if (AchievShatterResistant) - { - Map* map = me->GetMap(); - if (map && map->IsDungeon()) - { - Map::PlayerList const &players = map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - itr->getSource()->CompletedAchievement(AchievShatterResistant); - } - } - } } void KilledUnit(Unit* /*victim*/) @@ -233,6 +218,14 @@ public: } } + uint32 GetData(uint32 data) const + { + if (data == DATA_SHATTER_RESISTANT) + return GolemsShattered; + + return 0; + } + void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) @@ -461,8 +454,20 @@ public: }; }; +class achievement_shatter_resistant : public AchievementCriteriaScript +{ + public: + achievement_shatter_resistant() : AchievementCriteriaScript("achievement_shatter_resistant") { } + + bool OnCheck(Player* /*source*/, Unit* target) + { + return target && target->GetAI()->GetData(DATA_SHATTER_RESISTANT) < 5; + } +}; + void AddSC_boss_volkhan() { new boss_volkhan(); new mob_molten_golem(); + new achievement_shatter_resistant(); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp index 93bea92503c..747bd699c81 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp @@ -45,10 +45,10 @@ enum Spells enum Yells { - SAY_AGGRO = -1599007, - SAY_KILL = -1599008, - SAY_DEATH = -1599009, - SAY_SHATTER = -1599010 + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DEATH = 2, + SAY_SHATTER = 3 }; class boss_krystallus : public CreatureScript @@ -93,7 +93,7 @@ public: } void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_KRYSTALLUS_EVENT, IN_PROGRESS); @@ -146,7 +146,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_KRYSTALLUS_EVENT, DONE); @@ -156,7 +156,7 @@ public: { if (victim == me) return; - DoScriptText(SAY_KILL, me); + Talk(SAY_KILL); } void SpellHitTarget(Unit* /*target*/, const SpellInfo* pSpell) diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp index 8d113bce226..4511b8b0f1e 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp @@ -40,13 +40,10 @@ enum Spells enum Yells { - SAY_AGGRO = -1599000, - SAY_SLAY_1 = -1599001, - SAY_SLAY_2 = -1599002, - SAY_SLAY_3 = -1599003, - SAY_SLAY_4 = -1599004, - SAY_DEATH = -1599005, - SAY_STUN = -1599006 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_STUN = 3 }; enum Achievements @@ -94,7 +91,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) { @@ -138,7 +135,7 @@ public: if (ShockOfSorrowTimer <= diff) { DoResetThreat(); - DoScriptText(SAY_STUN, me); + Talk(SAY_STUN); DoCast(me, SPELL_SHOCK_OF_SORROW_N); ShockOfSorrowTimer = urand(20000, 30000); } else ShockOfSorrowTimer -= diff; @@ -160,7 +157,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, DONE); @@ -171,7 +168,7 @@ public: if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3, SAY_SLAY_4), me); + Talk(SAY_SLAY); } }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index c3e815f57dd..326779661cc 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -44,11 +44,9 @@ enum Spells enum Yells { - SAY_AGGRO = -1599011, - SAY_SLAY_1 = -1599012, - SAY_SLAY_2 = -1599013, - SAY_SLAY_3 = -1599014, - SAY_DEATH = -1599015 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2 }; #define EMOTE_GENERIC_FRENZY -1000002 @@ -132,7 +130,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); uiEncounterTimer = 0; @@ -217,7 +215,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); lSummons.DespawnAll(); if (instance) @@ -227,7 +225,7 @@ public: { if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } void DoAction(int32 const action) diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index 3c03508a14c..6b51d923517 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -24,68 +24,62 @@ enum Texts { - SAY_KILL_1 = -1599016, - SAY_KILL_2 = -1599017, - SAY_KILL_3 = -1599018, - SAY_LOW_HEALTH = -1599019, - SAY_DEATH = -1599020, - SAY_PLAYER_DEATH_1 = -1599021, - SAY_PLAYER_DEATH_2 = -1599022, - SAY_PLAYER_DEATH_3 = -1599023, - SAY_ESCORT_START = -1599024, - - SAY_SPAWN_DWARF = -1599025, - SAY_SPAWN_TROGG = -1599026, - SAY_SPAWN_OOZE = -1599027, - SAY_SPAWN_EARTHEN = -1599028, - - SAY_EVENT_INTRO_1 = -1599029, - SAY_EVENT_INTRO_2 = -1599030, - SAY_EVENT_INTRO_3_ABED = -1599031, - - SAY_EVENT_A_1 = -1599032, - SAY_EVENT_A_2_KADD = -1599033, - SAY_EVENT_A_3 = -1599034, - - SAY_EVENT_B_1 = -1599035, - SAY_EVENT_B_2_MARN = -1599036, - SAY_EVENT_B_3 = -1599037, - - SAY_EVENT_C_1 = -1599038, - SAY_EVENT_C_2_ABED = -1599039, - SAY_EVENT_C_3 = -1599040, - - SAY_EVENT_D_1 = -1599041, - SAY_EVENT_D_2_ABED = -1599042, - SAY_EVENT_D_3 = -1599043, - SAY_EVENT_D_4_ABED = -1599044, - - SAY_EVENT_END_01 = -1599045, - SAY_EVENT_END_02 = -1599046, - SAY_EVENT_END_03_ABED = -1599047, - SAY_EVENT_END_04 = -1599048, - SAY_EVENT_END_05_ABED = -1599049, - SAY_EVENT_END_06 = -1599050, - SAY_EVENT_END_07_ABED = -1599051, - SAY_EVENT_END_08 = -1599052, - SAY_EVENT_END_09_KADD = -1599053, - SAY_EVENT_END_10 = -1599054, - SAY_EVENT_END_11_KADD = -1599055, - SAY_EVENT_END_12 = -1599056, - SAY_EVENT_END_13_KADD = -1599057, - SAY_EVENT_END_14 = -1599058, - SAY_EVENT_END_15_MARN = -1599059, - SAY_EVENT_END_16 = -1599060, - SAY_EVENT_END_17_MARN = -1599061, - SAY_EVENT_END_18 = -1599062, - SAY_EVENT_END_19_MARN = -1599063, - SAY_EVENT_END_20 = -1599064, - SAY_EVENT_END_21_ABED = -1599065, - - SAY_VICTORY_SJONNIR_1 = -1599066, - SAY_VICTORY_SJONNIR_2 = -1599067, - - SAY_ENTRANCE_MEET = -1599068, + SAY_KILL = 0, + SAY_LOW_HEALTH = 1, + SAY_DEATH = 2, + SAY_PLAYER_DEATH = 3, + SAY_ESCORT_START = 4, + + SAY_SPAWN_DWARF = 5, + SAY_SPAWN_TROGG = 6, + SAY_SPAWN_OOZE = 7, + SAY_SPAWN_EARTHEN = 8, + + SAY_EVENT_INTRO_1 = 9, + SAY_EVENT_INTRO_2 = 10, + SAY_EVENT_A_1 = 11, + SAY_EVENT_A_3 = 12, + SAY_EVENT_B_1 = 13, + SAY_EVENT_B_3 = 14, + SAY_EVENT_C_1 = 15, + SAY_EVENT_C_3 = 16, + SAY_EVENT_D_1 = 17, + SAY_EVENT_D_3 = 18, + + SAY_EVENT_END_01 = 19, + SAY_EVENT_END_02 = 20, + SAY_EVENT_END_04 = 21, + SAY_EVENT_END_06 = 22, + SAY_EVENT_END_08 = 23, + SAY_EVENT_END_10 = 24, + SAY_EVENT_END_12 = 25, + SAY_EVENT_END_14 = 26, + SAY_EVENT_END_16 = 27, + SAY_EVENT_END_18 = 28, + SAY_EVENT_END_20 = 29, + + SAY_VICTORY_SJONNIR_1 = 30, + SAY_VICTORY_SJONNIR_2 = 31, + SAY_ENTRANCE_MEET = 32, + + SAY_EVENT_INTRO_3_ABED = 0, + SAY_EVENT_C_2_ABED = 1, + SAY_EVENT_D_2_ABED = 2, + SAY_EVENT_D_4_ABED = 3, + SAY_EVENT_END_03_ABED = 4, + SAY_EVENT_END_05_ABED = 5, + SAY_EVENT_END_07_ABED = 6, + SAY_EVENT_END_21_ABED = 7, + + SAY_EVENT_A_2_KADD = 0, + SAY_EVENT_END_09_KADD = 1, + SAY_EVENT_END_11_KADD = 2, + SAY_EVENT_END_13_KADD = 3, + + SAY_EVENT_B_2_MARN = 0, + SAY_EVENT_END_15_MARN = 1, + SAY_EVENT_END_17_MARN = 2, + SAY_EVENT_END_19_MARN = 3, TEXT_ID_START = 13100, TEXT_ID_PROGRESS = 13101 @@ -363,12 +357,12 @@ public: } break; case 13: - DoScriptText(SAY_EVENT_INTRO_1, me); + Talk(SAY_EVENT_INTRO_1); SetEscortPaused(true); JumpToNextStep(20000); break; case 17: - DoScriptText(SAY_EVENT_INTRO_2, me); + Talk(SAY_EVENT_INTRO_2); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_TRIBUNAL_CONSOLE), true); me->SetStandState(UNIT_STAND_STATE_KNEEL); @@ -452,7 +446,7 @@ public: instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS); } bIsBattle = false; - DoScriptText(SAY_ESCORT_START, me); + Talk(SAY_ESCORT_START); SetRun(true); JumpToNextStep(0); break; @@ -463,21 +457,21 @@ public: case 5: if (instance) if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))) - DoScriptText(SAY_EVENT_INTRO_3_ABED, temp); + temp->AI()->Talk(SAY_EVENT_INTRO_3_ABED); JumpToNextStep(8500); break; case 6: - DoScriptText(SAY_EVENT_A_1, me); + Talk(SAY_EVENT_A_1); JumpToNextStep(6500); break; case 7: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) - DoScriptText(SAY_EVENT_A_2_KADD, temp); + temp->AI()->Talk(SAY_EVENT_A_2_KADD); JumpToNextStep(12500); break; case 8: - DoScriptText(SAY_EVENT_A_3, me); + Talk(SAY_EVENT_A_3); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) @@ -490,18 +484,18 @@ public: JumpToNextStep(20000); break; case 10: - DoScriptText(SAY_EVENT_B_1, me); + Talk(SAY_EVENT_B_1); JumpToNextStep(6000); break; case 11: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) - DoScriptText(SAY_EVENT_B_2_MARN, temp); + temp->AI()->Talk(SAY_EVENT_B_2_MARN); SpawnDwarf(1); JumpToNextStep(20000); break; case 12: - DoScriptText(SAY_EVENT_B_3, me); + Talk(SAY_EVENT_B_3); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) @@ -517,7 +511,7 @@ public: JumpToNextStep(20000); break; case 15: - DoScriptText(SAY_EVENT_C_1, me); + Talk(SAY_EVENT_C_1); SpawnDwarf(1); JumpToNextStep(10000); break; @@ -528,12 +522,12 @@ public: case 17: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_C_2_ABED, temp); + temp->AI()->Talk(SAY_EVENT_C_2_ABED); SpawnDwarf(1); JumpToNextStep(20000); break; case 18: - DoScriptText(SAY_EVENT_C_3, me); + Talk(SAY_EVENT_C_3); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) @@ -549,14 +543,14 @@ public: JumpToNextStep(15000); break; case 21: - DoScriptText(SAY_EVENT_D_1, me); + Talk(SAY_EVENT_D_1); SpawnDwarf(3); JumpToNextStep(20000); break; case 22: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_D_2_ABED, temp); + temp->AI()->Talk(SAY_EVENT_D_2_ABED); SpawnDwarf(1); JumpToNextStep(5000); break; @@ -565,7 +559,7 @@ public: JumpToNextStep(15000); break; case 24: - DoScriptText(SAY_EVENT_D_3, me); + Talk(SAY_EVENT_D_3); SpawnDwarf(3); JumpToNextStep(5000); break; @@ -580,13 +574,13 @@ public: case 27: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_D_4_ABED, temp); + temp->AI()->Talk(SAY_EVENT_D_4_ABED); SpawnDwarf(1); JumpToNextStep(10000); break; case 28: me->SetReactState(REACT_DEFENSIVE); - DoScriptText(SAY_EVENT_END_01, me); + Talk(SAY_EVENT_END_01); me->SetStandState(UNIT_STAND_STATE_STAND); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true); @@ -597,7 +591,7 @@ public: JumpToNextStep(6500); break; case 29: - DoScriptText(SAY_EVENT_END_02, me); + Talk(SAY_EVENT_END_02); if (instance) instance->SetData(DATA_BRANN_EVENT, DONE); me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true); @@ -606,97 +600,97 @@ public: case 30: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_END_03_ABED, temp); + temp->AI()->Talk(SAY_EVENT_END_03_ABED); JumpToNextStep(8500); break; case 31: - DoScriptText(SAY_EVENT_END_04, me); + Talk(SAY_EVENT_END_04); JumpToNextStep(11500); break; case 32: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_END_05_ABED, temp); + temp->AI()->Talk(SAY_EVENT_END_05_ABED); JumpToNextStep(11500); break; case 33: - DoScriptText(SAY_EVENT_END_06, me); + Talk(SAY_EVENT_END_06); JumpToNextStep(4500); break; case 34: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_END_07_ABED, temp); + temp->AI()->Talk(SAY_EVENT_END_07_ABED); JumpToNextStep(22500); break; case 35: - DoScriptText(SAY_EVENT_END_08, me); + Talk(SAY_EVENT_END_08); JumpToNextStep(7500); break; case 36: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) - DoScriptText(SAY_EVENT_END_09_KADD, temp); + temp->AI()->Talk(SAY_EVENT_END_09_KADD); JumpToNextStep(18500); break; case 37: - DoScriptText(SAY_EVENT_END_10, me); + Talk(SAY_EVENT_END_10); JumpToNextStep(5500); break; case 38: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) - DoScriptText(SAY_EVENT_END_11_KADD, temp); + temp->AI()->Talk(SAY_EVENT_END_11_KADD); JumpToNextStep(20500); break; case 39: - DoScriptText(SAY_EVENT_END_12, me); + Talk(SAY_EVENT_END_12); JumpToNextStep(2500); break; case 40: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) - DoScriptText(SAY_EVENT_END_13_KADD, temp); + temp->AI()->Talk(SAY_EVENT_END_13_KADD); JumpToNextStep(19500); break; case 41: - DoScriptText(SAY_EVENT_END_14, me); + Talk(SAY_EVENT_END_14); JumpToNextStep(10500); break; case 42: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) - DoScriptText(SAY_EVENT_END_15_MARN, temp); + temp->AI()->Talk(SAY_EVENT_END_15_MARN); JumpToNextStep(6500); break; case 43: - DoScriptText(SAY_EVENT_END_16, me); + Talk(SAY_EVENT_END_16); JumpToNextStep(6500); break; case 44: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) - DoScriptText(SAY_EVENT_END_17_MARN, temp); + temp->AI()->Talk(SAY_EVENT_END_17_MARN); JumpToNextStep(25500); break; case 45: - DoScriptText(SAY_EVENT_END_18, me); + Talk(SAY_EVENT_END_18); JumpToNextStep(23500); break; case 46: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) - DoScriptText(SAY_EVENT_END_19_MARN, temp); + temp->AI()->Talk(SAY_EVENT_END_19_MARN); JumpToNextStep(3500); break; case 47: - DoScriptText(SAY_EVENT_END_20, me); + Talk(SAY_EVENT_END_20); JumpToNextStep(8500); break; case 48: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) - DoScriptText(SAY_EVENT_END_21_ABED, temp); + temp->AI()->Talk(SAY_EVENT_END_21_ABED); JumpToNextStep(5500); break; case 49: @@ -723,7 +717,7 @@ public: if (!bIsLowHP && HealthBelowPct(30)) { - DoScriptText(SAY_LOW_HEALTH, me); + Talk(SAY_LOW_HEALTH); bIsLowHP = true; } else if (bIsLowHP && !HealthBelowPct(30)) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 92e56d4dd9a..db8c7f38ef7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -18,7 +18,7 @@ /* ScriptData SDName: Assembly of Iron encounter SD%Complete: 60% -SDComment: Runes need DB support, chain lightning won't cast, supercharge won't cast (target error?) - it worked before during debugging. +SDComment: chain lightning won't cast, supercharge don't work (auras don't stack from different casters) SDCategory: Ulduar - Ulduar EndScriptData */ @@ -33,6 +33,7 @@ enum AssemblySpells // General SPELL_SUPERCHARGE = 61920, SPELL_BERSERK = 47008, // Hard enrage, don't know the correct ID. + SPELL_KILL_CREDIT = 65195, // spell_dbc // Steelbreaker SPELL_HIGH_VOLTAGE = 61890, @@ -45,12 +46,9 @@ enum AssemblySpells SPELL_SHIELD_OF_RUNES = 62274, SPELL_SHIELD_OF_RUNES_BUFF = 62277, SPELL_SUMMON_RUNE_OF_POWER = 63513, - SPELL_RUNE_OF_POWER = 61974, SPELL_RUNE_OF_DEATH = 62269, SPELL_RUNE_OF_SUMMONING = 62273, // This is the spell that summons the rune - SPELL_RUNE_OF_SUMMONING_VIS = 62019, // Visual SPELL_RUNE_OF_SUMMONING_SUMMON = 62020, // Spell that summons - SPELL_LIGHTNING_ELEMENTAL_PASSIVE = 62052, // Stormcaller Brundir SPELL_CHAIN_LIGHTNING = 61879, @@ -59,7 +57,7 @@ enum AssemblySpells SPELL_LIGHTNING_TENDRILS_10M = 61887, SPELL_LIGHTNING_TENDRILS_25M = 63486, SPELL_LIGHTNING_TENDRILS_VISUAL = 61883, - SPELL_STORMSHIELD = 64187, + SPELL_STORMSHIELD = 64187 }; enum AssemblyEvents @@ -88,115 +86,50 @@ enum AssemblyEvents EVENT_ENDFLIGHT = 15, EVENT_GROUND = 16, EVENT_LAND = 17, - EVENT_MOVE_POSITION = 18, + EVENT_MOVE_POSITION = 18 }; enum AssemblyActions { - ACTION_STEELBREAKER = 0, - ACTION_MOLGEIM = 1, - ACTION_BRUNDIR = 2, - ACTION_ADD_CHARGE = 3, + ACTION_SUPERCHARGE = 1, + ACTION_ADD_CHARGE = 2 }; enum AssemblyYells { - SAY_STEELBREAKER_AGGRO = -1603020, - SAY_STEELBREAKER_SLAY_1 = -1603021, - SAY_STEELBREAKER_SLAY_2 = -1603022, - SAY_STEELBREAKER_POWER = -1603023, - SAY_STEELBREAKER_DEATH_1 = -1603024, - SAY_STEELBREAKER_DEATH_2 = -1603025, - SAY_STEELBREAKER_BERSERK = -1603026, - - SAY_MOLGEIM_AGGRO = -1603030, - SAY_MOLGEIM_SLAY_1 = -1603031, - SAY_MOLGEIM_SLAY_2 = -1603032, - SAY_MOLGEIM_RUNE_DEATH = -1603033, - SAY_MOLGEIM_SUMMON = -1603034, - SAY_MOLGEIM_DEATH_1 = -1603035, - SAY_MOLGEIM_DEATH_2 = -1603036, - SAY_MOLGEIM_BERSERK = -1603037, - - SAY_BRUNDIR_AGGRO = -1603040, - SAY_BRUNDIR_SLAY_1 = -1603041, - SAY_BRUNDIR_SLAY_2 = -1603042, - SAY_BRUNDIR_SPECIAL = -1603043, - SAY_BRUNDIR_FLIGHT = -1603044, - SAY_BRUNDIR_DEATH_1 = -1603045, - SAY_BRUNDIR_DEATH_2 = -1603046, - SAY_BRUNDIR_BERSERK = -1603047, + SAY_STEELBREAKER_AGGRO = 0, + SAY_STEELBREAKER_SLAY = 1, + SAY_STEELBREAKER_POWER = 2, + SAY_STEELBREAKER_DEATH = 3, + SAY_STEELBREAKER_ENCOUNTER_DEFEATED = 4, + SAY_STEELBREAKER_BERSERK = 5, + + SAY_MOLGEIM_AGGRO = 0, + SAY_MOLGEIM_SLAY = 1, + SAY_MOLGEIM_RUNE_DEATH = 2, + SAY_MOLGEIM_SUMMON = 3, + SAY_MOLGEIM_DEATH = 4, + SAY_MOLGEIM_ENCOUNTER_DEFEATED = 5, + SAY_MOLGEIM_BERSERK = 6, + + SAY_BRUNDIR_AGGRO = 0, + SAY_BRUNDIR_SLAY = 1, + SAY_BRUNDIR_SPECIAL = 2, + SAY_BRUNDIR_FLIGHT = 3, + SAY_BRUNDIR_DEATH = 4, + SAY_BRUNDIR_ENCOUNTER_DEFEATED = 5, + SAY_BRUNDIR_BERSERK = 6, + EMOTE_BRUNDIR_OVERLOAD = 7 }; enum AssemblyNPCs { - NPC_WORLD_TRIGGER = 22515, + NPC_WORLD_TRIGGER = 22515 }; -#define EMOTE_OVERLOAD "Stormcaller Brundir begins to Overload!" // Move it to DB #define FLOOR_Z 427.28f #define FINAL_FLIGHT_Z 435.0f -bool IsEncounterComplete(InstanceScript* instance, Creature* me) -{ - if (!instance || !me) - return false; - - for (uint8 i = 0; i < 3; ++i) - { - uint64 guid = instance->GetData64(BOSS_STEELBREAKER + i); - if (!guid) - return false; - - if (Creature* boss = ObjectAccessor::GetCreature(*me, guid)) - { - if (boss->isAlive()) - return false; - } - else - return false; - } - - return true; -} - -void RespawnEncounter(InstanceScript* instance, Creature* me) -{ - for (uint8 i = 0; i < 3; ++i) - { - uint64 guid = instance->GetData64(BOSS_STEELBREAKER + i); - if (!guid) - continue; - - if (Creature* boss = ObjectAccessor::GetCreature(*me, guid)) - { - if (!boss->isAlive()) - { - boss->Respawn(); - boss->GetMotionMaster()->MoveTargetedHome(); - } - } - } -} - -void StartEncounter(InstanceScript* instance, Creature* me, Unit* /*target*/) -{ - if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == IN_PROGRESS) - return; // Prevent recursive calls - - instance->SetBossState(BOSS_ASSEMBLY_OF_IRON, IN_PROGRESS); - - for (uint8 i = 0; i < 3; ++i) - { - uint64 guid = instance->GetData64(BOSS_STEELBREAKER + i); - if (!guid) - continue; - - if (Creature* boss = ObjectAccessor::GetCreature(*me, guid)) - boss->SetInCombatWithZone(); - } -} - class boss_steelbreaker : public CreatureScript { public: @@ -204,12 +137,8 @@ class boss_steelbreaker : public CreatureScript struct boss_steelbreakerAI : public BossAI { - boss_steelbreakerAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) - { - instance = me->GetInstanceScript(); - } + boss_steelbreakerAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) { } - InstanceScript* instance; uint32 phase; void Reset() @@ -217,14 +146,12 @@ class boss_steelbreaker : public CreatureScript _Reset(); phase = 0; me->RemoveAllAuras(); - RespawnEncounter(instance, me); } - void EnterCombat(Unit* who) + void EnterCombat(Unit* /*who*/) { - StartEncounter(instance, me, who); - DoScriptText(SAY_STEELBREAKER_AGGRO, me); - DoZoneInCombat(); + _EnterCombat(); + Talk(SAY_STEELBREAKER_AGGRO); DoCast(me, SPELL_HIGH_VOLTAGE); events.SetPhase(++phase); events.ScheduleEvent(EVENT_BERSERK, 900000); @@ -235,8 +162,8 @@ class boss_steelbreaker : public CreatureScript { switch (action) { - case ACTION_STEELBREAKER: - me->SetHealth(me->GetMaxHealth()); + case ACTION_SUPERCHARGE: + me->SetFullHealth(); me->AddAura(SPELL_SUPERCHARGE, me); events.SetPhase(++phase); events.RescheduleEvent(EVENT_FUSION_PUNCH, 15000); @@ -253,29 +180,33 @@ class boss_steelbreaker : public CreatureScript void JustDied(Unit* /*killer*/) { - DoScriptText(RAND(SAY_STEELBREAKER_DEATH_1, SAY_STEELBREAKER_DEATH_2), me); - if (IsEncounterComplete(instance, me)) + _JustDied(); + + if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == DONE) { - instance->SetBossState(BOSS_ASSEMBLY_OF_IRON, DONE); - instance->SetBossState(BOSS_STEELBREAKER, DONE); - instance->SetBossState(BOSS_MOLGEIM, DONE); - instance->SetBossState(BOSS_BRUNDIR, DONE); + DoCastAOE(SPELL_KILL_CREDIT); + Talk(SAY_STEELBREAKER_ENCOUNTER_DEFEATED); } else + { me->SetLootRecipient(NULL); + Talk(SAY_STEELBREAKER_DEATH); + //DoCastAOE(SPELL_SUPERCHARGE, true); - if (Creature* Brundir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRUNDIR))) - if (Brundir->isAlive()) - Brundir->AI()->DoAction(ACTION_BRUNDIR); + if (Creature* Brundir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BRUNDIR))) + if (Brundir->isAlive()) + Brundir->AI()->DoAction(ACTION_SUPERCHARGE); - if (Creature* Molgeim = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MOLGEIM))) - if (Molgeim->isAlive()) - Molgeim->AI()->DoAction(ACTION_MOLGEIM); + if (Creature* Molgeim = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOLGEIM))) + if (Molgeim->isAlive()) + Molgeim->AI()->DoAction(ACTION_SUPERCHARGE); + } } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_STEELBREAKER_SLAY_1, SAY_STEELBREAKER_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_STEELBREAKER_SLAY); if (phase == 3) DoCast(me, SPELL_ELECTRICAL_CHARGE); @@ -296,7 +227,7 @@ class boss_steelbreaker : public CreatureScript switch (eventId) { case EVENT_BERSERK: - DoScriptText(SAY_STEELBREAKER_BERSERK, me); + Talk(SAY_STEELBREAKER_BERSERK); DoCast(SPELL_BERSERK); events.CancelEvent(EVENT_BERSERK); break; @@ -311,7 +242,7 @@ class boss_steelbreaker : public CreatureScript events.ScheduleEvent(EVENT_STATIC_DISRUPTION, urand(20000, 40000)); break; case EVENT_OVERWHELMING_POWER: - DoScriptText(SAY_STEELBREAKER_POWER, me); + Talk(SAY_STEELBREAKER_POWER); DoCastVictim(SPELL_OVERWHELMING_POWER); events.ScheduleEvent(EVENT_OVERWHELMING_POWER, RAID_MODE(60000, 35000)); break; @@ -335,12 +266,8 @@ class boss_runemaster_molgeim : public CreatureScript struct boss_runemaster_molgeimAI : public BossAI { - boss_runemaster_molgeimAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) - { - instance = me->GetInstanceScript(); - } + boss_runemaster_molgeimAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) { } - InstanceScript* instance; uint32 phase; void Reset() @@ -348,14 +275,12 @@ class boss_runemaster_molgeim : public CreatureScript _Reset(); phase = 0; me->RemoveAllAuras(); - RespawnEncounter(instance, me); } - void EnterCombat(Unit* who) + void EnterCombat(Unit* /*who*/) { - StartEncounter(instance, me, who); - DoScriptText(SAY_MOLGEIM_AGGRO, me); - DoZoneInCombat(); + _EnterCombat(); + Talk(SAY_MOLGEIM_AGGRO); events.SetPhase(++phase); events.ScheduleEvent(EVENT_BERSERK, 900000); events.ScheduleEvent(EVENT_SHIELD_OF_RUNES, 30000); @@ -366,8 +291,9 @@ class boss_runemaster_molgeim : public CreatureScript { switch (action) { - case ACTION_MOLGEIM: - me->SetHealth(me->GetMaxHealth()); + case ACTION_SUPERCHARGE: + { + me->SetFullHealth(); me->AddAura(SPELL_SUPERCHARGE, me); events.SetPhase(++phase); events.RescheduleEvent(EVENT_SHIELD_OF_RUNES, 27000); @@ -376,35 +302,40 @@ class boss_runemaster_molgeim : public CreatureScript events.RescheduleEvent(EVENT_RUNE_OF_DEATH, 30000); if (phase >= 3) events.RescheduleEvent(EVENT_RUNE_OF_SUMMONING, urand(20000, 30000)); - break; + break; + } } } void JustDied(Unit* /*killer*/) { - DoScriptText(RAND(SAY_MOLGEIM_DEATH_1, SAY_MOLGEIM_DEATH_2), me); - if (IsEncounterComplete(instance, me)) + _JustDied(); + + if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == DONE) { - instance->SetBossState(BOSS_ASSEMBLY_OF_IRON, DONE); - instance->SetBossState(BOSS_STEELBREAKER, DONE); - instance->SetBossState(BOSS_MOLGEIM, DONE); - instance->SetBossState(BOSS_BRUNDIR, DONE); + DoCastAOE(SPELL_KILL_CREDIT); + Talk(SAY_MOLGEIM_ENCOUNTER_DEFEATED); } else + { me->SetLootRecipient(NULL); + Talk(SAY_MOLGEIM_DEATH); + //DoCastAOE(SPELL_SUPERCHARGE, true); - if (Creature* Brundir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRUNDIR))) - if (Brundir->isAlive()) - Brundir->AI()->DoAction(ACTION_BRUNDIR); + if (Creature* Brundir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BRUNDIR))) + if (Brundir->isAlive()) + Brundir->AI()->DoAction(ACTION_SUPERCHARGE); - if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_STEELBREAKER))) - if (Steelbreaker->isAlive()) - Steelbreaker->AI()->DoAction(ACTION_STEELBREAKER); + if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STEELBREAKER))) + if (Steelbreaker->isAlive()) + Steelbreaker->AI()->DoAction(ACTION_SUPERCHARGE); + } } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_MOLGEIM_SLAY_1, SAY_MOLGEIM_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_MOLGEIM_SLAY); } void UpdateAI(uint32 const diff) @@ -422,28 +353,27 @@ class boss_runemaster_molgeim : public CreatureScript switch (eventId) { case EVENT_BERSERK: - DoScriptText(SAY_MOLGEIM_BERSERK, me); + Talk(SAY_MOLGEIM_BERSERK); DoCast(SPELL_BERSERK); events.CancelEvent(EVENT_BERSERK); break; case EVENT_RUNE_OF_POWER: { - Unit* target = NULL; + Unit* target = me; switch (urand(0, 2)) { - case 0: - target = me; - break; case 1: - if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_STEELBREAKER))) + if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STEELBREAKER))) if (Steelbreaker->isAlive()) target = Steelbreaker; break; case 2: - if (Creature* Brundir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_STEELBREAKER))) + if (Creature* Brundir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STEELBREAKER))) if (Brundir->isAlive()) target = Brundir; break; + default: + break; } DoCast(target, SPELL_SUMMON_RUNE_OF_POWER); events.ScheduleEvent(EVENT_RUNE_OF_POWER, 60000); @@ -454,13 +384,13 @@ class boss_runemaster_molgeim : public CreatureScript events.ScheduleEvent(EVENT_SHIELD_OF_RUNES, urand(27000, 34000)); break; case EVENT_RUNE_OF_DEATH: - DoScriptText(SAY_MOLGEIM_RUNE_DEATH, me); + Talk(SAY_MOLGEIM_RUNE_DEATH); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_RUNE_OF_DEATH); events.ScheduleEvent(EVENT_RUNE_OF_DEATH, urand(30000, 40000)); break; case EVENT_RUNE_OF_SUMMONING: - DoScriptText(SAY_MOLGEIM_SUMMON, me); + Talk(SAY_MOLGEIM_SUMMON); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_RUNE_OF_SUMMONING); events.ScheduleEvent(EVENT_RUNE_OF_SUMMONING, urand(30000, 45000)); @@ -478,93 +408,6 @@ class boss_runemaster_molgeim : public CreatureScript } }; -class mob_rune_of_power : public CreatureScript -{ - public: - mob_rune_of_power() : CreatureScript("mob_rune_of_power") { } - - struct mob_rune_of_powerAI : public ScriptedAI - { - mob_rune_of_powerAI(Creature* creature) : ScriptedAI(creature) - { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->setFaction(16); // Same faction as bosses - DoCast(SPELL_RUNE_OF_POWER); - - me->DespawnOrUnsummon(60000); - } - }; - - CreatureAI* GetAI(Creature* creature) const - { - return new mob_rune_of_powerAI(creature); - } -}; - -class mob_lightning_elemental : public CreatureScript -{ - public: - mob_lightning_elemental() : CreatureScript("mob_lightning_elemental") { } - - struct mob_lightning_elementalAI : public ScriptedAI - { - mob_lightning_elementalAI(Creature* creature) : ScriptedAI(creature) - { - me->SetInCombatWithZone(); - me->AddAura(SPELL_LIGHTNING_ELEMENTAL_PASSIVE, me); - } - - // Nothing to do here, just let the creature chase players and procflags == 2 on the applied aura will trigger explosion - }; - - CreatureAI* GetAI(Creature* creature) const - { - return new mob_lightning_elementalAI(creature); - } -}; - -class mob_rune_of_summoning : public CreatureScript -{ - public: - mob_rune_of_summoning() : CreatureScript("mob_rune_of_summoning") { } - - struct mob_rune_of_summoningAI : public ScriptedAI - { - mob_rune_of_summoningAI(Creature* creature) : ScriptedAI(creature) - { - me->AddAura(SPELL_RUNE_OF_SUMMONING_VIS, me); - summonCount = 0; - summonTimer = 2000; - } - - uint32 summonCount; - uint32 summonTimer; - - void UpdateAI(uint32 const diff) - { - if (summonTimer <= diff) - SummonLightningElemental(); - else - summonTimer -= diff; - } - - void SummonLightningElemental() - { - me->CastSpell(me, SPELL_RUNE_OF_SUMMONING_SUMMON, false); - if (++summonCount == 10) // TODO: Find out if this amount is right - me->DespawnOrUnsummon(); - else - summonTimer = 2000; // TODO: Find out of timer is right - } - }; - - CreatureAI* GetAI(Creature* creature) const - { - return new mob_rune_of_summoningAI(creature); - } -}; - class boss_stormcaller_brundir : public CreatureScript { public: @@ -572,12 +415,8 @@ class boss_stormcaller_brundir : public CreatureScript struct boss_stormcaller_brundirAI : public BossAI { - boss_stormcaller_brundirAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) - { - instance = me->GetInstanceScript(); - } + boss_stormcaller_brundirAI(Creature* creature) : BossAI(creature, BOSS_ASSEMBLY_OF_IRON) { } - InstanceScript* instance; uint32 phase; void Reset() @@ -587,15 +426,13 @@ class boss_stormcaller_brundir : public CreatureScript me->RemoveAllAuras(); me->SetDisableGravity(false); me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false); // Should be interruptable unless overridden by spell (Overload) - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default - RespawnEncounter(instance, me); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default } - void EnterCombat(Unit* who) + void EnterCombat(Unit* /*who*/) { - StartEncounter(instance, me, who); - DoScriptText(SAY_BRUNDIR_AGGRO, me); - DoZoneInCombat(); + _EnterCombat(); + Talk(SAY_BRUNDIR_AGGRO); events.SetPhase(++phase); events.ScheduleEvent(EVENT_MOVE_POSITION, 1000); events.ScheduleEvent(EVENT_BERSERK, 900000); @@ -607,8 +444,9 @@ class boss_stormcaller_brundir : public CreatureScript { switch (action) { - case ACTION_BRUNDIR: - me->SetHealth(me->GetMaxHealth()); + case ACTION_SUPERCHARGE: + { + me->SetFullHealth(); me->AddAura(SPELL_SUPERCHARGE, me); events.SetPhase(++phase); events.RescheduleEvent(EVENT_CHAIN_LIGHTNING, urand(7000, 12000)); @@ -619,42 +457,46 @@ class boss_stormcaller_brundir : public CreatureScript { DoCast(me, SPELL_STORMSHIELD); events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, urand(50000, 60000)); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true); // Apply immumity to stuns + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true); // Apply immumity to stuns } - break; - + break; + } } } void JustDied(Unit* /*killer*/) { - DoScriptText(RAND(SAY_BRUNDIR_DEATH_1, SAY_BRUNDIR_DEATH_2), me); - if (IsEncounterComplete(instance, me)) + _JustDied(); + + if (instance->GetBossState(BOSS_ASSEMBLY_OF_IRON) == DONE) { - instance->SetBossState(BOSS_ASSEMBLY_OF_IRON, DONE); - instance->SetBossState(BOSS_STEELBREAKER, DONE); - instance->SetBossState(BOSS_MOLGEIM, DONE); - instance->SetBossState(BOSS_BRUNDIR, DONE); + DoCastAOE(SPELL_KILL_CREDIT); + Talk(SAY_BRUNDIR_ENCOUNTER_DEFEATED); } else + { me->SetLootRecipient(NULL); + Talk(SAY_BRUNDIR_DEATH); + //DoCastAOE(SPELL_SUPERCHARGE, true); - if (Creature* Molgeim = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MOLGEIM))) - if (Molgeim->isAlive()) - Molgeim->AI()->DoAction(ACTION_MOLGEIM); + if (Creature* Molgeim = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOLGEIM))) + if (Molgeim->isAlive()) + Molgeim->AI()->DoAction(ACTION_SUPERCHARGE); - if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_STEELBREAKER))) - if (Steelbreaker->isAlive()) - Steelbreaker->AI()->DoAction(ACTION_STEELBREAKER); + if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STEELBREAKER))) + if (Steelbreaker->isAlive()) + Steelbreaker->AI()->DoAction(ACTION_SUPERCHARGE); + } // Prevent to have Brundir somewhere in the air when he die in Air phase if (me->GetPositionZ() > FLOOR_Z) me->GetMotionMaster()->MoveFall(); } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_BRUNDIR_SLAY_1, SAY_BRUNDIR_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_BRUNDIR_SLAY); } void UpdateAI(uint32 const diff) @@ -672,7 +514,7 @@ class boss_stormcaller_brundir : public CreatureScript switch (eventId) { case EVENT_BERSERK: - DoScriptText(SAY_BRUNDIR_BERSERK, me); + Talk(SAY_BRUNDIR_BERSERK); DoCast(SPELL_BERSERK); events.CancelEvent(EVENT_BERSERK); break; @@ -682,8 +524,8 @@ class boss_stormcaller_brundir : public CreatureScript events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, urand(7000, 10000)); break; case EVENT_OVERLOAD: - me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true); - DoScriptText(SAY_BRUNDIR_SPECIAL, me); + Talk(EMOTE_BRUNDIR_OVERLOAD); + Talk(SAY_BRUNDIR_SPECIAL); DoCast(SPELL_OVERLOAD); events.ScheduleEvent(EVENT_OVERLOAD, urand(60000, 120000)); break; @@ -692,7 +534,7 @@ class boss_stormcaller_brundir : public CreatureScript events.ScheduleEvent(EVENT_LIGHTNING_WHIRL, urand(15000, 20000)); break; case EVENT_LIGHTNING_TENDRILS: - DoScriptText(SAY_BRUNDIR_FLIGHT, me); + Talk(SAY_BRUNDIR_FLIGHT); DoCast(RAID_MODE(SPELL_LIGHTNING_TENDRILS_10M, SPELL_LIGHTNING_TENDRILS_25M)); DoCast(SPELL_LIGHTNING_TENDRILS_VISUAL); me->AttackStop(); @@ -798,7 +640,7 @@ class spell_assembly_meltdown : public SpellScriptLoader void HandleInstaKill(SpellEffIndex /*effIndex*/) { if (InstanceScript* instance = GetCaster()->GetInstanceScript()) - if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(BOSS_STEELBREAKER))) + if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_STEELBREAKER))) Steelbreaker->AI()->DoAction(ACTION_ADD_CHARGE); } @@ -814,14 +656,53 @@ class spell_assembly_meltdown : public SpellScriptLoader } }; +class spell_assembly_rune_of_summoning : public SpellScriptLoader +{ + public: + spell_assembly_rune_of_summoning() : SpellScriptLoader("spell_assembly_rune_of_summoning") { } + + class spell_assembly_rune_of_summoning_AuraScript : public AuraScript + { + PrepareAuraScript(spell_assembly_rune_of_summoning_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_RUNE_OF_SUMMONING_SUMMON)) + return false; + return true; + } + + void HandlePeriodic(AuraEffect const* aurEff) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_RUNE_OF_SUMMONING_SUMMON, true, NULL, aurEff, GetTarget()->isSummon() ? GetTarget()->ToTempSummon()->GetSummonerGUID() : 0); + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (TempSummon* summ = GetTarget()->ToTempSummon()) + summ->DespawnOrUnsummon(1); + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_assembly_rune_of_summoning_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + OnEffectRemove += AuraEffectRemoveFn(spell_assembly_rune_of_summoning_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_assembly_rune_of_summoning_AuraScript(); + } +}; + void AddSC_boss_assembly_of_iron() { new boss_steelbreaker(); new boss_runemaster_molgeim(); new boss_stormcaller_brundir(); - new mob_lightning_elemental(); - new mob_rune_of_summoning(); - new mob_rune_of_power(); new spell_shield_of_runes(); new spell_assembly_meltdown(); + new spell_assembly_rune_of_summoning(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index bfe158051b1..bd063877d39 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -76,16 +76,12 @@ enum AuriayaEvents enum AuriayaYells { - // Yells - SAY_AGGRO = -1603050, - SAY_SLAY_1 = -1603051, - SAY_SLAY_2 = -1603052, - SAY_DEATH = -1603053, - SAY_BERSERK = -1603054, - - // Emotes - EMOTE_FEAR = -1603055, - EMOTE_DEFENDER = -1603056, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_BERSERK = 3, + EMOTE_FEAR = 4, + EMOTE_DEFENDER = 5 }; enum AuriayaActions @@ -121,7 +117,7 @@ class boss_auriaya : public CreatureScript void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_SCREECH, urand(45000, 65000)); events.ScheduleEvent(EVENT_BLAST, urand(20000, 25000)); @@ -131,9 +127,10 @@ class boss_auriaya : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 600000); } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void JustSummoned(Creature* summoned) @@ -206,8 +203,8 @@ class boss_auriaya : public CreatureScript void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); _JustDied(); + Talk(SAY_DEATH); } void UpdateAI(uint32 const diff) @@ -229,7 +226,7 @@ class boss_auriaya : public CreatureScript events.ScheduleEvent(EVENT_SCREECH, urand(40000, 60000)); break; case EVENT_TERRIFYING: - DoScriptText(EMOTE_FEAR, me); + Talk(EMOTE_FEAR); DoCast(SPELL_TERRIFYING_SCREECH); events.ScheduleEvent(EVENT_TERRIFYING, urand(20000, 30000)); break; @@ -238,7 +235,7 @@ class boss_auriaya : public CreatureScript events.ScheduleEvent(EVENT_BLAST, urand(25000, 35000)); break; case EVENT_DEFENDER: - DoScriptText(EMOTE_DEFENDER, me); + Talk(EMOTE_DEFENDER); DoCast(SPELL_DEFENDER_TRIGGER); if (Creature* trigger = me->FindNearestCreature(NPC_FERAL_DEFENDER_TRIGGER, 15.0f, true)) DoCast(trigger, SPELL_ACTIVATE_DEFENDER, true); @@ -262,7 +259,7 @@ class boss_auriaya : public CreatureScript break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK, true); - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); events.CancelEvent(EVENT_BERSERK); break; } @@ -296,17 +293,17 @@ class npc_auriaya_seeping_trigger : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() - { - me->DespawnOrUnsummon(600000); - DoCast(me, SPELL_SEEPING_ESSENCE); - } + void Reset() + { + me->DespawnOrUnsummon(600000); + DoCast(me, SPELL_SEEPING_ESSENCE); + } - void UpdateAI(uint32 const /*diff*/) - { - if (instance->GetBossState(BOSS_AURIAYA) != IN_PROGRESS) - me->DespawnOrUnsummon(); - } + void UpdateAI(uint32 const /*diff*/) + { + if (instance->GetBossState(BOSS_AURIAYA) != IN_PROGRESS) + me->DespawnOrUnsummon(); + } private: InstanceScript* instance; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index a26f5763472..921d67d6d65 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -141,9 +141,6 @@ enum Vehicles VEHICLE_DEMOLISHER = 33109, }; -#define EMOTE_PURSUE "Flame Leviathan pursues $N." -#define EMOTE_OVERLOAD "Flame Leviathan's circuits overloaded." -#define EMOTE_REPAIR "Automatic repair sequence initiated." #define DATA_SHUTOUT 29112912 // 2911, 2912 are achievement IDs #define DATA_ORBIT_ACHIEVEMENTS 1 #define VEHICLE_SPAWNS 5 @@ -151,22 +148,21 @@ enum Vehicles enum Yells { - SAY_AGGRO = -1603060, - SAY_SLAY = -1603061, - SAY_DEATH = -1603062, - SAY_TARGET_1 = -1603063, - SAY_TARGET_2 = -1603064, - SAY_TARGET_3 = -1603065, - SAY_HARDMODE = -1603066, - SAY_TOWER_NONE = -1603067, - SAY_TOWER_FROST = -1603068, - SAY_TOWER_FLAME = -1603069, - SAY_TOWER_NATURE = -1603070, - SAY_TOWER_STORM = -1603071, - SAY_PLAYER_RIDING = -1603072, - SAY_OVERLOAD_1 = -1603073, - SAY_OVERLOAD_2 = -1603074, - SAY_OVERLOAD_3 = -1603075, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_TARGET = 3, + SAY_HARDMODE = 4, + SAY_TOWER_NONE = 5, + SAY_TOWER_FROST = 6, + SAY_TOWER_FLAME = 7, + SAY_TOWER_NATURE = 8, + SAY_TOWER_STORM = 9, + SAY_PLAYER_RIDING = 10, + SAY_OVERLOAD = 11, + EMOTE_PURSUE = 12, + EMOTE_OVERLOAD = 13, + EMOTE_REPAIR = 14 }; enum MiscellanousData @@ -179,15 +175,8 @@ enum MiscellanousData FOUR_SEATS = 4, }; -Position const Center[]= -{ - {354.8771f, -12.90240f, 409.803650f, 0.0f}, -}; - -Position const InfernoStart[]= -{ - {390.93f, -13.91f, 409.81f, 0.0f}, -}; +Position const Center = { 354.8771f, -12.90240f, 409.803650f, 0.0f }; +Position const InfernoStart = { 390.93f, -13.91f, 409.81f, 0.0f }; Position const PosSiege[VEHICLE_SPAWNS] = { @@ -320,12 +309,12 @@ class boss_flame_leviathan : public CreatureScript } if (!towerOfLife && !towerOfFrost && !towerOfFlames && !towerOfStorms) - DoScriptText(SAY_TOWER_NONE, me); + Talk(SAY_TOWER_NONE); else - DoScriptText(SAY_HARDMODE, me); + Talk(SAY_HARDMODE); } else - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); } void JustDied(Unit* /*killer*/) @@ -334,7 +323,7 @@ class boss_flame_leviathan : public CreatureScript // Set Field Flags 67108928 = 64 | 67108864 = UNIT_FLAG_UNK_6 | UNIT_FLAG_SKINNABLE // Set DynFlags 12 // Set NPCFlags 0 - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) @@ -397,7 +386,7 @@ class boss_flame_leviathan : public CreatureScript switch (eventId) { case EVENT_PURSUE: - DoScriptText(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3), me); + Talk(SAY_TARGET); DoCast(SPELL_PURSUED); // Will select target in spellscript events.ScheduleEvent(EVENT_PURSUE, 35*IN_MILLISECONDS); break; @@ -420,8 +409,8 @@ class boss_flame_leviathan : public CreatureScript events.ScheduleEvent(EVENT_SUMMON, 2*IN_MILLISECONDS); break; case EVENT_SHUTDOWN: - DoScriptText(RAND(SAY_OVERLOAD_1, SAY_OVERLOAD_2, SAY_OVERLOAD_3), me); - me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true); + Talk(SAY_OVERLOAD); + Talk(EMOTE_OVERLOAD); me->CastSpell(me, SPELL_SYSTEMS_SHUTDOWN, true); if (Shutout) Shutout = false; @@ -429,7 +418,7 @@ class boss_flame_leviathan : public CreatureScript events.DelayEvents(20 * IN_MILLISECONDS, 0); break; case EVENT_REPAIR: - me->MonsterTextEmote(EMOTE_REPAIR, 0, true); + Talk(EMOTE_REPAIR); me->ClearUnitState(UNIT_STATE_STUNNED | UNIT_STATE_ROOT); events.ScheduleEvent(EVENT_SHUTDOWN, 150*IN_MILLISECONDS); events.CancelEvent(EVENT_REPAIR); @@ -440,12 +429,12 @@ class boss_flame_leviathan : public CreatureScript if (Creature* thorim = DoSummon(NPC_THORIM_BEACON, me, float(urand(20, 60)), 20000, TEMPSUMMON_TIMED_DESPAWN)) thorim->GetMotionMaster()->MoveRandom(100); } - DoScriptText(SAY_TOWER_STORM, me); + Talk(SAY_TOWER_STORM); events.CancelEvent(EVENT_THORIM_S_HAMMER); break; case EVENT_MIMIRON_S_INFERNO: // Tower of Flames - me->SummonCreature(NPC_MIMIRON_BEACON, InfernoStart->GetPositionX(), InfernoStart->GetPositionY(), InfernoStart->GetPositionZ()); - DoScriptText(SAY_TOWER_FLAME, me); + me->SummonCreature(NPC_MIMIRON_BEACON, InfernoStart); + Talk(SAY_TOWER_FLAME); events.CancelEvent(EVENT_MIMIRON_S_INFERNO); break; case EVENT_HODIR_S_FURY: // Tower of Frost @@ -454,11 +443,11 @@ class boss_flame_leviathan : public CreatureScript if (Creature* hodir = DoSummon(NPC_HODIR_BEACON, me, 50, 0)) hodir->GetMotionMaster()->MoveRandom(100); } - DoScriptText(SAY_TOWER_FROST, me); + Talk(SAY_TOWER_FROST); events.CancelEvent(EVENT_HODIR_S_FURY); break; case EVENT_FREYA_S_WARD: // Tower of Nature - DoScriptText(SAY_TOWER_NATURE, me); + Talk(SAY_TOWER_NATURE); for (int32 i = 0; i < 4; ++i) me->SummonCreature(NPC_FREYA_BEACON, FreyaBeacons[i]); @@ -529,8 +518,8 @@ class boss_flame_leviathan : public CreatureScript case ACTION_MOVE_TO_CENTER_POSITION: // Triggered by 2 Collossus near door if (!me->isDead()) { - me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0); - me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center + me->SetHomePosition(Center); + me->GetMotionMaster()->MoveCharge(Center.GetPositionX(), Center.GetPositionY(), Center.GetPositionZ()); // position center me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); return; @@ -593,8 +582,8 @@ class boss_flame_leviathan_seat : public CreatureScript { if (!apply) return; - else - DoScriptText(SAY_PLAYER_RIDING, me); + else if (Creature* leviathan = me->GetVehicleCreatureBase()) + leviathan->AI()->Talk(SAY_PLAYER_RIDING); if (Creature* turret = me->GetVehicleKit()->GetPassenger(SEAT_TURRET)->ToCreature()) { @@ -887,7 +876,7 @@ class npc_colossus : public CreatureScript void JustDied(Unit* /*killer*/) { - if (me->GetHomePosition().IsInDist(Center, 50.f)) + if (me->GetHomePosition().IsInDist(&Center, 50.f)) instance->SetData(DATA_COLOSSUS, instance->GetData(DATA_COLOSSUS)+1); } @@ -1187,7 +1176,7 @@ class npc_lorekeeper : public CreatureScript if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true)) { Delorah->GetMotionMaster()->MovePoint(0, Branz->GetPositionX()-4, Branz->GetPositionY(), Branz->GetPositionZ()); - //TODO DoScriptText(xxxx, Delorah, Branz); when reached at branz + //TODO Delorah->AI()->Talk(xxxx, Branz->GetGUID()); when reached at branz } } } @@ -1700,7 +1689,7 @@ class spell_pursue : public SpellScriptLoader { if (IS_PLAYER_GUID(itr->second.Passenger)) { - caster->MonsterTextEmote(EMOTE_PURSUE, itr->second.Passenger, true); + caster->AI()->Talk(EMOTE_PURSUE, itr->second.Passenger); return; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index f60922c426c..b894706e0bf 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -27,34 +27,23 @@ enum FreyaYells { // Freya - SAY_AGGRO = -1603180, - SAY_AGGRO_WITH_ELDER = -1603181, - SAY_SLAY_1 = -1603182, - SAY_SLAY_2 = -1603183, - SAY_DEATH = -1603184, - SAY_BERSERK = -1603185, - SAY_SUMMON_CONSERVATOR = -1603186, - SAY_SUMMON_TRIO = -1603187, - SAY_SUMMON_LASHERS = -1603188, - SAY_YS_HELP = -1603189, - - // Elder Brightleaf - SAY_BRIGHTLEAF_AGGRO = -1603190, - SAY_BRIGHTLEAF_SLAY_1 = -1603191, - SAY_BRIGHTLEAF_SLAY_2 = -1603192, - SAY_BRIGHTLEAF_DEATH = -1603193, - - // Elder Ironbranch - SAY_IRONBRANCH_AGGRO = -1603194, - SAY_IRONBRANCH_SLAY_1 = -1603195, - SAY_IRONBRANCH_SLAY_2 = -1603196, - SAY_IRONBRANCH_DEATH = -1603197, - - // Elder Stonebark - SAY_STONEBARK_AGGRO = -1603198, - SAY_STONEBARK_SLAY_1 = -1603199, - SAY_STONEBARK_SLAY_2 = -1603200, - SAY_STONEBARK_DEATH = -1603201, + SAY_AGGRO = 0, + SAY_AGGRO_WITH_ELDER = 1, + SAY_SLAY = 2, + SAY_DEATH = 3, + SAY_BERSERK = 4, + SAY_SUMMON_CONSERVATOR = 5, + SAY_SUMMON_TRIO = 6, + SAY_SUMMON_LASHERS = 7, + EMOTE_LIFEBINDERS_GIFT = 8, + EMOTE_ALLIES_OF_NATURE = 9, + EMOTE_GROUND_TREMOR = 10, + EMOTE_IRON_ROOTS = 11, + + // Elder Brightleaf / Elder Ironbranch / Elder Stonebark + SAY_ELDER_AGGRO = 0, + SAY_ELDER_SLAY = 1, + SAY_ELDER_DEATH = 2 }; enum FreyaSpells @@ -143,7 +132,7 @@ enum FreyaSpells // Nature Bomb SPELL_NATURE_BOMB = 64587, SPELL_OBJECT_BOMB = 64600, - SPELL_SUMMON_NATURE_BOMB = 64606, + SPELL_SUMMON_NATURE_BOMB = 64604, // Unstable Sun Beam SPELL_UNSTABLE_SUN_BEAM = 62211, @@ -159,7 +148,7 @@ enum FreyaSpells // Attuned To Nature spells SPELL_ATTUNED_TO_NATURE_2_DOSE_REDUCTION = 62524, SPELL_ATTUNED_TO_NATURE_10_DOSE_REDUCTION = 62525, - SPELL_ATTUNED_TO_NATURE_25_DOSE_REDUCTION = 62521, + SPELL_ATTUNED_TO_NATURE_25_DOSE_REDUCTION = 62521 }; enum FreyaNpcs @@ -177,13 +166,13 @@ enum FreyaNpcs NPC_IRON_ROOTS = 33088, NPC_STRENGTHENED_IRON_ROOTS = 33168, - OBJECT_NATURE_BOMB = 194902, + OBJECT_NATURE_BOMB = 194902 }; enum FreyaActions { ACTION_ELDER_DEATH = 1, - ACTION_ELDER_FREYA_KILLED = 2, + ACTION_ELDER_FREYA_KILLED = 2 }; enum FreyaEvents @@ -211,13 +200,16 @@ enum FreyaEvents // Elder Brightleaf EVENT_SOLAR_FLARE = 15, EVENT_UNSTABLE_SUN_BEAM = 16, - EVENT_FLUX = 17, + EVENT_FLUX = 17 }; -#define WAVE_TIME 60000 // Normal wave is one minute -#define TIME_DIFFERENCE 10000 // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds -#define DATA_GETTING_BACK_TO_NATURE 1 -#define DATA_KNOCK_ON_WOOD 2 +enum Misc +{ + WAVE_TIME = 60000, // Normal wave is one minute + TIME_DIFFERENCE = 10000, // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds + DATA_GETTING_BACK_TO_NATURE = 1, + DATA_KNOCK_ON_WOOD = 2 +}; class npc_iron_roots : public CreatureScript { @@ -273,9 +265,7 @@ class boss_freya : public CreatureScript struct boss_freyaAI : public BossAI { - boss_freyaAI(Creature* creature) : BossAI(creature, BOSS_FREYA) - { - } + boss_freyaAI(Creature* creature) : BossAI(creature, BOSS_FREYA) { } uint64 ElementalGUID[3][2]; @@ -316,9 +306,10 @@ class boss_freya : public CreatureScript random[n] = false; } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void DamageTaken(Unit* who, uint32& damage) @@ -369,9 +360,9 @@ class boss_freya : public CreatureScript } if (elderCount == 0) - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); else - DoScriptText(SAY_AGGRO_WITH_ELDER, me); + Talk(SAY_AGGRO_WITH_ELDER); me->CastCustomSpell(SPELL_ATTUNED_TO_NATURE, SPELLVALUE_AURA_STACK, 150, me, true); @@ -409,7 +400,7 @@ class boss_freya : public CreatureScript switch (eventId) { case EVENT_ENRAGE: - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); DoCast(me, SPELL_ENRAGE); break; case EVENT_SUNBEAM: @@ -418,17 +409,9 @@ class boss_freya : public CreatureScript events.ScheduleEvent(EVENT_SUNBEAM, urand(10000, 15000)); break; case EVENT_NATURE_BOMB: - { - // On every player - std::list<Player*> PlayerList; - Trinity::AnyPlayerInObjectRangeCheck checker(me, 50.0f); - Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(me, PlayerList, checker); - me->VisitNearbyWorldObject(50.0f, searcher); - for (std::list<Player*>::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr) - (*itr)->CastSpell(*itr, SPELL_SUMMON_NATURE_BOMB, true); + DoCastAOE(SPELL_SUMMON_NATURE_BOMB, true); events.ScheduleEvent(EVENT_NATURE_BOMB, urand(10000, 12000)); break; - } case EVENT_UNSTABLE_ENERGY: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) DoCast(target, SPELL_FREYA_UNSTABLE_SUNBEAM, true); @@ -442,15 +425,18 @@ class boss_freya : public CreatureScript events.ScheduleEvent(EVENT_NATURE_BOMB, urand(10000, 20000)); break; case EVENT_EONAR_GIFT: + Talk(EMOTE_LIFEBINDERS_GIFT); DoCast(me, SPELL_SUMMON_EONAR_GIFT); events.ScheduleEvent(EVENT_EONAR_GIFT, urand(40000, 50000)); break; case EVENT_STRENGTHENED_IRON_ROOTS: + Talk(EMOTE_IRON_ROOTS); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_ROOTS_FREYA)) target->CastSpell(target, SPELL_ROOTS_FREYA, true); // This must be casted by Target self events.ScheduleEvent(EVENT_STRENGTHENED_IRON_ROOTS, urand(12000, 20000)); break; case EVENT_GROUND_TREMOR: + Talk(EMOTE_GROUND_TREMOR); DoCastAOE(SPELL_FREYA_GROUND_TREMOR); events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(25000, 28000)); break; @@ -573,20 +559,21 @@ class boss_freya : public CreatureScript switch (GetWaveId()) { case 0: - DoScriptText(SAY_SUMMON_LASHERS, me); + Talk(SAY_SUMMON_LASHERS); for (uint8 n = 0; n < 10; ++n) DoCast(SPELL_SUMMON_LASHERS); break; case 1: - DoScriptText(SAY_SUMMON_TRIO, me); + Talk(SAY_SUMMON_TRIO); DoCast(SPELL_SUMMON_TRIO); trioWaveCount++; break; case 2: - DoScriptText(SAY_SUMMON_CONSERVATOR, me); + Talk(SAY_SUMMON_CONSERVATOR); DoCast(SPELL_SUMMON_ANCIENT_CONSERVATOR); break; } + Talk(EMOTE_ALLIES_OF_NATURE); waveCount++; } @@ -602,7 +589,7 @@ class boss_freya : public CreatureScript me->CastSpell((Unit*)NULL, summonSpell[me->GetMap()->GetDifficulty()][elderCount], true); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); me->SetReactState(REACT_PASSIVE); _JustDied(); me->RemoveAllAuras(); @@ -705,17 +692,18 @@ class boss_elder_brightleaf : public CreatureScript lumberjack = false; } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_BRIGHTLEAF_SLAY_1, SAY_BRIGHTLEAF_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_ELDER_SLAY); } void JustDied(Unit* killer) { _JustDied(); - DoScriptText(SAY_BRIGHTLEAF_DEATH, me); + Talk(SAY_ELDER_DEATH); - if (killer && killer->GetTypeId() == TYPEID_PLAYER) + if (killer->GetTypeId() == TYPEID_PLAYER) { if (Creature* Ironbranch = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_IRONBRANCH))) Ironbranch->AI()->DoAction(ACTION_ELDER_DEATH); @@ -729,7 +717,7 @@ class boss_elder_brightleaf : public CreatureScript { _EnterCombat(); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) - DoScriptText(SAY_BRIGHTLEAF_AGGRO, me); + Talk(SAY_ELDER_AGGRO); } void UpdateAI(uint32 const diff) @@ -825,17 +813,18 @@ class boss_elder_stonebark : public CreatureScript lumberjack = false; } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_STONEBARK_SLAY_1, SAY_STONEBARK_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_ELDER_SLAY); } void JustDied(Unit* killer) { _JustDied(); - DoScriptText(SAY_STONEBARK_DEATH, me); + Talk(SAY_ELDER_DEATH); - if (killer && killer->GetTypeId() == TYPEID_PLAYER) + if (killer->GetTypeId() == TYPEID_PLAYER) { if (Creature* Ironbranch = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_IRONBRANCH))) Ironbranch->AI()->DoAction(ACTION_ELDER_DEATH); @@ -849,7 +838,7 @@ class boss_elder_stonebark : public CreatureScript { _EnterCombat(); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) - DoScriptText(SAY_STONEBARK_AGGRO, me); + Talk(SAY_ELDER_AGGRO); } void DamageTaken(Unit* who, uint32& damage) @@ -951,17 +940,18 @@ class boss_elder_ironbranch : public CreatureScript lumberjack = false; } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_IRONBRANCH_SLAY_1, SAY_IRONBRANCH_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_ELDER_SLAY); } void JustDied(Unit* killer) { _JustDied(); - DoScriptText(SAY_IRONBRANCH_DEATH, me); + Talk(SAY_ELDER_DEATH); - if (killer && killer->GetTypeId() == TYPEID_PLAYER) + if (killer->GetTypeId() == TYPEID_PLAYER) { if (Creature* Brightleaf = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRIGHTLEAF))) Brightleaf->AI()->DoAction(ACTION_ELDER_DEATH); @@ -975,7 +965,7 @@ class boss_elder_ironbranch : public CreatureScript { _EnterCombat(); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) - DoScriptText(SAY_IRONBRANCH_AGGRO, me); + Talk(SAY_ELDER_AGGRO); } void UpdateAI(uint32 const diff) @@ -1530,19 +1520,17 @@ class npc_unstable_sun_beam : public CreatureScript class spell_freya_attuned_to_nature_dose_reduction : public SpellScriptLoader { public: - spell_freya_attuned_to_nature_dose_reduction() : SpellScriptLoader("spell_freya_attuned_to_nature_dose_reduction") - { - } + spell_freya_attuned_to_nature_dose_reduction() : SpellScriptLoader("spell_freya_attuned_to_nature_dose_reduction") { } class spell_freya_attuned_to_nature_dose_reduction_SpellScript : public SpellScript { - PrepareSpellScript(spell_freya_attuned_to_nature_dose_reduction_SpellScript) + PrepareSpellScript(spell_freya_attuned_to_nature_dose_reduction_SpellScript); void HandleScript(SpellEffIndex /*effIndex*/) { Unit* target = GetHitUnit(); - SpellInfo const* spellInfo = GetSpellInfo(); - switch (spellInfo->Id) + + switch (GetSpellInfo()->Id) { case SPELL_ATTUNED_TO_NATURE_2_DOSE_REDUCTION: if (target->HasAura(GetEffectValue())) @@ -1579,9 +1567,7 @@ class spell_freya_attuned_to_nature_dose_reduction : public SpellScriptLoader class spell_freya_iron_roots : public SpellScriptLoader { public: - spell_freya_iron_roots() : SpellScriptLoader("spell_freya_iron_roots") - { - } + spell_freya_iron_roots() : SpellScriptLoader("spell_freya_iron_roots") { } class spell_freya_iron_roots_SpellScript : public SpellScript { @@ -1614,80 +1600,44 @@ class spell_freya_iron_roots : public SpellScriptLoader class achievement_getting_back_to_nature : public AchievementCriteriaScript { public: - achievement_getting_back_to_nature() : AchievementCriteriaScript("achievement_getting_back_to_nature") - { - } + achievement_getting_back_to_nature() : AchievementCriteriaScript("achievement_getting_back_to_nature") { } bool OnCheck(Player* /*player*/, Unit* target) { - if (!target) - return false; - - if (Creature* Freya = target->ToCreature()) - if (Freya->AI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25) - return true; - - return false; + return target && target->GetAI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25; } }; class achievement_knock_on_wood : public AchievementCriteriaScript { public: - achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood") - { - } + achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood") { } bool OnCheck(Player* /*player*/, Unit* target) { - if (!target) - return false; - - if (Creature* Freya = target->ToCreature()) - if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 1) - return true; - - return false; + return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 1; } }; class achievement_knock_knock_on_wood : public AchievementCriteriaScript { public: - achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood") - { - } + achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood") { } bool OnCheck(Player* /*player*/, Unit* target) { - if (!target) - return false; - - if (Creature* Freya = target->ToCreature()) - if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 2) - return true; - - return false; + return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 2; } }; class achievement_knock_knock_knock_on_wood : public AchievementCriteriaScript { public: - achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood") - { - } + achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood") { } bool OnCheck(Player* /*player*/, Unit* target) { - if (!target) - return false; - - if (Creature* Freya = target->ToCreature()) - if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) == 3) - return true; - - return false; + return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) == 3; } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 1232c1b9051..43d203daedf 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -24,21 +24,22 @@ enum VezaxYells { - SAY_AGGRO = -1603290, - SAY_SLAY_1 = -1603291, - SAY_SLAY_2 = -1603292, - SAY_SURGE_OF_DARKNESS = -1603293, - SAY_DEATH = -1603294, - SAY_BERSERK = -1603295, - SAY_HARDMODE = -1603296, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_SURGE_OF_DARKNESS = 2, + SAY_DEATH = 3, + SAY_BERSERK = 4, + SAY_HARDMODE = 5, }; enum VezaxEmotes { - EMOTE_VAPORS = -1603289, - EMOTE_ANIMUS = -1603297, - EMOTE_BARRIER = -1603298, - EMOTE_SURGE_OF_DARKNESS = -1603299, + EMOTE_ANIMUS = 6, + EMOTE_BARRIER = 7, + EMOTE_SURGE_OF_DARKNESS = 8, + + // Saronite Vapor + EMOTE_VAPORS = 9 }; enum VezaxSpells @@ -122,7 +123,7 @@ class boss_general_vezax : public CreatureScript { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DoCast(me, SPELL_AURA_OF_DESPAIR); CheckShamanisticRage(); @@ -173,8 +174,8 @@ class boss_general_vezax : public CreatureScript break; } case EVENT_SURGE_OF_DARKNESS: - DoScriptText(EMOTE_SURGE_OF_DARKNESS, me); - DoScriptText(SAY_SURGE_OF_DARKNESS, me); + Talk(EMOTE_SURGE_OF_DARKNESS); + Talk(SAY_SURGE_OF_DARKNESS); DoCast(me, SPELL_SURGE_OF_DARKNESS); events.ScheduleEvent(EVENT_SURGE_OF_DARKNESS, urand(50000, 70000)); break; @@ -183,8 +184,8 @@ class boss_general_vezax : public CreatureScript events.ScheduleEvent(EVENT_SARONITE_VAPORS, urand(30000, 35000)); if (++vaporCount == 6 && smellSaronite) { - DoScriptText(SAY_HARDMODE, me); - DoScriptText(EMOTE_BARRIER, me); + Talk(SAY_HARDMODE); + Talk(EMOTE_BARRIER); summons.DespawnAll(); DoCast(me, SPELL_SARONITE_BARRIER); DoCast(SPELL_SUMMON_SARONITE_ANIMUS); @@ -194,7 +195,7 @@ class boss_general_vezax : public CreatureScript } break; case EVENT_BERSERK: - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); DoCast(me, SPELL_BERSERK); break; } @@ -209,15 +210,16 @@ class boss_general_vezax : public CreatureScript shadowDodger = false; } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_AURA_OF_DESPAIR); } @@ -316,7 +318,6 @@ class boss_saronite_animus : public CreatureScript boss_saronite_animusAI(Creature* creature) : ScriptedAI(creature) { instance = me->GetInstanceScript(); - DoScriptText(EMOTE_BARRIER, me); } void Reset() @@ -378,7 +379,7 @@ class npc_saronite_vapors : public CreatureScript { npc_saronite_vaporsAI(Creature* creature) : ScriptedAI(creature) { - DoScriptText(EMOTE_VAPORS, me); + Talk(EMOTE_VAPORS); instance = me->GetInstanceScript(); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index c9fe1c5b707..8247236016c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -32,18 +32,15 @@ enum HodirYells { - SAY_AGGRO = -1603210, - SAY_SLAY_1 = -1603211, - SAY_SLAY_2 = -1603212, - SAY_FLASH_FREEZE = -1603213, - SAY_STALACTITE = -1603214, - SAY_DEATH = -1603215, - SAY_BERSERK = -1603216, - SAY_YS_HELP = -1603217, - SAY_HARD_MODE_FAILED = -1603218, - - EMOTE_FREEZE = -1603209, - EMOTE_BLOWS = -1603219, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_FLASH_FREEZE = 2, + SAY_STALACTITE = 3, + SAY_DEATH = 4, + SAY_BERSERK = 5, + SAY_HARD_MODE_FAILED = 6, + EMOTE_FREEZE = 7, + EMOTE_BLOWS = 8 }; enum HodirSpells @@ -70,6 +67,8 @@ enum HodirSpells SPELL_ICE_SHARD = 62457, SPELL_ICE_SHARD_HIT = 65370, + SPELL_KILL_CREDIT = 64899, + // Druids SPELL_WRATH = 62793, SPELL_STARLIGHT = 62807, @@ -329,7 +328,7 @@ class boss_hodir : public CreatureScript void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DoCast(me, SPELL_BITING_COLD, true); gettingColdInHereTimer = 1000; @@ -346,10 +345,10 @@ class boss_hodir : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 480000); } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - if (!urand(0, 3)) - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void DamageTaken(Unit* /*who*/, uint32& damage) @@ -357,7 +356,7 @@ class boss_hodir : public CreatureScript if (damage >= me->GetHealth()) { damage = 0; - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (iCouldSayThatThisCacheWasRare) instance->SetData(DATA_HODIR_RARE_CACHE, 1); @@ -376,6 +375,8 @@ class boss_hodir : public CreatureScript me->setFaction(35); me->DespawnOrUnsummon(10000); + DoCastAOE(SPELL_KILL_CREDIT); + _JustDied(); } } @@ -404,8 +405,8 @@ class boss_hodir : public CreatureScript events.ScheduleEvent(EVENT_ICICLE, RAID_MODE(5500, 3500)); break; case EVENT_FLASH_FREEZE: - DoScriptText(SAY_FLASH_FREEZE, me); - DoScriptText(EMOTE_FREEZE, me); + Talk(SAY_FLASH_FREEZE); + Talk(EMOTE_FREEZE); for (uint8 n = 0; n < RAID_MODE(2, 3); ++n) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) target->CastSpell(target, SPELL_ICICLE_SNOWDRIFT, true); @@ -424,19 +425,19 @@ class boss_hodir : public CreatureScript break; } case EVENT_BLOWS: - DoScriptText(SAY_STALACTITE, me); - DoScriptText(EMOTE_BLOWS, me); + Talk(SAY_STALACTITE); + Talk(EMOTE_BLOWS); DoCast(me, SPELL_FROZEN_BLOWS); events.ScheduleEvent(EVENT_BLOWS, urand(60000, 65000)); break; case EVENT_RARE_CACHE: - DoScriptText(SAY_HARD_MODE_FAILED, me); + Talk(SAY_HARD_MODE_FAILED); iCouldSayThatThisCacheWasRare = false; instance->SetData(DATA_HODIR_RARE_CACHE, 0); events.CancelEvent(EVENT_RARE_CACHE); break; case EVENT_BERSERK: - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); DoCast(me, SPELL_BERSERK, true); events.CancelEvent(EVENT_BERSERK); break; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index c0fb4e3ecc8..c8789d680ed 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -24,16 +24,14 @@ enum Yells { - SAY_AGGRO = -1603220, - SAY_SLAY_1 = -1603221, - SAY_SLAY_2 = -1603222, - SAY_DEATH = -1603223, - SAY_SUMMON = -1603224, - SAY_SLAG_POT = -1603225, - SAY_SCORCH_1 = -1603226, - SAY_SCORCH_2 = -1603227, - SAY_BERSERK = -1603228, - EMOTE_JETS = -1603229, + SAY_AGGRO = 0, + SAY_SUMMON = 1, + SAY_SLAG_POT = 2, + SAY_SCORCH = 3, + SAY_SLAY = 4, + SAY_BERSERK = 5, + SAY_DEATH = 6, + EMOTE_JETS = 7 }; enum Spells @@ -135,7 +133,7 @@ class boss_ignis : public CreatureScript void EnterCombat(Unit* /*who*/) { _EnterCombat(); - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_JET, 30000); events.ScheduleEvent(EVENT_SCORCH, 25000); events.ScheduleEvent(EVENT_SLAG_POT, 35000); @@ -151,7 +149,7 @@ class boss_ignis : public CreatureScript void JustDied(Unit* /*killer*/) { _JustDied(); - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); } uint32 GetData(uint32 type) const @@ -162,10 +160,10 @@ class boss_ignis : public CreatureScript return 0; } - void KilledUnit(Unit* /*victim*/) + void KilledUnit(Unit* who) { - if (!urand(0, 4)) - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void JustSummoned(Creature* summon) @@ -210,14 +208,14 @@ class boss_ignis : public CreatureScript switch (eventId) { case EVENT_JET: - me->MonsterTextEmote(EMOTE_JETS, 0, true); + Talk(EMOTE_JETS); DoCast(me, SPELL_FLAME_JETS); events.ScheduleEvent(EVENT_JET, urand(35000, 40000)); break; case EVENT_SLAG_POT: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) { - DoScriptText(SAY_SLAG_POT, me); + Talk(SAY_SLAG_POT); _slagPotGUID = target->GetGUID(); DoCast(target, SPELL_GRAB); events.DelayEvents(3000); @@ -252,14 +250,14 @@ class boss_ignis : public CreatureScript } break; case EVENT_SCORCH: - DoScriptText(RAND(SAY_SCORCH_1, SAY_SCORCH_2), me); + Talk(SAY_SCORCH); if (Unit* target = me->getVictim()) me->SummonCreature(NPC_GROUND_SCORCH, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 45000); DoCast(SPELL_SCORCH); events.ScheduleEvent(EVENT_SCORCH, 25000); break; case EVENT_CONSTRUCT: - DoScriptText(SAY_SUMMON, me); + Talk(SAY_SUMMON); DoSummon(NPC_IRON_CONSTRUCT, ConstructSpawnPosition[urand(0, CONSTRUCT_SPAWN_POINTS - 1)], 30000, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); DoCast(SPELL_STRENGHT); DoCast(me, SPELL_ACTIVATE_CONSTRUCT); @@ -267,7 +265,7 @@ class boss_ignis : public CreatureScript break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK, true); - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 9c77bb298a5..c1fc0a81989 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -30,34 +30,40 @@ SDComment: TODO: Achievements SDCategory: Ulduar EndScriptData */ -#define SPELL_ARM_DEAD_DAMAGE RAID_MODE(63629, 63979) -#define SPELL_TWO_ARM_SMASH RAID_MODE(63356, 64003) -#define SPELL_ONE_ARM_SMASH RAID_MODE(63573, 64006) -#define SPELL_ARM_SWEEP RAID_MODE(63766, 63983) -#define SPELL_STONE_SHOUT RAID_MODE(63716, 64005) -#define SPELL_PETRIFY_BREATH RAID_MODE(62030, 63980) -#define SPELL_STONE_GRIP RAID_MODE(62166, 63981) -#define SPELL_STONE_GRIP_CANCEL 65594 -#define SPELL_SUMMON_RUBBLE 63633 -#define SPELL_FALLING_RUBBLE 63821 -#define SPELL_ARM_ENTER_VEHICLE 65343 -#define SPELL_ARM_ENTER_VISUAL 64753 - -#define SPELL_SUMMON_FOCUSED_EYEBEAM 63342 -#define SPELL_FOCUSED_EYEBEAM_PERIODIC RAID_MODE(63347, 63977) -#define SPELL_FOCUSED_EYEBEAM_VISUAL 63369 -#define SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT 63676 -#define SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT 63702 - -// Passive -#define SPELL_KOLOGARN_REDUCE_PARRY 64651 -#define SPELL_KOLOGARN_PACIFY 63726 -#define SPELL_KOLOGARN_UNK_0 65219 // Not found in DBC - -#define SPELL_BERSERK 47008 // guess - -#define NPC_RUBBLE_STALKER 33809 -#define NPC_ARM_SWEEP_STALKER 33661 +enum Spells +{ + SPELL_ARM_DEAD_DAMAGE = 63629, + SPELL_TWO_ARM_SMASH = 63356, + SPELL_ONE_ARM_SMASH = 63573, + SPELL_ARM_SWEEP = 63766, + SPELL_STONE_SHOUT = 63716, + SPELL_PETRIFY_BREATH = 62030, + SPELL_STONE_GRIP = 62166, + SPELL_STONE_GRIP_CANCEL = 65594, + SPELL_SUMMON_RUBBLE = 63633, + SPELL_FALLING_RUBBLE = 63821, + SPELL_ARM_ENTER_VEHICLE = 65343, + SPELL_ARM_ENTER_VISUAL = 64753, + + SPELL_SUMMON_FOCUSED_EYEBEAM = 63342, + SPELL_FOCUSED_EYEBEAM_PERIODIC = 63347, + SPELL_FOCUSED_EYEBEAM_VISUAL = 63369, + SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT = 63676, + SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT = 63702, + + // Passive + SPELL_KOLOGARN_REDUCE_PARRY = 64651, + SPELL_KOLOGARN_PACIFY = 63726, + SPELL_KOLOGARN_UNK_0 = 65219, // Not found in DBC + + SPELL_BERSERK = 47008 // guess +}; + +enum NPCs +{ + NPC_RUBBLE_STALKER = 33809, + NPC_ARM_SWEEP_STALKER = 33661 +}; enum Events { @@ -76,15 +82,15 @@ enum Events enum Yells { - SAY_AGGRO = -1603230, - SAY_SLAY_1 = -1603231, - SAY_SLAY_2 = -1603232, - SAY_LEFT_ARM_GONE = -1603233, - SAY_RIGHT_ARM_GONE = -1603234, - SAY_SHOCKWAVE = -1603235, - SAY_GRAB_PLAYER = -1603236, - SAY_DEATH = -1603237, - SAY_BERSERK = -1603238, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_LEFT_ARM_GONE = 2, + SAY_RIGHT_ARM_GONE = 3, + SAY_SHOCKWAVE = 4, + SAY_GRAB_PLAYER = 5, + SAY_DEATH = 6, + SAY_BERSERK = 7, + EMOTE_STONE_GRIP = 8 }; class boss_kologarn : public CreatureScript @@ -113,7 +119,7 @@ class boss_kologarn : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_MELEE_CHECK, 6000); events.ScheduleEvent(EVENT_SMASH, 5000); @@ -138,7 +144,7 @@ class boss_kologarn : public CreatureScript void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); DoCast(SPELL_KOLOGARN_PACIFY); me->GetMotionMaster()->MoveTargetedHome(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -146,9 +152,10 @@ class boss_kologarn : public CreatureScript _JustDied(); } - void KilledUnit(Unit* /*who*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) @@ -160,7 +167,7 @@ class boss_kologarn : public CreatureScript if (!apply && isEncounterInProgress) { who->ToCreature()->DisappearAndDie(); - DoScriptText(SAY_LEFT_ARM_GONE, me); + Talk(SAY_LEFT_ARM_GONE); events.ScheduleEvent(EVENT_RESPAWN_LEFT_ARM, 40000); } } @@ -171,7 +178,7 @@ class boss_kologarn : public CreatureScript if (!apply && isEncounterInProgress) { who->ToCreature()->DisappearAndDie(); - DoScriptText(SAY_RIGHT_ARM_GONE, me); + Talk(SAY_RIGHT_ARM_GONE); events.ScheduleEvent(EVENT_RESPAWN_RIGHT_ARM, 40000); } } @@ -272,7 +279,7 @@ class boss_kologarn : public CreatureScript break; case EVENT_ENRAGE: DoCast(SPELL_BERSERK); - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); break; case EVENT_RESPAWN_LEFT_ARM: case EVENT_RESPAWN_RIGHT_ARM: @@ -290,11 +297,12 @@ class boss_kologarn : public CreatureScript if (right) { DoCast(SPELL_STONE_GRIP); - DoScriptText(SAY_GRAB_PLAYER, me); + Talk(SAY_GRAB_PLAYER); + Talk(EMOTE_STONE_GRIP); } events.ScheduleEvent(EVENT_STONE_GRIP, 25 * IN_MILLISECONDS); + break; } - break; case EVENT_FOCUSED_EYEBEAM: if (Unit* eyebeamTargetUnit = SelectTarget(SELECT_TARGET_FARTHEST, 0, 0, true)) { @@ -404,12 +412,12 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader } // For subsequent effects - m_unitList = unitList; + _unitList = unitList; } void FillTargetsSubsequential(std::list<WorldObject*>& unitList) { - unitList = m_unitList; + unitList = _unitList; } void Register() @@ -419,8 +427,9 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ulduar_stone_grip_cast_target_SpellScript::FillTargetsSubsequential, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY); } + private: // Shared between effects - std::list<WorldObject*> m_unitList; + std::list<WorldObject*> _unitList; }; SpellScript* GetSpellScript() const @@ -625,10 +634,10 @@ class spell_kologarn_summon_focused_eyebeam : public SpellScriptLoader { PrepareSpellScript(spell_kologarn_summon_focused_eyebeam_SpellScript); - void HandleForceCast(SpellEffIndex eff) + void HandleForceCast(SpellEffIndex effIndex) { - PreventHitDefaultEffect(eff); - GetCaster()->CastSpell(GetCaster(), GetSpellInfo()->Effects[eff].TriggerSpell, true); + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true); } void Register() diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 6a4a5255293..b5c907af7f0 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -35,8 +35,7 @@ enum Yells SAY_V07TRON_ACTIVATE = 11, SAY_V07TRON_SLAY = 12, SAY_V07TRON_DEATH = 13, - SAY_BERSERK = 14, - SAY_YS_HELP = 15 + SAY_BERSERK = 14 }; enum Spells diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 5ea2678adfe..5f560ed8dd4 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -27,15 +27,22 @@ enum Says { - SAY_GREET = -1603260, - SAY_GROUND_PHASE = -1603261, - SAY_AGGRO_1 = -1603262, - SAY_AGGRO_2 = -1603263, - SAY_AGGRO_3 = -1603264, - SAY_TURRETS = -1603265, - EMOTE_HARPOON = -1603266, - EMOTE_BREATH = -1603267, - EMOTE_PERMA = -1603268, + // Expedition Commander + SAY_INTRO = 0, + SAY_GROUND_PHASE = 1, + SAY_AGGRO_2 = 2, + + // Expedition Engineer + SAY_AGGRO_1 = 0, + SAY_AGGRO_3 = 1, + SAY_TURRETS = 2, // unused + + // Razorscale Controller + EMOTE_HARPOON = 0, + + // Razorscale + EMOTE_PERMA = 0, + EMOTE_BREATH = 1 }; enum Spells @@ -245,7 +252,7 @@ class boss_razorscale_controller : public CreatureScript switch (eventId) { case EVENT_BUILD_HARPOON_1: - DoScriptText(EMOTE_HARPOON, me); + Talk(EMOTE_HARPOON); if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, 0.0f, 0.0f, 0.0f, 0.0f, uint32(me->GetRespawnTime()))) { if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon @@ -255,7 +262,7 @@ class boss_razorscale_controller : public CreatureScript } return; case EVENT_BUILD_HARPOON_2: - DoScriptText(EMOTE_HARPOON, me); + Talk(EMOTE_HARPOON); if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, 0, 0, 0, 0, uint32(me->GetRespawnTime()))) { if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) @@ -264,7 +271,7 @@ class boss_razorscale_controller : public CreatureScript } return; case EVENT_BUILD_HARPOON_3: - DoScriptText(EMOTE_HARPOON, me); + Talk(EMOTE_HARPOON); if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, 0, 0, 0, 0, uint32(me->GetRespawnTime()))) { if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) @@ -274,7 +281,7 @@ class boss_razorscale_controller : public CreatureScript } return; case EVENT_BUILD_HARPOON_4: - DoScriptText(EMOTE_HARPOON, me); + Talk(EMOTE_HARPOON); if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, 0, 0, 0, 0, uint32(me->GetRespawnTime()))) { if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) @@ -444,7 +451,7 @@ class boss_razorscale : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); me->RemoveAllAuras(); me->SetReactState(REACT_AGGRESSIVE); - DoScriptText(EMOTE_BREATH, me, 0); + Talk(EMOTE_BREATH); DoCastAOE(SPELL_FLAMEBREATH); events.CancelEvent(EVENT_BREATH); return; @@ -468,7 +475,7 @@ class boss_razorscale : public CreatureScript events.ScheduleEvent(EVENT_FLAME, 10000, 0, PHASE_PERMAGROUND); return; case EVENT_BREATH: - me->MonsterTextEmote(EMOTE_BREATH, 0, true); + Talk(EMOTE_BREATH); DoCastVictim(SPELL_FLAMEBREATH); events.ScheduleEvent(EVENT_BREATH, 20000, 0, PHASE_PERMAGROUND); return; @@ -522,7 +529,7 @@ class boss_razorscale : public CreatureScript void EnterPermaGround() { - me->MonsterTextEmote(EMOTE_PERMA, 0, true); + Talk(EMOTE_PERMA); phase = PHASE_PERMAGROUND; events.SetPhase(PHASE_PERMAGROUND); me->SetCanFly(false); @@ -608,7 +615,7 @@ class npc_expedition_commander : public CreatureScript { if (!Greet && me->IsWithinDistInMap(who, 10.0f) && who->GetTypeId() == TYPEID_PLAYER) { - DoScriptText(SAY_GREET, me); + Talk(SAY_INTRO); Greet = true; } } @@ -623,7 +630,7 @@ class npc_expedition_commander : public CreatureScript switch (action) { case ACTION_GROUND_PHASE: - DoScriptText(SAY_GROUND_PHASE, me); + Talk(SAY_GROUND_PHASE); break; case ACTION_COMMANDER_RESET: summons.clear(); @@ -653,7 +660,7 @@ class npc_expedition_commander : public CreatureScript Engineer[n]->SetHomePosition(PosEngRepair[n]); Engineer[n]->GetMotionMaster()->MoveTargetedHome(); } - Engineer[0]->MonsterYell(SAY_AGGRO_3, LANG_UNIVERSAL, 0); + Engineer[0]->AI()->Talk(SAY_AGGRO_3); Phase = 3; AttackStartTimer = 14000; break; @@ -672,7 +679,7 @@ class npc_expedition_commander : public CreatureScript Engineer[n]->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); for (uint8 n = 0; n < 4; ++n) Defender[n]->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); - me->MonsterYell(SAY_AGGRO_2, LANG_UNIVERSAL, 0); + Talk(SAY_AGGRO_2); AttackStartTimer = 16000; Phase = 5; break; @@ -682,7 +689,7 @@ class npc_expedition_commander : public CreatureScript Razorscale->AI()->DoAction(ACTION_EVENT_START); me->SetInCombatWith(Razorscale); } - Engineer[0]->MonsterYell(SAY_AGGRO_1, LANG_UNIVERSAL, 0); + Engineer[0]->AI()->Talk(SAY_AGGRO_1); Phase = 6; break; } @@ -1077,7 +1084,7 @@ class achievement_quick_shave : public AchievementCriteriaScript bool OnCheck(Player* /*source*/, Unit* target) { - if (target) + if (target) if (Creature* razorscale = target->ToCreature()) if (razorscale->AI()->GetData(DATA_QUICK_SHAVE)) return true; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 084cd3e0f86..82845d10b8c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -21,83 +21,80 @@ enum Yells { - SAY_AGGRO_1 = -1603270, - SAY_AGGRO_2 = -1603271, - SAY_SPECIAL_1 = -1603272, - SAY_SPECIAL_2 = -1603273, - SAY_SPECIAL_3 = -1603274, - SAY_JUMPDOWN = -1603275, - SAY_SLAY_1 = -1603276, - SAY_SLAY_2 = -1603277, - SAY_BERSERK = -1603278, - SAY_WIPE = -1603279, - SAY_DEATH = -1603280, - SAY_END_NORMAL_1 = -1603281, - SAY_END_NORMAL_2 = -1603282, - SAY_END_NORMAL_3 = -1603283, - SAY_END_HARD_1 = -1603284, - SAY_END_HARD_2 = -1603285, - SAY_END_HARD_3 = -1603286, - SAY_YS_HELP = -1603287, + SAY_AGGRO = 0, + SAY_SPECIAL_1 = 1, + SAY_SPECIAL_2 = 2, + SAY_SPECIAL_3 = 3, + SAY_JUMPDOWN = 4, + SAY_SLAY = 5, + SAY_BERSERK = 6, + SAY_WIPE = 7, + SAY_DEATH = 8, + SAY_END_NORMAL_1 = 9, + SAY_END_NORMAL_2 = 10, + SAY_END_NORMAL_3 = 11, + SAY_END_HARD_1 = 12, + SAY_END_HARD_2 = 13, + SAY_END_HARD_3 = 14 }; class boss_thorim : public CreatureScript { -public: - boss_thorim() : CreatureScript("boss_thorim") { } + public: + boss_thorim() : CreatureScript("boss_thorim") { } - CreatureAI* GetAI(Creature* creature) const - { - return GetUlduarAI<boss_thorimAI>(creature); - } - - struct boss_thorimAI : public BossAI - { - boss_thorimAI(Creature* creature) : BossAI(creature, BOSS_THORIM) + struct boss_thorimAI : public BossAI { - } + boss_thorimAI(Creature* creature) : BossAI(creature, BOSS_THORIM) + { + } - void Reset() - { - _Reset(); - } + void Reset() + { + _Reset(); + } - void EnterEvadeMode() - { - DoScriptText(SAY_WIPE, me); - _EnterEvadeMode(); - } + void EnterEvadeMode() + { + Talk(SAY_WIPE); + _EnterEvadeMode(); + } - void KilledUnit(Unit* /*victim*/) - { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); - } + void KilledUnit(Unit* who) + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } - void JustDied(Unit* /*killer*/) - { - DoScriptText(SAY_DEATH, me); - _JustDied(); - } + void JustDied(Unit* /*killer*/) + { + Talk(SAY_DEATH); + _JustDied(); + } - void EnterCombat(Unit* /*who*/) - { - DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2), me); - _EnterCombat(); - } + void EnterCombat(Unit* /*who*/) + { + Talk(SAY_AGGRO); + _EnterCombat(); + } - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - //SPELLS TODO: + void UpdateAI(uint32 const diff) + { + if (!UpdateVictim()) + return; + //SPELLS TODO: - // - DoMeleeAttackIfReady(); + // + DoMeleeAttackIfReady(); - EnterEvadeIfOutOfCombatArea(diff); - } - }; + EnterEvadeIfOutOfCombatArea(diff); + } + }; + CreatureAI* GetAI(Creature* creature) const + { + return GetUlduarAI<boss_thorimAI>(creature); + } }; void AddSC_boss_thorim() diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 30f60da178a..09ab35d6589 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -157,15 +157,18 @@ enum XT002Data enum Yells { - SAY_AGGRO = -1603300, - SAY_HEART_OPENED = -1603301, - SAY_HEART_CLOSED = -1603302, - SAY_TYMPANIC_TANTRUM = -1603303, - SAY_SLAY_1 = -1603304, - SAY_SLAY_2 = -1603305, - SAY_BERSERK = -1603306, - SAY_DEATH = -1603307, - SAY_SUMMON = -1603308, + SAY_AGGRO = 0, + SAY_HEART_OPENED = 1, + SAY_HEART_CLOSED = 2, + SAY_TYMPANIC_TANTRUM = 3, + SAY_SLAY = 4, + SAY_BERSERK = 5, + SAY_DEATH = 6, + SAY_SUMMON = 7, + EMOTE_HEART_OPENED = 8, + EMOTE_HEART_CLOSED = 9, + EMOTE_TYMPANIC_TANTRUM = 10, + EMOTE_SCRAPBOT = 11 }; enum AchievementCredits @@ -223,7 +226,7 @@ class boss_xt002 : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); _EnterCombat(); events.ScheduleEvent(EVENT_ENRAGE, TIMER_ENRAGE); @@ -248,14 +251,15 @@ class boss_xt002 : public CreatureScript } } - void KilledUnit(Unit* /*victim*/) + void KilledUnit(Unit* who) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); _JustDied(); } @@ -292,7 +296,8 @@ class boss_xt002 : public CreatureScript events.ScheduleEvent(EVENT_GRAVITY_BOMB, TIMER_GRAVITY_BOMB); break; case EVENT_TYMPANIC_TANTRUM: - DoScriptText(SAY_TYMPANIC_TANTRUM, me); + Talk(SAY_TYMPANIC_TANTRUM); + Talk(EMOTE_TYMPANIC_TANTRUM); DoCast(SPELL_TYMPANIC_TANTRUM); events.ScheduleEvent(EVENT_TYMPANIC_TANTRUM, urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX)); break; @@ -300,7 +305,7 @@ class boss_xt002 : public CreatureScript SetPhaseOne(); break; case EVENT_ENRAGE: - DoScriptText(SAY_BERSERK, me); + Talk(SAY_BERSERK); DoCast(me, SPELL_ENRAGE); break; case EVENT_ENTER_HARD_MODE: @@ -325,6 +330,7 @@ class boss_xt002 : public CreatureScript if (me->GetHealthPct() > (25 * (4 - _heartExposed))) ++_heartExposed; + Talk(EMOTE_SCRAPBOT); _healthRecovered = true; } } @@ -359,7 +365,8 @@ class boss_xt002 : public CreatureScript void ExposeHeart() { - DoScriptText(SAY_HEART_OPENED, me); + Talk(SAY_HEART_OPENED); + Talk(EMOTE_HEART_OPENED); DoCast(me, SPELL_SUBMERGE); // WIll make creature untargetable me->AttackStop(); @@ -391,7 +398,8 @@ class boss_xt002 : public CreatureScript void SetPhaseOne() { - DoScriptText(SAY_HEART_CLOSED, me); + Talk(SAY_HEART_CLOSED); + Talk(EMOTE_HEART_CLOSED); DoCast(me, SPELL_STAND); me->SetReactState(REACT_AGGRESSIVE); @@ -928,7 +936,8 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader } } - DoScriptText(SAY_SUMMON, caster->GetVehicleBase()); + if (Creature* base = caster->GetVehicleCreatureBase()) + base->AI()->Talk(SAY_SUMMON); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index 58ba125b994..20d6a7a40da 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -43,18 +43,6 @@ enum Sara enum YoggSaron_Yells { - SAY_PHASE2_1 = -1603330, - SAY_PHASE2_2 = -1603331, - SAY_PHASE2_3 = -1603332, - SAY_PHASE2_4 = -1603333, - SAY_PHASE2_5 = -1603334, - SAY_PHASE3 = -1603335, - SAY_VISION = -1603336, - SAY_SLAY_1 = -1603337, - SAY_SLAY_2 = -1603338, - WHISP_INSANITY_1 = -1603339, - WHISP_INSANITY_2 = -1603340, - SAY_DEATH = -1603341, }; enum diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 7d3b943f7b0..b334b8dcbed 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -34,6 +34,14 @@ static DoorData const doorData[] = {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }, }; +MinionData const minionData[] = +{ + { NPC_STEELBREAKER, BOSS_ASSEMBLY_OF_IRON }, + { NPC_MOLGEIM, BOSS_ASSEMBLY_OF_IRON }, + { NPC_BRUNDIR, BOSS_ASSEMBLY_OF_IRON }, + { 0, 0, } +}; + class instance_ulduar : public InstanceMapScript { public: @@ -43,8 +51,6 @@ class instance_ulduar : public InstanceMapScript { instance_ulduar_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { } - std::string m_strInstData; - // Creatures uint64 LeviathanGUID; uint64 IgnisGUID; @@ -99,6 +105,7 @@ class instance_ulduar : public InstanceMapScript { SetBossNumber(MAX_ENCOUNTER); LoadDoorData(doorData); + LoadMinionData(minionData); IgnisGUID = 0; RazorscaleGUID = 0; RazorscaleController = 0; @@ -202,18 +209,24 @@ class instance_ulduar : public InstanceMapScript case NPC_XT_TOY_PILE: for (uint8 i = 0; i < 4; ++i) if (!XTToyPileGUIDs[i]) + { XTToyPileGUIDs[i] = creature->GetGUID(); + break; + } break; // Assembly of Iron case NPC_STEELBREAKER: AssemblyGUIDs[0] = creature->GetGUID(); + AddMinion(creature, true); break; case NPC_MOLGEIM: AssemblyGUIDs[1] = creature->GetGUID(); + AddMinion(creature, true); break; case NPC_BRUNDIR: AssemblyGUIDs[2] = creature->GetGUID(); + AddMinion(creature, true); break; // Freya's Keeper @@ -314,10 +327,25 @@ class instance_ulduar : public InstanceMapScript { switch (creature->GetEntry()) { + case NPC_XT_TOY_PILE: + for (uint8 i = 0; i < 4; ++i) + if (XTToyPileGUIDs[i] == creature->GetGUID()) + { + XTToyPileGUIDs[i] = 0; + break; + } + break; + case NPC_STEELBREAKER: + case NPC_MOLGEIM: + case NPC_BRUNDIR: + AddMinion(creature, false); + break; case NPC_BRANN_BRONZBEARD_ALG: if (BrannBronzebeardAlgGUID == creature->GetGUID()) BrannBronzebeardAlgGUID = 0; break; + default: + break; } } @@ -707,11 +735,11 @@ class instance_ulduar : public InstanceMapScript return RazorHarpoonGUIDs[3]; // Assembly of Iron - case BOSS_STEELBREAKER: + case DATA_STEELBREAKER: return AssemblyGUIDs[0]; - case BOSS_MOLGEIM: + case DATA_MOLGEIM: return AssemblyGUIDs[1]; - case BOSS_BRUNDIR: + case DATA_BRUNDIR: return AssemblyGUIDs[2]; // Freya's Keepers diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 858a82bbe57..4dff89f7b2c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -25,28 +25,25 @@ extern Position const AlgalonLandPos; enum UlduarBosses { - MAX_ENCOUNTER = 20, + MAX_ENCOUNTER = 17, BOSS_LEVIATHAN = 0, BOSS_IGNIS = 1, BOSS_RAZORSCALE = 2, BOSS_XT002 = 3, BOSS_ASSEMBLY_OF_IRON = 4, - BOSS_STEELBREAKER = 5, - BOSS_MOLGEIM = 6, - BOSS_BRUNDIR = 7, - BOSS_KOLOGARN = 8, - BOSS_AURIAYA = 9, - BOSS_MIMIRON = 10, - BOSS_HODIR = 11, - BOSS_THORIM = 12, - BOSS_FREYA = 13, - BOSS_BRIGHTLEAF = 14, - BOSS_IRONBRANCH = 15, - BOSS_STONEBARK = 16, - BOSS_VEZAX = 17, - BOSS_YOGGSARON = 18, - BOSS_ALGALON = 19, + BOSS_KOLOGARN = 5, + BOSS_AURIAYA = 6, + BOSS_MIMIRON = 7, + BOSS_HODIR = 8, + BOSS_THORIM = 9, + BOSS_FREYA = 10, + BOSS_BRIGHTLEAF = 11, + BOSS_IRONBRANCH = 12, + BOSS_STONEBARK = 13, + BOSS_VEZAX = 14, + BOSS_YOGGSARON = 15, + BOSS_ALGALON = 16, }; enum UlduarNPCs @@ -207,6 +204,11 @@ enum UlduarData DATA_TOY_PILE_2, DATA_TOY_PILE_3, + // Assembly of Iron + DATA_STEELBREAKER, + DATA_MOLGEIM, + DATA_BRUNDIR, + // Hodir DATA_HODIR_RARE_CACHE, diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index aaa95631792..4fe56b346b2 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -29,14 +29,14 @@ EndScriptData */ enum Yells { //Yells Ingvar - YELL_AGGRO_1 = -1574005, - YELL_AGGRO_2 = -1574006, + YELL_AGGRO_1 = 0, + YELL_AGGRO_2 = 1, - YELL_DEAD_1 = -1574007, - YELL_DEAD_2 = -1574008, + YELL_DEAD_1 = 2, + YELL_DEAD_2 = 3, - YELL_KILL_1 = -1574009, - YELL_KILL_2 = -1574010, + YELL_KILL_1 = 4, + YELL_KILL_2 = 5, }; enum Creatures @@ -151,7 +151,7 @@ public: events.SetPhase(PHASE_EVENT); events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT); - DoScriptText(YELL_DEAD_1, me); + Talk(YELL_DEAD_1); } if (events.GetPhaseMask() & (1 << PHASE_EVENT)) @@ -164,13 +164,13 @@ public: me->UpdateEntry(MOB_INGVAR_UNDEAD); events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT); - DoScriptText(YELL_AGGRO_2, me); + Talk(YELL_AGGRO_2); } void EnterCombat(Unit* /*who*/) { if (!bIsUndead) - DoScriptText(YELL_AGGRO_1, me); + Talk(YELL_AGGRO_1); if (instance) instance->SetData(DATA_INGVAR_EVENT, IN_PROGRESS); @@ -180,7 +180,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(YELL_DEAD_2, me); + Talk(YELL_DEAD_2); if (instance) { @@ -201,10 +201,7 @@ public: void KilledUnit(Unit* /*victim*/) { - if (bIsUndead) - DoScriptText(YELL_KILL_1, me); - else - DoScriptText(YELL_KILL_2, me); + Talk(bIsUndead ? YELL_KILL_1 : YELL_KILL_2); } void UpdateAI(const uint32 diff) @@ -329,7 +326,7 @@ public: { me->GetMotionMaster()->MovePoint(1, x, y, z+15); - // DoScriptText(YELL_RESSURECT, me); + // Talk(YELL_RESSURECT); } } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 7c977250e79..aad4c9989c1 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -29,18 +29,18 @@ EndScriptData */ enum eEnums { //signed for 24200, but used by 24200, 27390 - YELL_SKARVALD_AGGRO = -1574011, - YELL_SKARVALD_DAL_DIED = -1574012, - YELL_SKARVALD_SKA_DIEDFIRST = -1574013, - YELL_SKARVALD_KILL = -1574014, - YELL_SKARVALD_DAL_DIEDFIRST = -1574015, + YELL_SKARVALD_AGGRO = 0, + YELL_SKARVALD_DAL_DIED = 1, + YELL_SKARVALD_SKA_DIEDFIRST = 2, + YELL_SKARVALD_KILL = 3, + YELL_SKARVALD_DAL_DIEDFIRST = 4, //signed for 24201, but used by 24201, 27389 - YELL_DALRONN_AGGRO = -1574016, - YELL_DALRONN_SKA_DIED = -1574017, - YELL_DALRONN_DAL_DIEDFIRST = -1574018, - YELL_DALRONN_KILL = -1574019, - YELL_DALRONN_SKA_DIEDFIRST = -1574020, + YELL_DALRONN_AGGRO = 0, + YELL_DALRONN_SKA_DIED = 1, + YELL_DALRONN_DAL_DIEDFIRST = 2, + YELL_DALRONN_KILL = 3, + YELL_DALRONN_SKA_DIEDFIRST = 4, //Spells of Skarvald and his Ghost MOB_SKARVALD_THE_CONSTRUCTOR = 24200, @@ -123,7 +123,7 @@ public: { if (!ghost && instance) { - DoScriptText(YELL_SKARVALD_AGGRO, me); + Talk(YELL_SKARVALD_AGGRO); Unit* dalronn = Unit::GetUnit(*me, instance->GetData64(DATA_DALRONN)); if (dalronn && dalronn->isAlive() && !dalronn->getVictim()) @@ -151,13 +151,13 @@ public: { if (dalronn->isDead()) { - DoScriptText(YELL_SKARVALD_DAL_DIED, me); + Talk(YELL_SKARVALD_DAL_DIED); instance->SetData(DATA_SKARVALD_DALRONN_EVENT, DONE); } else { - DoScriptText(YELL_SKARVALD_SKA_DIEDFIRST, me); + Talk(YELL_SKARVALD_SKA_DIEDFIRST); me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); //DoCast(me, SPELL_SUMMON_SKARVALD_GHOST, true); @@ -176,7 +176,7 @@ public: { if (!ghost) { - DoScriptText(YELL_SKARVALD_KILL, me); + Talk(YELL_SKARVALD_KILL); } } @@ -211,7 +211,7 @@ public: { if (Response_Timer <= diff) { - DoScriptText(YELL_SKARVALD_DAL_DIEDFIRST, me); + Talk(YELL_SKARVALD_DAL_DIEDFIRST); Response_Timer = 0; } else Response_Timer -= diff; @@ -310,14 +310,14 @@ public: { if (skarvald->isDead()) { - DoScriptText(YELL_DALRONN_SKA_DIED, me); + Talk(YELL_DALRONN_SKA_DIED); if (instance) instance->SetData(DATA_SKARVALD_DALRONN_EVENT, DONE); } else { - DoScriptText(YELL_DALRONN_DAL_DIEDFIRST, me); + Talk(YELL_DALRONN_DAL_DIEDFIRST); me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); //DoCast(me, SPELL_SUMMON_DALRONN_GHOST, true); @@ -336,7 +336,7 @@ public: { if (!ghost) { - DoScriptText(YELL_DALRONN_KILL, me); + Talk(YELL_DALRONN_KILL); } } @@ -355,7 +355,7 @@ public: { if (AggroYell_Timer <= diff) { - DoScriptText(YELL_DALRONN_AGGRO, me); + Talk(YELL_DALRONN_AGGRO); AggroYell_Timer = 0; } else AggroYell_Timer -= diff; @@ -382,7 +382,7 @@ public: { if (Response_Timer <= diff) { - DoScriptText(YELL_DALRONN_SKA_DIEDFIRST, me); + Talk(YELL_DALRONN_SKA_DIEDFIRST); Response_Timer = 0; } else Response_Timer -= diff; } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index 8cbfe4bafb4..d2772514edf 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -47,10 +47,9 @@ enum OrbSpells //not in db enum Yells { - SAY_AGGRO = -1575000, - SAY_SLAY_1 = -1575001, - SAY_SLAY_2 = -1575002, - SAY_DEATH = -1575003 + SAY_AGGRO = 0, + SAY_SLAY = 1 + //SAY_DEATH = 2 Missing in database }; enum Creatures @@ -155,7 +154,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); } void AttackStart(Unit* who) @@ -212,7 +211,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + //Talk(SAY_DEATH); if (instance) instance->SetData(DATA_GORTOK_PALEHOOF_EVENT, DONE); Creature* temp = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_MOB_ORB) : 0); @@ -222,7 +221,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me); + Talk(SAY_SLAY); } void NextPhase() diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 63898e57c08..45bab11c46a 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -34,16 +34,13 @@ Script Data End */ //Yell enum eYells { - SAY_AGGRO = -1575004, - SAY_KILL_1 = -1575005, - SAY_KILL_2 = -1575006, - EMOTE_RANGE = -1575007, //Skadi - SAY_DEATH = -1575008, - SAY_DRAKE_DEATH = -1575009, - EMOTE_BREATH = -1575010, //Grauf - SAY_DRAKE_BREATH_1 = -1575011, - SAY_DRAKE_BREATH_2 = -1575012, - SAY_DRAKE_BREATH_3 = -1575013, + SAY_AGGRO = 0, + SAY_KILL = 1, + EMOTE_RANGE = 2, + SAY_DEATH = 3, + SAY_DRAKE_DEATH = 4, + EMOTE_BREATH = 5, + SAY_DRAKE_BREATH = 6 }; static Position SpawnLoc = {468.931f, -513.555f, 104.723f, 0}; @@ -230,7 +227,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); @@ -297,7 +294,7 @@ public: } me->GetMotionMaster()->MoveJump(Location[4].GetPositionX(), Location[4].GetPositionY(), Location[4].GetPositionZ(), 5.0f, 10.0f); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); - DoScriptText(SAY_DRAKE_DEATH, me); + Talk(SAY_DRAKE_DEATH); m_uiCrushTimer = 8000; m_uiPoisonedSpearTimer = 10000; m_uiWhirlwindTimer = 20000; @@ -319,7 +316,7 @@ public: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); if (!m_bSaidEmote) { - DoScriptText(EMOTE_RANGE, me); + Talk(EMOTE_RANGE); m_bSaidEmote = true; } } @@ -360,8 +357,8 @@ public: break; case 3: me->GetMotionMaster()->MovePoint(0, Location[69].GetPositionX(), Location[69].GetPositionY(), Location[69].GetPositionZ()); - DoScriptText(RAND(SAY_DRAKE_BREATH_1, SAY_DRAKE_BREATH_2), me); - DoScriptText(EMOTE_BREATH, me); + Talk(SAY_DRAKE_BREATH); + Talk(EMOTE_BREATH); m_uiMovementTimer = 2500; break; case 4: @@ -413,7 +410,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); Summons.DespawnAll(); if (instance) instance->SetData(DATA_SKADI_THE_RUTHLESS_EVENT, DONE); @@ -421,7 +418,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_KILL_1, SAY_KILL_2), me); + Talk(SAY_KILL); } void SpawnMobs() diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 0278125deb3..96cfee7c2b8 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -55,16 +55,13 @@ enum Spells //not in db enum Yells { - SAY_AGGRO = -1575028, - SAY_SLAY_1 = -1575029, - SAY_SLAY_2 = -1575030, - SAY_SLAY_3 = -1575031, - SAY_SLAY_4 = -1575032, - SAY_DEATH = -1575033, - SAY_SUMMON_BJORN = -1575034, - SAY_SUMMON_HALDOR = -1575035, - SAY_SUMMON_RANULF = -1575036, - SAY_SUMMON_TORGYN = -1575037 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SUMMON_BJORN = 3, + SAY_SUMMON_HALDOR = 4, + SAY_SUMMON_RANULF = 5, + SAY_SUMMON_TORGYN = 6 }; enum Creatures @@ -190,7 +187,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_KING_YMIRON_EVENT, IN_PROGRESS); @@ -216,7 +213,7 @@ public: { if (m_uiPause_Timer <= diff) { - DoScriptText(ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].say, me); + Talk(ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].say); DoCast(me, SPELL_CHANNEL_YMIRON_TO_SPIRIT); // should be on spirit if (Creature* temp = me->SummonCreature(ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].npc, ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].SpawnX, ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].SpawnY, ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].SpawnZ, ActiveBoat[m_uiActiveOrder[m_uiActivedNumber]].SpawnO, TEMPSUMMON_CORPSE_DESPAWN, 0)) { @@ -370,7 +367,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); DespawnBoatGhosts(m_uiActivedCreatureGUID); DespawnBoatGhosts(m_uiOrbGUID); @@ -381,7 +378,7 @@ public: void KilledUnit(Unit* /*victim*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3, SAY_SLAY_4), me); + Talk(SAY_SLAY); } void DespawnBoatGhosts(uint64 m_uiCreatureGUID) diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp index 96e0bc66bd1..8a5e25e4487 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp @@ -19,7 +19,10 @@ #include "ScriptedCreature.h" #include "vault_of_archavon.h" -#define EMOTE_BERSERK -1590002 +enum +{ + EMOTE_BERSERK = 0 +}; //Spells Archavon #define SPELL_ROCK_SHARDS 58678 @@ -109,7 +112,7 @@ class boss_archavon : public CreatureScript break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK); - DoScriptText(EMOTE_BERSERK, me); + Talk(EMOTE_BERSERK); break; default: break; diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index 903280d317a..b61bb20389d 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -37,9 +37,9 @@ enum Spells enum BossEmotes { - EMOTE_OVERCHARGE = -1590000, - EMOTE_MINION_RESPAWN = -1590001, - EMOTE_BERSERK = -1590002, + EMOTE_OVERCHARGE = 0, + EMOTE_MINION_RESPAWN = 1, + EMOTE_BERSERK = 2 }; enum Events @@ -146,14 +146,14 @@ class boss_emalon : public CreatureScript { minion->CastSpell(me, SPELL_OVERCHARGED, true); minion->SetFullHealth(); - DoScriptText(EMOTE_OVERCHARGE, me); + Talk(EMOTE_OVERCHARGE); events.ScheduleEvent(EVENT_OVERCHARGE, 45000); } } break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK); - DoScriptText(EMOTE_BERSERK, me); + Talk(EMOTE_BERSERK); break; default: break; @@ -198,7 +198,7 @@ class mob_tempest_minion : public CreatureScript if (emalon->isAlive()) { emalon->SummonCreature(MOB_TEMPEST_MINION, 0, 0, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); - DoScriptText(EMOTE_MINION_RESPAWN, me); + Talk(EMOTE_MINION_RESPAWN); } } } @@ -244,7 +244,7 @@ class mob_tempest_minion : public CreatureScript { DoCast(me, SPELL_OVERCHARGED_BLAST); me->DespawnOrUnsummon(); - DoScriptText(EMOTE_MINION_RESPAWN, me); + Talk(EMOTE_MINION_RESPAWN); } } } diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp index b4ce402e7de..7b1b9e96baf 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp @@ -34,16 +34,13 @@ enum Spells enum Yells { - SAY_AGGRO = -1608000, - SAY_SLAY_1 = -1608001, - SAY_SLAY_2 = -1608002, - SAY_SLAY_3 = -1608003, - SAY_DEATH = -1608004, - SAY_SPAWN = -1608005, - SAY_DISRUPTION = -1608006, - SAY_BREATH_ATTACK = -1608007, - SAY_SPECIAL_ATTACK_1 = -1608008, - SAY_SPECIAL_ATTACK_2 = -1608009 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SPAWN = 3, + SAY_DISRUPTION = 4, + SAY_BREATH_ATTACK = 5, + SAY_SPECIAL_ATTACK = 6 }; class boss_cyanigosa : public CreatureScript @@ -84,7 +81,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_CYANIGOSA_EVENT, IN_PROGRESS); @@ -144,7 +141,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_CYANIGOSA_EVENT, DONE); @@ -154,7 +151,7 @@ public: { if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } }; diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index bd59b731c3c..15cd12140cf 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -34,14 +34,12 @@ enum Spells enum Yells { - SAY_AGGRO = -1608010, - SAY_SLAY_1 = -1608011, - SAY_SLAY_2 = -1608012, - SAY_SLAY_3 = -1608013, - SAY_DEATH = -1608014, - SAY_SPAWN = -1608015, - SAY_ADD_KILLED = -1608016, - SAY_BOTH_ADDS_KILLED = -1608017 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SPAWN = 3, + SAY_ADD_KILLED = 4, + SAY_BOTH_ADDS_KILLED = 5 }; class boss_erekem : public CreatureScript @@ -125,7 +123,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DoCast(me, SPELL_EARTH_SHIELD); if (instance) @@ -209,7 +207,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) { @@ -230,7 +228,7 @@ public: { if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } uint64 GetChainHealTargetGUID() diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index cea00417233..fba7efe43ab 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -40,15 +40,13 @@ enum IchoronCreatures enum Yells { - SAY_AGGRO = -1608018, - SAY_SLAY_1 = -1608019, - SAY_SLAY_2 = -1608020, - SAY_SLAY_3 = -1608021, - SAY_DEATH = -1608022, - SAY_SPAWN = -1608023, - SAY_ENRAGE = -1608024, - SAY_SHATTER = -1608025, - SAY_BUBBLE = -1608026 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SPAWN = 3, + SAY_ENRAGE = 4, + SAY_SHATTER = 5, + SAY_BUBBLE = 6 }; enum Actions @@ -120,7 +118,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); DoCast(me, SPELL_PROTECTIVE_BUBBLE); @@ -189,7 +187,7 @@ public: if (!HealthBelowPct(25)) { - DoScriptText(SAY_BUBBLE, me); + Talk(SAY_BUBBLE); DoCast(me, SPELL_PROTECTIVE_BUBBLE, true); } @@ -214,7 +212,7 @@ public: if (!bIsFrenzy && HealthBelowPct(25) && !bIsExploded) { - DoScriptText(SAY_ENRAGE, me); + Talk(SAY_ENRAGE); DoCast(me, SPELL_FRENZY, true); bIsFrenzy = true; } @@ -227,7 +225,7 @@ public: { if (!me->HasAura(SPELL_PROTECTIVE_BUBBLE, 0)) { - DoScriptText(SAY_SHATTER, me); + Talk(SAY_SHATTER); DoCast(me, SPELL_WATER_BLAST); DoCast(me, SPELL_DRAINED); bIsExploded = true; @@ -277,7 +275,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (bIsExploded) { @@ -326,7 +324,7 @@ public: { if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } }; diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 58d7b59c7dd..429b2ac32ea 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -22,41 +22,38 @@ enum Spells { - SPELL_ARCANE_BARRAGE_VOLLEY = 54202, - SPELL_ARCANE_BARRAGE_VOLLEY_H = 59483, - SPELL_ARCANE_BUFFET = 54226, - SPELL_ARCANE_BUFFET_H = 59485, - SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102, - SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137, - SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138, + SPELL_ARCANE_BARRAGE_VOLLEY = 54202, + SPELL_ARCANE_BARRAGE_VOLLEY_H = 59483, + SPELL_ARCANE_BUFFET = 54226, + SPELL_ARCANE_BUFFET_H = 59485, + SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102, + SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137, + SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138, }; enum NPCs { - NPC_ETHEREAL_SPHERE = 29271, - //NPC_ETHEREAL_SPHERE2 = 32582, // heroic only? + NPC_ETHEREAL_SPHERE = 29271, + //NPC_ETHEREAL_SPHERE2 = 32582, // heroic only? }; enum CreatureSpells { - SPELL_ARCANE_POWER = 54160, - H_SPELL_ARCANE_POWER = 59474, - SPELL_SUMMON_PLAYERS = 54164, - SPELL_POWER_BALL_VISUAL = 54141, + SPELL_ARCANE_POWER = 54160, + H_SPELL_ARCANE_POWER = 59474, + SPELL_SUMMON_PLAYERS = 54164, + SPELL_POWER_BALL_VISUAL = 54141, }; enum Yells { - SAY_AGGRO = -1608027, - SAY_SLAY_1 = -1608028, - SAY_SLAY_2 = -1608029, - SAY_SLAY_3 = -1608030, - SAY_DEATH = -1608031, - SAY_SPAWN = -1608032, - SAY_CHARGED = -1608033, - SAY_REPEAT_SUMMON_1 = -1608034, - SAY_REPEAT_SUMMON_2 = -1608035, - SAY_SUMMON_ENERGY = -1608036 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SPAWN = 3, + SAY_CHARGED = 4, + SAY_REPEAT_SUMMON = 5, + SAY_SUMMON_ENERGY = 6 }; class boss_xevozz : public CreatureScript @@ -139,7 +136,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) { if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_XEVOZZ_CELL))) @@ -182,7 +179,7 @@ public: if (uiSummonEtherealSphere_Timer < uiDiff) { - DoScriptText(SAY_SPAWN, me); + Talk(SAY_SPAWN); DoCast(me, SPELL_SUMMON_ETHEREAL_SPHERE_1); if (IsHeroic()) // extra one for heroic me->SummonCreature(NPC_ETHEREAL_SPHERE, me->GetPositionX()-5+rand()%10, me->GetPositionY()-5+rand()%10, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 40000); @@ -197,7 +194,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); DespawnSphere(); @@ -220,7 +217,7 @@ public: if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } }; diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index 408a7083383..5216ae9f08d 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -38,14 +38,12 @@ enum ZuramatCreatures enum Yells { - SAY_AGGRO = -1608037, - SAY_SLAY_1 = -1608038, - SAY_SLAY_2 = -1608039, - SAY_SLAY_3 = -1608040, - SAY_DEATH = -1608041, - SAY_SPAWN = -1608042, - SAY_SHIELD = -1608043, - SAY_WHISPER = -1608044 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_SPAWN = 3, + SAY_SHIELD = 4, + SAY_WHISPER = 5 }; #define DATA_VOID_DANCE 2153 @@ -106,7 +104,7 @@ public: void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_AGGRO, me); + Talk(SAY_AGGRO); if (instance) { if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_ZURAMAT_CELL))) @@ -168,7 +166,7 @@ public: void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_DEATH); if (instance) { @@ -190,7 +188,7 @@ public: if (victim == me) return; - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } void JustSummoned(Creature* summon) diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 5e3bbc01025..c1c93c789de 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -16,6 +16,7 @@ */ #include "ScriptMgr.h" +#include "ScriptedCreature.h" #include "InstanceScript.h" #include "violet_hold.h" #include "Player.h" @@ -94,7 +95,7 @@ const Position MiddleRoomPortalSaboLocation = {1896.622925f, 804.854126f, 38.504 //Cyanigosa's prefight event data enum Yells { - CYANIGOSA_SAY_SPAWN = -1608005 + CYANIGOSA_SAY_SPAWN = 0 }; enum Spells @@ -742,7 +743,7 @@ public: { case 1: pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false); - DoScriptText(CYANIGOSA_SAY_SPAWN, pCyanigosa); + pCyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN); uiCyanigosaEventTimer = 7*IN_MILLISECONDS; ++uiCyanigosaEventPhase; break; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index c73cb97f2d1..5e326af9891 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -125,7 +125,7 @@ enum Spells enum eSinclari { - SAY_SINCLARI_1 = -1608045 + SAY_SINCLARI_1 = 0 }; float FirstPortalWPs [6][3] = @@ -353,7 +353,7 @@ public: switch (uiPhase) { case 1: - DoScriptText(SAY_SINCLARI_1, me); + Talk(SAY_SINCLARI_1); uiTimer = 4000; uiPhase = 2; break; diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index 6eed82991b8..3f20a3d32bc 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -29,7 +29,6 @@ npc_corastrasza npc_jenny npc_sinkhole_kill_credit npc_khunok_the_behemoth -npc_scourge_prisoner mob_nerubar_victim npc_keristrasza npc_nesingwary_trapper @@ -67,26 +66,26 @@ public: { npc_sinkhole_kill_creditAI(Creature* creature) : ScriptedAI(creature){} - uint32 uiPhaseTimer; - uint8 Phase; + uint32 phaseTimer; + uint8 phase; uint64 casterGuid; void Reset() { - uiPhaseTimer = 500; - Phase = 0; + phaseTimer = 500; + phase = 0; casterGuid = 0; } void SpellHit(Unit* caster, const SpellInfo* spell) { - if (Phase) + if (phase) return; if (spell->Id == SPELL_SET_CART && caster->GetTypeId() == TYPEID_PLAYER && CAST_PLR(caster)->GetQuestStatus(11897) == QUEST_STATUS_INCOMPLETE) { - Phase = 1; + phase = 1; casterGuid = caster->GetGUID(); } } @@ -95,32 +94,32 @@ public: void UpdateAI(const uint32 diff) { - if (!Phase) + if (!phase) return; - if (uiPhaseTimer <= diff) + if (phaseTimer <= diff) { - switch (Phase) + switch (phase) { case 1: DoCast(me, SPELL_EXPLODE_CART, true); DoCast(me, SPELL_SUMMON_CART, true); if (GameObject* cart = me->FindNearestGameObject(188160, 3)) cart->SetUInt32Value(GAMEOBJECT_FACTION, 14); - uiPhaseTimer = 3000; - Phase = 2; + phaseTimer = 3000; + phase = 2; break; case 2: if (GameObject* cart = me->FindNearestGameObject(188160, 3)) cart->UseDoorOrButton(); DoCast(me, SPELL_EXPLODE_CART, true); - uiPhaseTimer = 3000; - Phase = 3; + phaseTimer = 3000; + phase = 3; break; case 3: DoCast(me, SPELL_EXPLODE_CART, true); - uiPhaseTimer = 2000; - Phase = 4; + phaseTimer = 2000; + phase = 4; case 5: DoCast(me, SPELL_SUMMON_WORM, true); if (Unit* worm = me->FindNearestCreature(26250, 3)) @@ -128,8 +127,8 @@ public: worm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); worm->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); } - uiPhaseTimer = 1000; - Phase = 6; + phaseTimer = 1000; + phase = 6; break; case 6: DoCast(me, SPELL_EXPLODE_CART, true); @@ -138,21 +137,21 @@ public: me->Kill(worm); worm->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - uiPhaseTimer = 2000; - Phase = 7; + phaseTimer = 2000; + phase = 7; break; case 7: DoCast(me, SPELL_EXPLODE_CART, true); if (Player* caster = Unit::GetPlayer(*me, casterGuid)) caster->KilledMonster(me->GetCreatureTemplate(), me->GetGUID()); - uiPhaseTimer = 5000; - Phase = 8; + phaseTimer = 5000; + phase = 8; break; case 8: EnterEvadeMode(); break; } - } else uiPhaseTimer -= diff; + } else phaseTimer -= diff; } @@ -387,41 +386,6 @@ public: }; /*###### -## npc_scourge_prisoner -######*/ - -enum eScourgePrisoner -{ - GO_SCOURGE_CAGE = 187867 -}; - -class npc_scourge_prisoner : public CreatureScript -{ -public: - npc_scourge_prisoner() : CreatureScript("npc_scourge_prisoner") { } - - struct npc_scourge_prisonerAI : public ScriptedAI - { - npc_scourge_prisonerAI(Creature* creature) : ScriptedAI (creature){} - - void Reset() - { - me->SetReactState(REACT_PASSIVE); - - if (GameObject* go = me->FindNearestGameObject(GO_SCOURGE_CAGE, 5.0f)) - if (go->GetGoState() == GO_STATE_ACTIVE) - go->SetGoState(GO_STATE_READY); - } - - }; - - CreatureAI* GetAI(Creature* creature) const - { - return new npc_scourge_prisonerAI(creature); - } -}; - -/*###### ## npc_jenny ######*/ @@ -583,14 +547,14 @@ public: npc_nesingwary_trapperAI(Creature* creature) : ScriptedAI(creature) { creature->SetVisible(false); } uint64 go_caribouGUID; - uint8 Phase; - uint32 uiPhaseTimer; + uint8 phase; + uint32 phaseTimer; void Reset() { me->SetVisible(false); - uiPhaseTimer = 2500; - Phase = 1; + phaseTimer = 2500; + phase = 1; go_caribouGUID = 0; } @@ -614,41 +578,41 @@ public: void UpdateAI(const uint32 diff) { - if (uiPhaseTimer <= diff) + if (phaseTimer <= diff) { - switch (Phase) + switch (phase) { case 1: me->SetVisible(true); - uiPhaseTimer = 2000; - Phase = 2; + phaseTimer = 2000; + phase = 2; break; case 2: if (GameObject* go_fur = me->FindNearestGameObject(GO_HIGH_QUALITY_FUR, 11.0f)) me->GetMotionMaster()->MovePoint(0, go_fur->GetPositionX(), go_fur->GetPositionY(), go_fur->GetPositionZ()); - uiPhaseTimer = 1500; - Phase = 3; + phaseTimer = 1500; + phase = 3; break; case 3: - //DoScriptText(SAY_NESINGWARY_1, me); - uiPhaseTimer = 2000; - Phase = 4; + //Talk(SAY_NESINGWARY_1); + phaseTimer = 2000; + phase = 4; break; case 4: me->HandleEmoteCommand(EMOTE_ONESHOT_LOOT); - uiPhaseTimer = 1000; - Phase = 5; + phaseTimer = 1000; + phase = 5; break; case 5: me->HandleEmoteCommand(EMOTE_ONESHOT_NONE); - uiPhaseTimer = 500; - Phase = 6; + phaseTimer = 500; + phase = 6; break; case 6: if (GameObject* go_fur = me->FindNearestGameObject(GO_HIGH_QUALITY_FUR, 11.0f)) go_fur->Delete(); - uiPhaseTimer = 500; - Phase = 7; + phaseTimer = 500; + phase = 7; break; case 7: { @@ -663,16 +627,16 @@ public: break; } } - Phase = 8; - uiPhaseTimer = 1000; + phase = 8; + phaseTimer = 1000; } break; case 8: DoCast(me, SPELL_TRAPPED, true); - Phase = 0; + phase = 0; break; } - } else uiPhaseTimer -= diff; + } else phaseTimer -= diff; } }; @@ -694,12 +658,12 @@ enum eLurgglbr FACTION_ESCORTEE_A = 774, FACTION_ESCORTEE_H = 775, -}; -/*#define SAY_WP_1_LUR_START -1571004 -#define SAY_WP_1_LUR_END -1571005 -#define SAY_WP_41_LUR_START -1571006 -#define SAY_WP_41_LUR_END -1571007*/ + SAY_START_1 = 0, + SAY_START_2 = 1, + SAY_END_1 = 2, + SAY_END_2 = 3 +}; class npc_lurgglbr : public CreatureScript { @@ -746,12 +710,12 @@ public: switch (IntroPhase) { case 1: - //DoScriptText(SAY_WP_1_LUR_START, me); + Talk(SAY_START_1); IntroPhase = 2; IntroTimer = 7500; break; case 2: - //DoScriptText(SAY_WP_1_LUR_END, me); + Talk(SAY_END_1); IntroPhase = 3; IntroTimer = 7500; break; @@ -761,12 +725,12 @@ public: IntroTimer = 0; break; case 4: - //DoScriptText(SAY_WP_41_LUR_START, me); + Talk(SAY_START_2); IntroPhase = 5; IntroTimer = 8000; break; case 5: - //DoScriptText(SAY_WP_41_LUR_END, me); + Talk(SAY_END_2); IntroPhase = 6; IntroTimer = 2500; break; @@ -951,26 +915,30 @@ enum eThassarian NPC_GENERAL_ARLOS = 25250, NPC_LERYSSA = 25251, - SAY_TALBOT_1 = -1571004, - SAY_LICH_1 = -1571005, - SAY_TALBOT_2 = -1571006, - SAY_THASSARIAN_1 = -1571007, - SAY_THASSARIAN_2 = -1571008, - SAY_LICH_2 = -1571009, - SAY_THASSARIAN_3 = -1571010, - SAY_TALBOT_3 = -1571011, - SAY_LICH_3 = -1571012, - SAY_TALBOT_4 = -1571013, - SAY_ARLOS_1 = -1571014, - SAY_ARLOS_2 = -1571015, - SAY_LERYSSA_1 = -1571016, - SAY_THASSARIAN_4 = -1571017, - SAY_LERYSSA_2 = -1571018, - SAY_THASSARIAN_5 = -1571019, - SAY_LERYSSA_3 = -1571020, - SAY_THASSARIAN_6 = -1571021, - SAY_LERYSSA_4 = -1571022, - SAY_THASSARIAN_7 = -1571023, + SAY_THASSARIAN_1 = 0, + SAY_THASSARIAN_2 = 1, + SAY_THASSARIAN_3 = 2, + SAY_THASSARIAN_4 = 3, + SAY_THASSARIAN_5 = 4, + SAY_THASSARIAN_6 = 5, + SAY_THASSARIAN_7 = 6, + + SAY_TALBOT_1 = 0, + SAY_TALBOT_2 = 1, + SAY_TALBOT_3 = 2, + SAY_TALBOT_4 = 3, + + SAY_LICH_1 = 0, + SAY_LICH_2 = 1, + SAY_LICH_3 = 2, + + SAY_ARLOS_1 = 0, + SAY_ARLOS_2 = 1, + + SAY_LERYSSA_1 = 0, + SAY_LERYSSA_2 = 1, + SAY_LERYSSA_3 = 2, + SAY_LERYSSA_4 = 3 }; #define GOSSIP_ITEM_T "Let's do this, Thassarian. It's now or never." @@ -982,40 +950,38 @@ public: struct npc_thassarianAI : public npc_escortAI { - npc_thassarianAI(Creature* creature) : npc_escortAI(creature) - { - } + npc_thassarianAI(Creature* creature) : npc_escortAI(creature) {} - uint64 uiArthas; - uint64 uiTalbot; - uint64 uiLeryssa; - uint64 uiArlos; + uint64 arthasGUID; + uint64 talbotGUID; + uint64 leryssaGUID; + uint64 arlosGUID; - bool bArthasInPosition; - bool bArlosInPosition; - bool bLeryssaInPosition; - bool bTalbotInPosition; + bool arthasInPosition; + bool arlosInPosition; + bool leryssaInPosition; + bool talbotInPosition; - uint32 uiPhase; - uint32 uiPhaseTimer; + uint32 phase; + uint32 phaseTimer; void Reset() { me->RestoreFaction(); me->RemoveStandFlags(UNIT_STAND_STATE_SIT); - uiArthas = 0; - uiTalbot = 0; - uiLeryssa = 0; - uiArlos = 0; + arthasGUID = 0; + talbotGUID = 0; + leryssaGUID = 0; + arlosGUID = 0; - bArthasInPosition = false; - bArlosInPosition = false; - bLeryssaInPosition = false; - bTalbotInPosition = false; + arthasInPosition = false; + arlosInPosition = false; + leryssaInPosition = false; + talbotInPosition = false; - uiPhase = 0; - uiPhaseTimer = 0; + phase = 0; + phaseTimer = 0; } void WaypointReached(uint32 waypointId) @@ -1028,25 +994,25 @@ public: { case 3: SetEscortPaused(true); - if (Creature* pArthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3730.313f, 3518.689f, 473.324f, 1.562f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) + if (Creature* arthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3730.313f, 3518.689f, 473.324f, 1.562f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) { - uiArthas = pArthas->GetGUID(); - pArthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - pArthas->SetReactState(REACT_PASSIVE); - pArthas->SetWalk(true); - pArthas->GetMotionMaster()->MovePoint(0, 3737.374756f, 3564.841309f, 477.433014f); + arthasGUID = arthas->GetGUID(); + arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + arthas->SetReactState(REACT_PASSIVE); + arthas->SetWalk(true); + arthas->GetMotionMaster()->MovePoint(0, 3737.374756f, 3564.841309f, 477.433014f); } - if (Creature* pTalbot = me->SummonCreature(NPC_COUNSELOR_TALBOT, 3747.23f, 3614.936f, 473.321f, 4.462012f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) + if (Creature* talbot = me->SummonCreature(NPC_COUNSELOR_TALBOT, 3747.23f, 3614.936f, 473.321f, 4.462012f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) { - uiTalbot = pTalbot->GetGUID(); - pTalbot->SetWalk(true); - pTalbot->GetMotionMaster()->MovePoint(0, 3738.000977f, 3568.882080f, 477.433014f); + talbotGUID = talbot->GetGUID(); + talbot->SetWalk(true); + talbot->GetMotionMaster()->MovePoint(0, 3738.000977f, 3568.882080f, 477.433014f); } me->SetWalk(false); break; case 4: SetEscortPaused(true); - uiPhase = 7; + phase = 7; break; } } @@ -1055,173 +1021,173 @@ public: { npc_escortAI::UpdateAI(uiDiff); - if (bArthasInPosition && bTalbotInPosition) + if (arthasInPosition && talbotInPosition) { - uiPhase = 1; - bArthasInPosition = false; - bTalbotInPosition = false; + phase = 1; + arthasInPosition = false; + talbotInPosition = false; } - if (bArlosInPosition && bLeryssaInPosition) + if (arlosInPosition && leryssaInPosition) { - bArlosInPosition = false; - bLeryssaInPosition = false; - DoScriptText(SAY_THASSARIAN_1, me); + arlosInPosition = false; + leryssaInPosition = false; + Talk(SAY_THASSARIAN_1); SetEscortPaused(false); } - if (uiPhaseTimer <= uiDiff) + if (phaseTimer <= uiDiff) { - Creature* pTalbot = me->GetCreature(*me, uiTalbot); - Creature* pArthas = me->GetCreature(*me, uiArthas); - switch (uiPhase) + Creature* talbot = me->GetCreature(*me, talbotGUID); + Creature* arthas = me->GetCreature(*me, arthasGUID); + switch (phase) { case 1: - if (pTalbot) - pTalbot->SetStandState(UNIT_STAND_STATE_KNEEL); - uiPhaseTimer = 3000; - ++uiPhase; + if (talbot) + talbot->SetStandState(UNIT_STAND_STATE_KNEEL); + phaseTimer = 3000; + ++phase; break; case 2: - if (pTalbot) + if (talbot) { - pTalbot->UpdateEntry(NPC_PRINCE_VALANAR, ALLIANCE); - pTalbot->setFaction(14); - pTalbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - pTalbot->SetReactState(REACT_PASSIVE); + talbot->UpdateEntry(NPC_PRINCE_VALANAR, ALLIANCE); + talbot->setFaction(14); + talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + talbot->SetReactState(REACT_PASSIVE); } - uiPhaseTimer = 5000; - ++uiPhase; + phaseTimer = 5000; + ++phase; break; case 3: - if (pTalbot) - DoScriptText(SAY_TALBOT_1, pTalbot); - uiPhaseTimer = 5000; - ++uiPhase; + if (talbot) + talbot->AI()->Talk(SAY_TALBOT_1); + phaseTimer = 5000; + ++phase; break; case 4: - if (pArthas) - DoScriptText(SAY_LICH_1, pArthas); - uiPhaseTimer = 5000; - ++uiPhase; + if (arthas) + arthas->AI()->Talk(SAY_LICH_1); + phaseTimer = 5000; + ++phase; break; case 5: - if (pTalbot) - DoScriptText(SAY_TALBOT_2, pTalbot); - uiPhaseTimer = 5000; - ++uiPhase; + if (talbot) + talbot->AI()->Talk(SAY_TALBOT_2); + phaseTimer = 5000; + ++phase; break; case 6: - if (Creature* pArlos = me->SummonCreature(NPC_GENERAL_ARLOS, 3745.527100f, 3615.655029f, 473.321533f, 4.447805f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) + if (Creature* arlos = me->SummonCreature(NPC_GENERAL_ARLOS, 3745.527100f, 3615.655029f, 473.321533f, 4.447805f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) { - uiArlos = pArlos->GetGUID(); - pArlos->SetWalk(true); - pArlos->GetMotionMaster()->MovePoint(0, 3735.570068f, 3572.419922f, 477.441010f); + arlosGUID = arlos->GetGUID(); + arlos->SetWalk(true); + arlos->GetMotionMaster()->MovePoint(0, 3735.570068f, 3572.419922f, 477.441010f); } - if (Creature* pLeryssa = me->SummonCreature(NPC_LERYSSA, 3749.654541f, 3614.959717f, 473.323486f, 4.524959f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) + if (Creature* leryssa = me->SummonCreature(NPC_LERYSSA, 3749.654541f, 3614.959717f, 473.323486f, 4.524959f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) { - uiLeryssa = pLeryssa->GetGUID(); - pLeryssa->SetWalk(false); - pLeryssa->SetReactState(REACT_PASSIVE); - pLeryssa->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - pLeryssa->GetMotionMaster()->MovePoint(0, 3741.969971f, 3571.439941f, 477.441010f); + leryssaGUID = leryssa->GetGUID(); + leryssa->SetWalk(false); + leryssa->SetReactState(REACT_PASSIVE); + leryssa->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + leryssa->GetMotionMaster()->MovePoint(0, 3741.969971f, 3571.439941f, 477.441010f); } - uiPhaseTimer = 2000; - uiPhase = 0; + phaseTimer = 2000; + phase = 0; break; case 7: - DoScriptText(SAY_THASSARIAN_2, me); - uiPhaseTimer = 5000; - ++uiPhase; + Talk(SAY_THASSARIAN_2); + phaseTimer = 5000; + ++phase; break; case 8: - if (pArthas && pTalbot) + if (arthas && talbot) { - pArthas->SetInFront(me); //The client doesen't update with the new orientation :l - pTalbot->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_LICH_2, pArthas); + arthas->SetInFront(me); //The client doesen't update with the new orientation :l + talbot->SetStandState(UNIT_STAND_STATE_STAND); + arthas->AI()->Talk(SAY_LICH_2); } - uiPhaseTimer = 5000; - uiPhase = 9; + phaseTimer = 5000; + phase = 9; break; case 9: - DoScriptText(SAY_THASSARIAN_3, me); - uiPhaseTimer = 5000; - uiPhase = 10; + Talk(SAY_THASSARIAN_3); + phaseTimer = 5000; + phase = 10; break; case 10: - if (pTalbot) - DoScriptText(SAY_TALBOT_3, pTalbot); - uiPhaseTimer = 5000; - uiPhase = 11; + if (talbot) + talbot->AI()->Talk(SAY_TALBOT_3); + phaseTimer = 5000; + phase = 11; break; case 11: - if (pArthas) - DoScriptText(SAY_LICH_3, pArthas); - uiPhaseTimer = 5000; - uiPhase = 12; + if (arthas) + arthas->AI()->Talk(SAY_LICH_3); + phaseTimer = 5000; + phase = 12; break; case 12: - if (pTalbot) - DoScriptText(SAY_TALBOT_4, pTalbot); - uiPhaseTimer = 2000; - uiPhase = 13; + if (talbot) + talbot->AI()->Talk(SAY_TALBOT_4); + phaseTimer = 2000; + phase = 13; break; case 13: - if (pArthas) - pArthas->RemoveFromWorld(); - ++uiPhase; + if (arthas) + arthas->RemoveFromWorld(); + ++phase; break; case 14: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - if (pTalbot) + if (talbot) { - pTalbot->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - pTalbot->SetReactState(REACT_AGGRESSIVE); - pTalbot->CastSpell(me, SPELL_SHADOW_BOLT, false); + talbot->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + talbot->SetReactState(REACT_AGGRESSIVE); + talbot->CastSpell(me, SPELL_SHADOW_BOLT, false); } - uiPhaseTimer = 1500; - ++uiPhase; + phaseTimer = 1500; + ++phase; break; case 15: me->SetReactState(REACT_AGGRESSIVE); - AttackStart(pTalbot); - uiPhase = 0; + AttackStart(talbot); + phase = 0; break; case 16: me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - uiPhaseTimer = 20000; - ++uiPhase; + phaseTimer = 20000; + ++phase; break; case 17: - if (Creature* pLeryssa = me->GetCreature(*me, uiLeryssa)) - pLeryssa->RemoveFromWorld(); - if (Creature* pArlos= me->GetCreature(*me, uiArlos)) - pArlos->RemoveFromWorld(); - if (pTalbot) - pTalbot->RemoveFromWorld(); + if (Creature* leryssa = me->GetCreature(*me, leryssaGUID)) + leryssa->RemoveFromWorld(); + if (Creature* arlos= me->GetCreature(*me, arlosGUID)) + arlos->RemoveFromWorld(); + if (talbot) + talbot->RemoveFromWorld(); me->RemoveStandFlags(UNIT_STAND_STATE_SIT); SetEscortPaused(false); - uiPhaseTimer = 0; - uiPhase = 0; + phaseTimer = 0; + phase = 0; } - } else uiPhaseTimer -= uiDiff; + } else phaseTimer -= uiDiff; if (!UpdateVictim()) return; @@ -1231,17 +1197,17 @@ public: void JustDied(Unit* /*killer*/) { - if (Creature* pTalbot = me->GetCreature(*me, uiTalbot)) - pTalbot->RemoveFromWorld(); + if (Creature* talbot = me->GetCreature(*me, talbotGUID)) + talbot->RemoveFromWorld(); - if (Creature* pLeryssa = me->GetCreature(*me, uiLeryssa)) - pLeryssa->RemoveFromWorld(); + if (Creature* leryssa = me->GetCreature(*me, leryssaGUID)) + leryssa->RemoveFromWorld(); - if (Creature* pArlos = me->GetCreature(*me, uiArlos)) - pArlos->RemoveFromWorld(); + if (Creature* arlos = me->GetCreature(*me, arlosGUID)) + arlos->RemoveFromWorld(); - if (Creature* pArthas = me->GetCreature(*me, uiArthas)) - pArthas->RemoveFromWorld(); + if (Creature* arthas = me->GetCreature(*me, arthasGUID)) + arthas->RemoveFromWorld(); } }; @@ -1302,7 +1268,7 @@ public: if (me->isSummon()) if (Unit* summoner = me->ToTempSummon()->GetSummoner()) - CAST_AI(npc_thassarian::npc_thassarianAI, CAST_CRE(summoner)->AI())->bArthasInPosition = true; + CAST_AI(npc_thassarian::npc_thassarianAI, CAST_CRE(summoner)->AI())->arthasInPosition = true; } }; @@ -1334,7 +1300,7 @@ public: me->CastSpell(me, SPELL_STUN, true); if (me->isSummon()) if (Unit* summoner = me->ToTempSummon()->GetSummoner()) - CAST_AI(npc_thassarian::npc_thassarianAI, CAST_CRE(summoner)->AI())->bArlosInPosition = true; + CAST_AI(npc_thassarian::npc_thassarianAI, CAST_CRE(summoner)->AI())->arlosInPosition = true; } }; @@ -1366,23 +1332,23 @@ public: creature->RestoreFaction(); } - uint64 LeryssaGUID; - uint64 ArlosGUID; + uint64 leryssaGUID; + uint64 arlosGUID; bool bCheck; - uint32 uiShadowBoltTimer; - uint32 uiDeflectionTimer; - uint32 uiSoulBlastTimer; + uint32 shadowBoltTimer; + uint32 deflectionTimer; + uint32 soulBlastTimer; void Reset() { - LeryssaGUID = 0; - ArlosGUID = 0; + leryssaGUID = 0; + arlosGUID = 0; bCheck = false; - uiShadowBoltTimer = urand(5000, 12000); - uiDeflectionTimer = urand(20000, 25000); - uiSoulBlastTimer = urand (12000, 18000); + shadowBoltTimer = urand(5000, 12000); + deflectionTimer = urand(20000, 25000); + soulBlastTimer = urand (12000, 18000); } void MovementInform(uint32 uiType, uint32 /*uiId*/) { @@ -1391,17 +1357,17 @@ public: if (me->isSummon()) if (Unit* summoner = me->ToTempSummon()->GetSummoner()) - CAST_AI(npc_thassarian::npc_thassarianAI, CAST_CRE(summoner)->AI())->bTalbotInPosition = true; + CAST_AI(npc_thassarian::npc_thassarianAI, CAST_CRE(summoner)->AI())->talbotInPosition = true; } void UpdateAI(const uint32 uiDiff) { if (bCheck) { - if (Creature* pLeryssa = me->FindNearestCreature(NPC_LERYSSA, 50.0f, true)) - LeryssaGUID = pLeryssa->GetGUID(); - if (Creature* pArlos = me->FindNearestCreature(NPC_GENERAL_ARLOS, 50.0f, true)) - ArlosGUID = pArlos->GetGUID(); + if (Creature* leryssa = me->FindNearestCreature(NPC_LERYSSA, 50.0f, true)) + leryssaGUID = leryssa->GetGUID(); + if (Creature* arlos = me->FindNearestCreature(NPC_GENERAL_ARLOS, 50.0f, true)) + arlosGUID = arlos->GetGUID(); bCheck = false; } @@ -1410,23 +1376,23 @@ public: if (me->GetAreaId() == 4125) { - if (uiShadowBoltTimer <= uiDiff) + if (shadowBoltTimer <= uiDiff) { DoCast(me->getVictim(), SPELL_SHADOW_BOLT); - uiShadowBoltTimer = urand(5000, 12000); - } else uiShadowBoltTimer -= uiDiff; + shadowBoltTimer = urand(5000, 12000); + } else shadowBoltTimer -= uiDiff; - if (uiDeflectionTimer <= uiDiff) + if (deflectionTimer <= uiDiff) { DoCast(me->getVictim(), SPELL_DEFLECTION); - uiDeflectionTimer = urand(20000, 25000); - } else uiDeflectionTimer -= uiDiff; + deflectionTimer = urand(20000, 25000); + } else deflectionTimer -= uiDiff; - if (uiSoulBlastTimer <= uiDiff) + if (soulBlastTimer <= uiDiff) { DoCast(me->getVictim(), SPELL_SOUL_BLAST); - uiSoulBlastTimer = urand (12000, 18000); - } else uiSoulBlastTimer -= uiDiff; + soulBlastTimer = urand (12000, 18000); + } else soulBlastTimer -= uiDiff; } DoMeleeAttackIfReady(); @@ -1434,22 +1400,22 @@ public: void JustDied(Unit* killer) { - if (!LeryssaGUID || !ArlosGUID) + if (!leryssaGUID || !arlosGUID) return; - Creature* pLeryssa = Unit::GetCreature(*me, LeryssaGUID); - Creature* pArlos = Unit::GetCreature(*me, ArlosGUID); - if (!pLeryssa || !pArlos) + Creature* leryssa = Unit::GetCreature(*me, leryssaGUID); + Creature* arlos = Unit::GetCreature(*me, arlosGUID); + if (!leryssa || !arlos) return; - DoScriptText(SAY_ARLOS_1, pArlos); - DoScriptText(SAY_ARLOS_2, pArlos); - DoScriptText(SAY_LERYSSA_1, pLeryssa); - pArlos->Kill(pArlos, false); - pLeryssa->RemoveAura(SPELL_STUN); - pLeryssa->ClearUnitState(UNIT_STATE_STUNNED); - pLeryssa->SetWalk(false); - pLeryssa->GetMotionMaster()->MovePoint(0, 3722.114502f, 3564.201660f, 477.441437f); + arlos->AI()->Talk(SAY_ARLOS_1); + arlos->AI()->Talk(SAY_ARLOS_2); + leryssa->AI()->Talk(SAY_LERYSSA_1); + arlos->Kill(arlos, false); + leryssa->RemoveAura(SPELL_STUN); + leryssa->ClearUnitState(UNIT_STATE_STUNNED); + leryssa->SetWalk(false); + leryssa->GetMotionMaster()->MovePoint(0, 3722.114502f, 3564.201660f, 477.441437f); if (Player* player = killer->ToPlayer()) player->RewardPlayerAndGroupAtEvent(NPC_PRINCE_VALANAR, 0); @@ -1476,33 +1442,33 @@ public: npc_leryssaAI(Creature* creature) : ScriptedAI(creature) { bDone = false; - Phase = 0; - uiPhaseTimer = 0; + phase = 0; + phaseTimer = 0; creature->RemoveStandFlags(UNIT_STAND_STATE_SIT); } bool bDone; - uint32 Phase; - uint32 uiPhaseTimer; + uint32 phase; + uint32 phaseTimer; - void MovementInform(uint32 uiType, uint32 /*uiId*/) + void MovementInform(uint32 type, uint32 /*uiId*/) { - if (uiType != POINT_MOTION_TYPE) + if (type != POINT_MOTION_TYPE) return; if (!bDone) { - if (Creature* pTalbot = me->FindNearestCreature(NPC_PRINCE_VALANAR, 50.0f, true)) - CAST_AI(npc_counselor_talbot::npc_counselor_talbotAI, pTalbot->GetAI())->bCheck = true; + if (Creature* talbot = me->FindNearestCreature(NPC_PRINCE_VALANAR, 50.0f, true)) + CAST_AI(npc_counselor_talbot::npc_counselor_talbotAI, talbot->GetAI())->bCheck = true; me->AddUnitState(UNIT_STATE_STUNNED); me->CastSpell(me, SPELL_STUN, true); if (me->isSummon()) if (Unit* summoner = me->ToTempSummon()->GetSummoner()) - CAST_AI(npc_thassarian::npc_thassarianAI, summoner->GetAI())->bLeryssaInPosition = true; + CAST_AI(npc_thassarian::npc_thassarianAI, summoner->GetAI())->leryssaInPosition = true; bDone = true; } else @@ -1511,8 +1477,8 @@ public: if (me->isSummon()) if (Unit* summoner = me->ToTempSummon()->GetSummoner()) summoner->SetStandState(UNIT_STAND_STATE_SIT); - uiPhaseTimer = 1500; - Phase = 1; + phaseTimer = 1500; + phase = 1; } } @@ -1520,59 +1486,63 @@ public: { ScriptedAI::UpdateAI(uiDiff); - if (uiPhaseTimer <= uiDiff) + if (phaseTimer <= uiDiff) { - switch (Phase) + switch (phase) { case 1: if (me->isSummon()) - if (Unit* pThassarian = me->ToTempSummon()->GetSummoner()) - DoScriptText(SAY_THASSARIAN_4, pThassarian); - uiPhaseTimer = 5000; - ++Phase; + if (Unit* summoner = me->ToTempSummon()->GetSummoner()) + if (Creature* thassarian = summoner->ToCreature()) + thassarian->AI()->Talk(SAY_THASSARIAN_4); + phaseTimer = 5000; + ++phase; break; case 2: - DoScriptText(SAY_LERYSSA_2, me); - uiPhaseTimer = 5000; - ++Phase; + Talk(SAY_LERYSSA_2); + phaseTimer = 5000; + ++phase; break; case 3: if (me->isSummon()) - if (Unit* pThassarian = me->ToTempSummon()->GetSummoner()) - DoScriptText(SAY_THASSARIAN_5, pThassarian); - uiPhaseTimer = 5000; - ++Phase; + if (Unit* summoner = me->ToTempSummon()->GetSummoner()) + if (Creature* thassarian = summoner->ToCreature()) + thassarian->AI()->Talk(SAY_THASSARIAN_5); + phaseTimer = 5000; + ++phase; break; case 4: - DoScriptText(SAY_LERYSSA_3, me); - uiPhaseTimer = 5000; - ++Phase; + Talk(SAY_LERYSSA_3); + phaseTimer = 5000; + ++phase; break; case 5: if (me->isSummon()) - if (Unit* pThassarian = me->ToTempSummon()->GetSummoner()) - DoScriptText(SAY_THASSARIAN_6, pThassarian); - uiPhaseTimer = 5000; - ++Phase; + if (Unit* summoner = me->ToTempSummon()->GetSummoner()) + if (Creature* thassarian = summoner->ToCreature()) + thassarian->AI()->Talk(SAY_THASSARIAN_6); + phaseTimer = 5000; + ++phase; break; case 6: - DoScriptText(SAY_LERYSSA_4, me); - uiPhaseTimer = 5000; - ++Phase; + Talk(SAY_LERYSSA_4); + phaseTimer = 5000; + ++phase; break; case 7: if (me->isSummon()) - if (Unit* pThassarian = me->ToTempSummon()->GetSummoner()) - { - DoScriptText(SAY_THASSARIAN_7, pThassarian); - CAST_AI(npc_thassarian::npc_thassarianAI, pThassarian->GetAI())->uiPhase = 16; - } - uiPhaseTimer = 5000; - Phase = 0; + if (Unit* summoner = me->ToTempSummon()->GetSummoner()) + if (Creature* thassarian = summoner->ToCreature()) + { + thassarian->AI()->Talk(SAY_THASSARIAN_7); + CAST_AI(npc_thassarian::npc_thassarianAI, thassarian->GetAI())->phase = 16; + } + phaseTimer = 5000; + phase = 0; break; } - } else uiPhaseTimer -= uiDiff; + } else phaseTimer -= uiDiff; if (!UpdateVictim()) return; @@ -1676,13 +1646,13 @@ enum eImprisionedBerylSorcerer NPC_IMPRISONED_BERYL_SORCERER = 25478, - SAY_IMPRISIONED_BERYL_1 = -1571024, - SAY_IMPRISIONED_BERYL_2 = -1571025, - SAY_IMPRISIONED_BERYL_3 = -1571026, - SAY_IMPRISIONED_BERYL_4 = -1571027, - SAY_IMPRISIONED_BERYL_5 = -1571028, - SAY_IMPRISIONED_BERYL_6 = -1571029, - SAY_IMPRISIONED_BERYL_7 = -1571030, + SAY_IMPRISIONED_BERYL_1 = 0, + SAY_IMPRISIONED_BERYL_2 = 1, + SAY_IMPRISIONED_BERYL_3 = 2, + SAY_IMPRISIONED_BERYL_4 = 3, + SAY_IMPRISIONED_BERYL_5 = 4, + SAY_IMPRISIONED_BERYL_6 = 5, + SAY_IMPRISIONED_BERYL_7 = 6 }; class npc_imprisoned_beryl_sorcerer : public CreatureScript @@ -1745,25 +1715,25 @@ public: switch (step) { case 1: - DoScriptText(SAY_IMPRISIONED_BERYL_1, me); + Talk(SAY_IMPRISIONED_BERYL_1); break; case 2: - DoScriptText(SAY_IMPRISIONED_BERYL_2, me, caster); + Talk(SAY_IMPRISIONED_BERYL_2, caster->GetGUID()); break; case 3: - DoScriptText(SAY_IMPRISIONED_BERYL_3, me); + Talk(SAY_IMPRISIONED_BERYL_3); break; case 4: - DoScriptText(SAY_IMPRISIONED_BERYL_4, me); + Talk(SAY_IMPRISIONED_BERYL_4); break; case 5: - DoScriptText(SAY_IMPRISIONED_BERYL_5, me); + Talk(SAY_IMPRISIONED_BERYL_5); break; case 6: - DoScriptText(SAY_IMPRISIONED_BERYL_6, me, caster); + Talk(SAY_IMPRISIONED_BERYL_6, caster->GetGUID()); break; case 7: - DoScriptText(SAY_IMPRISIONED_BERYL_7, me); + Talk(SAY_IMPRISIONED_BERYL_7); caster->KilledMonsterCredit(NPC_IMPRISONED_BERYL_SORCERER, 0); break; } @@ -1780,18 +1750,16 @@ public: /*###### ## npc_mootoo_the_younger ######*/ -enum Script_Texts_Mootoo_the_Younger +enum MootooTheYounger { - SAY_1 =-1750040, - SAY_2 =-1750041, - SAY_3 =-1750042, - SAY_4 =-1750043, - SAY_5 =-1750044 -}; -enum Mootoo_the_Younger_Entries -{ - NPC_MOOTOO_THE_YOUNGER =25504, - QUEST_ESCAPING_THE_MIST =11664 + SAY_1 = 0, + SAY_2 = 1, + SAY_3 = 2, + SAY_4 = 3, + SAY_5 = 4, + + NPC_MOOTOO_THE_YOUNGER = 25504, + QUEST_ESCAPING_THE_MIST = 11664 }; class npc_mootoo_the_younger : public CreatureScript @@ -1813,7 +1781,7 @@ public: break; } creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_1, creature); + creature->AI()->Talk(SAY_1); CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); } return true; @@ -1844,19 +1812,19 @@ public: { case 10: me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - DoScriptText(SAY_2, me); + Talk(SAY_2); break; case 12: - DoScriptText(SAY_3, me); + Talk(SAY_3); me->HandleEmoteCommand(EMOTE_ONESHOT_LOOT); break; case 16: - DoScriptText(SAY_4, me); + Talk(SAY_4); me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); break; case 20: me->SetPhaseMask(1, true); - DoScriptText(SAY_5, me); + Talk(SAY_5); me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); player->GroupEventHappens(QUEST_ESCAPING_THE_MIST, me); SetRun(true); @@ -1875,15 +1843,13 @@ public: ## npc_bonker_togglevolt ######*/ -enum Bonker_Togglevolt_Entries -{ - NPC_BONKER_TOGGLEVOLT = 25589, - QUEST_GET_ME_OUTA_HERE = 11673 -}; -enum Script_Texts_Bonker_Togglevolt +enum BonkerTogglevolt { - SAY_bonker_1 = -1700002, - SAY_bonker_2 = -1700003 + NPC_BONKER_TOGGLEVOLT = 25589, + QUEST_GET_ME_OUTA_HERE = 11673, + + SAY_BONKER_1 = 0, + SAY_BONKER_2 = 1 }; class npc_bonker_togglevolt : public CreatureScript @@ -1896,7 +1862,7 @@ public: if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE) { creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_bonker_2, creature, player); + creature->AI()->Talk(SAY_BONKER_2, player->GetGUID()); CAST_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID()); } return true; @@ -1925,7 +1891,7 @@ public: { if (Bonker_agro == 0) { - DoScriptText(SAY_bonker_1, me); + Talk(SAY_BONKER_1); Bonker_agro++; } DoMeleeAttackIfReady(); @@ -2343,10 +2309,10 @@ enum eHiddenCultist NPC_SALTY_JOHN_THORPE = 25248, NPC_GUARD_MITCHELLS = 25828, - SAY_HIDDEN_CULTIST_1 = -1571044, - SAY_HIDDEN_CULTIST_2 = -1571045, - SAY_HIDDEN_CULTIST_3 = -1571046, - SAY_HIDDEN_CULTIST_4 = -1571047 + SAY_HIDDEN_CULTIST_1 = 0, + SAY_HIDDEN_CULTIST_2 = 1, + SAY_HIDDEN_CULTIST_3 = 2, + SAY_HIDDEN_CULTIST_4 = 3 }; const char* GOSSIP_ITEM_TOM_HEGGER = "What do you know about the Cult of the Damned?"; @@ -2428,17 +2394,17 @@ public: { case NPC_SALTY_JOHN_THORPE: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); - DoScriptText(SAY_HIDDEN_CULTIST_1, me); + Talk(SAY_HIDDEN_CULTIST_1); uiEventTimer = 5000; uiEventPhase = 2; break; case NPC_GUARD_MITCHELLS: - DoScriptText(SAY_HIDDEN_CULTIST_2, me); + Talk(SAY_HIDDEN_CULTIST_2); uiEventTimer = 5000; uiEventPhase = 2; break; case NPC_TOM_HEGGER: - DoScriptText(SAY_HIDDEN_CULTIST_3, me); + Talk(SAY_HIDDEN_CULTIST_3); uiEventTimer = 5000; uiEventPhase = 2; break; @@ -2448,7 +2414,7 @@ public: switch (me->GetEntry()) { case NPC_SALTY_JOHN_THORPE: - DoScriptText(SAY_HIDDEN_CULTIST_4, me); + Talk(SAY_HIDDEN_CULTIST_4); if (Player* player = me->GetPlayer(*me, uiPlayerGUID)) { me->SetInFront(player); @@ -2548,7 +2514,6 @@ void AddSC_borean_tundra() new npc_corastrasza(); new npc_iruk(); new mob_nerubar_victim(); - new npc_scourge_prisoner(); new npc_jenny(); new npc_fezzix_geartwist(); new npc_nesingwary_trapper(); diff --git a/src/server/scripts/Northrend/grizzly_hills.cpp b/src/server/scripts/Northrend/grizzly_hills.cpp index 0363e0c892d..8bcc255b343 100644 --- a/src/server/scripts/Northrend/grizzly_hills.cpp +++ b/src/server/scripts/Northrend/grizzly_hills.cpp @@ -21,6 +21,7 @@ #include "ScriptedEscortAI.h" #include "Player.h" #include "SpellInfo.h" +#include "CreatureTextMgr.h" /*###### ## Quest 12027: Mr. Floppy's Perilous Adventure @@ -37,19 +38,19 @@ enum eFloppy SPELL_MRFLOPPY = 47184, //vehicle aura - SAY_WORGHAGGRO1 = -1800001, //Um... I think one of those wolves is back... - SAY_WORGHAGGRO2 = -1800002, //He's going for Mr. Floppy! - SAY_WORGRAGGRO3 = -1800003, //Oh, no! Look, it's another wolf, and it's a biiiiiig one! - SAY_WORGRAGGRO4 = -1800004, //He's gonna eat Mr. Floppy! You gotta help Mr. Floppy! You just gotta! - SAY_RANDOMAGGRO = -1800005, //There's a big meanie attacking Mr. Floppy! Help! - SAY_VICTORY1 = -1800006, //Let's get out of here before more wolves find us! - SAY_VICTORY2 = -1800007, //Don't go toward the light, Mr. Floppy! - SAY_VICTORY3 = -1800008, //Mr. Floppy, you're ok! Thank you so much for saving Mr. Floppy! - SAY_VICTORY4 = -1800009, //I think I see the camp! We're almost home, Mr. Floppy! Let's go! - TEXT_EMOTE_WP1 = -1800010, //Mr. Floppy revives - TEXT_EMOTE_AGGRO = -1800011, //The Ravenous Worg chomps down on Mr. Floppy - SAY_QUEST_ACCEPT = -1800012, //Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves! - SAY_QUEST_COMPLETE = -1800013 //Thank you for helping me get back to the camp. Go tell Walter that I'm safe now! + SAY_WORGHAGGRO1 = 0, //Um... I think one of those wolves is back... + SAY_WORGHAGGRO2 = 1, //He's going for Mr. Floppy! + SAY_WORGRAGGRO3 = 2, //Oh, no! Look, it's another wolf, and it's a biiiiiig one! + SAY_WORGRAGGRO4 = 3, //He's gonna eat Mr. Floppy! You gotta help Mr. Floppy! You just gotta! + SAY_RANDOMAGGRO = 4, //There's a big meanie attacking Mr. Floppy! Help! + SAY_VICTORY1 = 5, //Let's get out of here before more wolves find us! + SAY_VICTORY2 = 6, //Don't go toward the light, Mr. Floppy! + SAY_VICTORY3 = 7, //Mr. Floppy, you're ok! Thank you so much for saving Mr. Floppy! + SAY_VICTORY4 = 8, //I think I see the camp! We're almost home, Mr. Floppy! Let's go! + TEXT_EMOTE_WP1 = 9, //Mr. Floppy revives + TEXT_EMOTE_AGGRO = 10, //The Ravenous Worg chomps down on Mr. Floppy + SAY_QUEST_ACCEPT = 11, //Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves! + SAY_QUEST_COMPLETE = 12 //Thank you for helping me get back to the camp. Go tell Walter that I'm safe now! }; //emily @@ -92,7 +93,7 @@ public: case 10: if (Unit::GetCreature(*me, MrfloppyGUID)) { - DoScriptText(SAY_WORGHAGGRO1, me); + Talk(SAY_WORGHAGGRO1); me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000); } break; @@ -103,7 +104,7 @@ public: case 17: if (Creature* Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); - DoScriptText(SAY_WORGRAGGRO3, me); + Talk(SAY_WORGRAGGRO3); if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000)) { RWORG->setFaction(35); @@ -141,7 +142,7 @@ public: Mrfloppy->ExitVehicle(); RWORG->setFaction(14); RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10, RWORG->GetPositionY()+80, RWORG->GetPositionZ()); - DoScriptText(SAY_VICTORY2, me); + Talk(SAY_VICTORY2); } } break; @@ -155,7 +156,7 @@ public: me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); Mrfloppy->setDeathState(ALIVE); Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); - DoScriptText(SAY_VICTORY3, me); + Talk(SAY_VICTORY3); } } break; @@ -164,12 +165,12 @@ public: { Completed = true; player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me); - DoScriptText(SAY_QUEST_COMPLETE, me, player); + Talk(SAY_QUEST_COMPLETE, player->GetGUID()); } me->SetWalk(false); break; case 25: - DoScriptText(SAY_VICTORY4, me); + Talk(SAY_VICTORY4); break; case 27: me->DisappearAndDie(); @@ -181,7 +182,7 @@ public: void EnterCombat(Unit* /*Who*/) { - DoScriptText(SAY_RANDOMAGGRO, me); + Talk(SAY_RANDOMAGGRO); } void Reset() @@ -209,7 +210,7 @@ public: { if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE) { - DoScriptText(SAY_QUEST_ACCEPT, creature); + creature->AI()->Talk(SAY_QUEST_ACCEPT); if (Creature* Mrfloppy = GetClosestCreatureWithEntry(creature, NPC_MRFLOPPY, 180.0f)) Mrfloppy->GetMotionMaster()->MoveFollow(creature, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); @@ -248,13 +249,13 @@ public: switch (Who->GetEntry()) { case NPC_HUNGRY_WORG: - DoScriptText(SAY_WORGHAGGRO2, Emily); + Emily->AI()->Talk(SAY_WORGHAGGRO2); break; case NPC_RAVENOUS_WORG: - DoScriptText(SAY_WORGRAGGRO4, Emily); + Emily->AI()->Talk(SAY_WORGRAGGRO4); break; default: - DoScriptText(SAY_RANDOMAGGRO, Emily); + Emily->AI()->Talk(SAY_RANDOMAGGRO); } } } @@ -461,12 +462,10 @@ public: enum eSkirmisher { - SPELL_RENEW_SKIRMISHER = 48812, - CREDIT_NPC = 27466, + SPELL_RENEW_SKIRMISHER = 48812, + CREDIT_NPC = 27466, - RANDOM_SAY_1 = -1800044, //Ahh..better.. - RANDOM_SAY_2 = -1800045, //Whoa.. i nearly died there. Thank you, $Race! - RANDOM_SAY_3 = -1800046 //Thank you. $Class! + RANDOM_SAY = 0, }; class npc_wounded_skirmisher : public CreatureScript @@ -500,7 +499,7 @@ public: && caster->ToPlayer()->GetQuestStatus(12288) == QUEST_STATUS_INCOMPLETE) { caster->ToPlayer()->KilledMonsterCredit(CREDIT_NPC, 0); - DoScriptText(RAND(RANDOM_SAY_1, RANDOM_SAY_2, RANDOM_SAY_3), caster); + sCreatureTextMgr->SendChat(me, RANDOM_SAY, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, caster->ToPlayer()); if (me->IsStandState()) me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ()); else @@ -593,16 +592,12 @@ public: /*Venture co. Straggler - when you cast Smoke Bomb, he will yell and run away*/ enum eSmokeEmOut { - SAY_SEO1 = -1603535, - SAY_SEO2 = -1603536, - SAY_SEO3 = -1603537, - SAY_SEO4 = -1603538, - SAY_SEO5 = -1603539, - QUEST_SMOKE_EM_OUT_A = 12323, - QUEST_SMOKE_EM_OUT_H = 12324, - SPELL_SMOKE_BOMB = 49075, - SPELL_CHOP = 43410, - SPELL_VENTURE_STRAGGLER_CREDIT = 49093, + SAY_SEO = 0, + QUEST_SMOKE_EM_OUT_A = 12323, + QUEST_SMOKE_EM_OUT_H = 12324, + SPELL_SMOKE_BOMB = 49075, + SPELL_CHOP = 43410, + SPELL_VENTURE_STRAGGLER_CREDIT = 49093, }; class npc_venture_co_straggler : public CreatureScript @@ -644,7 +639,7 @@ class npc_venture_co_straggler : public CreatureScript ++uiTimer; break; case 1: - DoScriptText(RAND(SAY_SEO1, SAY_SEO2, SAY_SEO3, SAY_SEO4, SAY_SEO5), me); + Talk(SAY_SEO); me->GetMotionMaster()->MovePoint(0, me->GetPositionX()-7, me->GetPositionY()-5, me->GetPositionZ()); uiRunAwayTimer = 2500; ++uiTimer; diff --git a/src/server/scripts/Northrend/icecrown.cpp b/src/server/scripts/Northrend/icecrown.cpp index 030df23028c..e08a9173715 100644 --- a/src/server/scripts/Northrend/icecrown.cpp +++ b/src/server/scripts/Northrend/icecrown.cpp @@ -494,6 +494,378 @@ class npc_tournament_training_dummy : public CreatureScript }; +// Battle for Crusaders' Pinnacle +enum BlessedBanner +{ + SPELL_BLESSING_OF_THE_CRUSADE = 58026, + SPELL_THREAT_PULSE = 58113, + SPELL_CRUSADERS_SPIRE_VICTORY = 58084, + SPELL_TORCH = 58121, + + NPC_BLESSED_BANNER = 30891, + NPC_CRUSADER_LORD_DALFORS = 31003, + NPC_ARGENT_BATTLE_PRIEST = 30919, + NPC_ARGENT_MASON = 30900, + NPC_REANIMATED_CAPTAIN = 30986, + NPC_SCOURGE_DRUDGE = 30984, + NPC_HIDEOUS_PLAGEBRINGER = 30987, + NPC_HALOF_THE_DEATHBRINGER = 30989, + NPC_LK = 31013, + + BANNER_SAY = 0, // "The Blessed Banner of the Crusade has been planted.\n Defend the banner from all attackers!" + DALFORS_SAY_PRE_1 = 0, // "BY THE LIGHT! Those damned monsters! Look at what they've done to our people!" + DALFORS_SAY_PRE_2 = 1, // "Burn it down, boys. Burn it all down." + DALFORS_SAY_START = 2, // "Let 'em come. They'll pay for what they've done!" + DALFORS_YELL_FINISHED = 3, // "We've done it, lads! We've taken the pinnacle from the Scourge! Report to Father Gustav at once and tell him the good news! We're gonna get to buildin' and settin' up! Go!" + LK_TALK_1 = 0, // "Leave no survivors!" + LK_TALK_2 = 1, // "Cower before my terrible creations!" + LK_TALK_3 = 2, // "Feast my children! Feast upon the flesh of the living!" + LK_TALK_4 = 3, // "Lay down your arms and surrender your souls!" + + EVENT_SPAWN = 1, + EVENT_INTRO_1 = 2, + EVENT_INTRO_2 = 3, + EVENT_INTRO_3 = 4, + EVENT_MASON_ACTION = 5, + EVENT_START_FIGHT = 6, + EVENT_WAVE_SPAWN = 7, + EVENT_HALOF = 8, + EVENT_ENDED = 9, +}; + +Position const DalforsPos[3] = +{ + {6458.703f, 403.858f, 490.498f, 3.1205f}, // Dalfors spawn point + {6422.950f, 423.335f, 510.451f, 0.0f}, // Dalfors intro pos + {6426.343f, 420.515f, 508.650f, 0.0f}, // Dalfors fight pos +}; + +Position const Priest1Pos[2] = +{ + {6462.025f, 403.681f, 489.721f, 3.1007f}, // priest1 spawn point + {6421.480f, 423.576f, 510.781f, 5.7421f}, // priest1 intro pos +}; + +Position const Priest2Pos[2] = +{ + {6463.969f, 407.198f, 489.240f, 2.2689f}, // priest2 spawn point + {6419.778f, 421.404f, 510.972f, 5.7421f}, // priest2 intro pos +}; + +Position const Priest3Pos[2] = +{ + {6464.371f, 400.944f, 489.186f, 6.1610f}, // priest3 spawn point + {6423.516f, 425.782f, 510.774f, 5.7421f}, // priest3 intro pos +}; + +Position const Mason1Pos[3] = +{ + {6462.929f, 409.826f, 489.392f, 3.0968f}, // mason1 spawn point + {6428.163f, 421.960f, 508.297f, 0.0f}, // mason1 intro pos + {6414.335f, 454.904f, 511.395f, 2.8972f}, // mason1 action pos +}; + +Position const Mason2Pos[3] = +{ + {6462.650f, 405.670f, 489.576f, 2.9414f}, // mason2 spawn point + {6426.250f, 419.194f, 508.219f, 0.0f}, // mason2 intro pos + {6415.014f, 446.849f, 511.395f, 3.1241f}, // mason2 action pos +}; + +Position const Mason3Pos[3] = +{ + {6462.646f, 401.218f, 489.601f, 2.7864f}, // mason3 spawn point + {6423.855f, 416.598f, 508.305f, 0.0f}, // mason3 intro pos + {6417.070f, 438.824f, 511.395f, 3.6651f}, // mason3 action pos +}; + +class npc_blessed_banner : public CreatureScript +{ +public: + npc_blessed_banner() : CreatureScript("npc_blessed_banner") { } + + struct npc_blessed_bannerAI : public Scripted_NoMovementAI + { + npc_blessed_bannerAI(Creature* creature) : Scripted_NoMovementAI(creature) , Summons(me) + { + HalofSpawned = false; + PhaseCount = 0; + Summons.DespawnAll(); + } + + EventMap events; + + bool HalofSpawned; + + uint32 PhaseCount; + + SummonList Summons; + + uint64 guidDalfors; + uint64 guidPriest[3]; + uint64 guidMason[3]; + uint64 guidHalof; + + void Reset() + { + me->setRegeneratingHealth(false); + DoCast(SPELL_THREAT_PULSE); + me->AI()->Talk(BANNER_SAY); + events.ScheduleEvent(EVENT_SPAWN,3000); + } + + void EnterCombat(Unit* /*who*/) {} + + void MoveInLineOfSight(Unit* /*who*/) {} + + void JustSummoned(Creature* Summoned) + { + Summons.Summon(Summoned); + } + + void JustDied(Unit* /*killer*/) + { + Summons.DespawnAll(); + me->DespawnOrUnsummon(); + } + + void UpdateAI(uint32 const diff) + { + events.Update(diff); + + switch (events.ExecuteEvent()) + { + case EVENT_SPAWN: + { + if (Creature* Dalfors = DoSummon(NPC_CRUSADER_LORD_DALFORS, DalforsPos[0])) + { + guidDalfors = Dalfors->GetGUID(); + Dalfors->GetMotionMaster()->MovePoint(0, DalforsPos[1]); + } + if (Creature* Priest1 = DoSummon(NPC_ARGENT_BATTLE_PRIEST, Priest1Pos[0])) + { + guidPriest[0] = Priest1->GetGUID(); + Priest1->GetMotionMaster()->MovePoint(0, Priest1Pos[1]); + } + if (Creature* Priest2 = DoSummon(NPC_ARGENT_BATTLE_PRIEST, Priest2Pos[0])) + { + guidPriest[1] = Priest2->GetGUID(); + Priest2->GetMotionMaster()->MovePoint(0, Priest2Pos[1]); + } + if (Creature* Priest3 = DoSummon(NPC_ARGENT_BATTLE_PRIEST, Priest3Pos[0])) + { + guidPriest[2] = Priest3->GetGUID(); + Priest3->GetMotionMaster()->MovePoint(0, Priest3Pos[1]); + } + if (Creature* Mason1 = DoSummon(NPC_ARGENT_MASON, Mason1Pos[0])) + { + guidMason[0] = Mason1->GetGUID(); + Mason1->GetMotionMaster()->MovePoint(0, Mason1Pos[1]); + } + if (Creature* Mason2 = DoSummon(NPC_ARGENT_MASON, Mason2Pos[0])) + { + guidMason[1] = Mason2->GetGUID(); + Mason2->GetMotionMaster()->MovePoint(0, Mason2Pos[1]); + } + if (Creature* Mason3 = DoSummon(NPC_ARGENT_MASON, Mason3Pos[0])) + { + guidMason[2] = Mason3->GetGUID(); + Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[1]); + } + events.ScheduleEvent(EVENT_INTRO_1,15000); + } + break; + case EVENT_INTRO_1: + { + if (Creature* Dalfors = me->GetCreature(*me,guidDalfors)) + Dalfors->AI()->Talk(DALFORS_SAY_PRE_1); + events.ScheduleEvent(EVENT_INTRO_2,5000); + } + break; + case EVENT_INTRO_2: + { + if (Creature* Dalfors = me->GetCreature(*me,guidDalfors)) + { + Dalfors->SetFacingTo(6.215f); + Dalfors->AI()->Talk(DALFORS_SAY_PRE_2); + } + events.ScheduleEvent(EVENT_INTRO_3,5000); + } + break; + case EVENT_INTRO_3: + { + if (Creature* Dalfors = me->GetCreature(*me,guidDalfors)) + { + Dalfors->GetMotionMaster()->MovePoint(0, DalforsPos[2]); + Dalfors->SetHomePosition(DalforsPos[2]); + } + if (Creature* Priest1 = me->GetCreature(*me,guidPriest[0])) + { + Priest1->SetFacingTo(5.7421f); + Priest1->SetHomePosition(Priest1Pos[1]); + } + if (Creature* Priest2 = me->GetCreature(*me,guidPriest[1])) + { + Priest2->SetFacingTo(5.7421f); + Priest2->SetHomePosition(Priest2Pos[1]); + } + if (Creature* Priest3 = me->GetCreature(*me,guidPriest[2])) + { + Priest3->SetFacingTo(5.7421f); + Priest3->SetHomePosition(Priest3Pos[1]); + } + if (Creature* Mason1 = me->GetCreature(*me,guidMason[0])) + { + Mason1->GetMotionMaster()->MovePoint(0, Mason1Pos[2]); + Mason1->SetHomePosition(Mason1Pos[2]); + } + if (Creature* Mason2 = me->GetCreature(*me,guidMason[1])) + { + Mason2->GetMotionMaster()->MovePoint(0, Mason2Pos[2]); + Mason2->SetHomePosition(Mason2Pos[2]); + } + if (Creature* Mason3 = me->GetCreature(*me,guidMason[2])) + { + Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[2]); + Mason3->SetHomePosition(Mason3Pos[2]); + } + events.ScheduleEvent(EVENT_START_FIGHT,5000); + events.ScheduleEvent(EVENT_MASON_ACTION,15000); + } + break; + case EVENT_MASON_ACTION: + { + if (Creature* Mason1 = me->GetCreature(*me,guidMason[0])) + { + Mason1->SetFacingTo(2.8972f); + Mason1->AI()->SetData(1,1); // triggers SAI actions on npc + } + if (Creature* Mason2 = me->GetCreature(*me,guidMason[1])) + { + Mason2->SetFacingTo(3.1241f); + Mason2->AI()->SetData(1,1); // triggers SAI actions on npc + } + if (Creature* Mason3 = me->GetCreature(*me,guidMason[2])) + { + Mason3->SetFacingTo(3.6651f); + Mason3->AI()->SetData(1,1); // triggers SAI actions on npc + } + } + break; + case EVENT_START_FIGHT: + { + if(Creature* LK = GetClosestCreatureWithEntry(me,NPC_LK,100)) + LK->AI()->Talk(LK_TALK_1); + if (Creature* Dalfors = me->GetCreature(*me,guidDalfors)) + Dalfors->AI()->Talk(DALFORS_SAY_START); + events.ScheduleEvent(EVENT_WAVE_SPAWN,1000); + } + break; + case EVENT_WAVE_SPAWN: + { + if (PhaseCount == 3) + { + if (Creature* LK = GetClosestCreatureWithEntry(me,NPC_LK,100)) + LK->AI()->Talk(LK_TALK_2); + } + else if (PhaseCount == 6) + { + if (Creature* LK = GetClosestCreatureWithEntry(me,NPC_LK,100)) + LK->AI()->Talk(LK_TALK_3); + } + if (Creature* tempsum = DoSummon(NPC_SCOURGE_DRUDGE,Mason3Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + if (urand(0,1) == 0) + { + if (Creature* tempsum = DoSummon(NPC_HIDEOUS_PLAGEBRINGER,Mason1Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + if (Creature* tempsum = DoSummon(NPC_HIDEOUS_PLAGEBRINGER,Mason2Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + } + else + { + if (Creature* tempsum = DoSummon(NPC_REANIMATED_CAPTAIN,Mason1Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + if (Creature* tempsum = DoSummon(NPC_REANIMATED_CAPTAIN,Mason2Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + } + + PhaseCount++; + + if (PhaseCount < 8) + events.ScheduleEvent(EVENT_WAVE_SPAWN,urand(10000,20000)); + else + events.ScheduleEvent(EVENT_HALOF,urand(10000,20000)); + } + break; + case EVENT_HALOF: + { + if (Creature* LK = GetClosestCreatureWithEntry(me,NPC_LK,100)) + LK->AI()->Talk(LK_TALK_4); + if (Creature* tempsum = DoSummon(NPC_SCOURGE_DRUDGE,Mason1Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + if (Creature* tempsum = DoSummon(NPC_SCOURGE_DRUDGE,Mason2Pos[0])) + { + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + if (Creature* tempsum = DoSummon(NPC_HALOF_THE_DEATHBRINGER,DalforsPos[0])) + { + HalofSpawned = true; + guidHalof = tempsum->GetGUID(); + tempsum->SetHomePosition(DalforsPos[2]); + tempsum->AI()->AttackStart(GetClosestCreatureWithEntry(me,NPC_BLESSED_BANNER,100)); + } + } + break; + case EVENT_ENDED: + { + Summons.DespawnAll(); + me->DespawnOrUnsummon(); + } + break; + } + + if (PhaseCount == 8) + if (Creature* Halof = me->GetCreature(*me,guidHalof)) + if (Halof->isDead()) + { + DoCast(me,SPELL_CRUSADERS_SPIRE_VICTORY,true); + Summons.DespawnEntry(NPC_HIDEOUS_PLAGEBRINGER); + Summons.DespawnEntry(NPC_REANIMATED_CAPTAIN); + Summons.DespawnEntry(NPC_SCOURGE_DRUDGE); + Summons.DespawnEntry(NPC_HALOF_THE_DEATHBRINGER); + if (Creature* Dalfors = me->GetCreature(*me,guidDalfors)) + Dalfors->AI()->Talk(DALFORS_YELL_FINISHED); + events.ScheduleEvent(EVENT_ENDED,10000); + } + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_blessed_bannerAI(creature); + } +}; + void AddSC_icecrown() { new npc_arete; @@ -502,4 +874,5 @@ void AddSC_icecrown() new npc_guardian_pavilion; new npc_vereth_the_cunning; new npc_tournament_training_dummy; + new npc_blessed_banner(); } diff --git a/src/server/scripts/Northrend/sholazar_basin.cpp b/src/server/scripts/Northrend/sholazar_basin.cpp index 8404413ad9d..5bf45452d34 100644 --- a/src/server/scripts/Northrend/sholazar_basin.cpp +++ b/src/server/scripts/Northrend/sholazar_basin.cpp @@ -18,7 +18,7 @@ /* ScriptData SDName: Sholazar_Basin SD%Complete: 100 -SDComment: Quest support: 12570, 12573, 12621. +SDComment: Quest support: 12570, 12573, 12621, 12726 SDCategory: Sholazar_Basin EndScriptData */ @@ -26,6 +26,7 @@ EndScriptData */ npc_injured_rainspeaker_oracle npc_vekjik avatar_of_freya +npc_haiphoon (Quest: "Song of Wind and Water") EndContentData */ #include "ScriptMgr.h" @@ -34,6 +35,8 @@ EndContentData */ #include "ScriptedEscortAI.h" #include "SpellScript.h" #include "SpellAuras.h" +#include "Vehicle.h" +#include "CombatAI.h" #include "Player.h" /*###### @@ -44,9 +47,9 @@ EndContentData */ enum eRainspeaker { - SAY_START_IRO = -1571000, - SAY_QUEST_ACCEPT_IRO = -1571001, - SAY_END_IRO = -1571002, + SAY_START_IRO = 0, + SAY_QUEST_ACCEPT_IRO = 1, + SAY_END_IRO = 2, QUEST_FORTUNATE_MISUNDERSTANDINGS = 12570, FACTION_ESCORTEE_A = 774, @@ -106,7 +109,7 @@ public: case 28: player->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me); // me->RestoreFaction(); - DoScriptText(SAY_END_IRO, me); + Talk(SAY_END_IRO); SetRun(false); break; } @@ -146,7 +149,7 @@ public: CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); CAST_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(35.0f); creature->SetUnitMovementFlags(MOVEMENTFLAG_FALLING); - DoScriptText(SAY_START_IRO, creature); + creature->AI()->Talk(SAY_START_IRO); switch (player->GetTeam()){ case ALLIANCE: @@ -162,7 +165,7 @@ public: bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* /*_Quest*/) { - DoScriptText(SAY_QUEST_ACCEPT_IRO, creature); + creature->AI()->Talk(SAY_QUEST_ACCEPT_IRO); return false; } @@ -184,7 +187,7 @@ enum eVekjik GOSSIP_TEXTID_VEKJIK1 = 13137, GOSSIP_TEXTID_VEKJIK2 = 13138, - SAY_TEXTID_VEKJIK1 = -1000208, + SAY_TEXTID_VEKJIK1 = 0, SPELL_FREANZYHEARTS_FURY = 51469, @@ -223,7 +226,7 @@ public: break; case GOSSIP_ACTION_INFO_DEF+2: player->CLOSE_GOSSIP_MENU(); - DoScriptText(SAY_TEXTID_VEKJIK1, creature, player); + creature->AI()->Talk(SAY_TEXTID_VEKJIK1, player->GetGUID()); player->AreaExploredOrEventHappens(QUEST_MAKING_PEACE); creature->CastSpell(player, SPELL_FREANZYHEARTS_FURY, false); break; @@ -342,13 +345,13 @@ enum eEnums SPELL_EXPLODE_CRYSTAL = 62487, SPELL_FLAMES = 64561, - SAY_WP_7 = -1800047, - SAY_WP_6 = -1800048, - SAY_WP_5 = -1800049, - SAY_WP_4 = -1800050, - SAY_WP_3 = -1800051, - SAY_WP_2 = -1800052, - SAY_WP_1 = -1800053, + SAY_WP_1 = 0, + SAY_WP_2 = 1, + SAY_WP_3 = 2, + SAY_WP_4 = 3, + SAY_WP_5 = 4, + SAY_WP_6 = 5, + SAY_WP_7 = 6, QUEST_DISASTER = 12688 }; @@ -371,19 +374,19 @@ public: switch (waypointId) { case 0: - DoScriptText(SAY_WP_2, me); + Talk(SAY_WP_2); break; case 1: - DoScriptText(SAY_WP_3, me); + Talk(SAY_WP_3); me->CastSpell(5918.33f, 5372.91f, -98.770f, SPELL_EXPLODE_CRYSTAL, true); me->SummonGameObject(184743, 5918.33f, 5372.91f, -98.770f, 0, 0, 0, 0, 0, TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); break; case 2: - DoScriptText(SAY_WP_4, me); + Talk(SAY_WP_4); break; case 7: - DoScriptText(SAY_WP_5, me); + Talk(SAY_WP_5); break; case 8: me->CastSpell(5887.37f, 5379.39f, -91.289f, SPELL_EXPLODE_CRYSTAL, true); @@ -391,13 +394,13 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); break; case 9: - DoScriptText(SAY_WP_6, me); + Talk(SAY_WP_6); break; case 13: if (player) { player->GroupEventHappens(QUEST_DISASTER, me); - DoScriptText(SAY_WP_7, me); + Talk(SAY_WP_7); } break; } @@ -448,7 +451,7 @@ public: creature->setFaction(113); pEscortAI->Start(false, false, player->GetGUID()); - DoScriptText(SAY_WP_1, creature); + creature->AI()->Talk(SAY_WP_1); } } return true; @@ -713,8 +716,8 @@ enum eAdventurousDwarf GOSSIP_MENU_DWARF = 13307, - SAY_DWARF_OUCH = -1571042, - SAY_DWARF_HELP = -1571043 + SAY_DWARF_OUCH = 0, + SAY_DWARF_HELP = 1 }; class npc_adventurous_dwarf : public CreatureScript @@ -722,10 +725,17 @@ class npc_adventurous_dwarf : public CreatureScript public: npc_adventurous_dwarf() : CreatureScript("npc_adventurous_dwarf") { } + struct npc_adventurous_dwarfAI : public ScriptedAI + { + npc_adventurous_dwarfAI(Creature* creature) : ScriptedAI(creature) + { + Talk(SAY_DWARF_OUCH); + } + }; + CreatureAI* GetAI(Creature* creature) const { - DoScriptText(SAY_DWARF_OUCH, creature); - return NULL; + return new npc_adventurous_dwarfAI(creature); } bool OnGossipHello(Player* player, Creature* creature) @@ -750,15 +760,24 @@ public: { player->PlayerTalkClass->ClearMenus(); uint32 spellId = 0; + switch (action) { - case GOSSIP_ACTION_INFO_DEF + 1: spellId = SPELL_ADD_ORANGE; break; - case GOSSIP_ACTION_INFO_DEF + 2: spellId = SPELL_ADD_BANANAS; break; - case GOSSIP_ACTION_INFO_DEF + 3: spellId = SPELL_ADD_PAPAYA; break; + case GOSSIP_ACTION_INFO_DEF + 1: + spellId = SPELL_ADD_ORANGE; + break; + case GOSSIP_ACTION_INFO_DEF + 2: + spellId = SPELL_ADD_BANANAS; + break; + case GOSSIP_ACTION_INFO_DEF + 3: + spellId = SPELL_ADD_PAPAYA; + break; } + if (spellId) player->CastSpell(player, spellId, true); - DoScriptText(SAY_DWARF_HELP, creature); + + creature->AI()->Talk(SAY_DWARF_HELP); creature->DespawnOrUnsummon(); return true; } @@ -968,6 +987,52 @@ public: } }; +/*###### +## Quest: Song of Wind and Water ID: 12726 +######*/ +/*This quest precisly needs core script since battle vehicles are not well integrated with SAI, +may be easily converted to SAI when they get.*/ +enum SongOfWindAndWater +{ + // Spells + SPELL_DEVOUR_WIND = 52862, + SPELL_DEVOUR_WATER = 52864, + // NPCs + NPC_HAIPHOON_WATER = 28999, + NPC_HAIPHOON_AIR = 28985 +}; + +class npc_haiphoon : public CreatureScript +{ +public: + npc_haiphoon() : CreatureScript("npc_haiphoon") { } + + struct npc_haiphoonAI : public VehicleAI + { + npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { } + + void SpellHitTarget(Unit* target, SpellInfo const* spell) + { + if (target == me) + return; + + if (spell->Id == SPELL_DEVOUR_WIND && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + me->UpdateEntry(NPC_HAIPHOON_AIR); + } + else if (spell->Id == SPELL_DEVOUR_WATER && me->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + me->UpdateEntry(NPC_HAIPHOON_WATER); + } + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_haiphoonAI(creature); + } +}; + void AddSC_sholazar_basin() { new npc_injured_rainspeaker_oracle(); @@ -979,4 +1044,5 @@ void AddSC_sholazar_basin() new npc_jungle_punch_target(); new spell_q12620_the_lifewarden_wrath(); new spell_q12589_shoot_rjr(); + new npc_haiphoon(); } diff --git a/src/server/scripts/Northrend/storm_peaks.cpp b/src/server/scripts/Northrend/storm_peaks.cpp index b3a379d903d..f87b24ce639 100644 --- a/src/server/scripts/Northrend/storm_peaks.cpp +++ b/src/server/scripts/Northrend/storm_peaks.cpp @@ -30,13 +30,13 @@ ## npc_agnetta_tyrsdottar ######*/ -#define SAY_AGGRO -1571003 #define GOSSIP_AGNETTA "Skip the warmup, sister... or are you too scared to face soemeone your own size?" enum eAgnetta { QUEST_ITS_THAT_YOUR_GOBLIN = 12969, - FACTION_HOSTILE_AT1 = 45 + FACTION_HOSTILE_AT1 = 45, + SAY_AGGRO = 0 }; class npc_agnetta_tyrsdottar : public CreatureScript @@ -73,7 +73,7 @@ public: player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) { - DoScriptText(SAY_AGGRO, creature); + creature->AI()->Talk(SAY_AGGRO); player->CLOSE_GOSSIP_MENU(); creature->setFaction(FACTION_HOSTILE_AT1); creature->AI()->AttackStart(player); @@ -143,8 +143,8 @@ public: enum eInjuredGoblin { QUEST_BITTER_DEPARTURE = 12832, - SAY_QUEST_ACCEPT = -1800042, - SAY_END_WP_REACHED = -1800043 + SAY_QUEST_ACCEPT = 0, + SAY_END_WP_REACHED = 1 }; #define GOSSIP_ITEM_1 "I am ready, lets get you out of here" @@ -167,7 +167,7 @@ public: switch (waypointId) { case 26: - DoScriptText(SAY_END_WP_REACHED, me, player); + Talk(SAY_END_WP_REACHED, player->GetGUID()); break; case 27: player->GroupEventHappens(QUEST_BITTER_DEPARTURE, me); @@ -218,7 +218,7 @@ public: bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) { if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE) - DoScriptText(SAY_QUEST_ACCEPT, creature); + creature->AI()->Talk(SAY_QUEST_ACCEPT); return false; } diff --git a/src/server/scripts/Northrend/zuldrak.cpp b/src/server/scripts/Northrend/zuldrak.cpp index e5763e5baf6..506c34d40fb 100644 --- a/src/server/scripts/Northrend/zuldrak.cpp +++ b/src/server/scripts/Northrend/zuldrak.cpp @@ -121,9 +121,9 @@ enum eRageclaw SPELL_KNEEL = 39656 }; -const char * SAY_RAGECLAW_1 = "I poop on you, trollses!"; -const char * SAY_RAGECLAW_2 = "ARRRROOOOGGGGAAAA!"; -const char * SAY_RAGECLAW_3 = "No more mister nice wolvar!"; +const char* SAY_RAGECLAW_1 = "I poop on you, trollses!"; +const char* SAY_RAGECLAW_2 = "ARRRROOOOGGGGAAAA!"; +const char* SAY_RAGECLAW_3 = "No more mister nice wolvar!"; #define SAY_RAGECLAW RAND(SAY_RAGECLAW_1, SAY_RAGECLAW_2, SAY_RAGECLAW_3) @@ -265,14 +265,16 @@ enum eGurgthock NPC_FIEND_FIRE = 30042, NPC_FIEND_EARTH = 30043, - SAY_QUEST_ACCEPT_TUSKARRMAGEDON = -1571031, - SAY_QUEST_ACCEPT_KORRAK_1 = -1571033, - SAY_QUEST_ACCEPT_KORRAK_2 = -1571034, - SAY_QUEST_ACCEPT_MAGNATAUR = -1571035, + SAY_QUEST_ACCEPT_TUSKARRMAGEDON = 0, + SAY_QUEST_ACCEPT_KORRAK_1 = 1, + SAY_QUEST_ACCEPT_KORRAK_2 = 2, + SAY_QUEST_ACCEPT_MAGNATAUR = 3, + EMOTE_YGGDRAS_SPAWN = 4, + SAY_STINKBEARD_SPAWN = 5, + SAY_GURGTHOCK_ELEMENTAL_SPAWN = 6, - EMOTE_YGGDRAS_SPAWN = -1571039, - SAY_STINKBEARD_SPAWN = -1571040, - SAY_GURGTHOCK_ELEMENTAL_SPAWN = -1571041, + SAY_CALL_FOR_HELP = 0, + SAY_RECRUIT = 0, SPELL_CRASHING_WAVE = 55909, // water SPELL_SHOCKWAVE = 55918, // earth @@ -380,12 +382,12 @@ public: switch (uiValue) { case QUEST_AMPHITHEATER_ANGUISH_TUSKARRMAGEDDON: - DoScriptText(SAY_QUEST_ACCEPT_TUSKARRMAGEDON, me); + Talk(SAY_QUEST_ACCEPT_TUSKARRMAGEDON); uiPhase = 1; uiTimer = 4000; break; case QUEST_AMPHITHEATER_ANGUISH_KORRAK_BLOODRAGER: - DoScriptText(SAY_QUEST_ACCEPT_KORRAK_1, me); + Talk(SAY_QUEST_ACCEPT_KORRAK_1); uiPhase = 3; uiTimer = 3000; break; @@ -443,7 +445,7 @@ public: SummonGUID = 0; break; case 3: - DoScriptText(SAY_QUEST_ACCEPT_KORRAK_2, me); + Talk(SAY_QUEST_ACCEPT_KORRAK_2); uiTimer = 3000; uiPhase = 4; break; @@ -477,7 +479,7 @@ public: } break; case 8: - DoScriptText(SAY_QUEST_ACCEPT_MAGNATAUR, me); + Talk(SAY_QUEST_ACCEPT_MAGNATAUR); uiTimer = 5000; uiPhase = 11; break; @@ -494,12 +496,12 @@ public: break; case 10: me->SummonCreature(NPC_YGGDRAS, SpawnPosition[1], TEMPSUMMON_CORPSE_DESPAWN, 1000); - DoScriptText(EMOTE_YGGDRAS_SPAWN, me); + Talk(EMOTE_YGGDRAS_SPAWN); uiPhase = 0; break; case 11: if (Creature* creature = me->SummonCreature(NPC_STINKBEARD, SpawnPosition[0], TEMPSUMMON_CORPSE_DESPAWN, 1000)) - DoScriptText(SAY_STINKBEARD_SPAWN, creature); + creature->AI()->Talk(SAY_STINKBEARD_SPAWN); uiPhase = 0; break; case 12: @@ -514,7 +516,7 @@ public: } break; case 13: - DoScriptText(SAY_GURGTHOCK_ELEMENTAL_SPAWN, me); + Talk(SAY_GURGTHOCK_ELEMENTAL_SPAWN); uiTimer = 3000; uiPhase = 14; break; @@ -575,9 +577,7 @@ enum eOrinokoTuskbreaker SPELL_SUMMON_WHISKER = 55946, NPC_WHISKER = 30113, - NPC_HUNGRY_PENGUIN = 30110, - - SAY_CALL_FOR_HELP = -1571032 + NPC_HUNGRY_PENGUIN = 30110 }; class npc_orinoko_tuskbreaker : public CreatureScript @@ -659,7 +659,7 @@ public: if (!bSummoned && !HealthAbovePct(50)) { - DoScriptText(SAY_CALL_FOR_HELP, me); + Talk(SAY_CALL_FOR_HELP); //DoCast(me->getVictim(), SPELL_SUMMON_WHISKER); petai is not working correctly??? if (Creature* pWhisker = me->SummonCreature(NPC_WHISKER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0)) @@ -1282,11 +1282,7 @@ enum eCrusade_recruit QUEST_TROLL_PATROL_INTESTINAL_FORTITUDE = 12509, - GOSSIP_CRUSADE_TEXT = 13069, - - SAY_RECRUIT_1 = -1571036, - SAY_RECRUIT_2 = -1571037, - SAY_RECRUIT_3 = -1571038 + GOSSIP_CRUSADE_TEXT = 13069 }; #define GOSSIP_ITEM_1 "Get out there and make those Scourge wish they were never reborn!" @@ -1325,7 +1321,7 @@ public: // say random text me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - DoScriptText(RAND(SAY_RECRUIT_1, SAY_RECRUIT_2, SAY_RECRUIT_3), me); + Talk(SAY_RECRUIT); m_uiTimer = 3000; m_uiPhase = 2; break; |
