[svn] Change aura stack check.

Add some boss yells. Patched provided by BroodWyrm and Blaymoira.

--HG--
branch : trunk
This commit is contained in:
megamage
2008-10-19 13:56:11 -05:00
parent f064bc4ba4
commit 636d810772
3 changed files with 79 additions and 31 deletions
@@ -7,8 +7,17 @@ EndScriptData */
#include "precompiled.h" #include "precompiled.h"
#include "def_sunwell_plateau.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 LADY_SACROLASH 25165
#define SPELL_DARK_TOUCHED 45347 #define SPELL_DARK_TOUCHED 45347
@@ -338,13 +347,14 @@ struct TRINITY_DLL_DECL boss_alythessAI : public ScriptedAI
{ {
pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL; pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL;
Reset(); Reset();
once = false; IntroStepCounter = 10;
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool InCombat; bool InCombat;
bool sisterdeath; bool sisterdeath;
bool once; uint32 IntroStepCounter;
uint32 IntroYell_Timer;
uint32 conflagration_timer; uint32 conflagration_timer;
uint32 blaze_timer; uint32 blaze_timer;
@@ -384,6 +394,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public ScriptedAI
sisterdeath = false; sisterdeath = false;
enrage_timer = 360000; enrage_timer = 360000;
flamesear_timer = 15000; flamesear_timer = 15000;
IntroYell_Timer = 10000;
} }
} }
void Aggro(Unit *who) 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); IntroStepCounter = 0;
once = true;
} }
} }
@@ -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) void UpdateAI(const uint32 diff)
{ {
if(IntroStepCounter < 9)
{
if(IntroYell_Timer < diff)
{
IntroYell_Timer = IntroStep(IntroStepCounter++);
}else IntroYell_Timer -= diff;
}
if(!sisterdeath) if(!sisterdeath)
{ {
if (pInstance) if (pInstance)
@@ -62,6 +62,7 @@ EndScriptData */
#define SPELL_CLOUD_VISUAL 45212 #define SPELL_CLOUD_VISUAL 45212
#define SPELL_CLOUD_SUMMON 45884 #define SPELL_CLOUD_SUMMON 45884
//Creatures
#define MOB_FELMYST 25038 #define MOB_FELMYST 25038
#define MOB_BRUTALLUS #define MOB_BRUTALLUS
#define MOB_KALECGOS #define MOB_KALECGOS
@@ -74,13 +75,21 @@ EndScriptData */
#define MOB_VAPOR 25265 #define MOB_VAPOR 25265
#define MOB_VAPOR_TRAIL 25267 #define MOB_VAPOR_TRAIL 25267
//Yells and Sounds
#define YELL_BIRTH "Glory to Kil'jaeden! Death to all who oppose!" #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 YELL_KILL1 "I kill for the master!"
#define SOUND_KILL1 12480
#define YELL_KILL2 "The end has come!" #define YELL_KILL2 "The end has come!"
#define SOUND_KILL2 12481
#define YELL_BREATH "Choke on your final breath!" #define YELL_BREATH "Choke on your final breath!"
#define SOUND_BREATH 12478
#define YELL_TAKEOFF "I am stronger than ever before!" #define YELL_TAKEOFF "I am stronger than ever before!"
#define SOUND_TAKEOFF 12479
#define YELL_BERSERK "No more hesitation! Your fates are written!" #define YELL_BERSERK "No more hesitation! Your fates are written!"
#define SOUND_BERSERK 12482
#define YELL_DEATH "Kil'jaeden... will... prevail..." #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." #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: case 0:
DoYell(YELL_KILL1,LANG_UNIVERSAL, NULL); DoYell(YELL_KILL1,LANG_UNIVERSAL, NULL);
//DoPlaySoundToSet(m_creature, SOUND_KILL1); DoPlaySoundToSet(m_creature, SOUND_KILL1);
break; break;
case 1: case 1:
DoYell(YELL_KILL2,LANG_UNIVERSAL, NULL); DoYell(YELL_KILL2,LANG_UNIVERSAL, NULL);
//DoPlaySoundToSet(m_creature, SOUND_KILL2); DoPlaySoundToSet(m_creature, SOUND_KILL2);
break; break;
} }
} }
@@ -193,7 +202,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
void JustDied(Unit* Killer) void JustDied(Unit* Killer)
{ {
DoYell(YELL_DEATH, LANG_UNIVERSAL, NULL); DoYell(YELL_DEATH, LANG_UNIVERSAL, NULL);
//DoPlaySoundToSet(m_creature, SOUND_DEATH); DoPlaySoundToSet(m_creature, SOUND_DEATH);
} }
void SpellHit(Unit *caster, const SpellEntry *spell) 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->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
m_creature->StopMoving(); m_creature->StopMoving();
DoYell(YELL_TAKEOFF, LANG_UNIVERSAL, NULL); DoYell(YELL_TAKEOFF, LANG_UNIVERSAL, NULL);
//DoPlaySoundToSet(m_creature, SOUND_TAKEOFF); DoPlaySoundToSet(m_creature, SOUND_TAKEOFF);
Timer[EVENT_FLIGHT_SEQUENCE] = 2000; Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
break; break;
case 1: case 1:
@@ -413,7 +422,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
{ {
case EVENT_BERSERK: case EVENT_BERSERK:
DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL);
//DoPlaySoundToSet(m_creature, SOUND_BERSERK); DoPlaySoundToSet(m_creature, SOUND_BERSERK);
m_creature->CastSpell(m_creature, SPELL_BERSERK, true); m_creature->CastSpell(m_creature, SPELL_BERSERK, true);
Timer[EVENT_BERSERK] = 0; Timer[EVENT_BERSERK] = 0;
break; break;
@@ -451,7 +460,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
{ {
case EVENT_BERSERK: case EVENT_BERSERK:
DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL);
//DoPlaySoundToSet(m_creature, SOUND_BERSERK); DoPlaySoundToSet(m_creature, SOUND_BERSERK);
m_creature->CastSpell(m_creature, SPELL_BERSERK, true); m_creature->CastSpell(m_creature, SPELL_BERSERK, true);
Timer[EVENT_BERSERK] = 0; Timer[EVENT_BERSERK] = 0;
break; break;
+2 -19
View File
@@ -1345,28 +1345,11 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons
break; 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)) if (IsRankSpellDueToSpell(spellInfo_1, spellId_2))
return true; return true;
if (spellInfo_1->SpellFamilyName == 0 || spellInfo_2->SpellFamilyName == 0) if (spellInfo_1->SpellIconID != spellInfo_2->SpellIconID ||
!spellInfo_1->SpellIconID)
return false; return false;
if (spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName) if (spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName)