diff options
author | Lopin <davca.hr@seznam.cz> | 2011-06-25 13:30:51 +0200 |
---|---|---|
committer | Lopin <davca.hr@seznam.cz> | 2011-06-25 13:30:51 +0200 |
commit | ea55e54a50b53ff6d69023d14a64788b05f75fa8 (patch) | |
tree | 71730d684bf62d7cdd8401070b6a29e6012a38eb /src | |
parent | 835efdacd1fd6671f14e2a83ef5a11c0d27b044a (diff) |
Scripts/Halls Of Stone: Properly fixed achievement Abuse the Ooze
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp | 56 |
1 files changed, 39 insertions, 17 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index 2377c5e908a..6de54d357c5 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -60,11 +60,7 @@ enum SjonnirCreatures CREATURE_IRON_SLUDGE = 28165 }; -enum Misc -{ - DATA_TIME_BEFORE_OOZE = 150000, //2min 30 secs - ACHIEV_ABUSE_THE_OOZE = 2155 -}; +#define DATA_TIME_BEFORE_OOZE 150000 //2min 30 secs struct Locations { @@ -73,10 +69,13 @@ struct Locations static Locations PipeLocations[] = { - {1295.44f, 734.07f, 200.3f}, //left - {1297.7f, 595.6f, 199.9f} //right + {1295.44f, 734.07f, 200.3f}, //left + {1297.7f, 595.6f, 199.9f} //right }; +#define ACTION_OOZE_DEAD 1 +#define DATA_ABUSE_THE_OOZE 2 + static Locations CenterPoint = {1295.21f, 667.157f, 189.691f}; class boss_sjonnir : public CreatureScript @@ -105,7 +104,7 @@ public: uint32 uiSummonTimer; uint32 uiFrenzyTimer; uint32 uiEncounterTimer; - uint32 uiKilledIronSludges; + uint8 abuseTheOoze; SummonList lSummons; @@ -122,7 +121,7 @@ public: uiLightningRingTimer = 30000 + rand()%5000; uiSummonTimer = 5000; uiFrenzyTimer = 300000; //5 minutes - uiKilledIronSludges = 0; + abuseTheOoze = 0; lSummons.DespawnAll(); @@ -221,11 +220,7 @@ public: lSummons.DespawnAll(); if (pInstance) - { pInstance->SetData(DATA_SJONNIR_EVENT, DONE); - if (IsHeroic() && uiKilledIronSludges > 4) - pInstance->DoCompleteAchievement(ACHIEV_ABUSE_THE_OOZE); - } } void KilledUnit(Unit* victim) { @@ -234,9 +229,18 @@ public: DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); } - void KilledIronSludge() + void DoAction(int32 const action) { - ++uiKilledIronSludges; + if (action == ACTION_OOZE_DEAD) + ++abuseTheOoze; + } + + uint32 GetData(uint32 type) + { + if (type == DATA_ABUSE_THE_OOZE) + return abuseTheOoze; + + return 0; } }; @@ -307,16 +311,34 @@ public: void JustDied(Unit* /*pKiller*/) { if (pInstance) - if (Creature* pSjonnir = Unit::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR))) - CAST_AI(boss_sjonnir::boss_sjonnirAI, pSjonnir->AI())->KilledIronSludge(); + if (Creature* Sjonnir = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR))) + Sjonnir->AI()->DoAction(ACTION_OOZE_DEAD); } }; }; +class achievement_abuse_the_ooze : public AchievementCriteriaScript +{ + public: + achievement_abuse_the_ooze() : AchievementCriteriaScript("achievement_abuse_the_ooze") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) + { + if (Creature* Sjonnir = target->ToCreature()) + if (Sjonnir->AI()->GetData(DATA_ABUSE_THE_OOZE) >= 5) + return true; + + return false; + } +}; + void AddSC_boss_sjonnir() { new boss_sjonnir(); new mob_malformed_ooze(); new mob_iron_sludge(); + new achievement_abuse_the_ooze(); } |