diff options
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 3d8020ea770..7a705e10720 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -666,13 +666,11 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) if (GetPlayer()->GetSession()->PlayerLoading()) return; - // Don't send for achievements with ACHIEVEMENT_FLAG_TRACKING + // Don't send for achievements with ACHIEVEMENT_FLAG_HIDDEN if (achievement->Flags & ACHIEVEMENT_FLAG_HIDDEN) return; - #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("achievement", "AchievementMgr::SendAchievementEarned(%u)", achievement->ID); - #endif + TC_LOG_DEBUG("achievement", "AchievementMgr::SendAchievementEarned(%u)", achievement->ID); if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId())) { @@ -717,7 +715,7 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) void AchievementMgr::SendCriteriaUpdate(AchievementCriteriaEntry const* entry, CriteriaProgress const* progress, uint32 timeElapsed, bool timedCompleted) const { - WorldPacket data(SMSG_CRITERIA_UPDATE, 8+4+8); + WorldPacket data(SMSG_CRITERIA_UPDATE, 8 + 4 + 8); data << uint32(entry->ID); // the counter is packed like a packed Guid @@ -773,7 +771,10 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui { AchievementEntry const* achievement = sAchievementMgr->GetAchievement(achievementCriteria->AchievementID); if (!achievement) + { + TC_LOG_ERROR("achievement", "UpdateAchievementCriteria: Achievement %u not found!", achievementCriteria->AchievementID); continue; + } if (!CanUpdateCriteria(achievementCriteria, achievement, miscValue1, miscValue2, ref)) continue; @@ -875,6 +876,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui case ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP: case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM: + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: SetCriteriaProgress(achievementCriteria, 1, PROGRESS_SET); break; @@ -890,10 +892,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui if (uint32 maxSkillvalue = GetPlayer()->GetPureMaxSkillValue(achievementCriteria->Asset.SkillID)) SetCriteriaProgress(achievementCriteria, maxSkillvalue); break; - case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: - if ((miscValue1 && achievementCriteria->Asset.AchievementID == miscValue1) || (!miscValue1 && m_completedAchievements.find(achievementCriteria->Asset.AchievementID) != m_completedAchievements.end())) - SetCriteriaProgress(achievementCriteria, 1); - break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT: SetCriteriaProgress(achievementCriteria, GetPlayer()->GetRewardedQuestCount()); break; @@ -915,7 +913,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui // 1st time. Start count. progressType = PROGRESS_SET; else if (progress->date < (nextDailyResetTime - 2 * DAY)) - // last progress is older than 2 days. Player missed 1 day => Retart count. + // last progress is older than 2 days. Player missed 1 day => Restart count. progressType = PROGRESS_SET; else if (progress->date < (nextDailyResetTime - DAY)) // last progress is between 1 and 2 days. => 1st time of the day. @@ -1291,16 +1289,16 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry) return false; // for achievement with referenced achievement criterias get from referenced and counter from self - uint32 achievmentForTestId = entry->SharesCriteria ? entry->SharesCriteria : entry->ID; - uint32 achievmentForTestCount = entry->MinimumCriteria; + uint32 achievementForTestId = entry->SharesCriteria ? entry->SharesCriteria : entry->ID; + uint32 achievementForTestCount = entry->MinimumCriteria; - AchievementCriteriaEntryList const* cList = sAchievementMgr->GetAchievementCriteriaByAchievement(achievmentForTestId); + AchievementCriteriaEntryList const* cList = sAchievementMgr->GetAchievementCriteriaByAchievement(achievementForTestId); if (!cList) return false; uint32 count = 0; // For SUMM achievements, we have to count the progress of each criteria of the achievement. - // Oddly, the target count is NOT countained in the achievement, but in each individual criteria + // Oddly, the target count is NOT contained in the achievement, but in each individual criteria if (entry->Flags & ACHIEVEMENT_FLAG_SUMM) { for (AchievementCriteriaEntry const* criteria : *cList) @@ -1331,12 +1329,12 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry) completed_all = false; // completed as have req. count of completed criterias - if (achievmentForTestCount > 0 && achievmentForTestCount <= count) + if (achievementForTestCount > 0 && achievementForTestCount <= count) return true; } // all criterias completed requirement - if (completed_all && achievmentForTestCount == 0) + if (completed_all && achievementForTestCount == 0) return true; return false; @@ -1582,14 +1580,14 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) void AchievementMgr::SendAllAchievementData() const { - WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, m_completedAchievements.size()*8+4+m_criteriaProgress.size()*38+4); + WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4); BuildAllDataPacket(&data); GetPlayer()->SendDirectMessage(&data); } void AchievementMgr::SendRespondInspectAchievements(Player* player) const { - WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9+m_completedAchievements.size()*8+4+m_criteriaProgress.size()*38+4); + WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4); data << GetPlayer()->GetPackGUID(); BuildAllDataPacket(&data); player->SendDirectMessage(&data); @@ -1750,7 +1748,6 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie return false; break; case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL: - case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT: case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY: case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING: @@ -1766,19 +1763,19 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie break; // specialized cases + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: + if ((miscValue1 && achievementCriteria->Asset.AchievementID != miscValue1) || (!miscValue1 && m_completedAchievements.find(achievementCriteria->Asset.AchievementID) == m_completedAchievements.end())) + return false; + break; case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG: case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP: - if (!miscValue1) - return false; - if (achievementCriteria->Asset.MapID != GetPlayer()->GetMapId()) + if (!miscValue1 || achievementCriteria->Asset.MapID != GetPlayer()->GetMapId()) return false; break; case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE: case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE: - if (!miscValue1) - return false; - if (achievementCriteria->Asset.CreatureID != miscValue1) + if (!miscValue1 || achievementCriteria->Asset.CreatureID != miscValue1) return false; break; case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL: @@ -1826,9 +1823,7 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie return false; break; case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM: - if (!miscValue1) - return false; - if (miscValue2 != achievementCriteria->Asset.DamageType) + if (!miscValue1 || miscValue2 != achievementCriteria->Asset.DamageType) return false; break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: @@ -2581,7 +2576,8 @@ void AchievementGlobalMgr::LoadCompletedAchievements() } else if (achievement->Flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) _allCompletedAchievements[achievementId] = SystemTimePoint::max(); - } while (result->NextRow()); + } + while (result->NextRow()); TC_LOG_INFO("server.loading", ">> Loaded %lu realm first completed achievements in %u ms.", (unsigned long)_allCompletedAchievements.size(), GetMSTimeDiffToNow(oldMSTime)); } |