diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Achievements/CriteriaHandler.h | 14 |
2 files changed, 30 insertions, 7 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 03fbbb50a3a..ac0ee493d88 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -66,6 +66,8 @@ bool CriteriaData::IsValid(Criteria const* criteria) case CRITERIA_TYPE_GET_KILLING_BLOWS: case CRITERIA_TYPE_REACH_LEVEL: case CRITERIA_TYPE_ON_LOGIN: + case CRITERIA_TYPE_LOOT_EPIC_ITEM: + case CRITERIA_TYPE_RECEIVE_EPIC_ITEM: break; default: if (DataType != CRITERIA_DATA_TYPE_SCRIPT) @@ -219,10 +221,10 @@ bool CriteriaData::IsValid(Criteria const* criteria) } case CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE: return true; // not check correctness node indexes - case CRITERIA_DATA_TYPE_S_EQUIPED_ITEM: + case CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM: if (EquippedItem.Quality >= MAX_ITEM_QUALITY) { - TC_LOG_ERROR("sql.sql", "Table `criteria_data` (Entry: %u Type: %u) for data type CRITERIA_DATA_TYPE_S_EQUIPED_ITEM (%u) contains an unknown quality state value in value1 (%u), ignored.", + TC_LOG_ERROR("sql.sql", "Table `criteria_data` (Entry: %u Type: %u) for data type CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM (%u) contains an unknown quality state value in value2 (%u), ignored.", criteria->ID, criteria->Entry->Type, DataType, EquippedItem.Quality); return false; } @@ -262,6 +264,14 @@ bool CriteriaData::IsValid(Criteria const* criteria) return false; } return true; + case CRITERIA_DATA_TYPE_S_ITEM_QUALITY: + if (ItemQuality.Quality >= MAX_ITEM_QUALITY) + { + TC_LOG_ERROR("sql.sql", "Table `criteria_data` (Entry: %u Type: %u) for data type CRITERIA_DATA_TYPE_S_ITEM_QUALITY (%u) contains an unknown quality state value in value1 (%u), ignored.", + criteria->ID, criteria->Entry->Type, DataType, ItemQuality.Quality); + return false; + } + return true; default: TC_LOG_ERROR("sql.sql", "Table `criteria_data` (Entry: %u Type: %u) contains data of a non-supported data type (%u), ignored.", criteria->ID, criteria->Entry->Type, DataType); return false; @@ -355,7 +365,7 @@ bool CriteriaData::Meets(uint32 criteriaId, Player const* source, Unit const* ta } return instance->CheckAchievementCriteriaMeet(criteriaId, source, target, miscValue1); } - case CRITERIA_DATA_TYPE_S_EQUIPED_ITEM: + case CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM: { ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscValue1); if (!pProto) @@ -371,6 +381,13 @@ bool CriteriaData::Meets(uint32 criteriaId, Player const* source, Unit const* ta return false; } + case CRITERIA_DATA_TYPE_S_ITEM_QUALITY: + { + ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscValue1); + if (!pProto) + return false; + return pProto->GetQuality() == ItemQuality.Quality; + } default: break; } diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h index 83e63ceebc7..ab5625b0742 100644 --- a/src/server/game/Achievements/CriteriaHandler.h +++ b/src/server/game/Achievements/CriteriaHandler.h @@ -95,12 +95,13 @@ enum CriteriaDataType CRITERIA_DATA_TYPE_HOLIDAY = 16, // HolidayId 0 event in holiday time CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE = 17, // MinScore MaxScore player's team win bg and opposition team have team score in range CRITERIA_DATA_TYPE_INSTANCE_SCRIPT = 18, // 0 0 maker instance script call for check current criteria requirements fit - CRITERIA_DATA_TYPE_S_EQUIPED_ITEM = 19, // ItemLevel Quality for equipped item in slot to check item level and quality + CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM = 19, // ItemLevel Quality for equipped item in slot to check item level and quality CRITERIA_DATA_TYPE_MAP_ID = 20, // MapId 0 player must be on map with id in map_id CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE = 21, // Class Race CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 22, // used on 3.3.5a branch CRITERIA_DATA_TYPE_S_KNOWN_TITLE = 23, // TitleId known (pvp) title, values from dbc CRITERIA_DATA_TYPE_GAME_EVENT = 24, // GameEventId 0 + CRITERIA_DATA_TYPE_S_ITEM_QUALITY = 25, // ItemQuality 0 MAX_CRITERIA_DATA_TYPE }; @@ -179,7 +180,7 @@ struct CriteriaData uint32 Max; } BattlegroundScore; // CRITERIA_DATA_TYPE_INSTANCE_SCRIPT = 18 (no data) - // CRITERIA_DATA_TYPE_S_EQUIPED_ITEM = 19 + // CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM = 19 struct { uint32 ItemLevel; @@ -190,16 +191,21 @@ struct CriteriaData { uint32 Id; } Map; - // CRITERIA_DATA_TYPE_KNOWN_TITLE = 22 + // CRITERIA_DATA_TYPE_KNOWN_TITLE = 23 struct { uint32 Id; } KnownTitle; - // CRITERIA_DATA_TYPE_GAME_EVENT = 24 + // CRITERIA_DATA_TYPE_GAME_EVENT = 25 struct { uint32 Id; } GameEvent; + // CRITERIA_DATA_TYPE_S_ITEM_QUALITY = 24 + struct + { + uint32 Quality; + } ItemQuality; // raw struct { |
