diff options
author | Lopin <davca.hr@seznam.cz> | 2011-06-23 14:02:26 +0200 |
---|---|---|
committer | Lopin <davca.hr@seznam.cz> | 2011-06-23 14:02:26 +0200 |
commit | aa272f0fb78ecf3e8801c4a1e3a595e1f04c29d6 (patch) | |
tree | e77b0156141fccd597a808774bcce3e7a4f9bd8c /src | |
parent | 3352cabb494784c96febe4a2bfea62cdd540f06a (diff) |
Scripts/Gundrak: Properly fixed achievement Share the Love
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index c1b82f71687..93acb74cee6 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -53,7 +53,6 @@ enum Yells enum Achievements { ACHIEV_WHAT_THE_ECK = 1864, - ACHIEV_SHARE_THE_LOVE = 2152 }; enum Displays @@ -68,6 +67,8 @@ enum CombatPhase RHINO }; +#define DATA_SHARE_THE_LOVE 1 + class boss_gal_darah : public CreatureScript { public: @@ -92,7 +93,8 @@ public: uint32 uiImpalingChargeTimer; uint32 uiStompTimer; uint32 uiTransformationTimer; - std::set<uint64> lImpaledPlayers; + std::list<uint64> impaledList; + uint8 shareTheLove; CombatPhase Phase; @@ -113,7 +115,8 @@ public: uiTransformationTimer = 9*IN_MILLISECONDS; uiPhaseCounter = 0; - lImpaledPlayers.clear(); + impaledList.clear(); + shareTheLove = 0; bStartOfTransformation = true; @@ -135,7 +138,6 @@ public: void UpdateAI(const uint32 diff) { - //Return since we have no target if (!UpdateVictim()) return; @@ -235,7 +237,7 @@ public: if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) { DoCast(pTarget, SPELL_IMPALING_CHARGE); - lImpaledPlayers.insert(pTarget->GetGUID()); + CheckAchievement(pTarget->GetGUID()); } uiImpalingChargeTimer = 31*IN_MILLISECONDS; ++uiPhaseCounter; @@ -247,6 +249,28 @@ public: DoMeleeAttackIfReady(); } + // 5 UNIQUE party members + void CheckAchievement(uint64 guid) + { + bool playerExists = false; + for (std::list<uint64>::iterator itr = impaledList.begin(); itr != impaledList.end(); ++itr) + if (guid != *itr) + playerExists = true; + + if (playerExists) + ++shareTheLove; + + impaledList.push_back(guid); + } + + uint32 GetData(uint32 type) + { + if (type == DATA_SHARE_THE_LOVE) + return shareTheLove; + + return 0; + } + void JustDied(Unit* /*killer*/) { DoScriptText(SAY_DEATH, me); @@ -255,9 +279,6 @@ public: { if (IsHeroic()) { - if (lImpaledPlayers.size() == 5) - pInstance->DoCompleteAchievement(ACHIEV_SHARE_THE_LOVE); - AchievementEntry const *achievWhatTheEck = GetAchievementStore()->LookupEntry(ACHIEV_WHAT_THE_ECK); if (achievWhatTheEck) { @@ -283,7 +304,25 @@ public: }; +class achievement_share_the_love : public AchievementCriteriaScript +{ + public: + achievement_share_the_love() : AchievementCriteriaScript("achievement_share_the_love") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) + { + if (Creature* GalDarah = target->ToCreature()) + if (GalDarah->AI()->GetData(DATA_SHARE_THE_LOVE) >= 5) + return true; + + return false; + } +}; + void AddSC_boss_gal_darah() { new boss_gal_darah(); + new achievement_share_the_love(); } |