aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp21
-rw-r--r--src/server/game/DataStores/DB2Stores.h2
-rw-r--r--src/server/game/Entities/Item/Item.cpp6
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();
}