diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 9 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 1 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 13 |
3 files changed, 15 insertions, 8 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 1715ccaaa89..9e825441ba8 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -458,6 +458,7 @@ namespace ItemModifiedAppearanceByItemContainer _itemModifiedAppearancesByItem; ItemSetSpellContainer _itemSetSpells; ItemSpecOverridesContainer _itemSpecOverrides; + std::unordered_map<uint32 /*itemId*/, std::vector<ItemEffectEntry const*>> _itemEffectsByItemId; std::vector<JournalTierEntry const*> _journalTiersByIndex; MapDifficultyContainer _mapDifficulties; std::unordered_map<uint32, DB2Manager::MapDifficultyConditionsContainer> _mapDifficultyConditions; @@ -1234,6 +1235,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul for (ItemCurrencyCostEntry const* itemCurrencyCost : sItemCurrencyCostStore) _itemsWithCurrencyCost.insert(itemCurrencyCost->ItemID); + for (ItemEffectEntry const* itemEffect : sItemEffectStore) + _itemEffectsByItemId[itemEffect->ParentItemID].push_back(itemEffect); + for (ItemLimitCategoryConditionEntry const* condition : sItemLimitCategoryConditionStore) _itemCategoryConditions[condition->ParentItemLimitCategoryID].push_back(condition); @@ -3145,3 +3149,8 @@ bool DB2Manager::MountTypeXCapabilityEntryComparator::Compare(MountTypeXCapabili return left->OrderIndex < right->OrderIndex; return left->MountTypeID < right->MountTypeID; } + +std::vector<ItemEffectEntry const*> const* DB2Manager::GetItemEffectsForItemId(uint32 itemId) const +{ + return Trinity::Containers::MapGetValuePtr(_itemEffectsByItemId, itemId); +} diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 89bba8e4bd1..82b536cba7e 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -515,6 +515,7 @@ public: bool IsUiMapPhase(uint32 phaseId) const; WMOAreaTableEntry const* GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const; std::unordered_set<uint32> const* GetPVPStatIDsForMap(uint32 mapId) const; + std::vector<ItemEffectEntry const*> const* GetItemEffectsForItemId(uint32 itemId) const; private: friend class DB2HotfixGeneratorBase; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 13c70ef83d7..7715e1fcb84 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3319,15 +3319,12 @@ void ObjectMgr::LoadItemTemplates() for (auto& specs : itemTemplate.Specializations) if (specs.count() == 0) specs.set(); - } - /* - // Load item effects (spells) - for (ItemXItemEffectEntry const* effectEntry : sItemXItemEffectStore) - if (ItemTemplate* item = Trinity::Containers::MapGetValuePtr(_itemTemplateStore, effectEntry->ItemID)) - if (ItemEffectEntry const* effect = sItemEffectStore.LookupEntry(effectEntry->ItemEffectID)) - item->Effects.push_back(effect); - */ + // Load item effects (spells) + if (std::vector<ItemEffectEntry const*> const* itemEffects = sDB2Manager.GetItemEffectsForItemId(sparse->ID)) + for (ItemEffectEntry const* itemEffect : *itemEffects) + itemTemplate.Effects.push_back(itemEffect); + } TC_LOG_INFO("server.loading", ">> Loaded {} item templates in {} ms", _itemTemplateStore.size(), GetMSTimeDiffToNow(oldMSTime)); } |