fix(Core): Implement ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY (#12246)
* fix(Core): Implement ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY * Missing DB values from TrinityCore * Fix DELETE to include all added entries * Fix AchievementCriteriaData validation * Correctly check criteria data for receive item achievements
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (6140, 6141, 6142, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786);
|
||||||
|
INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`) VALUES
|
||||||
|
(6140, 25, 4, 0),
|
||||||
|
(6141, 25, 5, 0),
|
||||||
|
(6142, 25, 4, 0),
|
||||||
|
(4768, 25, 4, 0),
|
||||||
|
(4769, 25, 4, 0),
|
||||||
|
(4770, 25, 4, 0),
|
||||||
|
(4771, 25, 4, 0),
|
||||||
|
(4772, 25, 4, 0),
|
||||||
|
(4773, 25, 4, 0),
|
||||||
|
(4774, 25, 4, 0),
|
||||||
|
(4775, 25, 4, 0),
|
||||||
|
(4776, 25, 4, 0),
|
||||||
|
(4777, 25, 4, 0),
|
||||||
|
(4778, 25, 4, 0),
|
||||||
|
(4779, 25, 4, 0),
|
||||||
|
(4780, 25, 4, 0),
|
||||||
|
(4781, 25, 4, 0),
|
||||||
|
(4782, 25, 4, 0),
|
||||||
|
(4783, 25, 4, 0),
|
||||||
|
(4784, 25, 4, 0),
|
||||||
|
(4785, 25, 4, 0),
|
||||||
|
(4786, 25, 4, 0);
|
||||||
@@ -80,6 +80,8 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
|
|||||||
case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
|
case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
|
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN:
|
case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN:
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM:
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT)
|
if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT)
|
||||||
@@ -242,6 +244,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
|
|||||||
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES:
|
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:
|
||||||
|
case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY:
|
||||||
if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
|
if (equipped_item.item_quality >= MAX_ITEM_QUALITY)
|
||||||
{
|
{
|
||||||
LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: {} Type: {}) for requirement ACHIEVEMENT_CRITERIA_REQUIRE_S_EQUIPED_ITEM ({}) has unknown quality state in value1 ({}), ignored.",
|
LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: {} Type: {}) for requirement ACHIEVEMENT_CRITERIA_REQUIRE_S_EQUIPED_ITEM ({}) has unknown quality state in value1 ({}), ignored.",
|
||||||
@@ -434,6 +437,13 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY:
|
||||||
|
{
|
||||||
|
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
|
||||||
|
if (!pProto)
|
||||||
|
return false;
|
||||||
|
return pProto->Quality == item.item_quality;
|
||||||
|
}
|
||||||
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES:
|
case ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES:
|
||||||
{
|
{
|
||||||
Battleground* bg = source->GetBattleground();
|
Battleground* bg = source->GetBattleground();
|
||||||
@@ -1534,6 +1544,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(miscValue1);
|
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(miscValue1);
|
||||||
if (!proto || proto->Quality < ITEM_QUALITY_EPIC)
|
if (!proto || proto->Quality < ITEM_QUALITY_EPIC)
|
||||||
continue;
|
continue;
|
||||||
|
AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
|
||||||
|
if (!data || !data->Meets(GetPlayer(), unit, miscValue1))
|
||||||
|
continue;
|
||||||
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,8 +68,9 @@ enum AchievementCriteriaDataType
|
|||||||
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
|
ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_TEAMS_SCORES = 24, // winner_score loser score player's team win bg and their teams have exact scores
|
||||||
|
ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY = 25 // item_quality
|
||||||
};
|
};
|
||||||
#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 25 // maximum value in AchievementCriteriaDataType enum
|
#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 26 // maximum value in AchievementCriteriaDataType enum
|
||||||
|
|
||||||
enum AchievementCommonCategories
|
enum AchievementCommonCategories
|
||||||
{
|
{
|
||||||
@@ -196,6 +197,11 @@ struct AchievementCriteriaData
|
|||||||
uint32 winner_score;
|
uint32 winner_score;
|
||||||
uint32 loser_score;
|
uint32 loser_score;
|
||||||
} teams_scores;
|
} teams_scores;
|
||||||
|
// ACHIEVEMENT_CRITERIA_DATA_TYPE_S_ITEM_QUALITY = 25
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 item_quality;
|
||||||
|
} item;
|
||||||
// ...
|
// ...
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user