Naxxramas, Grand Widow Faerlina: script adds. Closes #15

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-11-07 15:50:36 +01:00
parent c532e9a225
commit c920e87f15
5 changed files with 72 additions and 5 deletions

View File

@@ -799,6 +799,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_maghar_captive' WHERE `entry`=1
UPDATE `instance_template` SET `script`='instance_naxxramas' WHERE `map`=533;
UPDATE `creature_template` SET `ScriptName`='boss_anubrekhan' WHERE `entry`=15956;
UPDATE `creature_template` SET `ScriptName`='boss_faerlina' WHERE `entry`=15953;
UPDATE `creature_template` SET `ScriptName`='mob_faerlina_add' WHERE `entry`=16506;
UPDATE `creature_template` SET `ScriptName`='boss_maexxna' WHERE `entry`=15952;
UPDATE `creature_template` SET `ScriptName`='mob_webwrap' WHERE `entry`=16486;
UPDATE `creature_template` SET `ScriptName`='boss_noth' WHERE `entry`=15954;

View File

@@ -0,0 +1 @@
UPDATE `creature_template` SET `ScriptName`='mob_faerlina_add' WHERE `entry`=16506;

View File

@@ -62,6 +62,13 @@ 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();
}
void EnterCombat(Unit *who)
{
@@ -69,7 +76,7 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
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_FIRE, urand(6000,18000));
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000),1);
}
void MoveInLineOfSight(Unit *who)
@@ -117,9 +124,10 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
return;
case EVENT_FRENZY:
DoCast(me,HEROIC(SPELL_FRENZY,H_SPELL_FRENZY));
delayFrenzy = false;
return;
case EVENT_AFTERENRAGE:
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
case EVENT_AFTERENRAGE:
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
}
}
@@ -128,8 +136,19 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
void SpellHit(Unit* caster, const SpellEntry *spell)
{
if (caster->GetEntry() == NPC_WORSHIPPER && spell->Id == HEROIC(SPELL_FRENZY,H_SPELL_FRENZY))
events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE)
{
if (m_creature->HasAura(HEROIC(SPELL_FRENZY,H_SPELL_FRENZY)))
{
if (!delayFrenzy)
{
events.DelayEvents(30000, 1);
delayFrenzy = true;
}
}
else
events.ScheduleEvent(EVENT_AFTERENRAGE, 60000);
}
}
};
@@ -138,6 +157,37 @@ CreatureAI* GetAI_boss_faerlina(Creature* pCreature)
return new boss_faerlinaAI (pCreature);
}
struct TRINITY_DLL_DECL mob_faerlina_addAI : public ScriptedAI
{
mob_faerlina_addAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
}
ScriptedInstance *pInstance;
void Reset()
{
if (!HeroicMode)
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, SPELL_EFFECT_BIND, true);
}
void JustDied(Unit *killer)
{
if (pInstance)
{
if (Creature *pFaerlina = pInstance->instance->GetCreature(pInstance->GetData64(DATA_FAERLINA)))
DoCast(pFaerlina,HEROIC(SPELL_WIDOWS_EMBRACE,H_SPELL_WIDOWS_EMBRACE));
}
}
};
CreatureAI* GetAI_mob_faerlina_add(Creature* pCreature)
{
return new mob_faerlina_addAI (pCreature);
}
void AddSC_boss_faerlina()
{
Script *newscript;
@@ -145,6 +195,11 @@ void AddSC_boss_faerlina()
newscript->Name = "boss_faerlina";
newscript->GetAI = &GetAI_boss_faerlina;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_faerlina_add";
newscript->GetAI = &GetAI_mob_faerlina_add;
newscript->RegisterSelf();
}

View File

@@ -109,12 +109,14 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
GameObject* pGothikGate, *HorsemenChest;
Creature* Sapphiron;
uint32 HorsemenNum;
uint64 uiFaerlina;
void OnCreatureCreate(Creature* pCreature, bool add)
{
switch(pCreature->GetEntry())
{
case 15989: Sapphiron = add ? pCreature : NULL; return;
case 15953: uiFaerlina = pCreature->GetGUID(); return;
}
AddMinion(pCreature, add);
@@ -157,6 +159,13 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
}
}
uint64 GetData64(uint32 id)
{
if (id == DATA_FAERLINA)
return uiFaerlina;
return 0;
}
bool SetBossState(uint32 id, EncounterState state)
{
if (!InstanceData::SetBossState(id, state))

View File

@@ -44,6 +44,7 @@ enum Data
DATA_HEIGAN_ERUPT,
DATA_GOTHIK_GATE,
DATA_SAPPHIRON_BIRTH,
DATA_FAERLINA
};
#define GO_BIRTH 181356