fix(Core/Achievements): new achievement criteria type ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES (#7756)

- Closes #7613
This commit is contained in:
UltraNix
2021-09-11 11:02:38 +02:00
committed by GitHub
parent 83e0096349
commit e5b8dbeb29
3 changed files with 99 additions and 69 deletions
@@ -0,0 +1,4 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1630947176293030300');
UPDATE `achievement_criteria_data` SET `type`=24, `value1`=1600 WHERE `criteria_id` IN (611,1235,1238);
UPDATE `achievement_criteria_data` SET `type`=24, `value1`=3 WHERE `criteria_id`=1236;
@@ -248,6 +248,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
} }
return true; return true;
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE: case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE:
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES:
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:
if (equipped_item.item_quality >= MAX_ITEM_QUALITY) if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
@@ -444,6 +445,24 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
return false; return false;
} }
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES:
{
Battleground* bg = source->GetBattleground();
if (!bg)
{
return false;
}
TeamId winnerTeam = bg->GetWinner();
if (winnerTeam == TEAM_NEUTRAL)
{
return false;
}
uint32 winnnerScore = bg->GetTeamScore(winnerTeam);
uint32 loserScore = bg->GetTeamScore(TeamId(!uint32(winnerTeam)));
return source->GetTeamId() == winnerTeam && winnnerScore == teams_scores.winner_score && loserScore == teams_scores.loser_score;
}
default: default:
break; break;
} }
+11 -4
View File
@@ -55,9 +55,10 @@ 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_BG_TEAMS_SCORES = 24, // winner_score loser score player's team win bg and their teams have exact scores
}; };
#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 24 // maximum value in AchievementCriteriaDataType enum #define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 25 // maximum value in AchievementCriteriaDataType enum
enum AchievementCommonCategories enum AchievementCommonCategories
{ {
@@ -168,16 +169,22 @@ struct AchievementCriteriaData
{ {
uint32 mapId; uint32 mapId;
} map_id; } map_id;
// ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 21 // ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 22
struct struct
{ {
uint32 nth_birthday; uint32 nth_birthday;
} birthday_login; } birthday_login;
// ACHIEVEMENT_CRITERIA_DATA_TYPE_KNOWN_TITLE = 22 // ACHIEVEMENT_CRITERIA_DATA_TYPE_KNOWN_TITLE = 23
struct struct
{ {
uint32 title_id; uint32 title_id;
} known_title; } known_title;
// ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES = 24
struct
{
uint32 winner_score;
uint32 loser_score;
} teams_scores;
// ... // ...
struct struct
{ {