Fix Script Naxxramas/Faerlina with help of Scarymovie87.
Fixes issue #158. - simplifies widow embrace handling - Adds can only be mind controlled in 25man version - Adds will be killed, if mind controlled and using Widows Embrace - Adds will only cast Widows Embrace on death in 10man version - implements Achievement Momma said knock you out - Avoid greet yell for non-player units moving in line of sight - update some timers. --HG-- branch : trunk
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "naxxramas.h"
|
||||
#include "SpellId.h"
|
||||
|
||||
enum Yells
|
||||
{
|
||||
@@ -34,14 +35,14 @@ enum Yells
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_POISON_BOLT_VOLLEY = 28796,
|
||||
H_SPELL_POISON_BOLT_VOLLEY = 54098,
|
||||
SPELL_RAIN_OF_FIRE = 28794,
|
||||
H_SPELL_RAIN_OF_FIRE = 54099,
|
||||
SPELL_FRENZY = 28798,
|
||||
H_SPELL_FRENZY = 54100,
|
||||
SPELL_WIDOWS_EMBRACE = 28732,
|
||||
H_SPELL_WIDOWS_EMBRACE = 54097
|
||||
SPELL_POISON_BOLT_VOLLEY = SPELL_POISON_BOLT_VOLLEY_28796,
|
||||
H_SPELL_POISON_BOLT_VOLLEY = SPELL_POISON_BOLT_VOLLEY_54098,
|
||||
SPELL_RAIN_OF_FIRE = SPELL_RAIN_OF_FIRE_28794,
|
||||
H_SPELL_RAIN_OF_FIRE = SPELL_RAIN_OF_FIRE_54099,
|
||||
SPELL_FRENZY = SPELL_FRENZY_28798,
|
||||
H_SPELL_FRENZY = SPELL_FRENZY_54100,
|
||||
SPELL_WIDOWS_EMBRACE = SPELL_WIDOWS_EMBRACE_28732,
|
||||
H_SPELL_WIDOWS_EMBRACE = SPELL_WIDOWS_EMBRACE_54097
|
||||
};
|
||||
|
||||
enum Events
|
||||
@@ -49,13 +50,13 @@ enum Events
|
||||
EVENT_NONE,
|
||||
EVENT_POISON,
|
||||
EVENT_FIRE,
|
||||
EVENT_FRENZY,
|
||||
EVENT_AFTERENRAGE
|
||||
EVENT_FRENZY
|
||||
};
|
||||
|
||||
enum Creatures
|
||||
enum Achievements
|
||||
{
|
||||
NPC_WORSHIPPER = 16506
|
||||
ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_10 = 1997,
|
||||
ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_25 = 2140
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
|
||||
@@ -63,26 +64,28 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
|
||||
boss_faerlinaAI(Creature *c) : BossAI(c, BOSS_FAERLINA), greet(false) {}
|
||||
|
||||
bool greet;
|
||||
bool delayFrenzy;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
delayFrenzy = false;
|
||||
_Reset();
|
||||
}
|
||||
bool doDelayFrenzy;
|
||||
bool bAchievement;
|
||||
|
||||
void EnterCombat(Unit *who)
|
||||
{
|
||||
_EnterCombat();
|
||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3,SAY_AGGRO_4), me);
|
||||
events.ScheduleEvent(EVENT_POISON, urand(12000,15000));
|
||||
events.ScheduleEvent(EVENT_POISON, urand(10000,15000));
|
||||
events.ScheduleEvent(EVENT_FIRE, urand(6000,18000));
|
||||
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000),1);
|
||||
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
doDelayFrenzy = false;
|
||||
bAchievement = true;
|
||||
_Reset();
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!greet)
|
||||
if (!greet && who->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
DoScriptText(SAY_GREET, me);
|
||||
greet = true;
|
||||
@@ -100,6 +103,9 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
|
||||
{
|
||||
_JustDied();
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (instance && bAchievement)
|
||||
instance->DoCompleteAchievement(RAID_MODE(ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_10,ACHIEVEMENT_MOMMA_SAID_KNOCK_YOU_OUT_25));
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -107,28 +113,40 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (doDelayFrenzy && !me->HasAura(RAID_MODE(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE)))
|
||||
{
|
||||
doDelayFrenzy = false;
|
||||
DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY), true);
|
||||
}
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->hasUnitState(UNIT_STAT_CASTING))
|
||||
return;
|
||||
|
||||
while(uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch(eventId)
|
||||
{
|
||||
case EVENT_POISON:
|
||||
if (!me->HasAura(SPELL_WIDOWS_EMBRACE))
|
||||
if (!me->HasAura(RAID_MODE(SPELL_WIDOWS_EMBRACE,H_SPELL_WIDOWS_EMBRACE)))
|
||||
DoCastAOE(RAID_MODE(SPELL_POISON_BOLT_VOLLEY,H_SPELL_POISON_BOLT_VOLLEY));
|
||||
events.ScheduleEvent(EVENT_POISON, urand(12000,15000));
|
||||
return;
|
||||
events.ScheduleEvent(EVENT_POISON, urand(8000,15000));
|
||||
break;
|
||||
case EVENT_FIRE:
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(pTarget, RAID_MODE(SPELL_RAIN_OF_FIRE, H_SPELL_RAIN_OF_FIRE));
|
||||
events.ScheduleEvent(EVENT_FIRE, urand(6000,18000));
|
||||
return;
|
||||
break;
|
||||
case EVENT_FRENZY:
|
||||
// TODO : Add Text
|
||||
if (!me->HasAura(RAID_MODE(SPELL_WIDOWS_EMBRACE,H_SPELL_WIDOWS_EMBRACE)))
|
||||
DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY));
|
||||
delayFrenzy = false;
|
||||
return;
|
||||
case EVENT_AFTERENRAGE:
|
||||
else
|
||||
doDelayFrenzy = true;
|
||||
|
||||
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,16 +157,10 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
|
||||
{
|
||||
if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE)
|
||||
{
|
||||
if (m_creature->HasAura(RAID_MODE(SPELL_FRENZY,H_SPELL_FRENZY)))
|
||||
{
|
||||
if (!delayFrenzy)
|
||||
{
|
||||
events.DelayEvents(30000, 1);
|
||||
delayFrenzy = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
events.ScheduleEvent(EVENT_AFTERENRAGE, 60000);
|
||||
// TODO : Add Text
|
||||
bAchievement = false;
|
||||
doDelayFrenzy = true;
|
||||
me->Kill(caster);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -169,19 +181,20 @@ struct TRINITY_DLL_DECL mob_faerlina_addAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
|
||||
if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) {
|
||||
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, SPELL_EFFECT_BIND, true);
|
||||
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, true);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *killer)
|
||||
{
|
||||
if (pInstance)
|
||||
if (pInstance && getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
|
||||
{
|
||||
if (Creature *pFaerlina = pInstance->instance->GetCreature(pInstance->GetData64(DATA_FAERLINA)))
|
||||
DoCast(pFaerlina, RAID_MODE(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE));
|
||||
DoCast(pFaerlina, SPELL_WIDOWS_EMBRACE);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_faerlina_add(Creature* pCreature)
|
||||
|
||||
Reference in New Issue
Block a user