feat(Core/Config): Improvements to config caching (#21647)

This commit is contained in:
Takenbacon
2025-06-30 08:14:12 -07:00
committed by GitHub
parent 904ddc72cc
commit fd262c3ab1
13 changed files with 1443 additions and 1555 deletions

View File

@@ -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)