diff options
author | tartalo <none@none> | 2009-11-07 15:50:36 +0100 |
---|---|---|
committer | tartalo <none@none> | 2009-11-07 15:50:36 +0100 |
commit | c920e87f15c43081460b588bce16ce63bf7c97c9 (patch) | |
tree | 77200e25366eea5f5b078adaeccd07efeb310ff0 /src | |
parent | c532e9a225908f48b5ebec11651aa894908b8aeb (diff) |
Naxxramas, Grand Widow Faerlina: script adds. Closes #15
--HG--
branch : trunk
Diffstat (limited to 'src')
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 |