aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/FULL/world_scripts_full.sql1
-rw-r--r--sql/updates/6077_world_scripts.sql1
-rw-r--r--src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp102
3 files changed, 82 insertions, 22 deletions
diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql
index 29a3ce89721..28ad365b185 100644
--- a/sql/FULL/world_scripts_full.sql
+++ b/sql/FULL/world_scripts_full.sql
@@ -779,6 +779,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_worshipper' 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;
diff --git a/sql/updates/6077_world_scripts.sql b/sql/updates/6077_world_scripts.sql
new file mode 100644
index 00000000000..2f8372e4772
--- /dev/null
+++ b/sql/updates/6077_world_scripts.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `ScriptName`='mob_worshipper' WHERE `entry`=16506;
diff --git a/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp b/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp
index bfe774e2ce7..4dd7dcb2318 100644
--- a/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp
+++ b/src/bindings/scripts/scripts/northrend/naxxramas/boss_faerlina.cpp
@@ -19,23 +19,42 @@
#include "precompiled.h"
#include "naxxramas.h"
-#define SAY_GREET -1533009
-#define SAY_AGGRO RAND(-1533010,-1533011,-1533012,-1533013)
-#define SAY_SLAY RAND(-1533014,-1533015)
-#define SAY_DEATH -1533016
-
+enum Yells
+{
+ SAY_GREET = -1533009,
+ SAY_AGGRO_1 = -1533010,
+ SAY_AGGRO_2 = -1533011,
+ SAY_AGGRO_3 = -1533012,
+ SAY_AGGRO_4 = -1533013,
+ SAY_SLAY_1 = -1533014,
+ SAY_SLAY_2 = -1533015,
+ SAY_DEATH = -1533016
+};
//#define SOUND_RANDOM_AGGRO 8955 //soundId containing the 4 aggro sounds, we not using this
-#define SPELL_POSION_BOLT_VOLLEY HEROIC(28796,54098)
-#define SPELL_RAIN_OF_FIRE HEROIC(28794,54099)
-#define SPELL_FRENZY HEROIC(28798,54100)
-#define SPELL_WIDOWS_EMBRACE HEROIC(28732,54097)
+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
+};
enum Events
{
- EVENT_POSION = 1,
+ EVENT_POISON = 1,
EVENT_FIRE,
EVENT_FRENZY,
+ EVENT_AFTERENRAGE
+};
+
+enum Creatures
+{
+ NPC_FAERLINA = 15953
};
struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
@@ -47,10 +66,10 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
void EnterCombat(Unit *who)
{
_EnterCombat();
- DoScriptText(SAY_AGGRO, me);
- events.ScheduleEvent(EVENT_POSION, 10000 + rand()%15000);
- events.ScheduleEvent(EVENT_FIRE, 5000 + rand()%15000);
- events.ScheduleEvent(EVENT_FRENZY, 60000 + rand()%20000);
+ 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));
}
void MoveInLineOfSight(Unit *who)
@@ -66,7 +85,7 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
void KilledUnit(Unit* victim)
{
if (!(rand()%3))
- DoScriptText(SAY_SLAY, me);
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
}
void JustDied(Unit* Killer)
@@ -86,25 +105,32 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
{
switch(eventId)
{
- case EVENT_POSION:
+ case EVENT_POISON:
if (!me->HasAura(SPELL_WIDOWS_EMBRACE))
- DoCastAOE(SPELL_POSION_BOLT_VOLLEY);
- events.ScheduleEvent(EVENT_POSION, 10000 + rand()%15000);
+ DoCastAOE(HEROIC(SPELL_POISON_BOLT_VOLLEY,H_SPELL_POISON_BOLT_VOLLEY));
+ events.ScheduleEvent(EVENT_POISON, urand(12000,15000));
return;
case EVENT_FIRE:
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_RAIN_OF_FIRE);
- events.ScheduleEvent(EVENT_FIRE, 5000 + rand()%15000);
+ DoCast(target, HEROIC(SPELL_RAIN_OF_FIRE,H_SPELL_RAIN_OF_FIRE));
+ events.ScheduleEvent(EVENT_FIRE, urand(6000,18000));
return;
case EVENT_FRENZY:
- DoCast(me,SPELL_FRENZY);
- events.ScheduleEvent(EVENT_FRENZY, 60000 + rand()%20000);
+ DoCast(me,HEROIC(SPELL_FRENZY,H_SPELL_FRENZY));
return;
+ case EVENT_AFTERENRAGE:
+ events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
}
}
DoMeleeAttackIfReady();
}
+
+ void DispellEnrage()
+ {
+ events.ScheduleEvent(EVENT_FRENZY, urand(60000,80000));
+ m_creature->RemoveAurasDueToSpell(HEROIC(SPELL_FRENZY,H_SPELL_FRENZY));
+ }
};
CreatureAI* GetAI_boss_faerlina(Creature* pCreature)
@@ -112,6 +138,31 @@ CreatureAI* GetAI_boss_faerlina(Creature* pCreature)
return new boss_faerlinaAI (pCreature);
}
+struct TRINITY_DLL_DECL mob_worshipperAI : public ScriptedAI
+{
+ mob_worshipperAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ ScriptedInstance *pInstance;
+
+ void JustDied(Unit *pKiller)
+ {
+ if (pInstance)
+ if (Creature* pFaerlina = pInstance->instance->GetCreature(NPC_FAERLINA))
+ {
+ DoCast(pFaerlina,HEROIC(SPELL_WIDOWS_EMBRACE,H_SPELL_WIDOWS_EMBRACE));
+ CAST_AI(boss_faerlinaAI,pFaerlina->AI())->DispellEnrage();
+ }
+ }
+};
+
+CreatureAI* GetAI_mob_worshipper(Creature* pCreature)
+{
+ return new mob_worshipperAI (pCreature);
+}
+
void AddSC_boss_faerlina()
{
Script *newscript;
@@ -119,4 +170,11 @@ void AddSC_boss_faerlina()
newscript->Name = "boss_faerlina";
newscript->GetAI = &GetAI_boss_faerlina;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_worshipper";
+ newscript->GetAI = &GetAI_mob_worshipper;
+ newscript->RegisterSelf();
}
+
+