aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-15 10:19:08 -0700
committermaximius <none@none>2009-10-15 10:19:08 -0700
commit53c348224848f9c334c6c9aaac4bcb75a4c4b26e (patch)
treed5b2e3db096f2e11ad528c1128978bb1b9ec90e1 /src
parent28081270338b95ca27f2fbf2bfbbc8413cbe1cd9 (diff)
*Halls of Stone: Sjonnir the Ironshaper, implement ooze merging and Abuse the Ooze achievement, by Tartalo
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp108
1 files changed, 106 insertions, 2 deletions
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
index 9aaf3ef669f..2d2247d185e 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_sjonnir.cpp
@@ -42,12 +42,14 @@ enum Creatures
{
CREATURE_FORGED_IRON_TROGG = 27979,
CREATURE_MALFORMED_OOZE = 27981,
- CREATURE_FORGED_IRON_DWARF = 27982
+ CREATURE_FORGED_IRON_DWARF = 27982,
+ CREATURE_IRON_SLUDGE = 28165
};
enum Misc
{
- DATA_TIME_BEFORE_OOZE = 150000 //2min 30 secs
+ DATA_TIME_BEFORE_OOZE = 150000, //2min 30 secs
+ ACHIEVEMENT_ABUSE_THE_OOZE = 2155
};
struct Locations
@@ -79,6 +81,7 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
uint32 uiSummonTimer;
uint32 uiFrenzyTimer;
uint32 uiEncounterTimer;
+ uint32 uiKilledIronSludges;
ScriptedInstance* pInstance;
@@ -93,6 +96,7 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
uiLightningRingTimer = 30000 + rand()%5000;
uiSummonTimer = 5000;
uiFrenzyTimer = 300000; //5 minutes
+ uiKilledIronSludges = 0;
if (pInstance)
pInstance->SetData(DATA_SJONNIR_EVENT, NOT_STARTED);
@@ -183,6 +187,21 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
{
DoScriptText(SAY_DEATH, m_creature);
+ if (HeroicMode && uiKilledIronSludges > 4)
+ {
+ AchievementEntry const *AchievAbuseTheOoze = GetAchievementStore()->LookupEntry(ACHIEVEMENT_ABUSE_THE_OOZE);
+ if (AchievAbuseTheOoze)
+ {
+ Map* pMap = m_creature->GetMap();
+ if (pMap && pMap->IsDungeon())
+ {
+ Map::PlayerList const &players = pMap->GetPlayers();
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ itr->getSource()->CompletedAchievement(AchievAbuseTheOoze);
+ }
+ }
+ }
+
if (pInstance)
pInstance->SetData(DATA_SJONNIR_EVENT, DONE);
}
@@ -192,6 +211,11 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
return;
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature);
}
+
+ void KilledIronSludge()
+ {
+ ++uiKilledIronSludges;
+ }
};
CreatureAI* GetAI_boss_sjonnir(Creature* pCreature)
@@ -199,6 +223,76 @@ CreatureAI* GetAI_boss_sjonnir(Creature* pCreature)
return new boss_sjonnirAI (pCreature);
}
+struct TRINITY_DLL_DECL mob_malformed_oozeAI : public ScriptedAI
+{
+ mob_malformed_oozeAI(Creature *c) : ScriptedAI(c) {}
+
+ uint32 uiMergeTimer;
+ bool bIsMerging;
+
+ void Reset()
+ {
+ uiMergeTimer = 5000;
+ bIsMerging = false;
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (bIsMerging)
+ {
+ if (uiMergeTimer < diff)
+ {
+ if (Creature* pTemp = m_creature->FindNearestCreature(CREATURE_MALFORMED_OOZE, 1.0f, true))
+ {
+ DoSpawnCreature(CREATURE_IRON_SLUDGE, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000);
+ pTemp->DealDamage(pTemp, pTemp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ pTemp->RemoveCorpse();
+ m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ m_creature->RemoveCorpse();
+ } else bIsMerging = false;
+ } else uiMergeTimer -= diff;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ DoMeleeAttackIfReady();
+ }
+
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if(type != POINT_MOTION_TYPE)
+ return;
+ bIsMerging = true;
+ }
+};
+
+CreatureAI* GetAI_mob_malformed_ooze(Creature* pCreature)
+{
+ return new mob_malformed_oozeAI(pCreature);
+}
+
+struct TRINITY_DLL_DECL mob_iron_sludgeAI : public ScriptedAI
+{
+ mob_iron_sludgeAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ ScriptedInstance* pInstance;
+
+ void JustDied(Unit* pKiller)
+ {
+ if (pInstance ? Creature* pSjonnir = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_SJONNIR)) : false)
+ CAST_AI(boss_sjonnirAI, pSjonnir->AI())->KilledIronSludge();
+ }
+};
+
+CreatureAI* GetAI_mob_iron_sludge(Creature* pCreature)
+{
+ return new mob_iron_sludgeAI(pCreature);
+}
+
void AddSC_boss_sjonnir()
{
Script *newscript;
@@ -207,4 +301,14 @@ void AddSC_boss_sjonnir()
newscript->Name="boss_sjonnir";
newscript->GetAI = &GetAI_boss_sjonnir;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="mob_malformed_ooze";
+ newscript->GetAI = &GetAI_mob_malformed_ooze;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "mob_iron_sludge";
+ newscript->GetAI = &GetAI_mob_iron_sludge;
+ newscript->RegisterSelf();
}