diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 21 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 6 |
3 files changed, 22 insertions, 7 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index be7e67b49a4..c1ebbd4cd4c 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -624,6 +624,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) { ASSERT(appearanceMod->ItemID <= 0xFFFFFF); _itemModifiedAppearancesByItem[appearanceMod->ItemID | (appearanceMod->AppearanceModID << 24)] = appearanceMod; + auto defaultAppearance = _itemDefaultAppearancesByItem.find(appearanceMod->ItemID); + if (defaultAppearance == _itemDefaultAppearancesByItem.end() || defaultAppearance->second->Index > appearanceMod->Index) + _itemDefaultAppearancesByItem[appearanceMod->ItemID] = appearanceMod; } for (ItemSetSpellEntry const* itemSetSpell : sItemSetSpellStore) @@ -1238,12 +1241,18 @@ ItemModifiedAppearanceEntry const* DB2Manager::GetItemModifiedAppearance(uint32 return itr->second; // Fall back to unmodified appearance - if (appearanceModId) - { - itr = _itemModifiedAppearancesByItem.find(itemId); - if (itr != _itemModifiedAppearancesByItem.end()) - return itr->second; - } + itr = _itemDefaultAppearancesByItem.find(itemId); + if (itr != _itemDefaultAppearancesByItem.end()) + return itr->second; + + return nullptr; +} + +ItemModifiedAppearanceEntry const* DB2Manager::GetDefaultItemModifiedAppearance(uint32 itemId) const +{ + auto itr = _itemDefaultAppearancesByItem.find(itemId); + if (itr != _itemDefaultAppearancesByItem.end()) + return itr->second; return nullptr; } diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index c5715a54fc0..aaf0b35c109 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -284,6 +284,7 @@ public: bool HasItemCurrencyCost(uint32 itemId) const { return _itemsWithCurrencyCost.count(itemId) > 0; } uint32 GetItemDisplayId(uint32 itemId, uint32 appearanceModId) const; ItemModifiedAppearanceEntry const* GetItemModifiedAppearance(uint32 itemId, uint32 appearanceModId) const; + ItemModifiedAppearanceEntry const* GetDefaultItemModifiedAppearance(uint32 itemId) const; std::vector<ItemSetSpellEntry const*> const* GetItemSetSpells(uint32 itemSetId) const; std::vector<ItemSpecOverrideEntry const*> const* GetItemSpecOverrides(uint32 itemId) const; static LfgDungeonsEntry const* GetLfgDungeon(uint32 mapId, Difficulty difficulty); @@ -335,6 +336,7 @@ private: ItemChildEquipmentContainer _itemChildEquipment; std::unordered_set<uint32> _itemsWithCurrencyCost; ItemModifiedAppearanceByItemContainer _itemModifiedAppearancesByItem; + ItemModifiedAppearanceByItemContainer _itemDefaultAppearancesByItem; ItemToBonusTreeContainer _itemToBonusTree; ItemSetSpellContainer _itemSetSpells; ItemSpecOverridesContainer _itemSpecOverrides; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index ce97bca9a35..b01508c3933 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -2004,7 +2004,8 @@ uint32 Item::GetDisplayId(Player const* owner) const transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier))) - return sDB2Manager.GetItemDisplayId(transmog->ItemID, transmog->AppearanceModID); + if (ItemAppearanceEntry const* itemAppearance = sItemAppearanceStore.LookupEntry(transmog->AppearanceID)) + return itemAppearance->DisplayID; return sDB2Manager.GetItemDisplayId(GetEntry(), GetAppearanceModId()); } @@ -2101,6 +2102,9 @@ void BonusData::Initialize(ItemTemplate const* proto) SocketColor[i] = proto->GetSocketColor(i); AppearanceModID = 0; + if (ItemModifiedAppearanceEntry const* defaultAppearance = sDB2Manager.GetDefaultItemModifiedAppearance(proto->GetId())) + AppearanceModID = defaultAppearance->AppearanceModID; + RepairCostMultiplier = 1.0f; ScalingStatDistribution = proto->GetScalingStatDistribution(); } |