summaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
authorTakenbacon <revoke1336@live.com>2025-06-30 08:14:12 -0700
committerGitHub <noreply@github.com>2025-06-30 17:14:12 +0200
commitfd262c3ab109afec7d191c97d2b44f58eb4a1477 (patch)
tree203365aa95c3e394283f5259b7a0b3d070c13d02 /src/server/game/Globals/ObjectMgr.cpp
parent904ddc72cc92bbd668c2a2a0b4da8e2a09de02cc (diff)
feat(Core/Config): Improvements to config caching (#21647)
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ed2ed79ea3..940f0b2224 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2826,6 +2826,30 @@ void ObjectMgr::LoadItemLocales()
LOG_INFO("server.loading", ">> Loaded {} Item Locale Strings in {} ms", (uint32)_itemLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
+ServerConfigs const qualityToBuyValueConfig[MAX_ITEM_QUALITY] =
+{
+ RATE_BUYVALUE_ITEM_POOR, // ITEM_QUALITY_POOR
+ RATE_BUYVALUE_ITEM_NORMAL, // ITEM_QUALITY_NORMAL
+ RATE_BUYVALUE_ITEM_UNCOMMON, // ITEM_QUALITY_UNCOMMON
+ RATE_BUYVALUE_ITEM_RARE, // ITEM_QUALITY_RARE
+ RATE_BUYVALUE_ITEM_EPIC, // ITEM_QUALITY_EPIC
+ RATE_BUYVALUE_ITEM_LEGENDARY, // ITEM_QUALITY_LEGENDARY
+ RATE_BUYVALUE_ITEM_ARTIFACT, // ITEM_QUALITY_ARTIFACT
+ RATE_BUYVALUE_ITEM_HEIRLOOM, // ITEM_QUALITY_HEIRLOOM
+};
+
+ServerConfigs const qualityToSellValueConfig[MAX_ITEM_QUALITY] =
+{
+ RATE_SELLVALUE_ITEM_POOR, // ITEM_QUALITY_POOR
+ RATE_SELLVALUE_ITEM_NORMAL, // ITEM_QUALITY_NORMAL
+ RATE_SELLVALUE_ITEM_UNCOMMON, // ITEM_QUALITY_UNCOMMON
+ RATE_SELLVALUE_ITEM_RARE, // ITEM_QUALITY_RARE
+ RATE_SELLVALUE_ITEM_EPIC, // ITEM_QUALITY_EPIC
+ RATE_SELLVALUE_ITEM_LEGENDARY, // ITEM_QUALITY_LEGENDARY
+ RATE_SELLVALUE_ITEM_ARTIFACT, // ITEM_QUALITY_ARTIFACT
+ RATE_SELLVALUE_ITEM_HEIRLOOM, // ITEM_QUALITY_HEIRLOOM
+};
+
void ObjectMgr::LoadItemTemplates()
{
uint32 oldMSTime = getMSTime();
@@ -2893,8 +2917,8 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.Flags = ItemFlags(fields[7].Get<uint32>());
itemTemplate.Flags2 = ItemFlags2(fields[8].Get<uint32>());
itemTemplate.BuyCount = uint32(fields[9].Get<uint8>());
- itemTemplate.BuyPrice = int32(fields[10].Get<int64>() * sWorld->getRate((Rates)(RATE_BUYVALUE_ITEM_POOR + itemTemplate.Quality)));
- itemTemplate.SellPrice = uint32(fields[11].Get<uint32>() * sWorld->getRate((Rates)(RATE_SELLVALUE_ITEM_POOR + itemTemplate.Quality)));
+ itemTemplate.BuyPrice = int32(fields[10].Get<int64>());
+ itemTemplate.SellPrice = uint32(fields[11].Get<uint32>());
itemTemplate.InventoryType = uint32(fields[12].Get<uint8>());
itemTemplate.AllowableClass = fields[13].Get<int32>();
itemTemplate.AllowableRace = fields[14].Get<int32>();
@@ -3376,6 +3400,10 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.FlagsCu = static_cast<ItemFlagsCustom>(static_cast<uint32>(itemTemplate.FlagsCu) & ~ITEM_FLAGS_CU_DURATION_REAL_TIME);
}
+ // Set after checks to ensure valid item quality
+ itemTemplate.BuyPrice *= sWorld->getRate(qualityToBuyValueConfig[itemTemplate.Quality]);
+ itemTemplate.SellPrice *= sWorld->getRate(qualityToSellValueConfig[itemTemplate.Quality]);
+
// Fill categories map
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
if (itemTemplate.Spells[i].SpellId && itemTemplate.Spells[i].SpellCategory && itemTemplate.Spells[i].SpellCategoryCooldown)