diff options
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 18 |
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; } |