Implemented ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS
Fixed timed achievements timer restarting on every map change Added missed change in instance_template format --HG-- branch : trunk
This commit is contained in:
@@ -1447,6 +1447,20 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED:
|
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED:
|
||||||
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetMoney(), PROGRESS_HIGHEST);
|
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetMoney(), PROGRESS_HIGHEST);
|
||||||
break;
|
break;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS:
|
||||||
|
{
|
||||||
|
if (!miscvalue1)
|
||||||
|
{
|
||||||
|
uint32 points = 0;
|
||||||
|
for (CompletedAchievementMap::iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr)
|
||||||
|
if (AchievementEntry const* pAchievement = sAchievementStore.LookupEntry(itr->first))
|
||||||
|
points += pAchievement->points;
|
||||||
|
SetCriteriaProgress(achievementCriteria, points, PROGRESS_SET);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SetCriteriaProgress(achievementCriteria, miscvalue1, PROGRESS_ACCUMULATE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
// std case: not exist in DBC, not triggered in code as result
|
// std case: not exist in DBC, not triggered in code as result
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH:
|
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER:
|
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER:
|
||||||
@@ -1470,7 +1484,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
case ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE:
|
case ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
|
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_TOTAL:
|
case ACHIEVEMENT_CRITERIA_TYPE_TOTAL:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS:
|
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS:
|
case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS:
|
||||||
break; // Not implemented yet :(
|
break; // Not implemented yet :(
|
||||||
}
|
}
|
||||||
@@ -1614,6 +1627,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
|||||||
return progress->counter >= achievementCriteria->learn_skill_line.spellCount;
|
return progress->counter >= achievementCriteria->learn_skill_line.spellCount;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL:
|
case ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL:
|
||||||
return progress->counter >= achievementCriteria->honorable_kill.killCount;
|
return progress->counter >= achievementCriteria->honorable_kill.killCount;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS:
|
||||||
|
return progress->counter >= 9000;
|
||||||
// handle all statistic-only criteria here
|
// handle all statistic-only criteria here
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
|
||||||
@@ -1794,7 +1809,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
|
|||||||
|
|
||||||
if (entry->timeLimit)
|
if (entry->timeLimit)
|
||||||
{
|
{
|
||||||
//has to exist else we wouldn't be here
|
// has to exist else we wouldn't be here
|
||||||
timedCompleted = IsCompletedCriteria(entry, sAchievementStore.LookupEntry(entry->referredAchievement));
|
timedCompleted = IsCompletedCriteria(entry, sAchievementStore.LookupEntry(entry->referredAchievement));
|
||||||
// Client expects this in packet
|
// Client expects this in packet
|
||||||
timeElapsed = entry->timeLimit - (timedIter->second/IN_MILLISECONDS);
|
timeElapsed = entry->timeLimit - (timedIter->second/IN_MILLISECONDS);
|
||||||
@@ -1818,7 +1833,10 @@ void AchievementMgr::UpdateTimedAchievements(uint32 timeDiff)
|
|||||||
{
|
{
|
||||||
AchievementCriteriaEntry const *entry = sAchievementCriteriaStore.LookupEntry(itr->first);
|
AchievementCriteriaEntry const *entry = sAchievementCriteriaStore.LookupEntry(itr->first);
|
||||||
SetCriteriaProgress(entry, 0, PROGRESS_SET);
|
SetCriteriaProgress(entry, 0, PROGRESS_SET);
|
||||||
|
CriteriaProgressMap::iterator criteriaProgress = m_criteriaProgress.find(itr->first);
|
||||||
m_timedAchievements.erase(itr++);
|
m_timedAchievements.erase(itr++);
|
||||||
|
if (criteriaProgress != m_criteriaProgress.end())
|
||||||
|
m_criteriaProgress.erase(criteriaProgress);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1862,8 +1880,11 @@ void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type,
|
|||||||
if (timedIter == m_timedAchievements.end())
|
if (timedIter == m_timedAchievements.end())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// 0 the progress to avoid saving to db
|
// SetCriteriaProgress for packet send, then remove progress
|
||||||
SetCriteriaProgress(*i, 0, PROGRESS_SET);
|
SetCriteriaProgress(*i, 0, PROGRESS_SET);
|
||||||
|
CriteriaProgressMap::iterator criteriaProgress = m_criteriaProgress.find((*i)->ID);
|
||||||
|
if (criteriaProgress != m_criteriaProgress.end())
|
||||||
|
m_criteriaProgress.erase(criteriaProgress);
|
||||||
|
|
||||||
// Remove the timer
|
// Remove the timer
|
||||||
m_timedAchievements.erase(timedIter);
|
m_timedAchievements.erase(timedIter);
|
||||||
@@ -1891,6 +1912,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
|||||||
achievementmgr.SetRealmCompleted(achievement);
|
achievementmgr.SetRealmCompleted(achievement);
|
||||||
|
|
||||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT);
|
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT);
|
||||||
|
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS, achievement->points);
|
||||||
|
|
||||||
// reward items and titles if any
|
// reward items and titles if any
|
||||||
AchievementReward const* reward = achievementmgr.GetAchievementReward(achievement);
|
AchievementReward const* reward = achievementmgr.GetAchievementReward(achievement);
|
||||||
@@ -1901,10 +1923,8 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
|||||||
|
|
||||||
// titles
|
// titles
|
||||||
if (uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1])
|
if (uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1])
|
||||||
{
|
|
||||||
if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId))
|
if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId))
|
||||||
GetPlayer()->SetTitle(titleEntry);
|
GetPlayer()->SetTitle(titleEntry);
|
||||||
}
|
|
||||||
|
|
||||||
// mail
|
// mail
|
||||||
if (reward->sender)
|
if (reward->sender)
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ class AchievementMgr
|
|||||||
void CompletedCriteriaFor(AchievementEntry const* achievement);
|
void CompletedCriteriaFor(AchievementEntry const* achievement);
|
||||||
bool IsCompletedCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement);
|
bool IsCompletedCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement);
|
||||||
bool IsCompletedAchievement(AchievementEntry const* entry);
|
bool IsCompletedAchievement(AchievementEntry const* entry);
|
||||||
void CompleteAchievementsWithRefs(AchievementEntry const* entry);
|
//void CompleteAchievementsWithRefs(AchievementEntry const* entry);
|
||||||
void BuildAllDataPacket(WorldPacket *data);
|
void BuildAllDataPacket(WorldPacket *data);
|
||||||
|
|
||||||
Player* m_player;
|
Player* m_player;
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ const char GameObjectInfodstfmt[]="iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
|||||||
const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiisiiiii";
|
const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiisiiiii";
|
||||||
const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiii";
|
const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiii";
|
||||||
const char PageTextfmt[]="isii";
|
const char PageTextfmt[]="isii";
|
||||||
const char InstanceTemplatesrcfmt[]="iiiffffsb";
|
const char InstanceTemplatesrcfmt[]="iiffffsb";
|
||||||
const char InstanceTemplatedstfmt[]="iiiffffib";
|
const char InstanceTemplatedstfmt[]="iiffffib";
|
||||||
|
|
||||||
SQLStorage sCreatureStorage(CreatureInfosrcfmt, CreatureInfodstfmt, "entry","creature_template");
|
SQLStorage sCreatureStorage(CreatureInfosrcfmt, CreatureInfodstfmt, "entry","creature_template");
|
||||||
SQLStorage sCreatureDataAddonStorage(CreatureDataAddonInfofmt,"guid","creature_addon");
|
SQLStorage sCreatureDataAddonStorage(CreatureDataAddonInfofmt,"guid","creature_addon");
|
||||||
|
|||||||
Reference in New Issue
Block a user