aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index d0f2bbcb08f..b0d68c50d29 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -464,7 +464,7 @@ namespace
std::unordered_map<uint32 /*chrCustomizationReqId*/, std::vector<std::pair<uint32 /*chrCustomizationOptionId*/, std::vector<uint32>>>> _chrCustomizationRequiredChoices;
ChrSpecializationByIndexContainer _chrSpecializationsByIndex;
std::unordered_map<int32, ConditionalChrModelEntry const*> _conditionalChrModelsByChrModelId;
- std::unordered_multimap<uint32, ConditionalContentTuningEntry const*> _conditionalContentTuning;
+ std::unordered_map<uint32 /*contentTuningId*/, std::vector<ConditionalContentTuningEntry const*>> _conditionalContentTuning;
std::unordered_set<std::pair<uint32, int32>> _contentTuningLabels;
std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers;
CurvePointsContainer _curvePoints;
@@ -1220,8 +1220,13 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
for (ConditionalChrModelEntry const* conditionalChrModel : sConditionalChrModelStore)
_conditionalChrModelsByChrModelId[conditionalChrModel->ChrModelID] = conditionalChrModel;
- for (ConditionalContentTuningEntry const* conditionalContentTuning : sConditionalContentTuningStore)
- _conditionalContentTuning.emplace(conditionalContentTuning->ParentContentTuningID, conditionalContentTuning);
+ {
+ for (ConditionalContentTuningEntry const* conditionalContentTuning : sConditionalContentTuningStore)
+ _conditionalContentTuning[conditionalContentTuning->ParentContentTuningID].push_back(conditionalContentTuning);
+
+ for (auto& [parentContentTuningId, conditionalContentTunings] : _conditionalContentTuning)
+ std::ranges::sort(conditionalContentTunings, std::greater(), &ConditionalContentTuningEntry::OrderIndex);
+ }
for (ContentTuningXExpectedEntry const* contentTuningXExpectedStat : sContentTuningXExpectedStore)
if (sExpectedStatModStore.LookupEntry(contentTuningXExpectedStat->ExpectedStatModID))
@@ -2112,9 +2117,10 @@ ChrSpecializationEntry const* DB2Manager::GetDefaultChrSpecializationForClass(ui
uint32 DB2Manager::GetRedirectedContentTuningId(uint32 contentTuningId, uint32 redirectFlag) const
{
- for (auto [_, conditionalContentTuning] : Trinity::Containers::MapEqualRange(_conditionalContentTuning, contentTuningId))
- if (conditionalContentTuning->RedirectFlag & redirectFlag)
- return conditionalContentTuning->RedirectContentTuningID;
+ if (std::vector<ConditionalContentTuningEntry const*> const* conditionalContentTunings = Trinity::Containers::MapGetValuePtr(_conditionalContentTuning, contentTuningId))
+ for (ConditionalContentTuningEntry const* conditionalContentTuning : *conditionalContentTunings)
+ if (conditionalContentTuning->RedirectFlag & redirectFlag)
+ return conditionalContentTuning->RedirectContentTuningID;
return contentTuningId;
}