mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
Implemented ACHIEVEMENT_FLAG_REALM_FIRST_REACH
This commit is contained in:
parent
6707038cfc
commit
0d6805ec94
7 changed files with 66 additions and 7 deletions
|
|
@ -202,6 +202,13 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
|||
if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER)
|
||||
return false;
|
||||
|
||||
if(achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
|
||||
{
|
||||
// someone on this realm has already completed that achievement
|
||||
if(objmgr.allCompletedAchievements.find(achievement->ID)!=objmgr.allCompletedAchievements.end())
|
||||
return false;
|
||||
}
|
||||
|
||||
CriteriaProgressMap::iterator itr = m_criteriaProgress.find(achievementCriteria->ID);
|
||||
if(itr == m_criteriaProgress.end())
|
||||
return false;
|
||||
|
|
@ -211,10 +218,32 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
|||
switch(achievementCriteria->requiredType)
|
||||
{
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
|
||||
if(achievement->ID == 467 && GetPlayer()->getClass() != CLASS_SHAMAN ||
|
||||
achievement->ID == 466 && GetPlayer()->getClass() != CLASS_DRUID ||
|
||||
achievement->ID == 465 && GetPlayer()->getClass() != CLASS_PALADIN ||
|
||||
achievement->ID == 464 && GetPlayer()->getClass() != CLASS_PRIEST ||
|
||||
achievement->ID == 463 && GetPlayer()->getClass() != CLASS_WARLOCK ||
|
||||
achievement->ID == 462 && GetPlayer()->getClass() != CLASS_HUNTER ||
|
||||
achievement->ID == 461 && GetPlayer()->getClass() != CLASS_DEATH_KNIGHT ||
|
||||
achievement->ID == 460 && GetPlayer()->getClass() != CLASS_MAGE ||
|
||||
achievement->ID == 459 && GetPlayer()->getClass() != CLASS_WARRIOR ||
|
||||
achievement->ID == 458 && GetPlayer()->getClass() != CLASS_ROGUE ||
|
||||
|
||||
achievement->ID == 1404 && GetPlayer()->getRace() != RACE_GNOME ||
|
||||
achievement->ID == 1405 && GetPlayer()->getRace() != RACE_BLOODELF ||
|
||||
achievement->ID == 1406 && GetPlayer()->getRace() != RACE_DRAENEI ||
|
||||
achievement->ID == 1407 && GetPlayer()->getRace() != RACE_DWARF ||
|
||||
achievement->ID == 1408 && GetPlayer()->getRace() != RACE_HUMAN ||
|
||||
achievement->ID == 1409 && GetPlayer()->getRace() != RACE_NIGHTELF ||
|
||||
achievement->ID == 1410 && GetPlayer()->getRace() != RACE_ORC ||
|
||||
achievement->ID == 1411 && GetPlayer()->getRace() != RACE_TAUREN ||
|
||||
achievement->ID == 1412 && GetPlayer()->getRace() != RACE_TROLL ||
|
||||
achievement->ID == 1413 && GetPlayer()->getRace() != RACE_UNDEAD_PLAYER )
|
||||
return false;
|
||||
return progress->counter >= achievementCriteria->reach_level.level;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
|
||||
return progress->counter >= achievementCriteria->buy_bank_slot.numberOfSlots;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHIEVEMENT:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
||||
return m_completedAchievements.find(achievementCriteria->complete_achievement.linkedAchievement) != m_completedAchievements.end();
|
||||
}
|
||||
return false;
|
||||
|
|
@ -289,7 +318,12 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
|||
SendAchievementEarned(achievement->ID);
|
||||
m_completedAchievements[achievement->ID] = time(NULL);
|
||||
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ARCHIEVEMENT);
|
||||
// don't insert for ACHIEVEMENT_FLAG_REALM_FIRST_KILL since otherwise only the first group member would reach that achievement
|
||||
// TODO: where do set this instead?
|
||||
if(!(achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
|
||||
objmgr.allCompletedAchievements.insert(achievement->ID);
|
||||
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT);
|
||||
// TODO: reward titles and items
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue