aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortartalo <none@none>2009-11-07 15:50:36 +0100
committertartalo <none@none>2009-11-07 15:50:36 +0100
commitc920e87f15c43081460b588bce16ce63bf7c97c9 (patch)
tree77200e25366eea5f5b078adaeccd07efeb310ff0 /src
parentc532e9a225908f48b5ebec11651aa894908b8aeb (diff)
Naxxramas, Grand Widow Faerlina: script adds. Closes #15
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp65
-rw-r--r--src/bindings/scripts/scripts/northrend/naxxramas/instance_naxxramas.cpp9
-rw-r--r--src/bindings/scripts/scripts/northrend/naxxramas/naxxramas.h1
3 files changed, 70 insertions, 5 deletions
diff --git a/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp b/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp
index 42b7d53667c..e565b69e130 100644
--- a/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp
+++ b/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp
@@ -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();
}
diff --git a/src/bindings/scripts/scripts/northrend/naxxramas/instance_naxxramas.cpp b/src/bindings/scripts/scripts/northrend/naxxramas/instance_naxxramas.cpp
index 35bac524060..7f13e172664 100644
--- a/src/bindings/scripts/scripts/northrend/naxxramas/instance_naxxramas.cpp
+++ b/src/bindings/scripts/scripts/northrend/naxxramas/instance_naxxramas.cpp
@@ -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))
diff --git a/src/bindings/scripts/scripts/northrend/naxxramas/naxxramas.h b/src/bindings/scripts/scripts/northrend/naxxramas/naxxramas.h
index 383200d4600..99f54da435e 100644
--- a/src/bindings/scripts/scripts/northrend/naxxramas/naxxramas.h
+++ b/src/bindings/scripts/scripts/northrend/naxxramas/naxxramas.h
@@ -44,6 +44,7 @@ enum Data
DATA_HEIGAN_ERUPT,
DATA_GOTHIK_GATE,
DATA_SAPPHIRON_BIRTH,
+ DATA_FAERLINA
};
#define GO_BIRTH 181356