aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaymoira <none@none>2009-01-11 10:04:26 +0100
committerBlaymoira <none@none>2009-01-11 10:04:26 +0100
commitbc1a40bed21a28de2c005d9f239b0927536b32ff (patch)
tree8848f0053de90d782939f2ce17075d35f6ffc17b
parentaba4f5927dbe2d4025f3395d34d537ecedd119f1 (diff)
*Corrected vulcanos by Supremus for phase switching - by Anubisss
--HG-- branch : trunk
-rw-r--r--sql/updates/839_world_scripts.sql (renamed from sql/updates/839_world_script.sql)0
-rw-r--r--sql/updates/840_world_scripts.sql1
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp62
3 files changed, 63 insertions, 0 deletions
diff --git a/sql/updates/839_world_script.sql b/sql/updates/839_world_scripts.sql
index 722737ea3b0..722737ea3b0 100644
--- a/sql/updates/839_world_script.sql
+++ b/sql/updates/839_world_scripts.sql
diff --git a/sql/updates/840_world_scripts.sql b/sql/updates/840_world_scripts.sql
new file mode 100644
index 00000000000..8b0140b6dbb
--- /dev/null
+++ b/sql/updates/840_world_scripts.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `spell1` = 0, `flags_extra` = 0, `ScriptName` = 'npc_volcano' WHERE `entry` = 23085; \ No newline at end of file
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
index 6c642ea41a3..ea7fc3cbd1e 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
@@ -193,6 +193,9 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
{
if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 999, true))
{
+ if(!target)
+ target = m_creature->getVictim();
+
DoCast(target, SPELL_VOLCANIC_SUMMON);
DoScriptText(EMOTE_GROUND_CRACK, m_creature);
SummonVolcanoTimer = 10000;
@@ -226,6 +229,55 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
}
};
+struct TRINITY_DLL_DECL npc_volcanoAI : public ScriptedAI
+{
+ npc_volcanoAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ Reset();
+ }
+
+ ScriptedInstance *pInstance;
+
+ uint32 CheckTimer;
+ bool Eruption;
+
+ void Reset()
+ {
+ CheckTimer = 1500;
+ Eruption = false;
+
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ }
+
+ void Aggro(Unit *who) {}
+
+ void MoveInLineOfSight(Unit *who)
+ {
+ return; // paralyze the npc
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if(CheckTimer < diff)
+ {
+ uint64 SupremusGUID = pInstance->GetData64(DATA_SUPREMUS);
+ Creature* Supremus = ((Creature*)Unit::GetUnit((*m_creature), SupremusGUID));
+ if(!Eruption && !((boss_supremusAI*)Supremus->AI())->Phase1)
+ {
+ Eruption = true;
+ DoCast(m_creature, SPELL_VOLCANIC_ERUPTION);
+ }
+ else if(Eruption && ((boss_supremusAI*)Supremus->AI())->Phase1)
+ {
+ m_creature->RemoveAura(SPELL_VOLCANIC_ERUPTION, 0);
+ }
+ CheckTimer = 1500;
+ }else CheckTimer -= diff;
+ }
+};
+
CreatureAI* GetAI_boss_supremus(Creature *_Creature)
{
return new boss_supremusAI (_Creature);
@@ -236,6 +288,11 @@ CreatureAI* GetAI_molten_flame(Creature *_Creature)
return new molten_flameAI (_Creature);
}
+CreatureAI* GetAI_npc_volcano(Creature *_Creature)
+{
+ return new npc_volcanoAI (_Creature);
+}
+
void AddSC_boss_supremus()
{
Script *newscript;
@@ -248,4 +305,9 @@ void AddSC_boss_supremus()
newscript->Name="molten_flame";
newscript->GetAI = &GetAI_molten_flame;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="npc_volcano";
+ newscript->GetAI = &GetAI_npc_volcano;
+ newscript->RegisterSelf();
}