aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp23
-rw-r--r--src/server/game/Achievements/CriteriaHandler.h14
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
{