diff options
-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.sql | 1 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp | 62 |
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(); } |