[10347] Fixed wrong ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION (46) check.

In result wrong check characters complete
exalted reputation achievements at create or any reputation change event
with negative reputation. Fix prevent new cases but not do anything with
already wrongly recieved ahcievements.

Also:
* Avoid use PROGRESS_SET at normal achievment criteria progress update
  becase achivement/counter in normal way can't decrease.
* At achievment criteria progress loading check that progress counter less
  or equal max counter value.
This commit is contained in:
VladimirMangos 2010-08-12 00:04:42 +04:00
parent 3c5da27442
commit b0d42a6f67
4 changed files with 41 additions and 30 deletions

View file

@ -1117,7 +1117,7 @@ bool ChatHandler::HandleAchievementAddCommand(char* args)
continue;
uint32 maxValue = AchievementMgr::GetCriteriaProgressMaxCounter(*itr);
mgr.SetCriteriaProgress(*itr, achEntry, maxValue);
mgr.SetCriteriaProgress(*itr, achEntry, maxValue, AchievementMgr::PROGRESS_SET);
}
}
@ -1151,7 +1151,7 @@ bool ChatHandler::HandleAchievementRemoveCommand(char* args)
if (AchievementCriteriaEntryList const* criteriaList = sAchievementMgr.GetAchievementCriteriaByAchievement(achEntry->ID))
for (AchievementCriteriaEntryList::const_iterator itr = criteriaList->begin(); itr != criteriaList->end(); ++itr)
mgr.SetCriteriaProgress(*itr, achEntry, 0);
mgr.SetCriteriaProgress(*itr, achEntry, 0, AchievementMgr::PROGRESS_SET);
LocaleConstant loc = GetSessionDbcLocale();
CompletedAchievementData const* completed = target ? target->GetAchievementMgr().GetCompleteData(achId) : NULL;
@ -1218,7 +1218,7 @@ bool ChatHandler::HandleAchievementCriteriaAddCommand(char* args)
new_val = progress < max_int && max_int - progress > val ? progress + val : max_int;
}
mgr.SetCriteriaProgress(criEntry, achEntry, new_val); // value will move to allowed range into function
mgr.SetCriteriaProgress(criEntry, achEntry, new_val, AchievementMgr::PROGRESS_SET);
ShowAchievementCriteriaListHelper(criEntry, achEntry, loc, target);
return true;
@ -1275,7 +1275,7 @@ bool ChatHandler::HandleAchievementCriteriaRemoveCommand(char* args)
uint32 newval = change < progress ? progress - change : 0;
mgr.SetCriteriaProgress(criEntry, achEntry, newval); // value will move to allowed range into function
mgr.SetCriteriaProgress(criEntry, achEntry, newval, AchievementMgr::PROGRESS_SET);
ShowAchievementCriteriaListHelper(criEntry, achEntry, loc, target);
return true;