diff options
author | Malcrom <malcromdev@gmail.com> | 2013-07-01 18:48:42 -0230 |
---|---|---|
committer | Malcrom <malcromdev@gmail.com> | 2013-07-01 18:48:42 -0230 |
commit | 8d213fdea2ebb46bc4387e10e88fd00f0e87b515 (patch) | |
tree | 6d5722ef75dc450b4c8b88250c93c704ee347b94 /src | |
parent | 029fe277b05bdb0a0a313149a8f82d223d2d01f0 (diff) |
Core/Scripting: Move most if Illidan script text to creature text.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Outland/BlackTemple/boss_illidan.cpp | 543 |
1 files changed, 251 insertions, 292 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 9ef7aaa6dad..3563dab6378 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -35,41 +35,32 @@ EndScriptData */ #define GETUNIT(unit, guid) Unit* unit = Unit::GetUnit(*me, guid) #define GETCRE(cre, guid) Creature* cre = Unit::GetCreature(*me, guid) -/************* Quotes and Sounds ***********************/ -// Gossip for when a player clicks Akama -#define GOSSIP_ITEM "We are ready to face Illidan" - -// Yells for/by Akama -#define SAY_AKAMA_BEWARE "Be wary friends, The Betrayer meditates in the court just beyond." -#define SOUND_AKAMA_BEWARE 11388 -#define SAY_AKAMA_MINION "Come, my minions. Deal with this traitor as he deserves!" -#define SOUND_AKAMA_MINION 11465 -#define SAY_AKAMA_LEAVE "I'll deal with these mongrels. Strike now, friends! Strike at the betrayer!" -#define SOUND_AKAMA_LEAVE 11390 - -// Self explanatory -char const* SAY_KILL1 = "Who shall be next to taste my blades?!"; -#define SOUND_KILL1 11473 -char const* SAY_KILL2 = "This is too easy!"; -#define SOUND_KILL2 11472 - -// I think I'll fly now and let my subordinates take you on -#define SAY_TAKEOFF "I will not be touched by rabble such as you!" -#define SOUND_TAKEOFF 11479 -#define SAY_SUMMONFLAMES "Behold the flames of Azzinoth!" -#define SOUND_SUMMONFLAMES 11480 - -// When casting Eye Blast. Demon Fire will be appear on places that he casts this -#define SAY_EYE_BLAST "Stare into the eyes of the Betrayer!" -#define SOUND_EYE_BLAST 11481 - -// kk, I go big, dark and demon on you. -#define SAY_MORPH "Behold the power... of the demon within!" -#define SOUND_MORPH 11475 - -// I KILL! -#define SAY_ENRAGE "You've wasted too much time mortals, now you shall fall!" -#define SOUND_ENRAGE 11474 +#define EMOTE_UNABLE_TO_SUMMON "%s is unable to summon Maiev Shadowsong and enter Phase 4. Resetting Encounter." + +// Other defines +#define CENTER_X 676.740f +#define CENTER_Y 305.297f +#define CENTER_Z 353.192f + +enum Say +{ + // Akama + SAY_AKAMA_BEWARE = 0, + SAY_AKAMA_LEAVE = 1, + // Illidan + SAY_ILLIDAN_MINION = 0, + SAY_ILLIDAN_KILL = 1, + SAY_ILLIDAN_TAKEOFF = 2, + SAY_ILLIDAN_SUMMONFLAMES = 3, + SAY_ILLIDAN_EYE_BLAST = 4, + SAY_ILLIDAN_MORPH = 5, + SAY_ILLIDAN_ENRAGE = 6, + SAY_ILLIDAN_TAUNT = 7, + // Maiev Shadowsong + SAY_MAIEV_SHADOWSONG_TAUNT = 0, + // Flame of Azzinoth + EMOTE_AZZINOTH_GAZE = 0 +}; enum Spells // Normal Form @@ -102,6 +93,7 @@ enum Spells SPELL_DEATH = 41220, SPELL_BERSERK = 45078, SPELL_DUAL_WIELD = 42459, + SPELL_SUMMON_MAIEV = 40403, // Phase Normal spells SPELL_FLAME_CRASH_EFFECT = 40836, SPELL_SUMMON_SHADOWDEMON = 41117, @@ -134,104 +126,107 @@ enum Spells SPELL_TELEPORT_VISUAL = 41232, SPELL_SHADOW_STRIKE = 40685, SPELL_THROW_DAGGER = 41152, - SPELL_FAN_BLADES = 39954, // bugged visual + SPELL_FAN_BLADES = 39954 // bugged visual }; -// Other defines -#define CENTER_X 676.740f -#define CENTER_Y 305.297f -#define CENTER_Z 353.192f +enum Misc +{ + FLAME_ENRAGE_DISTANCE = 30, + FLAME_CHARGE_DISTANCE = 50, -#define FLAME_ENRAGE_DISTANCE 30 -#define FLAME_CHARGE_DISTANCE 50 + EQUIP_ID_MAIN_HAND = 32837, + EQUIP_ID_OFF_HAND = 32838, + EQUIP_ID_MAIN_HAND_MAIEV = 44850, -#define EQUIP_ID_MAIN_HAND 32837 -#define EQUIP_ID_OFF_HAND 32838 + MODEL_INVISIBLE = 11686, + MODEL_ILLIDAN = 21135, + MODEL_BLADE = 21431 +}; /**** Creature Summon and Recognition IDs ****/ enum CreatureEntry { - EMPTY = 0, - AKAMA = 22990, - ILLIDAN_STORMRAGE = 22917, - BLADE_OF_AZZINOTH = 22996, - FLAME_OF_AZZINOTH = 22997, - MAIEV_SHADOWSONG = 23197, - SHADOW_DEMON = 23375, - DEMON_FIRE = 23069, - FLAME_CRASH = 23336, - ILLIDAN_DOOR_TRIGGER = 23412, - SPIRIT_OF_OLUM = 23411, - SPIRIT_OF_UDALO = 23410, - ILLIDARI_ELITE = 23226, - PARASITIC_SHADOWFIEND = 23498, - CAGE_TRAP_TRIGGER = 23292, + EMPTY = 0, + AKAMA = 22990, + ILLIDAN_STORMRAGE = 22917, + BLADE_OF_AZZINOTH = 22996, + FLAME_OF_AZZINOTH = 22997, + MAIEV_SHADOWSONG = 23197, + SHADOW_DEMON = 23375, + DEMON_FIRE = 23069, + FLAME_CRASH = 23336, + ILLIDAN_DOOR_TRIGGER = 23412, + SPIRIT_OF_OLUM = 23411, + SPIRIT_OF_UDALO = 23410, + ILLIDARI_ELITE = 23226, + PARASITIC_SHADOWFIEND = 23498, + CAGE_TRAP_TRIGGER = 23292 }; /*** Phase Names ***/ enum PhaseIllidan { - PHASE_ILLIDAN_NULL = 0, - PHASE_NORMAL = 1, - PHASE_FLIGHT = 2, - PHASE_NORMAL_2 = 3, - PHASE_DEMON = 4, - PHASE_NORMAL_MAIEV = 5, - PHASE_TALK_SEQUENCE = 6, - PHASE_FLIGHT_SEQUENCE = 7, - PHASE_TRANSFORM_SEQUENCE = 8, - PHASE_ILLIDAN_MAX = 9, + PHASE_ILLIDAN_NULL = 0, + PHASE_NORMAL = 1, + PHASE_FLIGHT = 2, + PHASE_NORMAL_2 = 3, + PHASE_DEMON = 4, + PHASE_NORMAL_MAIEV = 5, + PHASE_TALK_SEQUENCE = 6, + PHASE_FLIGHT_SEQUENCE = 7, + PHASE_TRANSFORM_SEQUENCE = 8, + PHASE_ILLIDAN_MAX = 9 }; // Maiev uses the same phase enum PhaseAkama { - PHASE_AKAMA_NULL = 0, - PHASE_CHANNEL = 1, - PHASE_WALK = 2, - PHASE_TALK = 3, - PHASE_FIGHT_ILLIDAN = 4, - PHASE_FIGHT_MINIONS = 5, - PHASE_RETURN = 6, + PHASE_AKAMA_NULL = 0, + PHASE_CHANNEL = 1, + PHASE_WALK = 2, + PHASE_TALK = 3, + PHASE_FIGHT_ILLIDAN = 4, + PHASE_FIGHT_MINIONS = 5, + PHASE_RETURN = 6 }; enum EventIllidan { - EVENT_NULL = 0, - EVENT_BERSERK = 1, + EVENT_NULL = 0, + EVENT_BERSERK = 1, // normal phase - EVENT_TAUNT = 2, - EVENT_SHEAR = 3, - EVENT_FLAME_CRASH = 4, - EVENT_PARASITIC_SHADOWFIEND = 5, - EVENT_PARASITE_CHECK = 6, - EVENT_DRAW_SOUL = 7, - EVENT_AGONIZING_FLAMES = 8, - EVENT_TRANSFORM_NORMAL = 9, - EVENT_ENRAGE = 10, + EVENT_TAUNT = 2, + EVENT_SHEAR = 3, + EVENT_FLAME_CRASH = 4, + EVENT_PARASITIC_SHADOWFIEND = 5, + EVENT_PARASITE_CHECK = 6, + EVENT_DRAW_SOUL = 7, + EVENT_AGONIZING_FLAMES = 8, + EVENT_TRANSFORM_NORMAL = 9, + EVENT_ENRAGE = 10, // flight phase - EVENT_FIREBALL = 2, - EVENT_DARK_BARRAGE = 3, - EVENT_EYE_BLAST = 4, - EVENT_MOVE_POINT = 5, + EVENT_FIREBALL = 2, + EVENT_DARK_BARRAGE = 3, + EVENT_EYE_BLAST = 4, + EVENT_MOVE_POINT = 5, // demon phase - EVENT_SHADOW_BLAST = 2, - EVENT_FLAME_BURST = 3, - EVENT_SHADOWDEMON = 4, - EVENT_TRANSFORM_DEMON = 5, + EVENT_SHADOW_BLAST = 2, + EVENT_FLAME_BURST = 3, + EVENT_SHADOWDEMON = 4, + EVENT_TRANSFORM_DEMON = 5, // sequence phase - EVENT_TALK_SEQUENCE = 2, - EVENT_FLIGHT_SEQUENCE = 2, - EVENT_TRANSFORM_SEQUENCE = 2, + EVENT_TALK_SEQUENCE = 2, + EVENT_FLIGHT_SEQUENCE = 2, + EVENT_TRANSFORM_SEQUENCE = 2 }; enum EventMaiev { - EVENT_MAIEV_NULL = 0, - EVENT_MAIEV_STEALTH = 1, - EVENT_MAIEV_TAUNT = 2, - EVENT_MAIEV_SHADOW_STRIKE = 3, - EVENT_MAIEV_THROW_DAGGER = 4, - EVENT_MAIEV_TRAP = 4, + EVENT_MAIEV_NULL = 0, + EVENT_MAIEV_STEALTH = 1, + EVENT_MAIEV_TAUNT = 2, + EVENT_MAIEV_SHADOW_STRIKE = 3, + EVENT_MAIEV_THROW_DAGGER = 4, + EVENT_MAIEV_TRAP = 4 }; static const EventIllidan MaxTimer[9] = @@ -247,6 +242,33 @@ static const EventIllidan MaxTimer[9] = EVENT_TRANSFORM_SEQUENCE }; + +/* ################## TO DO CONVERT THIS UGLINESS TO CREATURE TEXT ################## + +SET @AKAMA := 23089; +SET @ILLIDAN := 22917; +SET @MAIEV := 23197; +DELETE FROM `creature_text` WHERE `entry`=@AKAMA AND `groupid` IN (2,3,4); +DELETE FROM `creature_text` WHERE `entry`=@ILLIDAN AND `groupid` IN (8,9,10,11,12,13,14); +DELETE FROM `creature_text` WHERE `entry`=@MAIEV AND `groupid` IN (1,2,3,4); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ILLIDAN,8,0, "Akama... your duplicity is hardly surprising. I should have slaughtered you and your malformed brethren long ago.",14,0,100,0,0,11463, 'Illidan SAY_XXXXXXXXXXX'), +(@AKAMA,2,0, "We've come to end your reign, Illidan. My people and all of Outland shall be free!",14,0,100,25,0,11389, 'Akama SAY_XXXXXXXXXXX'), +(@ILLIDAN,9,0, "Boldly said. But I remain unconvinced.",14,0,100,396,0,11464, 'Illidan SAY_XXXXXXXXXXX'), +(@AKAMA,3,0, "The time has come! The moment is at hand!",14,0,100,22,0,11380, 'Akama SAY_XXXXXXXXXXX'), +(@ILLIDAN,10,0, "You are not prepared!",14,0,100,406,0,11466, 'Illidan SAY_XXXXXXXXXXX'), +(@ILLIDAN,11,0, "Is this it, mortals? Is this all the fury you can muster?",14,0,100,0,0,11476, 'Illidan SAY_XXXXXXXXXXX'), +(@MAIEV,1,0, "Their fury pales before mine, Illidan. We have some unsettled business between us.",14,0,100,5,0,11491, 'Maiev Shadowsong SAY_XXXXXXXXXXX'), +(@ILLIDAN,12,0, "Maiev... How is this even possible?",14,0,100,1,0,11477, 'Illidan SAY_XXXXXXXXXXX'), +(@MAIEV,2,0, "Ah... my long hunt is finally over. Today, Justice will be done!",14,0,100,15,0,11492, 'Maiev Shadowsong SAY_XXXXXXXXXXX'), +(@ILLIDAN,13,0, "Feel the hatred of ten thousand years!",14,0,100,396,0,11470, 'Illidan SAY_XXXXXXXXXXX'), +(@MAIEV,3,0, "Ahh... It is finished. You are beaten.",14,0,100,0,0,11496, 'Maiev Shadowsong SAY_XXXXXXXXXXX'), +(@ILLIDAN,14,0, "You have won... Maiev...but the huntress... is nothing...without the hunt... you... are nothing... without me..",14,0,100,65,0,11478, 'Illidan SAY_XXXXXXXXXXX'), +(@MAIEV,4,0, "He is right. I feel nothing... I am nothing... Farewell, champions.",14,0,100,0,0,11497, 'Maiev Shadowsong SAY_XXXXXXXXXXX'), +(@AKAMA,4,0, "The Light will fill these dismal halls once again. I swear it.",14,0,100,0,0,11387, 'Akama SAY_XXXXXXXXXXX'); + +*/ + struct Yells { uint32 sound; @@ -282,22 +304,6 @@ static const Yells Conversation[22] = {0, "", EMPTY, 1000, 0, false} // 21 }; -static const Yells RandomTaunts[4]= -{ - {11467, "I can feel your hatred.", ILLIDAN_STORMRAGE, 0, 0, false}, - {11468, "Give in to your fear!", ILLIDAN_STORMRAGE, 0, 0, false}, - {11469, "You know nothing of power!", ILLIDAN_STORMRAGE, 0, 0, false}, - {11471, "Such... arrogance!", ILLIDAN_STORMRAGE, 0, 0, false} -}; - -static const Yells MaievTaunts[4]= -{ - {11493, "That is for Naisha!", MAIEV_SHADOWSONG, 0, 0, false}, - {11494, "Bleed as I have bled!", MAIEV_SHADOWSONG, 0, 0, false}, - {11495, "There shall be no prison for you this time!", MAIEV_SHADOWSONG, 0, 0, false}, - {11500, "Meet your end, demon!", MAIEV_SHADOWSONG, 0, 0, false} -}; - struct Locations { float x, y, z; @@ -368,27 +374,15 @@ static const Animation DemonTransformation[10]= {0, SPELL_DEMON_TRANSFORM_3, 0, 0, 0, 8, true} }; -#define EMOTE_SETS_GAZE_ON "%s sets its gaze on $N!" -#define EMOTE_UNABLE_TO_SUMMON "%s is unable to summon Maiev Shadowsong and enter Phase 4. Resetting Encounter." - class mob_flame_of_azzinoth : public CreatureScript { public: mob_flame_of_azzinoth() : CreatureScript("mob_flame_of_azzinoth") { } - CreatureAI* GetAI(Creature* creature) const - { - return new flame_of_azzinothAI (creature); - } - struct flame_of_azzinothAI : public ScriptedAI { flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) {} - uint32 FlameBlastTimer; - uint32 CheckTimer; - uint64 GlaiveGUID; - void Reset() { FlameBlastTimer = 15000; @@ -409,7 +403,7 @@ public: me->AddThreat(target, 5000000.0f); AttackStart(target); DoCast(target, SPELL_CHARGE); - me->MonsterTextEmote(EMOTE_SETS_GAZE_ON, target->GetGUID()); + Talk(EMOTE_AZZINOTH_GAZE); } } @@ -463,7 +457,17 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 FlameBlastTimer; + uint32 CheckTimer; + uint64 GlaiveGUID; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new flame_of_azzinothAI (creature); + } }; /************************************** Illidan's AI* **************************************/ @@ -472,11 +476,6 @@ class boss_illidan_stormrage : public CreatureScript public: boss_illidan_stormrage() : CreatureScript("boss_illidan_stormrage") { } - CreatureAI* GetAI(Creature* creature) const - { - return new boss_illidan_stormrageAI (creature); - } - struct boss_illidan_stormrageAI : public ScriptedAI { boss_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature), Summons(me) @@ -485,25 +484,6 @@ public: DoCast(me, SPELL_DUAL_WIELD, true); } - InstanceScript* instance; - - PhaseIllidan Phase; - EventIllidan Event; - uint32 Timer[EVENT_ENRAGE + 1]; - - uint32 TalkCount; - uint32 TransformCount; - uint32 FlightCount; - - uint32 HoverPoint; - - uint64 AkamaGUID; - uint64 MaievGUID; - uint64 FlameGUID[2]; - uint64 GlaiveGUID[2]; - - SummonList Summons; - void Reset(); void JustSummoned(Creature* summon); @@ -577,18 +557,7 @@ public: if (victim->GetTypeId() != TYPEID_PLAYER) return; - /// @todo Find better way to handle emote - switch (urand(0, 1)) - { - case 0: - me->MonsterYell(SAY_KILL1, LANG_UNIVERSAL, victim->GetGUID()); - DoPlaySoundToSet(me, SOUND_KILL1); - break; - case 1: - me->MonsterYell(SAY_KILL2, LANG_UNIVERSAL, victim->GetGUID()); - DoPlaySoundToSet(me, SOUND_KILL2); - break; - } + Talk(SAY_ILLIDAN_KILL); } void DamageTaken(Unit* done_by, uint32 &damage) @@ -650,6 +619,7 @@ public: void EnterPhase(PhaseIllidan NextPhase) { DoZoneInCombat(); + switch (NextPhase) { case PHASE_NORMAL: @@ -713,8 +683,7 @@ public: { TransformCount = 0; Timer[EVENT_TRANSFORM_SEQUENCE] = 500; - me->MonsterYell(SAY_MORPH, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_MORPH); + Talk(SAY_ILLIDAN_MORPH); } me->GetMotionMaster()->Clear(); me->AttackStop(); @@ -735,8 +704,7 @@ public: { me->InterruptNonMeleeSpells(false); - me->MonsterYell(SAY_EYE_BLAST, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_EYE_BLAST); + Talk(SAY_ILLIDAN_EYE_BLAST); float distx, disty, dist[2]; for (uint8 i = 0; i < 2; ++i) @@ -771,8 +739,7 @@ public: } void SummonFlamesOfAzzinoth() { - me->MonsterYell(SAY_SUMMONFLAMES, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_SUMMONFLAMES); + Talk(SAY_ILLIDAN_SUMMONFLAMES); for (uint8 i = 0; i < 2; ++i) { @@ -793,7 +760,7 @@ public: void SummonMaiev() { DoCast(me, SPELL_SHADOW_PRISON, true); - DoCast(me, 40403, true); + DoCast(me, SPELL_SUMMON_MAIEV, true); if (!MaievGUID) // If Maiev cannot be summoned, reset the encounter and post some errors to the console. { EnterEvadeMode(); @@ -812,8 +779,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); me->SetDisableGravity(true); me->StopMoving(); - me->MonsterYell(SAY_TAKEOFF, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_TAKEOFF); + Talk(SAY_ILLIDAN_TAKEOFF); Timer[EVENT_FLIGHT_SEQUENCE] = 3000; break; case 2: // move to center @@ -828,7 +794,7 @@ public: { GlaiveGUID[i] = Glaive->GetGUID(); Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - Glaive->SetDisplayId(11686); + Glaive->SetDisplayId(MODEL_INVISIBLE); Glaive->setFaction(me->getFaction()); DoCast(Glaive, SPELL_THROW_GLAIVE2); } @@ -844,7 +810,7 @@ public: { GlaiveGUID[i] = Glaive->GetGUID(); Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - Glaive->SetDisplayId(11686); + Glaive->SetDisplayId(MODEL_INVISIBLE); Glaive->setFaction(me->getFaction()); DoCast(Glaive, SPELL_THROW_GLAIVE, true); } @@ -872,7 +838,7 @@ public: if (Glaive) { Glaive->CastSpell(me, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us - Glaive->SetDisplayId(11686); // disappear but not die for now + Glaive->SetDisplayId(MODEL_INVISIBLE); // disappear but not die for now } } } @@ -1019,21 +985,13 @@ public: { // PHASE_NORMAL case EVENT_BERSERK: - me->MonsterYell(SAY_ENRAGE, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_ENRAGE); + Talk(SAY_ILLIDAN_ENRAGE); DoCast(me, SPELL_BERSERK, true); Timer[EVENT_BERSERK] = 5000; // The buff actually lasts forever. break; case EVENT_TAUNT: - { - uint32 random = rand()%4; - uint32 soundid = RandomTaunts[random].sound; - if (RandomTaunts[random].text.size()) - me->MonsterYell(RandomTaunts[random].text.c_str(), LANG_UNIVERSAL, 0); - if (soundid) - DoPlaySoundToSet(me, soundid); - } + Talk(SAY_ILLIDAN_TAUNT); Timer[EVENT_TAUNT] = urand(25000, 35000); break; @@ -1150,7 +1108,28 @@ public: } } } + + public: + uint64 AkamaGUID; + uint32 Timer[EVENT_ENRAGE + 1]; + PhaseIllidan Phase; + private: + InstanceScript* instance; + EventIllidan Event; + uint32 TalkCount; + uint32 TransformCount; + uint32 FlightCount; + uint32 HoverPoint; + uint64 MaievGUID; + uint64 FlameGUID[2]; + uint64 GlaiveGUID[2]; + SummonList Summons; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_illidan_stormrageAI (creature); + } }; /********************************** End of Illidan AI* *****************************************/ @@ -1161,22 +1140,10 @@ class boss_maiev_shadowsong : public CreatureScript public: boss_maiev_shadowsong() : CreatureScript("boss_maiev_shadowsong") { } - CreatureAI* GetAI(Creature* creature) const - { - return new boss_maievAI (creature); - } - struct boss_maievAI : public ScriptedAI { boss_maievAI(Creature* creature) : ScriptedAI(creature) {}; - uint64 IllidanGUID; - - PhaseIllidan Phase; - EventMaiev Event; - uint32 Timer[5]; - uint32 MaxTimer; - void Reset() { MaxTimer = 0; @@ -1185,7 +1152,7 @@ public: Timer[EVENT_MAIEV_STEALTH] = 0; Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000; Timer[EVENT_MAIEV_SHADOW_STRIKE] = 30000; - SetEquipmentSlots(false, 44850, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); + SetEquipmentSlots(false, EQUIP_ID_MAIN_HAND_MAIEV, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 45738); } @@ -1330,14 +1297,8 @@ public: } break; case EVENT_MAIEV_TAUNT: - { - uint32 random = rand()%4; - uint32 sound = MaievTaunts[random].sound; - if (MaievTaunts[random].text.size()) - me->MonsterYell(MaievTaunts[random].text.c_str(), LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, sound); - Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000; - } + Talk(SAY_MAIEV_SHADOWSONG_TAUNT); + Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000; break; case EVENT_MAIEV_SHADOW_STRIKE: DoCastVictim(SPELL_SHADOW_STRIKE); @@ -1376,7 +1337,19 @@ public: if (Phase == PHASE_NORMAL_MAIEV) DoMeleeAttackIfReady(); } + + private: + uint64 IllidanGUID; + PhaseIllidan Phase; + EventMaiev Event; + uint32 Timer[5]; + uint32 MaxTimer; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_maievAI (creature); + } }; class npc_akama_illidan : public CreatureScript @@ -1391,23 +1364,6 @@ public: instance = creature->GetInstanceScript(); JustCreated = true; } - bool JustCreated; - InstanceScript* instance; - - PhaseAkama Phase; - bool Event; - uint32 Timer; - - uint64 IllidanGUID; - uint64 ChannelGUID; - uint64 SpiritGUID[2]; - uint64 GateGUID; - uint64 DoorGUID[2]; - - uint32 ChannelCount; - uint32 WalkCount; - uint32 TalkCount; - uint32 Check_Timer; void Reset() { @@ -1440,21 +1396,21 @@ public: else { IllidanGUID = 0; - GateGUID = 0; + GateGUID = 0; DoorGUID[0] = 0; DoorGUID[1] = 0; } - ChannelGUID = 0; + ChannelGUID = 0; SpiritGUID[0] = 0; SpiritGUID[1] = 0; - Phase = PHASE_AKAMA_NULL; - Timer = 0; + Phase = PHASE_AKAMA_NULL; + Timer = 0; - ChannelCount = 0; - TalkCount = 0; - Check_Timer = 5000; + ChannelCount = 0; + TalkCount = 0; + Check_Timer = 5000; KillAllElites(); @@ -1537,7 +1493,7 @@ public: if (Creature* Channel = me->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000)) { ChannelGUID = Channel->GetGUID(); - Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen. + Channel->SetDisplayId(MODEL_INVISIBLE); // Invisible but spell visuals can still be seen. DoCast(Channel, SPELL_AKAMA_DOOR_FAIL); } @@ -1628,14 +1584,12 @@ public: if (GETCRE(Illidan, IllidanGUID)) { CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, Illidan->AI())->Timer[EVENT_TAUNT] += 30000; - Illidan->MonsterYell(SAY_AKAMA_MINION, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(Illidan, SOUND_AKAMA_MINION); + Illidan->AI()->Talk(SAY_ILLIDAN_MINION); } Timer = 8000; break; case 1: - me->MonsterYell(SAY_AKAMA_LEAVE, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_AKAMA_LEAVE); + Talk(SAY_AKAMA_LEAVE); Timer = 3000; break; case 2: @@ -1688,8 +1642,7 @@ public: Timer = 2000; break; case 5: - me->MonsterYell(SAY_AKAMA_BEWARE, LANG_UNIVERSAL, 0); - DoPlaySoundToSet(me, SOUND_AKAMA_BEWARE); + Talk(SAY_AKAMA_BEWARE); Channel->setDeathState(JUST_DIED); Spirit[0]->SetVisible(false); Spirit[1]->SetVisible(false); @@ -1814,26 +1767,29 @@ public: DoMeleeAttackIfReady(); } - }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF) // Time to begin the Event + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) { player->CLOSE_GOSSIP_MENU(); - CAST_AI(npc_akama_illidan::npc_akama_illidanAI, creature->AI())->EnterPhase(PHASE_CHANNEL); + EnterPhase(PHASE_CHANNEL); } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - player->SEND_GOSSIP_MENU(10465, creature->GetGUID()); - return true; - } + private: + bool JustCreated; + InstanceScript* instance; + PhaseAkama Phase; + bool Event; + uint32 Timer; + uint64 IllidanGUID; + uint64 ChannelGUID; + uint64 SpiritGUID[2]; + uint64 GateGUID; + uint64 DoorGUID[2]; + uint32 ChannelCount; + uint32 WalkCount; + uint32 TalkCount; + uint32 Check_Timer; + }; CreatureAI* GetAI(Creature* creature) const { @@ -1878,7 +1834,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset() FlightCount = 0; TransformCount = 0; - me->SetDisplayId(21135); + me->SetDisplayId(MODEL_ILLIDAN); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -2025,21 +1981,10 @@ class mob_cage_trap_trigger : public CreatureScript public: mob_cage_trap_trigger() : CreatureScript("mob_cage_trap_trigger") { } - CreatureAI* GetAI(Creature* creature) const - { - return new cage_trap_triggerAI (creature); - } - struct cage_trap_triggerAI : public ScriptedAI { cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) {} - uint64 IllidanGUID; - uint32 DespawnTimer; - - bool Active; - bool SummonedBeams; - void Reset() { IllidanGUID = 0; @@ -2095,7 +2040,19 @@ public: // } // } } + + public: + bool Active; + private: + uint64 IllidanGUID; + uint32 DespawnTimer; + bool SummonedBeams; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new cage_trap_triggerAI (creature); + } }; class gameobject_cage_trap : public GameObjectScript @@ -2121,17 +2078,10 @@ class mob_shadow_demon : public CreatureScript public: mob_shadow_demon() : CreatureScript("mob_shadow_demon") { } - CreatureAI* GetAI(Creature* creature) const - { - return new shadow_demonAI (creature); - } - struct shadow_demonAI : public ScriptedAI { shadow_demonAI(Creature* creature) : ScriptedAI(creature) {} - uint64 TargetGUID; - void EnterCombat(Unit* /*who*/) { DoZoneInCombat(); @@ -2168,7 +2118,15 @@ public: if (me->IsWithinDistInMap(me->GetVictim(), 3)) DoCastVictim(SPELL_CONSUME_SOUL); } + + private: + uint64 TargetGUID; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new shadow_demonAI (creature); + } }; class mob_blade_of_azzinoth : public CreatureScript @@ -2176,11 +2134,6 @@ class mob_blade_of_azzinoth : public CreatureScript public: mob_blade_of_azzinoth() : CreatureScript("mob_blade_of_azzinoth") { } - CreatureAI* GetAI(Creature* creature) const - { - return new blade_of_azzinothAI (creature); - } - struct blade_of_azzinothAI : public NullCreatureAI { blade_of_azzinothAI(Creature* creature) : NullCreatureAI(creature) {} @@ -2188,9 +2141,14 @@ public: void SpellHit(Unit* /*caster*/, const SpellInfo* spell) { if (spell->Id == SPELL_THROW_GLAIVE2 || spell->Id == SPELL_THROW_GLAIVE) - me->SetDisplayId(21431);// appear when hit by Illidan's glaive + me->SetDisplayId(MODEL_BLADE);// appear when hit by Illidan's glaive } }; + + CreatureAI* GetAI(Creature* creature) const + { + return new blade_of_azzinothAI (creature); + } }; class mob_parasitic_shadowfiend : public CreatureScript @@ -2198,11 +2156,6 @@ class mob_parasitic_shadowfiend : public CreatureScript public: mob_parasitic_shadowfiend() : CreatureScript("mob_parasitic_shadowfiend") { } - CreatureAI* GetAI(Creature* creature) const - { - return new mob_parasitic_shadowfiendAI (creature); - } - // Shadowfiends interact with Illidan, setting more targets in Illidan's hashmap struct mob_parasitic_shadowfiendAI : public ScriptedAI { @@ -2211,10 +2164,6 @@ public: instance = creature->GetInstanceScript(); } - InstanceScript* instance; - uint64 IllidanGUID; - uint32 CheckTimer; - void Reset() { if (instance) @@ -2274,7 +2223,17 @@ public: DoMeleeAttackIfReady(); } + + private: + InstanceScript* instance; + uint64 IllidanGUID; + uint32 CheckTimer; }; + + CreatureAI* GetAI(Creature* creature) const + { + return new mob_parasitic_shadowfiendAI (creature); + } }; void AddSC_boss_illidan() |