diff options
author | Takenbacon <revoke1336@live.com> | 2025-06-30 08:14:12 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-30 17:14:12 +0200 |
commit | fd262c3ab109afec7d191c97d2b44f58eb4a1477 (patch) | |
tree | 203365aa95c3e394283f5259b7a0b3d070c13d02 /src/server/game/Globals/ObjectMgr.cpp | |
parent | 904ddc72cc92bbd668c2a2a0b4da8e2a09de02cc (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.cpp | 32 |
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) |