mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Achievement: fix bad lookup of ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM item
Closes #19064
This commit is contained in:
@@ -291,7 +291,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
|
||||
}
|
||||
}
|
||||
|
||||
bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Unit const* target, uint32 miscvalue1 /*= 0*/) const
|
||||
bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Unit const* target, uint32 miscvalue1 /*= 0*/, uint32 miscvalue2 /* = 0*/) const
|
||||
{
|
||||
switch (dataType)
|
||||
{
|
||||
@@ -396,10 +396,13 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
|
||||
}
|
||||
case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM:
|
||||
{
|
||||
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscvalue1);
|
||||
if (!pProto)
|
||||
AchievementCriteriaEntry const* entry = ASSERT_NOTNULL(sAchievementMgr->GetAchievementCriteria(criteria_id));
|
||||
|
||||
uint32 itemId = (entry->Type == ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM ? miscvalue2 : miscvalue1);
|
||||
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId);
|
||||
if (!itemTemplate)
|
||||
return false;
|
||||
return pProto->ItemLevel >= equipped_item.item_level && pProto->Quality >= equipped_item.item_quality;
|
||||
return itemTemplate->ItemLevel >= equipped_item.item_level && itemTemplate->Quality >= equipped_item.item_quality;
|
||||
}
|
||||
case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID:
|
||||
return source->GetMapId() == map_id.mapId;
|
||||
@@ -435,10 +438,10 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AchievementCriteriaDataSet::Meets(Player const* source, Unit const* target, uint32 miscvalue /*= 0*/) const
|
||||
bool AchievementCriteriaDataSet::Meets(Player const* source, Unit const* target, uint32 miscvalue1 /*= 0*/, uint32 miscvalue2 /* = 0*/) const
|
||||
{
|
||||
for (Storage::const_iterator itr = storage.begin(); itr != storage.end(); ++itr)
|
||||
if (!itr->Meets(criteria_id, source, target, miscvalue))
|
||||
if (!itr->Meets(criteria_id, source, target, miscvalue1, miscvalue2))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -756,7 +759,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
break;
|
||||
default:
|
||||
if (AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria))
|
||||
if (!data->Meets(GetPlayer(), unit, miscValue1))
|
||||
if (!data->Meets(GetPlayer(), unit, miscValue1, miscValue2))
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ struct AchievementCriteriaData
|
||||
}
|
||||
|
||||
bool IsValid(AchievementCriteriaEntry const* criteria);
|
||||
bool Meets(uint32 criteria_id, Player const* source, Unit const* target, uint32 miscValue1 = 0) const;
|
||||
bool Meets(uint32 criteria_id, Player const* source, Unit const* target, uint32 miscValue1 = 0, uint32 miscValue2 = 0) const;
|
||||
};
|
||||
|
||||
struct TC_GAME_API AchievementCriteriaDataSet
|
||||
@@ -226,7 +226,7 @@ struct TC_GAME_API AchievementCriteriaDataSet
|
||||
AchievementCriteriaDataSet() : criteria_id(0) { }
|
||||
typedef std::vector<AchievementCriteriaData> Storage;
|
||||
void Add(AchievementCriteriaData const& data) { storage.push_back(data); }
|
||||
bool Meets(Player const* source, Unit const* target, uint32 miscValue = 0) const;
|
||||
bool Meets(Player const* source, Unit const* target, uint32 miscValue1 = 0, uint32 miscValue2 = 0) const;
|
||||
void SetCriteriaId(uint32 id) {criteria_id = id;}
|
||||
private:
|
||||
uint32 criteria_id;
|
||||
|
||||
Reference in New Issue
Block a user