aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/world_database.sql2
-rw-r--r--sql/scripts/world_script_texts.sql1
-rw-r--r--sql/scripts/world_scripts_full.sql2
-rw-r--r--sql/updates/10181_world_script_name.sql3
-rw-r--r--sql/updates/10181_world_script_texts.sql3
-rw-r--r--sql/updates/10181_world_spell_script_names.sql4
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp444
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h6
9 files changed, 432 insertions, 47 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql
index 74013e28f80..c917a3adf72 100644
--- a/sql/base/world_database.sql
+++ b/sql/base/world_database.sql
@@ -26838,6 +26838,8 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
( 71222, 'spell_festergut_blighted_spores'),
( 73033, 'spell_festergut_blighted_spores'),
( 73034, 'spell_festergut_blighted_spores'),
+( 62717, 'spell_ignis_slag_pot'),
+( 63477, 'spell_ignis_slag_pot'),
-- quest
( 8913, 'spell_q55_sacred_cleansing'),
( 17271, 'spell_q5206_test_fetid_skull'),
diff --git a/sql/scripts/world_script_texts.sql b/sql/scripts/world_script_texts.sql
index 0b0525da58e..0186eaba102 100644
--- a/sql/scripts/world_script_texts.sql
+++ b/sql/scripts/world_script_texts.sql
@@ -2485,6 +2485,7 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(33118,-1603226,'Let the inferno consume you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15567,1,0,0,'Ignis SAY_SCORCH_1'),
(33118,-1603227,'BURN! Burn in the makers fire!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15568,1,0,0,'Ignis SAY_SCORCH_2'),
(33118,-1603228,'Let it be finished!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15571,1,0,0,'Ignis SAY_BERSERK'),
+ (33118,-1603229,'Ignis the Furnace Master begins to cast Flame Jets!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'IGNIS EMOTE_JETS'),
-- Kologarn
(32930,-1603230,'None shall pass!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15586,1,0,0,'Kologarn SAY_AGGRO'),
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql
index cc6ba278698..f13819b4af7 100644
--- a/sql/scripts/world_scripts_full.sql
+++ b/sql/scripts/world_scripts_full.sql
@@ -1486,6 +1486,8 @@ UPDATE `creature_template` SET `ScriptName`='boss_flame_leviathan_overload_devic
UPDATE `creature_template` SET `ScriptName`='npc_colossus' WHERE `entry`=33237;
UPDATE `creature_template` SET `ScriptName`='spell_pool_of_tar' WHERE `entry`=33090;
UPDATE `creature_template` SET `ScriptName`='boss_ignis' WHERE `entry`=33118;
+UPDATE `creature_template` SET `ScriptName`='npc_iron_construct' WHERE `entry`=33121;
+UPDATE `creature_template` SET `ScriptName`='npc_scorch_ground' WHERE `entry`=33221;
UPDATE `creature_template` SET `ScriptName`='boss_razorscale' WHERE `entry`=33186;
UPDATE `creature_template` SET `ScriptName`='boss_xt002' WHERE `entry`=33293;
UPDATE `creature_template` SET `ScriptName`='mob_xt002_heart' WHERE `entry`=33329;
diff --git a/sql/updates/10181_world_script_name.sql b/sql/updates/10181_world_script_name.sql
new file mode 100644
index 00000000000..d654bdbecbf
--- /dev/null
+++ b/sql/updates/10181_world_script_name.sql
@@ -0,0 +1,3 @@
+-- Add script name to boss ignis adds
+UPDATE `creature_template` SET `ScriptName`='npc_iron_construct' WHERE `entry`=33121;
+UPDATE `creature_template` SET `ScriptName`='npc_scorch_ground' WHERE `entry`=33221;
diff --git a/sql/updates/10181_world_script_texts.sql b/sql/updates/10181_world_script_texts.sql
new file mode 100644
index 00000000000..e131affb749
--- /dev/null
+++ b/sql/updates/10181_world_script_texts.sql
@@ -0,0 +1,3 @@
+DELETE FROM `script_texts` WHERE `entry` IN (-1571043,-1571042);
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`) VALUES
+(33118,-1603229,'Ignis the Furnace Master begins to cast Flame Jets!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'IGNIS EMOTE_JETS');
diff --git a/sql/updates/10181_world_spell_script_names.sql b/sql/updates/10181_world_spell_script_names.sql
new file mode 100644
index 00000000000..8fd8b74e431
--- /dev/null
+++ b/sql/updates/10181_world_spell_script_names.sql
@@ -0,0 +1,4 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=62717 AND `ScriptName`='spell_ignis_slag_pot';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(62717, 'spell_ignis_slag_pot'); -- boss Ignis 10man
+(62717, 'spell_ignis_slag_pot'); -- boss Ignis 25man
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp
index 33b97eff96e..875b9c1ef98 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp
@@ -17,10 +17,7 @@
#include "ScriptPCH.h"
#include "ulduar.h"
-
-#define SPELL_FLAME_JETS 62680
-#define SPELL_SCORCH 62546
-#define SPELL_SLAG_POT 62717
+#include "SpellAuraEffects.h"
enum Yells
{
@@ -33,11 +30,83 @@ enum Yells
SAY_SCORCH_1 = -1603226,
SAY_SCORCH_2 = -1603227,
SAY_BERSERK = -1603228,
+ EMOTE_JETS = -1603229,
};
-enum
+enum Spells
+{
+ SPELL_FLAME_JETS = 62680,
+ SPELL_SCORCH = 62546,
+ SPELL_SLAG_POT = 62717,
+ SPELL_SLAG_POT_DAMAGE = 65722,
+ SPELL_SLAG_IMBUED = 62836,
+ SPELL_ACTIVATE_CONSTRUCT = 62488,
+ SPELL_STRENGHT = 64473,
+ SPELL_GRAB = 62707,
+ SPELL_BERSERK = 47008
+};
+
+enum Events
+{
+ EVENT_NONE,
+ EVENT_JET,
+ EVENT_SCORCH,
+ EVENT_SLAG_POT,
+ EVENT_GRAB_POT,
+ EVENT_CHANGE_POT,
+ EVENT_END_POT,
+ EVENT_CONSTRUCT,
+ EVENT_BERSERK,
+ ACTION_REMOVE_BUFF = 20
+};
+
+enum eCreatures
+{
+ NPC_IRON_CONSTRUCT = 33121,
+ NPC_GROUND_SCORCH = 33221
+};
+
+enum ConstructSpells
+{
+ SPELL_HEAT = 65667,
+ SPELL_MOLTEN = 62373,
+ SPELL_BRITTLE = 62382,
+ SPELL_SHATTER = 62383,
+ SPELL_GROUND = 62548,
+};
+
+enum eAchievementData
+{
+ ACHIEVEMENT_STOKIN_THE_FURNACE_10 = 2930,
+ ACHIEVEMENT_STOKIN_THE_FURNACE_25 = 2929,
+ ACHIEVEMENT_SHATTERED_10 = 2925,
+ ACHIEVEMENT_SHATTERED_25 = 2926,
+};
+
+#define MAX_ENCOUNTER_TIME 4 * 60 * 1000
+
+const Position Pos[20] =
{
- ACHIEV_TIMED_START_EVENT = 20951,
+ {630.366f,216.772f,360.891f,3.001970f},
+ {630.594f,231.846f,360.891f,3.124140f},
+ {630.435f,337.246f,360.886f,3.211410f},
+ {630.493f,313.349f,360.886f,3.054330f},
+ {630.444f,321.406f,360.886f,3.124140f},
+ {630.366f,247.307f,360.888f,3.211410f},
+ {630.698f,305.311f,360.886f,3.001970f},
+ {630.500f,224.559f,360.891f,3.054330f},
+ {630.668f,239.840f,360.890f,3.159050f},
+ {630.384f,329.585f,360.886f,3.159050f},
+ {543.220f,313.451f,360.886f,0.104720f},
+ {543.356f,329.408f,360.886f,6.248280f},
+ {543.076f,247.458f,360.888f,6.213370f},
+ {543.117f,232.082f,360.891f,0.069813f},
+ {543.161f,305.956f,360.886f,0.157080f},
+ {543.277f,321.482f,360.886f,0.052360f},
+ {543.316f,337.468f,360.886f,6.195920f},
+ {543.280f,239.674f,360.890f,6.265730f},
+ {543.265f,217.147f,360.891f,0.174533f},
+ {543.256f,224.831f,360.891f,0.122173f}
};
class boss_ignis : public CreatureScript
@@ -52,51 +121,68 @@ public:
struct boss_ignis_AI : public BossAI
{
- boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, TYPE_IGNIS) {}
+ boss_ignis_AI(Creature *pCreature) : BossAI(pCreature, TYPE_IGNIS), vehicle(me->GetVehicleKit())
+ {
+ assert(vehicle);
+ me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
+ me->ApplySpellImmune(0, IMMUNITY_ID, 49560, true); // Death Grip jump effect
+ }
+
+ Vehicle *vehicle;
- uint32 uiFlameJetsTimer;
- uint32 uiScorchTimer;
- uint32 uiSlagPotTimer;
+ std::vector<Creature*> triggers;
+
+ bool Shattered;
+ uint32 SlagPotGUID;
+ uint32 EncounterTime;
+ uint32 ConstructTimer;
void Reset()
{
_Reset();
- uiFlameJetsTimer = 32000;
- uiScorchTimer = 100;
- uiSlagPotTimer = 100;
-
- if (instance)
- instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
+ if (vehicle)
+ vehicle->RemoveAllPassengers();
}
- void EnterCombat(Unit* /*who*/)
+ void EnterCombat(Unit *who)
{
- DoScriptText(SAY_AGGRO,me);
_EnterCombat();
-
- if (instance)
- instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
+ DoScriptText(SAY_AGGRO, me);
+ events.ScheduleEvent(EVENT_JET, 30000);
+ events.ScheduleEvent(EVENT_SCORCH, 25000);
+ events.ScheduleEvent(EVENT_SLAG_POT, 35000);
+ events.ScheduleEvent(EVENT_CONSTRUCT, 15000);
+ events.ScheduleEvent(EVENT_END_POT, 40000);
+ events.ScheduleEvent(EVENT_BERSERK, 480000);
+ SlagPotGUID = 0;
+ EncounterTime = 0;
+ ConstructTimer = 0;
+ Shattered = false;
}
- void KilledUnit(Unit* /*victim*/)
+ void JustDied(Unit *victim)
{
- DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
- }
-
- void JustDied(Unit * /*victim*/)
- {
- DoScriptText(SAY_DEATH, me);
_JustDied();
- }
+ DoScriptText(SAY_DEATH, me);
- void MoveInLineOfSight(Unit* /*who*/) {}
+ // Achievements
+ if (instance)
+ {
+ // Shattered
+ if (Shattered)
+ instance->DoCompleteAchievement(RAID_MODE(ACHIEVEMENT_SHATTERED_10,ACHIEVEMENT_SHATTERED_25));
+ // Stokin' the Furnace
+ if (EncounterTime <= MAX_ENCOUNTER_TIME)
+ instance->DoCompleteAchievement(RAID_MODE(ACHIEVEMENT_STOKIN_THE_FURNACE_10,ACHIEVEMENT_STOKIN_THE_FURNACE_25));
+ }
+ }
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
- if (me->GetPositionY() < 150 || me->GetPositionX() < 450) // Not Blizzlike, anti-exploit to prevent players from pulling bosses to vehicles.
+ if(me->GetPositionY() < 150 || me->GetPositionX() < 450 || me->getVictim()->GetTypeId() == !TYPEID_PLAYER)
{
me->RemoveAllAuras();
me->DeleteThreatList();
@@ -104,35 +190,299 @@ public:
me->GetMotionMaster()->MoveTargetedHome();
}
- if (uiFlameJetsTimer <= diff)
+ events.Update(diff);
+
+ if (me->hasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ EncounterTime += diff;
+ ConstructTimer += diff;
+
+ while(uint32 eventId = events.ExecuteEvent())
{
- DoCast(SPELL_FLAME_JETS);
- uiFlameJetsTimer = 25000;
- } else uiFlameJetsTimer -= diff;
+ switch(eventId)
+ {
+ case EVENT_JET:
+ me->MonsterTextEmote(EMOTE_JETS, 0, true);
+ DoCastAOE(SPELL_FLAME_JETS);
+ events.RescheduleEvent(EVENT_JET,urand(35000,40000));
+ break;
+ case EVENT_SLAG_POT:
+ if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ {
+ DoScriptText(SAY_SLAG_POT, me);
+ SlagPotGUID = pTarget->GetGUID();
+ DoCast(pTarget, SPELL_GRAB);
+ events.DelayEvents(3000);
+ events.ScheduleEvent(EVENT_GRAB_POT, 500);
+ }
+ events.RescheduleEvent(EVENT_SLAG_POT,RAID_MODE(30000, 15000));
+ break;
+ case EVENT_GRAB_POT:
+ if (Unit* SlagPotTarget = Unit::GetUnit(*me, SlagPotGUID))
+ {
+ SlagPotTarget->EnterVehicle(me, 0);
+ events.CancelEvent(EVENT_GRAB_POT);
+ events.ScheduleEvent(EVENT_CHANGE_POT, 1000);
+ }
+ break;
+ case EVENT_CHANGE_POT:
+ if (Unit* SlagPotTarget = Unit::GetUnit(*me, SlagPotGUID))
+ {
+ SlagPotTarget->AddAura(SPELL_SLAG_POT, SlagPotTarget);
+ SlagPotTarget->EnterVehicle(me, 1);
+ events.CancelEvent(EVENT_CHANGE_POT);
+ events.ScheduleEvent(EVENT_END_POT, 10000);
+ }
+ break;
+ case EVENT_END_POT:
+ if (Unit* SlagPotTarget = Unit::GetUnit(*me, SlagPotGUID))
+ {
+ SlagPotTarget->ExitVehicle();
+ SlagPotTarget = NULL;
+ SlagPotGUID = NULL;
+ events.CancelEvent(EVENT_END_POT);
+ }
+ break;
+ case EVENT_SCORCH:
+ DoScriptText(RAND(SAY_SCORCH_1, SAY_SCORCH_2), me);
+ if (Unit *pTarget = me->getVictim())
+ me->SummonCreature(NPC_GROUND_SCORCH, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 45000);
+ DoCast(SPELL_SCORCH);
+ events.RescheduleEvent(EVENT_SCORCH,25000);
+ break;
+ case EVENT_CONSTRUCT:
+ DoScriptText(SAY_SUMMON, me);
+ DoSummon(NPC_IRON_CONSTRUCT, Pos[rand()%20], 30000, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT);
+ DoCast(SPELL_STRENGHT);
+ DoCast(me, SPELL_ACTIVATE_CONSTRUCT);
+ events.RescheduleEvent(EVENT_CONSTRUCT,RAID_MODE(40000, 30000));
+ break;
+ case EVENT_BERSERK:
+ DoCast(me, SPELL_BERSERK, true);
+ DoScriptText(SAY_BERSERK, me);
+ break;
+ }
+ }
+ DoMeleeAttackIfReady();
+ }
+
+ void KilledUnit(Unit* Victim)
+ {
+ if (!(rand()%5))
+ DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me);
+ }
- if (uiScorchTimer <= diff)
+ void JustSummoned(Creature *summon)
+ {
+ if (summon->GetEntry() == NPC_IRON_CONSTRUCT)
{
- DoScriptText(RAND(SAY_SCORCH_1,SAY_SCORCH_2), me);
- DoCast(SPELL_SCORCH);
- uiScorchTimer = 20000;
- } else uiScorchTimer -= diff;
+ summon->setFaction(16);
+ summon->SetReactState(REACT_AGGRESSIVE);
+ summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_DISABLE_MOVE);
+ }
+ summon->AI()->AttackStart(me->getVictim());
+ summon->AI()->DoZoneInCombat();
+ summons.Summon(summon);
+ }
- if (uiSlagPotTimer <= diff)
+ void DoAction(const int32 action)
+ {
+ switch(action)
{
- if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ case ACTION_REMOVE_BUFF:
+ me->RemoveAuraFromStack(SPELL_STRENGHT);
+ // Shattered Achievement
+ if (ConstructTimer >= 5000)
+ ConstructTimer = 0;
+ else
+ Shattered = true;
+ break;
+ }
+ }
+ };
+};
+
+class npc_iron_construct : public CreatureScript
+{
+public:
+ npc_iron_construct() : CreatureScript("npc_iron_construct") { }
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_iron_constructAI(creature);
+ }
+
+ struct npc_iron_constructAI : public ScriptedAI
+ {
+ npc_iron_constructAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ instance = pCreature->GetInstanceScript();
+ pCreature->SetReactState(REACT_PASSIVE);
+ }
+
+ InstanceScript* instance;
+ bool Brittled;
+
+ void Reset()
+ {
+ Brittled = false;
+ }
+
+ void DamageTaken(Unit *attacker, uint32 &damage)
+ {
+ if (me->HasAura(SPELL_BRITTLE) && damage >= 5000)
+ {
+ DoCast(SPELL_SHATTER);
+ if (Creature *pIgnis = me->GetCreature(*me, instance->GetData64(TYPE_IGNIS)))
+ if (pIgnis->AI())
+ pIgnis->AI()->DoAction(ACTION_REMOVE_BUFF);
+
+ me->ForcedDespawn(1000);
+ }
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (Aura * aur = me->GetAura(SPELL_HEAT))
+ {
+ if (aur->GetStackAmount() >= 10)
{
- DoScriptText(SAY_SLAG_POT, me);
- DoCast(pTarget, SPELL_SLAG_POT);
+ me->RemoveAura(SPELL_HEAT);
+ DoCast(SPELL_MOLTEN);
+ Brittled = false;
}
- uiSlagPotTimer = 30000;
- } else uiSlagPotTimer -= diff;
-
+ }
+ // Water pools
+ if (me->IsInWater() && !Brittled && me->HasAura(SPELL_MOLTEN))
+ {
+ DoCast(SPELL_BRITTLE);
+ me->RemoveAura(SPELL_MOLTEN);
+ Brittled = true;
+ }
DoMeleeAttackIfReady();
}
};
+};
+class npc_scorch_ground : public CreatureScript
+{
+public:
+ npc_scorch_ground() : CreatureScript("npc_scorch_ground") { }
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_scorch_groundAI(creature);
+ }
+
+ struct npc_scorch_groundAI : public ScriptedAI
+ {
+ npc_scorch_groundAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE |UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
+ pCreature->SetDisplayId(16925); //model 2 in db cannot overwrite wdb fields
+ }
+
+ uint64 ConstructGUID;
+ uint32 HeatTimer;
+ bool Heat;
+
+ void MoveInLineOfSight(Unit* pWho)
+ {
+ if (!Heat)
+ {
+ if (pWho->GetEntry() == NPC_IRON_CONSTRUCT)
+ {
+ if (!pWho->HasAura(SPELL_HEAT) || !pWho->HasAura(SPELL_MOLTEN))
+ {
+ ConstructGUID = pWho->GetGUID();
+ Heat=true;
+ }
+ }
+ }
+ }
+
+ void Reset()
+ {
+ Heat=false;
+ DoCast(me, SPELL_GROUND);
+ ConstructGUID=0;
+ HeatTimer=0;
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (Heat)
+ {
+ if(HeatTimer <= uiDiff)
+ {
+ Creature* Construct = me->GetCreature(*me ,ConstructGUID);
+ if (Construct && !Construct->HasAura(SPELL_MOLTEN))
+ {
+ me->AddAura(SPELL_HEAT,Construct);
+ HeatTimer=1000;
+ }
+ }
+ else
+ HeatTimer -= uiDiff;
+ }
+ }
+ };
};
+
+class spell_ignis_slag_pot : public SpellScriptLoader
+{
+ public:
+ spell_ignis_slag_pot() : SpellScriptLoader("spell_ignis_slag_pot") { }
+
+ class spell_ignis_slag_pot_AuraScript : public AuraScript
+ {
+ bool Validate(SpellEntry const * /*spellEntry*/)
+ {
+ if (!sSpellStore.LookupEntry(SPELL_SLAG_POT_DAMAGE))
+ return false;
+ if (!sSpellStore.LookupEntry(SPELL_SLAG_POT))
+ return false;
+ if (!sSpellStore.LookupEntry(SPELL_SLAG_IMBUED))
+ return false;
+ return true;
+ }
+
+ void HandleEffectPeriodic(AuraEffect const * aurEff, AuraApplication const * aurApp)
+ {
+ Unit* aurEffCaster = aurEff->GetCaster();
+ if (!aurEffCaster)
+ return;
+
+ Unit * target = aurApp->GetTarget();
+ aurEffCaster->CastSpell(target, SPELL_SLAG_POT_DAMAGE, true);
+ if (target->isAlive() && !GetDuration())
+ target->CastSpell(target, SPELL_SLAG_IMBUED, true);
+ }
+
+ void Register()
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_ignis_slag_pot_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_ignis_slag_pot_AuraScript();
+ }
+};
+
+
void AddSC_boss_ignis()
{
new boss_ignis();
+ new npc_iron_construct();
+ new npc_scorch_ground();
+ new spell_ignis_slag_pot();
+
+ // has to be done or else players wil absorb dmg from slag pot vehicle seat 1 slagpot
+ if (VehicleSeatEntry* vehSeat = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(3206)))
+ vehSeat->m_flags |= 0x400;
}
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
index 056d5cfbbaf..af70b828f23 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
@@ -326,6 +326,20 @@ public:
return 0;
}
+ bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/)
+ {
+ switch (criteria_id)
+ {
+ case ACHIEVEMENT_CRITERIA_HOT_POCKET_10:
+ return true;
+ case ACHIEVEMENT_CRITERIA_HOT_POCKET_25:
+ return true;
+ default:
+ break;
+ }
+ return false;
+ }
+
uint32 GetData(uint32 type)
{
switch(type)
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
index 3030f38b3c6..8029d661b80 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
@@ -66,4 +66,10 @@ enum eTypes
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
EVENT_TOWER_OF_LIFE_DESTROYED = 21030
};
+
+enum eAchievementCriteria
+{
+ ACHIEVEMENT_CRITERIA_HOT_POCKET_10 = 10430, //ignis
+ ACHIEVEMENT_CRITERIA_HOT_POCKET_25 = 10431,
+};
#endif