aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Achievements/AchievementMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Achievements/AchievementMgr.cpp')
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp131
1 files changed, 61 insertions, 70 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 79bf99375ad..310e9dbc673 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -469,8 +469,8 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Wo
bool AchievementCriteriaDataSet::Meets(Player const* source, WorldObject const* target, uint32 miscvalue1 /*= 0*/, uint32 miscvalue2 /* = 0*/) const
{
- for (Storage::const_iterator itr = storage.begin(); itr != storage.end(); ++itr)
- if (!itr->Meets(criteria_id, source, target, miscvalue1, miscvalue2))
+ for (AchievementCriteriaData const& criteriadata : storage)
+ if (!criteriadata.Meets(criteria_id, source, target, miscvalue1, miscvalue2))
return false;
return true;
@@ -485,17 +485,17 @@ AchievementMgr::~AchievementMgr() { }
void AchievementMgr::Reset()
{
- for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter)
+ for (std::pair<uint32 const, CompletedAchievementData> const& completedAchievement : m_completedAchievements)
{
WorldPacket data(SMSG_ACHIEVEMENT_DELETED, 4);
- data << uint32(iter->first);
+ data << uint32(completedAchievement.first);
m_player->SendDirectMessage(&data);
}
- for (CriteriaProgressMap::const_iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter)
+ for (std::pair<uint32 const, CriteriaProgress> const& criteriaprogress : m_criteriaProgress)
{
WorldPacket data(SMSG_CRITERIA_DELETED, 4);
- data << uint32(iter->first);
+ data << uint32(criteriaprogress.first);
m_player->SendDirectMessage(&data);
}
@@ -519,9 +519,8 @@ void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaCondition condi
if (!achievementCriteriaList)
return;
- for (auto itr = achievementCriteriaList->begin(); itr != achievementCriteriaList->end(); ++itr)
+ for (AchievementCriteriaEntry const* achievementCriteria : *achievementCriteriaList)
{
- AchievementCriteriaEntry const* achievementCriteria = *itr;
AchievementEntry const* achievement = sAchievementMgr->GetAchievement(achievementCriteria->ReferredAchievement);
if (!achievement)
continue;
@@ -553,49 +552,49 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans)
{
if (!m_completedAchievements.empty())
{
- for (CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter)
+ for (std::pair<uint32 const, CompletedAchievementData>& completedAchievement : m_completedAchievements)
{
- if (!iter->second.changed)
+ if (!completedAchievement.second.changed)
continue;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT);
- stmt->setUInt16(0, iter->first);
+ stmt->setUInt16(0, completedAchievement.first);
stmt->setUInt32(1, GetPlayer()->GetGUID().GetCounter());
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT);
stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
- stmt->setUInt16(1, iter->first);
- stmt->setUInt32(2, uint32(iter->second.date));
+ stmt->setUInt16(1, completedAchievement.first);
+ stmt->setUInt32(2, uint32(completedAchievement.second.date));
trans->Append(stmt);
- iter->second.changed = false;
+ completedAchievement.second.changed = false;
}
}
if (!m_criteriaProgress.empty())
{
- for (CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter)
+ for (std::pair<uint32 const, CriteriaProgress>& criteriaProgres : m_criteriaProgress)
{
- if (!iter->second.changed)
+ if (!criteriaProgres.second.changed)
continue;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_PROGRESS_BY_CRITERIA);
stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
- stmt->setUInt16(1, iter->first);
+ stmt->setUInt16(1, criteriaProgres.first);
trans->Append(stmt);
- if (iter->second.counter)
+ if (criteriaProgres.second.counter)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT_PROGRESS);
stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter());
- stmt->setUInt16(1, iter->first);
- stmt->setUInt32(2, iter->second.counter);
- stmt->setUInt32(3, uint32(iter->second.date));
+ stmt->setUInt16(1, criteriaProgres.first);
+ stmt->setUInt32(2, criteriaProgres.second.counter);
+ stmt->setUInt32(3, uint32(criteriaProgres.second.date));
trans->Append(stmt);
}
- iter->second.changed = false;
+ criteriaProgres.second.changed = false;
}
}
}
@@ -933,9 +932,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
uint32 counter = 0;
RewardedQuestSet const& rewQuests = GetPlayer()->getRewardedQuests();
- for (RewardedQuestSet::const_iterator itr = rewQuests.begin(); itr != rewQuests.end(); ++itr)
+ for (uint32 rewQuest : rewQuests)
{
- Quest const* quest = sObjectMgr->GetQuestTemplate(*itr);
+ Quest const* quest = sObjectMgr->GetQuestTemplate(rewQuest);
if (quest && quest->GetZoneOrSort() >= 0 && uint32(quest->GetZoneOrSort()) == achievementCriteria->Asset.ZoneID)
++counter;
}
@@ -993,11 +992,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS:
{
uint32 spellCount = 0;
- for (PlayerSpellMap::const_iterator spellIter = GetPlayer()->GetSpellMap().begin();
- spellIter != GetPlayer()->GetSpellMap().end();
- ++spellIter)
+ for (std::pair<uint32 const, PlayerSpell*>& spellIter : GetPlayer()->GetSpellMap())
{
- SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellIter->first);
+ SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellIter.first);
for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
{
if (skillIter->second->skillId == achievementCriteria->Asset.SkillID)
@@ -1023,18 +1020,18 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE:
{
uint32 spellCount = 0;
- for (PlayerSpellMap::const_iterator spellIter = GetPlayer()->GetSpellMap().begin();
- spellIter != GetPlayer()->GetSpellMap().end();
- ++spellIter)
+ for (std::pair<uint32 const, PlayerSpell*>& spellIter : GetPlayer()->GetSpellMap())
{
- SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellIter->first);
+ SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellIter.first);
for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter)
+ {
if (skillIter->second->skillId == achievementCriteria->Asset.SkillID)
{
// do not add couter twice if by any chance skill is listed twice in dbc (eg. skill 777 and spell 22717)
++spellCount;
break;
}
+ }
}
SetCriteriaProgress(achievementCriteria, spellCount);
break;
@@ -1049,8 +1046,8 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
if (!miscValue1)
{
uint32 points = 0;
- for (CompletedAchievementMap::const_iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr)
- if (AchievementEntry const* completedAchievements = sAchievementMgr->GetAchievement(itr->first))
+ for (std::pair<uint32, CompletedAchievementData> const& completedAchievement : m_completedAchievements)
+ if (AchievementEntry const* completedAchievements = sAchievementMgr->GetAchievement(completedAchievement.first))
points += completedAchievements->Points;
SetCriteriaProgress(achievementCriteria, points, PROGRESS_SET);
}
@@ -1144,9 +1141,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
CompletedAchievement(achievement);
if (AchievementEntryList const* achRefList = sAchievementMgr->GetAchievementByReferencedId(achievement->ID))
- for (AchievementEntryList::const_iterator itr = achRefList->begin(); itr != achRefList->end(); ++itr)
- if (IsCompletedAchievement(*itr))
- CompletedAchievement(*itr);
+ for (AchievementEntry const* achievement : *achRefList)
+ if (IsCompletedAchievement(achievement))
+ CompletedAchievement(achievement);
}
}
@@ -1306,10 +1303,8 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry)
// Oddly, the target count is NOT countained in the achievement, but in each individual criteria
if (entry->Flags & ACHIEVEMENT_FLAG_SUMM)
{
- for (AchievementCriteriaEntryList::const_iterator itr = cList->begin(); itr != cList->end(); ++itr)
+ for (AchievementCriteriaEntry const* criteria : *cList)
{
- AchievementCriteriaEntry const* criteria = *itr;
-
CriteriaProgress const* progress = GetCriteriaProgress(criteria);
if (!progress)
continue;
@@ -1325,10 +1320,8 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry)
// Default case - need complete all or
bool completed_all = true;
- for (AchievementCriteriaEntryList::const_iterator itr = cList->begin(); itr != cList->end(); ++itr)
+ for (AchievementCriteriaEntry const* criteria : *cList)
{
- AchievementCriteriaEntry const* criteria = *itr;
-
bool completed = IsCompletedCriteria(criteria, entry);
// found an uncompleted criteria, but DONT return false yet - there might be a completed criteria with ACHIEVEMENT_CRITERIA_COMPLETE_FLAG_ALL
@@ -1467,22 +1460,21 @@ void AchievementMgr::UpdateTimedAchievements(uint32 timeDiff)
void AchievementMgr::StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost /*= 0*/)
{
- AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetTimedAchievementCriteriaByType(type);
- for (AchievementCriteriaEntryList::const_iterator i = achievementCriteriaList.begin(); i != achievementCriteriaList.end(); ++i)
+ for (AchievementCriteriaEntry const* criteria : sAchievementMgr->GetTimedAchievementCriteriaByType(type))
{
- if ((*i)->StartAsset != entry)
+ if (criteria->StartAsset != entry)
continue;
- AchievementEntry const* achievement = sAchievementMgr->GetAchievement((*i)->ReferredAchievement);
- if (m_timedAchievements.find((*i)->ID) == m_timedAchievements.end() && !IsCompletedCriteria(*i, achievement))
+ AchievementEntry const* achievement = sAchievementMgr->GetAchievement(criteria->ReferredAchievement);
+ if (m_timedAchievements.find(criteria->ID) == m_timedAchievements.end() && !IsCompletedCriteria(criteria, achievement))
{
// Start the timer
- if ((*i)->StartTimer * IN_MILLISECONDS > timeLost)
+ if (criteria->StartTimer * IN_MILLISECONDS > timeLost)
{
- m_timedAchievements[(*i)->ID] = (*i)->StartTimer * IN_MILLISECONDS - timeLost;
+ m_timedAchievements[criteria->ID] = criteria->StartTimer * IN_MILLISECONDS - timeLost;
// and at client too
- SetCriteriaProgress(*i, 0, PROGRESS_SET);
+ SetCriteriaProgress(criteria, 0, PROGRESS_SET);
}
}
}
@@ -1490,19 +1482,18 @@ void AchievementMgr::StartTimedAchievement(AchievementCriteriaTimedTypes type, u
void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
{
- AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetTimedAchievementCriteriaByType(type);
- for (AchievementCriteriaEntryList::const_iterator i = achievementCriteriaList.begin(); i!=achievementCriteriaList.end(); ++i)
+ for (AchievementCriteriaEntry const* criteria : sAchievementMgr->GetTimedAchievementCriteriaByType(type))
{
- if ((*i)->StartAsset != entry)
+ if (criteria->StartAsset != entry)
continue;
- TimedAchievementMap::iterator timedIter = m_timedAchievements.find((*i)->ID);
+ TimedAchievementMap::iterator timedIter = m_timedAchievements.find(criteria->ID);
// We don't have timer for this achievement
if (timedIter == m_timedAchievements.end())
continue;
// remove progress
- RemoveCriteriaProgress(*i);
+ RemoveCriteriaProgress(criteria);
// Remove the timer
m_timedAchievements.erase(timedIter);
@@ -1609,25 +1600,25 @@ void AchievementMgr::SendRespondInspectAchievements(Player* player) const
*/
void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const
{
- for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter)
+ for (std::pair<uint32 const, CompletedAchievementData> const& completedAchievement : m_completedAchievements)
{
// Skip hidden achievements
- AchievementEntry const* achievement = sAchievementMgr->GetAchievement(iter->first);
+ AchievementEntry const* achievement = sAchievementMgr->GetAchievement(completedAchievement.first);
if (!achievement || achievement->Flags & ACHIEVEMENT_FLAG_HIDDEN)
continue;
- *data << uint32(iter->first);
- data->AppendPackedTime(iter->second.date);
+ *data << uint32(completedAchievement.first);
+ data->AppendPackedTime(completedAchievement.second.date);
}
*data << int32(-1);
- for (CriteriaProgressMap::const_iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter)
+ for (std::pair<uint32 const, CriteriaProgress> const& criteriaProgress : m_criteriaProgress)
{
- *data << uint32(iter->first);
- data->appendPackGUID(iter->second.counter);
+ *data << uint32(criteriaProgress.first);
+ data->appendPackGUID(criteriaProgress.second.counter);
*data << GetPlayer()->GetPackGUID();
*data << uint32(0);
- data->AppendPackedTime(iter->second.date);
+ data->AppendPackedTime(criteriaProgress.second.date);
*data << uint32(0);
*data << uint32(0);
}
@@ -1692,15 +1683,15 @@ bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria,
bool AchievementMgr::ConditionsSatisfied(AchievementCriteriaEntry const* criteria) const
{
- for (uint32 i = 0; i < MAX_CRITERIA_REQUIREMENTS; ++i)
+ for (auto AdditionalRequirement : criteria->AdditionalRequirements)
{
- if (!criteria->AdditionalRequirements[i].Type)
+ if (!AdditionalRequirement.Type)
continue;
- switch (criteria->AdditionalRequirements[i].Type)
+ switch (AdditionalRequirement.Type)
{
case ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP:
- if (GetPlayer()->GetMapId() != criteria->AdditionalRequirements[i].Asset)
+ if (GetPlayer()->GetMapId() != AdditionalRequirement.Asset)
return false;
break;
case ACHIEVEMENT_CRITERIA_CONDITION_NOT_IN_GROUP:
@@ -1894,9 +1885,9 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie
return false;
bool matchFound = false;
- for (int j = 0; j < MAX_WORLD_MAP_OVERLAY_AREA_IDX; ++j)
+ for (uint32 j : worldOverlayEntry->areatableID)
{
- AreaTableEntry const* area = sAreaTableStore.LookupEntry(worldOverlayEntry->areatableID[j]);
+ AreaTableEntry const* area = sAreaTableStore.LookupEntry(j);
if (!area)
break;