diff options
Diffstat (limited to 'src')
3 files changed, 57 insertions, 31 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp index df5becb315f..0424bb3aab8 100755 --- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp @@ -525,11 +525,11 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte uint32 freeHeroicSlots = sWorld->getIntConfig(CONFIG_HEROIC_CHARACTERS_PER_REALM); Field* field = result->Fetch(); - uint8 accRace = field[1].GetUInt32(); + uint8 accRace = field[1].GetUInt8(); if (GetSecurity() == SEC_PLAYER && createInfo->Class == CLASS_DEATH_KNIGHT) { - uint8 accClass = field[2].GetUInt32(); + uint8 accClass = field[2].GetUInt8(); if (accClass == CLASS_DEATH_KNIGHT) { if (freeHeroicSlots > 0) @@ -549,7 +549,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte if (!hasHeroicReqLevel) { - uint32 accLevel = field[0].GetUInt32(); + uint8 accLevel = field[0].GetUInt8(); if (accLevel >= heroicReqLevel) hasHeroicReqLevel = true; } @@ -583,14 +583,14 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte break; field = result->Fetch(); - accRace = field[1].GetUInt32(); + accRace = field[1].GetUInt8(); if (!haveSameRace) haveSameRace = createInfo->Race == accRace; if (GetSecurity() == SEC_PLAYER && createInfo->Class == CLASS_DEATH_KNIGHT) { - uint8 acc_class = field[2].GetUInt32(); + uint8 acc_class = field[2].GetUInt8(); if (acc_class == CLASS_DEATH_KNIGHT) { if (freeHeroicSlots > 0) @@ -610,7 +610,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte if (!hasHeroicReqLevel) { - uint32 acc_level = field[0].GetUInt32(); + uint8 acc_level = field[0].GetUInt8(); if (acc_level >= heroicReqLevel) hasHeroicReqLevel = true; } 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(); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 34ccd0aec93..eece702f984 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -60,8 +60,7 @@ Position const RiftLocation[6] = { 651.72f, -297.44f, -9.37f, 0.0f } }; -#define ACTION_RIFT_DEAD 1 -#define DATA_CHAOS_THEORY 2 +#define DATA_CHAOS_THEORY 1 class boss_anomalus : public CreatureScript { @@ -110,12 +109,6 @@ class boss_anomalus : public CreatureScript instance->SetData(DATA_ANOMALUS_EVENT, DONE); } - void DoAction(int32 const action) - { - if (action == ACTION_RIFT_DEAD) - chaosTheory = false; - } - uint32 GetData(uint32 type) { if (type == DATA_CHAOS_THEORY) @@ -124,10 +117,10 @@ class boss_anomalus : public CreatureScript return 0; } - void SetData(uint32 id, uint32 data) + void SummonedCreatureDies(Creature* summoned, Unit* who) { - if (id == DATA_CHAOS_THEORY) - chaosTheory = data ? true : false; + if (summoned->GetEntry() == MOB_CHAOTIC_RIFT) + chaosTheory = false; } void UpdateAI(uint32 const diff) @@ -219,12 +212,6 @@ class mob_chaotic_rift : public CreatureScript DoCast(me, SPELL_ARCANEFORM, false); } - void JustDied(Unit* /*who*/) - { - if (Creature* Anomalus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ANOMALUS))) - Anomalus->AI()->DoAction(ACTION_RIFT_DEAD); - } - void UpdateAI(uint32 const diff) { if (!UpdateVictim()) |