diff --git a/src/IndividualProgression.cpp b/src/IndividualProgression.cpp index a73ca4f..297e1be 100644 --- a/src/IndividualProgression.cpp +++ b/src/IndividualProgression.cpp @@ -202,6 +202,81 @@ bool IndividualProgression::hasCustomProgressionValue(uint32 creatureEntry) } +void IndividualProgression::checkKillProgression(Player* killer, Creature* killed) +{ + if (!enabled) + { + return; + } + + if (hasCustomProgressionValue(killed->GetEntry())) + { + UpdateProgressionState(killer, static_cast(customProgressionMap[killed->GetEntry()])); + return; + } + + if (disableDefaultProgression) + { + return; + } + switch (killed->GetEntry()) + { + case RAGNAROS: + UpdateProgressionState(killer, PROGRESSION_MOLTEN_CORE); + break; + case ONYXIA: + UpdateProgressionState(killer, PROGRESSION_ONYXIA); + break; + case NEFARIAN: + if (requirePreAQQuests) + { + UpdateProgressionState(killer, PROGRESSION_BLACKWING_LAIR); + } + else + { + UpdateProgressionState(killer, PROGRESSION_PRE_AQ); + } + break; + case CTHUN: + UpdateProgressionState(killer, PROGRESSION_AQ); + break; + case KELTHUZAD_40: + UpdateProgressionState(killer, PROGRESSION_NAXX40); + break; + case MALCHEZAAR: + UpdateProgressionState(killer, PROGRESSION_TBC_TIER_1); + break; + case KAELTHAS: + UpdateProgressionState(killer, PROGRESSION_TBC_TIER_2); + break; + case ILLIDAN: + UpdateProgressionState(killer, PROGRESSION_TBC_TIER_3); + break; + case ZULJIN: + UpdateProgressionState(killer, PROGRESSION_TBC_TIER_4); + break; + case KILJAEDEN: + UpdateProgressionState(killer, PROGRESSION_TBC_TIER_5); + break; + case KELTHUZAD: + UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_1); + break; + case YOGGSARON: + UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_2); + break; + case ANUBARAK: + UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_3); + break; + case LICH_KING: + UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_4); + break; + case HALION: + UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_5); + break; + } +} + + class IndividualPlayerProgression_WorldScript : public WorldScript { private: diff --git a/src/IndividualProgression.h b/src/IndividualProgression.h index 9a0a0bc..5370573 100644 --- a/src/IndividualProgression.h +++ b/src/IndividualProgression.h @@ -145,6 +145,7 @@ public: void AdjustTBCStats(Player* player) const; void AdjustWotLKStats(Player* player) const; bool hasCustomProgressionValue(uint32 creatureEntry); + void checkKillProgression(Player* player, Creature* killed); static void LoadCustomProgressionEntries(const std::string& customProgressionString); static void AdjustStats(Player* player, float computedAdjustment, float computedHealingAdjustment); static uint8 GetAccountProgression(uint32 accountId); diff --git a/src/IndividualProgressionPlayer.cpp b/src/IndividualProgressionPlayer.cpp index 9aaf7bb..66d789d 100644 --- a/src/IndividualProgressionPlayer.cpp +++ b/src/IndividualProgressionPlayer.cpp @@ -260,75 +260,20 @@ public: void OnCreatureKill(Player* killer, Creature* killed) override { - if (!sIndividualProgression->enabled) + sIndividualProgression->checkKillProgression(killer, killed); + Group* group = killer->GetGroup(); + if (!group) { return; } + for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next()) + { + Player* member = itr->GetSource(); + if (!member) + continue; - if (sIndividualProgression->hasCustomProgressionValue(killed->GetEntry())) - { - sIndividualProgression->UpdateProgressionState(killer, static_cast(sIndividualProgression->customProgressionMap[killed->GetEntry()])); - return; - } - - if (sIndividualProgression->disableDefaultProgression) - { - return; - } - switch (killed->GetEntry()) - { - case RAGNAROS: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_MOLTEN_CORE); - break; - case ONYXIA: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_ONYXIA); - break; - case NEFARIAN: - if (sIndividualProgression->requirePreAQQuests) - { - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_BLACKWING_LAIR); - } - else - { - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_PRE_AQ); - } - break; - case CTHUN: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_AQ); - break; - case KELTHUZAD_40: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_NAXX40); - break; - case MALCHEZAAR: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_TBC_TIER_1); - break; - case KAELTHAS: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_TBC_TIER_2); - break; - case ILLIDAN: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_TBC_TIER_3); - break; - case ZULJIN: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_TBC_TIER_4); - break; - case KILJAEDEN: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_TBC_TIER_5); - break; - case KELTHUZAD: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_1); - break; - case YOGGSARON: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_2); - break; - case ANUBARAK: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_3); - break; - case LICH_KING: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_4); - break; - case HALION: - sIndividualProgression->UpdateProgressionState(killer, PROGRESSION_WOTLK_TIER_5); - break; + if (killer->IsAtLootRewardDistance(member)) + sIndividualProgression->checkKillProgression(member, killed); } }