diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp index 6f5b6af796..7aa9588178 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp @@ -7,8 +7,17 @@ EndScriptData */ #include "precompiled.h" #include "def_sunwell_plateau.h" -// Lady Sacrolash +//Intro +#define YELL_INTRO_SAC_1 "Misery..." +#define YELL_INTRO_ALY_2 "Depravity..." +#define YELL_INTRO_SAC_3 "Confusion..." +#define YELL_INTRO_ALY_4 "Hatred..." +#define YELL_INTRO_SAC_5 "Mistrust..." +#define YELL_INTRO_ALY_6 "Chaos..." +#define YELL_INTRO_SAC_7 "These are the hallmarks..." +#define YELL_INTRO_ALY_8 "These are the pillars..." +// Lady Sacrolash #define LADY_SACROLASH 25165 #define SPELL_DARK_TOUCHED 45347 @@ -338,13 +347,14 @@ struct TRINITY_DLL_DECL boss_alythessAI : public ScriptedAI { pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL; Reset(); - once = false; + IntroStepCounter = 10; } ScriptedInstance *pInstance; bool InCombat; bool sisterdeath; - bool once; + uint32 IntroStepCounter; + uint32 IntroYell_Timer; uint32 conflagration_timer; uint32 blaze_timer; @@ -384,6 +394,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public ScriptedAI sisterdeath = false; enrage_timer = 360000; flamesear_timer = 15000; + IntroYell_Timer = 10000; } } void Aggro(Unit *who) @@ -435,10 +446,9 @@ struct TRINITY_DLL_DECL boss_alythessAI : public ScriptedAI } } } - else if (!once && m_creature->IsWithinLOSInMap(who)&& m_creature->IsWithinDistInMap(who, 30) ) + else if (IntroStepCounter == 10 && m_creature->IsWithinLOSInMap(who)&& m_creature->IsWithinDistInMap(who, 30) ) { - DoPlaySoundToSet(m_creature,SOUND_INTRO); - once = true; + IntroStepCounter = 0; } } @@ -523,8 +533,54 @@ struct TRINITY_DLL_DECL boss_alythessAI : public ScriptedAI } } + uint32 IntroStep(uint32 step) + { + Creature* Sacrolash = (Creature*)Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SACROLASH)); + switch (step) + { + case 0: DoPlaySoundToSet(m_creature,SOUND_INTRO); return 0; + case 1: + if(Sacrolash) + Sacrolash->Yell(YELL_INTRO_SAC_1, LANG_UNIVERSAL,NULL); + return 1000; + case 2: + m_creature->Yell(YELL_INTRO_ALY_2, LANG_UNIVERSAL,NULL); + return 1000; + case 3: + if(Sacrolash) + Sacrolash->Yell(YELL_INTRO_SAC_3, LANG_UNIVERSAL,NULL); + return 2000; + case 4: + m_creature->Yell(YELL_INTRO_ALY_4, LANG_UNIVERSAL,NULL); + return 1000; + case 5: + if(Sacrolash) + Sacrolash->Yell(YELL_INTRO_SAC_5, LANG_UNIVERSAL,NULL); + return 2000; + case 6: + m_creature->Yell(YELL_INTRO_ALY_6, LANG_UNIVERSAL,NULL); + return 1000; + case 7: + if(Sacrolash) + Sacrolash->Yell(YELL_INTRO_SAC_7, LANG_UNIVERSAL,NULL); + return 3000; + case 8: + m_creature->Yell(YELL_INTRO_ALY_8, LANG_UNIVERSAL,NULL); + return 900000; + } + return 10000; + } + void UpdateAI(const uint32 diff) { + if(IntroStepCounter < 9) + { + if(IntroYell_Timer < diff) + { + IntroYell_Timer = IntroStep(IntroStepCounter++); + }else IntroYell_Timer -= diff; + } + if(!sisterdeath) { if (pInstance) diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp index d0ca538d49..16ff90f96b 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp @@ -62,6 +62,7 @@ EndScriptData */ #define SPELL_CLOUD_VISUAL 45212 #define SPELL_CLOUD_SUMMON 45884 +//Creatures #define MOB_FELMYST 25038 #define MOB_BRUTALLUS #define MOB_KALECGOS @@ -74,13 +75,21 @@ EndScriptData */ #define MOB_VAPOR 25265 #define MOB_VAPOR_TRAIL 25267 +//Yells and Sounds #define YELL_BIRTH "Glory to Kil'jaeden! Death to all who oppose!" +#define SOUND_BIRTH 12477 #define YELL_KILL1 "I kill for the master!" +#define SOUND_KILL1 12480 #define YELL_KILL2 "The end has come!" +#define SOUND_KILL2 12481 #define YELL_BREATH "Choke on your final breath!" +#define SOUND_BREATH 12478 #define YELL_TAKEOFF "I am stronger than ever before!" +#define SOUND_TAKEOFF 12479 #define YELL_BERSERK "No more hesitation! Your fates are written!" +#define SOUND_BERSERK 12482 #define YELL_DEATH "Kil'jaeden... will... prevail..." +#define SOUND_DEATH 12483 #define YELL_KALECGOS "Madrigosa deserved a far better fate. You did what had to be done, but this battle is far from over." @@ -181,11 +190,11 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI { case 0: DoYell(YELL_KILL1,LANG_UNIVERSAL, NULL); - //DoPlaySoundToSet(m_creature, SOUND_KILL1); + DoPlaySoundToSet(m_creature, SOUND_KILL1); break; case 1: DoYell(YELL_KILL2,LANG_UNIVERSAL, NULL); - //DoPlaySoundToSet(m_creature, SOUND_KILL2); + DoPlaySoundToSet(m_creature, SOUND_KILL2); break; } } @@ -193,7 +202,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI void JustDied(Unit* Killer) { DoYell(YELL_DEATH, LANG_UNIVERSAL, NULL); - //DoPlaySoundToSet(m_creature, SOUND_DEATH); + DoPlaySoundToSet(m_creature, SOUND_DEATH); } void SpellHit(Unit *caster, const SpellEntry *spell) @@ -276,7 +285,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING); m_creature->StopMoving(); DoYell(YELL_TAKEOFF, LANG_UNIVERSAL, NULL); - //DoPlaySoundToSet(m_creature, SOUND_TAKEOFF); + DoPlaySoundToSet(m_creature, SOUND_TAKEOFF); Timer[EVENT_FLIGHT_SEQUENCE] = 2000; break; case 1: @@ -413,7 +422,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI { case EVENT_BERSERK: DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); - //DoPlaySoundToSet(m_creature, SOUND_BERSERK); + DoPlaySoundToSet(m_creature, SOUND_BERSERK); m_creature->CastSpell(m_creature, SPELL_BERSERK, true); Timer[EVENT_BERSERK] = 0; break; @@ -451,7 +460,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI { case EVENT_BERSERK: DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); - //DoPlaySoundToSet(m_creature, SOUND_BERSERK); + DoPlaySoundToSet(m_creature, SOUND_BERSERK); m_creature->CastSpell(m_creature, SPELL_BERSERK, true); Timer[EVENT_BERSERK] = 0; break; diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 617a39f770..f398f22428 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1345,28 +1345,11 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons break; } - // more generic checks - if (spellInfo_1->SpellIconID == spellInfo_2->SpellIconID && - spellInfo_1->SpellIconID != 0 && spellInfo_2->SpellIconID != 0) - { - bool isModifier = false; - for (int i = 0; i < 3; i++) - { - if (spellInfo_1->EffectApplyAuraName[i] == SPELL_AURA_ADD_FLAT_MODIFIER || - spellInfo_1->EffectApplyAuraName[i] == SPELL_AURA_ADD_PCT_MODIFIER || - spellInfo_2->EffectApplyAuraName[i] == SPELL_AURA_ADD_FLAT_MODIFIER || - spellInfo_2->EffectApplyAuraName[i] == SPELL_AURA_ADD_PCT_MODIFIER ) - isModifier = true; - } - - if (!isModifier) - return true; - } - if (IsRankSpellDueToSpell(spellInfo_1, spellId_2)) return true; - if (spellInfo_1->SpellFamilyName == 0 || spellInfo_2->SpellFamilyName == 0) + if (spellInfo_1->SpellIconID != spellInfo_2->SpellIconID || + !spellInfo_1->SpellIconID) return false; if (spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName)