Core/Achievements: Implemented ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT

This commit is contained in:
Vincent-Michael
2014-04-26 03:07:49 +02:00
parent 0042e6f815
commit 3ec1d0c8d6
2 changed files with 31 additions and 12 deletions
@@ -243,6 +243,17 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
return false; return false;
} }
return true; return true;
case ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT:
uint32 eventId = game_event.id;
GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap();
if (eventId < 1 || eventId >= events.size())
{
TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT (%u) has unknown game_event in value1 (%u), ignored.",
criteria->ID, criteria->type, dataType, eventId);
return false;
}
return true;
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE: case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE:
return true; // not check correctness node indexes return true; // not check correctness node indexes
case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM: case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM:
@@ -343,6 +354,8 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= DrunkenState(drunk.state); return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= DrunkenState(drunk.state);
case ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY: case ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY:
return IsHolidayActive(HolidayIds(holiday.id)); return IsHolidayActive(HolidayIds(holiday.id));
case ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT:
return IsEventActive(game_event.id);
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE: case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE:
{ {
Battleground* bg = source->GetBattleground(); Battleground* bg = source->GetBattleground();
@@ -69,10 +69,11 @@ enum AchievementCriteriaDataType
ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID = 20, // map_id 0 player must be on map with id in map_id ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID = 20, // map_id 0 player must be on map with id in map_id
ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE = 21, // class_id race_id ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE = 21, // class_id race_id
ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 22, // N login on day of N-th Birthday ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 22, // N login on day of N-th Birthday
ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE = 23 // title_id known (pvp) title, values from dbc ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE = 23, // title_id known (pvp) title, values from dbc
}; ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT = 24, // game_event_id 0
#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 24 // maximum value in AchievementCriteriaDataType enum MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE
};
struct AchievementCriteriaData struct AchievementCriteriaData
{ {
@@ -169,6 +170,11 @@ struct AchievementCriteriaData
{ {
uint32 title_id; uint32 title_id;
} known_title; } known_title;
// ACHIEVEMENT_CRITERIA_DATA_TYPE_GAME_EVENT = 24
struct
{
uint32 id;
} game_event;
// raw // raw
struct struct
{ {