Core/Achievements: Award normal mode achievements when instance was done on heroic mode

This commit is contained in:
Shauren
2011-09-05 15:21:37 +02:00
parent 5cf1ccb4e9
commit f13f32c972
5 changed files with 10 additions and 4 deletions
@@ -182,7 +182,7 @@ struct ScriptedAI : public CreatureAI
Difficulty GetDifficulty() { return _difficulty; } Difficulty GetDifficulty() { return _difficulty; }
// return true for 25 man or 25 man heroic mode // return true for 25 man or 25 man heroic mode
bool Is25ManRaid() { return _difficulty & 1; } bool Is25ManRaid() { return _difficulty & RAID_DIFFICULTY_MASK_25MAN; }
template<class T> inline template<class T> inline
const T& DUNGEON_MODE(const T& normal5, const T& heroic10) const T& DUNGEON_MODE(const T& normal5, const T& heroic10)
@@ -334,7 +334,10 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
case ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT: case ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT:
return sScriptMgr->OnCriteriaCheck(this, const_cast<Player*>(source), const_cast<Unit*>(target)); return sScriptMgr->OnCriteriaCheck(this, const_cast<Player*>(source), const_cast<Unit*>(target));
case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY: case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_DIFFICULTY:
return source->GetMap()->GetSpawnMode() == difficulty.difficulty; if (source->GetMap()->IsRaid())
if (source->GetMap()->Is25ManRaid() != (difficulty.difficulty & RAID_DIFFICULTY_MASK_25MAN))
return false;
return source->GetMap()->GetSpawnMode() >= difficulty.difficulty;
case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT: case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT:
return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount; return source->GetMap()->GetPlayersCountExceptGMs() <= map_players.maxcount;
case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM: case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM:
+2
View File
@@ -278,6 +278,8 @@ enum Difficulty
RAID_DIFFICULTY_25MAN_HEROIC = 3, RAID_DIFFICULTY_25MAN_HEROIC = 3,
}; };
#define RAID_DIFFICULTY_MASK_25MAN 1 // since 25man difficulties are 1 and 3, we can check them like that
#define MAX_DUNGEON_DIFFICULTY 3 #define MAX_DUNGEON_DIFFICULTY 3
#define MAX_RAID_DIFFICULTY 4 #define MAX_RAID_DIFFICULTY 4
#define MAX_DIFFICULTY 4 #define MAX_DIFFICULTY 4
+1
View File
@@ -365,6 +365,7 @@ class Map : public GridRefManager<NGridType>
bool IsRaid() const { return i_mapEntry && i_mapEntry->IsRaid(); } bool IsRaid() const { return i_mapEntry && i_mapEntry->IsRaid(); }
bool IsRaidOrHeroicDungeon() const { return IsRaid() || i_spawnMode > DUNGEON_DIFFICULTY_NORMAL; } bool IsRaidOrHeroicDungeon() const { return IsRaid() || i_spawnMode > DUNGEON_DIFFICULTY_NORMAL; }
bool IsHeroic() const { return IsRaid() ? i_spawnMode >= RAID_DIFFICULTY_10MAN_HEROIC : i_spawnMode >= DUNGEON_DIFFICULTY_HEROIC; } bool IsHeroic() const { return IsRaid() ? i_spawnMode >= RAID_DIFFICULTY_10MAN_HEROIC : i_spawnMode >= DUNGEON_DIFFICULTY_HEROIC; }
bool Is25ManRaid() const { return IsRaid() && i_spawnMode & RAID_DIFFICULTY_MASK_25MAN; } // since 25man difficulties are 1 and 3, we can check them like that
bool IsBattleground() const { return i_mapEntry && i_mapEntry->IsBattleground(); } bool IsBattleground() const { return i_mapEntry && i_mapEntry->IsBattleground(); }
bool IsBattleArena() const { return i_mapEntry && i_mapEntry->IsBattleArena(); } bool IsBattleArena() const { return i_mapEntry && i_mapEntry->IsBattleArena(); }
bool IsBattlegroundOrArena() const { return i_mapEntry && i_mapEntry->IsBattlegroundOrArena(); } bool IsBattlegroundOrArena() const { return i_mapEntry && i_mapEntry->IsBattlegroundOrArena(); }