Fix off-by-one in ItemDisplayInfo texture component fields

Texture regions are at DBC fields 15-22, not 14-21. Field 14 is
HelmetGeosetVis[1] (uint32), and getString() on it returned random
strings from the DBC string block, causing garbled textures on
players and missing leg textures on other characters.
This commit is contained in:
Kelsi 2026-02-14 15:54:23 -08:00
parent 3675721016
commit 148f63cffe
5 changed files with 30 additions and 28 deletions

View file

@ -3130,15 +3130,16 @@ void Application::spawnOnlineCreature(uint64_t guid, uint32_t displayId, float x
const auto* idiL = pipeline::getActiveDBCLayout()
? pipeline::getActiveDBCLayout()->getLayout("ItemDisplayInfo") : nullptr;
// Texture component region fields (8 regions: ArmUpper..Foot)
// Fields 15-22 in WotLK ItemDisplayInfo.dbc (field 14 = HelmetGeosetVis[1])
const uint32_t texRegionFields[8] = {
idiL ? (*idiL)["TextureArmUpper"] : 14u,
idiL ? (*idiL)["TextureArmLower"] : 15u,
idiL ? (*idiL)["TextureHand"] : 16u,
idiL ? (*idiL)["TextureTorsoUpper"]: 17u,
idiL ? (*idiL)["TextureTorsoLower"]: 18u,
idiL ? (*idiL)["TextureLegUpper"] : 19u,
idiL ? (*idiL)["TextureLegLower"] : 20u,
idiL ? (*idiL)["TextureFoot"] : 21u,
idiL ? (*idiL)["TextureArmUpper"] : 15u,
idiL ? (*idiL)["TextureArmLower"] : 16u,
idiL ? (*idiL)["TextureHand"] : 17u,
idiL ? (*idiL)["TextureTorsoUpper"]: 18u,
idiL ? (*idiL)["TextureTorsoLower"]: 19u,
idiL ? (*idiL)["TextureLegUpper"] : 20u,
idiL ? (*idiL)["TextureLegLower"] : 21u,
idiL ? (*idiL)["TextureFoot"] : 22u,
};
const bool npcIsFemale = (extra.sexId == 1);
@ -3969,15 +3970,16 @@ void Application::setOnlinePlayerEquipment(uint64_t guid,
};
// Texture component region fields from DBC layout
// Fields 15-22 in WotLK ItemDisplayInfo.dbc (field 14 = HelmetGeosetVis[1])
const uint32_t texRegionFields[8] = {
idiL ? (*idiL)["TextureArmUpper"] : 14u,
idiL ? (*idiL)["TextureArmLower"] : 15u,
idiL ? (*idiL)["TextureHand"] : 16u,
idiL ? (*idiL)["TextureTorsoUpper"]: 17u,
idiL ? (*idiL)["TextureTorsoLower"]: 18u,
idiL ? (*idiL)["TextureLegUpper"] : 19u,
idiL ? (*idiL)["TextureLegLower"] : 20u,
idiL ? (*idiL)["TextureFoot"] : 21u,
idiL ? (*idiL)["TextureArmUpper"] : 15u,
idiL ? (*idiL)["TextureArmLower"] : 16u,
idiL ? (*idiL)["TextureHand"] : 17u,
idiL ? (*idiL)["TextureTorsoUpper"]: 18u,
idiL ? (*idiL)["TextureTorsoLower"]: 19u,
idiL ? (*idiL)["TextureLegUpper"] : 20u,
idiL ? (*idiL)["TextureLegLower"] : 21u,
idiL ? (*idiL)["TextureFoot"] : 22u,
};
std::vector<std::pair<int, std::string>> regionLayers;