mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-04 08:23:50 +00:00
Fix taxi state sync and transport authority; reduce runtime log overhead; restore first-person self-hide
This commit is contained in:
parent
74062aa25f
commit
8bf63b1f06
29 changed files with 529 additions and 360 deletions
|
|
@ -45,7 +45,7 @@ ADTTerrain ADTLoader::load(const std::vector<uint8_t>& adtData) {
|
|||
return terrain;
|
||||
}
|
||||
|
||||
LOG_INFO("Loading ADT terrain (", adtData.size(), " bytes)");
|
||||
LOG_DEBUG("Loading ADT terrain (", adtData.size(), " bytes)");
|
||||
|
||||
size_t offset = 0;
|
||||
int chunkIndex = 0;
|
||||
|
|
@ -88,7 +88,7 @@ ADTTerrain ADTLoader::load(const std::vector<uint8_t>& adtData) {
|
|||
parseMODF(chunkData, chunkSize, terrain);
|
||||
}
|
||||
else if (header.magic == MH2O) {
|
||||
LOG_INFO("Found MH2O chunk (", chunkSize, " bytes)");
|
||||
LOG_DEBUG("Found MH2O chunk (", chunkSize, " bytes)");
|
||||
parseMH2O(chunkData, chunkSize, terrain);
|
||||
}
|
||||
else if (header.magic == MCNK) {
|
||||
|
|
@ -204,13 +204,13 @@ void ADTLoader::parseMWMO(const uint8_t* data, size_t size, ADTTerrain& terrain)
|
|||
offset += nameLen + 1;
|
||||
}
|
||||
|
||||
LOG_INFO("Loaded ", terrain.wmoNames.size(), " WMO names from MWMO chunk");
|
||||
LOG_DEBUG("Loaded ", terrain.wmoNames.size(), " WMO names from MWMO chunk");
|
||||
for (size_t i = 0; i < terrain.wmoNames.size(); i++) {
|
||||
LOG_INFO(" WMO[", i, "]: ", terrain.wmoNames[i]);
|
||||
LOG_DEBUG(" WMO[", i, "]: ", terrain.wmoNames[i]);
|
||||
// Flag potential duplicate cathedral models
|
||||
if (terrain.wmoNames[i].find("cathedral") != std::string::npos ||
|
||||
terrain.wmoNames[i].find("Cathedral") != std::string::npos) {
|
||||
LOG_INFO("*** CATHEDRAL WMO FOUND: ", terrain.wmoNames[i]);
|
||||
LOG_DEBUG("*** CATHEDRAL WMO FOUND: ", terrain.wmoNames[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -238,7 +238,7 @@ void ADTLoader::parseMDDF(const uint8_t* data, size_t size, ADTTerrain& terrain)
|
|||
terrain.doodadPlacements.push_back(placement);
|
||||
}
|
||||
|
||||
LOG_INFO("Loaded ", terrain.doodadPlacements.size(), " doodad placements");
|
||||
LOG_DEBUG("Loaded ", terrain.doodadPlacements.size(), " doodad placements");
|
||||
}
|
||||
|
||||
void ADTLoader::parseMODF(const uint8_t* data, size_t size, ADTTerrain& terrain) {
|
||||
|
|
@ -276,7 +276,7 @@ void ADTLoader::parseMODF(const uint8_t* data, size_t size, ADTTerrain& terrain)
|
|||
std::transform(upperName.begin(), upperName.end(), upperName.begin(), ::toupper);
|
||||
|
||||
if (upperName.find("STORMWIND.WMO") != std::string::npos) {
|
||||
LOG_INFO("*** STORMWIND.WMO PLACEMENT:",
|
||||
LOG_DEBUG("*** STORMWIND.WMO PLACEMENT:",
|
||||
" uniqueId=", placement.uniqueId,
|
||||
" pos=(", placement.position[0], ", ", placement.position[1], ", ", placement.position[2], ")",
|
||||
" rot=(", placement.rotation[0], ", ", placement.rotation[1], ", ", placement.rotation[2], ")",
|
||||
|
|
@ -286,7 +286,7 @@ void ADTLoader::parseMODF(const uint8_t* data, size_t size, ADTTerrain& terrain)
|
|||
}
|
||||
}
|
||||
|
||||
LOG_INFO("Loaded ", terrain.wmoPlacements.size(), " WMO placements");
|
||||
LOG_DEBUG("Loaded ", terrain.wmoPlacements.size(), " WMO placements");
|
||||
}
|
||||
|
||||
void ADTLoader::parseMCNK(const uint8_t* data, size_t size, int chunkIndex, ADTTerrain& terrain) {
|
||||
|
|
@ -321,7 +321,7 @@ void ADTLoader::parseMCNK(const uint8_t* data, size_t size, int chunkIndex, ADTT
|
|||
|
||||
// Debug first chunk only
|
||||
if (chunkIndex == 0) {
|
||||
LOG_INFO("MCNK[0] offsets: nLayers=", nLayers,
|
||||
LOG_DEBUG("MCNK[0] offsets: nLayers=", nLayers,
|
||||
" height=", ofsHeight, " normal=", ofsNormal,
|
||||
" layer=", ofsLayer, " alpha=", ofsAlpha,
|
||||
" sizeAlpha=", sizeAlpha, " size=", size,
|
||||
|
|
@ -345,7 +345,7 @@ void ADTLoader::parseMCNK(const uint8_t* data, size_t size, int chunkIndex, ADTT
|
|||
if (possibleMagic == MCVT) {
|
||||
headerSkip = 8; // Skip magic + size
|
||||
if (chunkIndex == 0) {
|
||||
LOG_INFO("MCNK sub-chunks have headers (MCVT magic found at offset ", ofsHeight, ")");
|
||||
LOG_DEBUG("MCNK sub-chunks have headers (MCVT magic found at offset ", ofsHeight, ")");
|
||||
}
|
||||
}
|
||||
parseMCVT(data + ofsHeight + headerSkip, 580, chunk);
|
||||
|
|
@ -434,7 +434,7 @@ void ADTLoader::parseMCLY(const uint8_t* data, size_t size, MapChunk& chunk) {
|
|||
layer.effectId = readUInt32(data, i * 16 + 12);
|
||||
|
||||
if (layerLogCount < 10) {
|
||||
LOG_INFO(" MCLY[", i, "]: texId=", layer.textureId,
|
||||
LOG_DEBUG(" MCLY[", i, "]: texId=", layer.textureId,
|
||||
" flags=0x", std::hex, layer.flags, std::dec,
|
||||
" alphaOfs=", layer.offsetMCAL,
|
||||
" useAlpha=", layer.useAlpha(),
|
||||
|
|
@ -574,7 +574,7 @@ void ADTLoader::parseMH2O(const uint8_t* data, size_t size, ADTTerrain& terrain)
|
|||
}
|
||||
}
|
||||
|
||||
LOG_INFO("Loaded MH2O water data: ", totalLayers, " liquid layers across ", size, " bytes");
|
||||
LOG_DEBUG("Loaded MH2O water data: ", totalLayers, " liquid layers across ", size, " bytes");
|
||||
}
|
||||
|
||||
} // namespace pipeline
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ BLPImage AssetManager::loadTexture(const std::string& path) {
|
|||
return BLPImage();
|
||||
}
|
||||
|
||||
LOG_INFO("Loaded texture: ", normalizedPath, " (", image.width, "x", image.height, ")");
|
||||
LOG_DEBUG("Loaded texture: ", normalizedPath, " (", image.width, "x", image.height, ")");
|
||||
return image;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -967,7 +967,7 @@ void M2Loader::loadAnimFile(const std::vector<uint8_t>& m2Data,
|
|||
patchTrack(db.scale, bone.scale, TrackType::VEC3);
|
||||
}
|
||||
|
||||
core::Logger::getInstance().info("Loaded .anim for sequence ", sequenceIndex,
|
||||
core::Logger::getInstance().debug("Loaded .anim for sequence ", sequenceIndex,
|
||||
" (id=", model.sequences[sequenceIndex].id, "): patched ", patchedTracks, " bone tracks");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cctype>
|
||||
|
||||
#ifdef HAVE_STORMLIB
|
||||
#include <StormLib.h>
|
||||
|
|
@ -21,6 +22,14 @@ typedef void* HANDLE;
|
|||
namespace wowee {
|
||||
namespace pipeline {
|
||||
|
||||
namespace {
|
||||
std::string toLowerCopy(std::string value) {
|
||||
std::transform(value.begin(), value.end(), value.begin(),
|
||||
[](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
MPQManager::MPQManager() = default;
|
||||
|
||||
MPQManager::~MPQManager() {
|
||||
|
|
@ -95,6 +104,10 @@ void MPQManager::shutdown() {
|
|||
|
||||
archives.clear();
|
||||
archiveNames.clear();
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(missingFileMutex_);
|
||||
missingFileWarnings_.clear();
|
||||
}
|
||||
initialized = false;
|
||||
}
|
||||
|
||||
|
|
@ -229,7 +242,7 @@ std::vector<uint8_t> MPQManager::readFile(const std::string& filename) const {
|
|||
}
|
||||
}
|
||||
if (!found) {
|
||||
LOG_WARNING("File not found: ", filename);
|
||||
logMissingFileOnce(filename);
|
||||
return std::vector<uint8_t>();
|
||||
}
|
||||
}
|
||||
|
|
@ -247,10 +260,18 @@ std::vector<uint8_t> MPQManager::readFile(const std::string& filename) const {
|
|||
}
|
||||
}
|
||||
|
||||
LOG_WARNING("File not found: ", filename);
|
||||
logMissingFileOnce(filename);
|
||||
return std::vector<uint8_t>();
|
||||
}
|
||||
|
||||
void MPQManager::logMissingFileOnce(const std::string& filename) const {
|
||||
std::string normalized = toLowerCopy(filename);
|
||||
std::lock_guard<std::mutex> lock(missingFileMutex_);
|
||||
if (missingFileWarnings_.insert(normalized).second) {
|
||||
LOG_WARNING("File not found: ", filename);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t MPQManager::getFileSize(const std::string& filename) const {
|
||||
#ifndef HAVE_STORMLIB
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
// flags and numLod (uint16 each) - skip for now
|
||||
offset += 4;
|
||||
|
||||
core::Logger::getInstance().info("WMO header: nTextures=", model.nTextures, " nGroups=", model.nGroups);
|
||||
core::Logger::getInstance().debug("WMO header: nTextures=", model.nTextures, " nGroups=", model.nGroups);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
// We must map every offset to its texture index.
|
||||
uint32_t texOffset = chunkStart;
|
||||
uint32_t texIndex = 0;
|
||||
core::Logger::getInstance().info("MOTX chunk: ", chunkSize, " bytes");
|
||||
core::Logger::getInstance().debug("MOTX chunk: ", chunkSize, " bytes");
|
||||
while (texOffset < chunkEnd) {
|
||||
uint32_t relativeOffset = texOffset - chunkStart;
|
||||
|
||||
|
|
@ -187,7 +187,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
|
||||
model.materials.push_back(mat);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO materials: ", model.materials.size());
|
||||
core::Logger::getInstance().debug("WMO materials: ", model.materials.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -220,7 +220,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
|
||||
model.groupInfo.push_back(info);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO group info: ", model.groupInfo.size());
|
||||
core::Logger::getInstance().debug("WMO group info: ", model.groupInfo.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -254,7 +254,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
|
||||
model.lights.push_back(light);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO lights: ", model.lights.size());
|
||||
core::Logger::getInstance().debug("WMO lights: ", model.lights.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -303,7 +303,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
|
||||
model.doodads.push_back(doodad);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO doodads: ", model.doodads.size());
|
||||
core::Logger::getInstance().debug("WMO doodads: ", model.doodads.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -320,7 +320,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
|
||||
model.doodadSets.push_back(set);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO doodad sets: ", model.doodadSets.size());
|
||||
core::Logger::getInstance().debug("WMO doodad sets: ", model.doodadSets.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -352,7 +352,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
|
||||
model.portals.push_back(portal);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO portals: ", model.portals.size());
|
||||
core::Logger::getInstance().debug("WMO portals: ", model.portals.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -367,7 +367,7 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
|
|||
ref.padding = read<uint16_t>(wmoData, offset);
|
||||
model.portalRefs.push_back(ref);
|
||||
}
|
||||
core::Logger::getInstance().info("WMO portal refs: ", model.portalRefs.size());
|
||||
core::Logger::getInstance().debug("WMO portal refs: ", model.portalRefs.size());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -429,8 +429,8 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
|||
uint32_t mogpOffset = offset;
|
||||
group.flags = read<uint32_t>(groupData, mogpOffset);
|
||||
bool isInterior = (group.flags & 0x2000) != 0;
|
||||
core::Logger::getInstance().info(" Group flags: 0x", std::hex, group.flags, std::dec,
|
||||
(isInterior ? " (INTERIOR)" : " (exterior)"));
|
||||
core::Logger::getInstance().debug(" Group flags: 0x", std::hex, group.flags, std::dec,
|
||||
(isInterior ? " (INTERIOR)" : " (exterior)"));
|
||||
group.boundingBoxMin.x = read<float>(groupData, mogpOffset);
|
||||
group.boundingBoxMin.y = read<float>(groupData, mogpOffset);
|
||||
group.boundingBoxMin.z = read<float>(groupData, mogpOffset);
|
||||
|
|
@ -493,7 +493,7 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
|||
}
|
||||
else if (subChunkId == 0x4D4F4E52) { // MONR - Normals
|
||||
uint32_t normalCount = subChunkSize / 12;
|
||||
core::Logger::getInstance().info(" MONR: ", normalCount, " normals for ", group.vertices.size(), " vertices");
|
||||
core::Logger::getInstance().debug(" MONR: ", normalCount, " normals for ", group.vertices.size(), " vertices");
|
||||
for (uint32_t i = 0; i < normalCount && i < group.vertices.size(); i++) {
|
||||
group.vertices[i].normal.x = read<float>(groupData, mogpOffset);
|
||||
group.vertices[i].normal.y = read<float>(groupData, mogpOffset);
|
||||
|
|
@ -507,7 +507,7 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
|||
else if (subChunkId == 0x4D4F5456) { // MOTV - Texture coords
|
||||
// Update texture coords for existing vertices
|
||||
uint32_t texCoordCount = subChunkSize / 8;
|
||||
core::Logger::getInstance().info(" MOTV: ", texCoordCount, " tex coords for ", group.vertices.size(), " vertices");
|
||||
core::Logger::getInstance().debug(" MOTV: ", texCoordCount, " tex coords for ", group.vertices.size(), " vertices");
|
||||
for (uint32_t i = 0; i < texCoordCount && i < group.vertices.size(); i++) {
|
||||
group.vertices[i].texCoord.x = read<float>(groupData, mogpOffset);
|
||||
group.vertices[i].texCoord.y = read<float>(groupData, mogpOffset);
|
||||
|
|
@ -519,7 +519,7 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
|||
else if (subChunkId == 0x4D4F4356) { // MOCV - Vertex colors
|
||||
// Update vertex colors
|
||||
uint32_t colorCount = subChunkSize / 4;
|
||||
core::Logger::getInstance().info(" MOCV: ", colorCount, " vertex colors for ", group.vertices.size(), " vertices");
|
||||
core::Logger::getInstance().debug(" MOCV: ", colorCount, " vertex colors for ", group.vertices.size(), " vertices");
|
||||
for (uint32_t i = 0; i < colorCount && i < group.vertices.size(); i++) {
|
||||
uint8_t b = read<uint8_t>(groupData, mogpOffset);
|
||||
uint8_t g = read<uint8_t>(groupData, mogpOffset);
|
||||
|
|
@ -555,7 +555,7 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
|||
|
||||
static int batchLogCount = 0;
|
||||
if (batchLogCount < 15) {
|
||||
core::Logger::getInstance().info(" Batch[", i, "]: start=", batch.startIndex,
|
||||
core::Logger::getInstance().debug(" Batch[", i, "]: start=", batch.startIndex,
|
||||
" count=", batch.indexCount, " verts=[", batch.startVertex, "-",
|
||||
batch.lastVertex, "] mat=", (int)batch.materialId, " flags=", (int)batch.flags);
|
||||
batchLogCount++;
|
||||
|
|
@ -633,10 +633,10 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
|||
group.batches.push_back(batch);
|
||||
}
|
||||
|
||||
core::Logger::getInstance().info("WMO group ", groupIndex, " loaded: ",
|
||||
group.vertices.size(), " vertices, ",
|
||||
group.indices.size(), " indices, ",
|
||||
group.batches.size(), " batches");
|
||||
core::Logger::getInstance().debug("WMO group ", groupIndex, " loaded: ",
|
||||
group.vertices.size(), " vertices, ",
|
||||
group.indices.size(), " indices, ",
|
||||
group.batches.size(), " batches");
|
||||
return !group.vertices.empty() && !group.indices.empty();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue