Scripts/Gundrak: Properly fixed achievement Share the Love

This commit is contained in:
Lopin
2011-06-23 14:02:26 +02:00
parent 3352cabb49
commit aa272f0fb7
2 changed files with 53 additions and 8 deletions
@@ -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();
}