diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-11-01 14:26:48 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-11-01 14:26:48 +0100 |
| commit | 157a16d7908c6a6d46ce34a0d067ad56f22d6f4f (patch) | |
| tree | 0701bf63ef50bd443c381867b9db02c0c5f90124 /src/tools | |
| parent | 0b4f02c00212add794467a6ef3579ecda8faa8eb (diff) | |
Tools/vmap_extractor: Preserve destructible models to use them in mmaps_generator
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/mmaps_generator/PathGenerator.cpp | 1 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/adtfile.cpp | 18 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/vmapexport.h | 3 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wdtfile.cpp | 17 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 16 |
5 files changed, 31 insertions, 24 deletions
diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index b090678e83a..af4eb816626 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -68,6 +68,7 @@ namespace MMAP auto itr = _liquidTypes.find(liquidId); return itr != _liquidTypes.end() ? (1 << itr->second) : 0; }; + vmgr->LoadPathOnlyModels = true; return vmgr; } } diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index 2db74603093..01c1f3f5b53 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -207,18 +207,18 @@ bool ADTFile::init(uint32 map_num, uint32 originalMapId) { ADT::MODF mapObjDef; _file.read(&mapObjDef, sizeof(ADT::MODF)); - if (!(mapObjDef.Flags & 0x8)) - { - MapObject::Extract(mapObjDef, WmoInstanceNames[mapObjDef.Id].c_str(), false, map_num, originalMapId, dirfile.get(), dirfileCache); - Doodad::ExtractSet(WmoDoodads[WmoInstanceNames[mapObjDef.Id]], mapObjDef, false, map_num, originalMapId, dirfile.get(), dirfileCache); - } - else + + std::string fileName; + if (mapObjDef.Flags & 0x8) { - std::string fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id); + fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id); ExtractSingleWmo(fileName); - MapObject::Extract(mapObjDef, fileName.c_str(), false, map_num, originalMapId, dirfile.get(), dirfileCache); - Doodad::ExtractSet(WmoDoodads[fileName], mapObjDef, false, map_num, originalMapId, dirfile.get(), dirfileCache); } + else + fileName = WmoInstanceNames[mapObjDef.Id]; + + MapObject::Extract(mapObjDef, fileName.c_str(), false, map_num, originalMapId, dirfile.get(), dirfileCache); + Doodad::ExtractSet(WmoDoodads[fileName], mapObjDef, false, map_num, originalMapId, dirfile.get(), dirfileCache); } WmoInstanceNames.clear(); diff --git a/src/tools/vmap4_extractor/vmapexport.h b/src/tools/vmap4_extractor/vmapexport.h index 1aba56a44c1..c6a88518083 100644 --- a/src/tools/vmap4_extractor/vmapexport.h +++ b/src/tools/vmap4_extractor/vmapexport.h @@ -26,7 +26,8 @@ enum ModelInstanceFlags { MOD_HAS_BOUND = 1 << 0, - MOD_PARENT_SPAWN = 1 << 1 + MOD_PARENT_SPAWN = 1 << 1, + MOD_PATH_ONLY = 1 << 2 }; // flags of each model diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp index de806159ba0..f507d14b1a7 100644 --- a/src/tools/vmap4_extractor/wdtfile.cpp +++ b/src/tools/vmap4_extractor/wdtfile.cpp @@ -116,18 +116,17 @@ bool WDTFile::init(uint32 mapId) { ADT::MODF mapObjDef; _file.read(&mapObjDef, sizeof(ADT::MODF)); - if (!(mapObjDef.Flags & 0x8)) + std::string fileName; + if (mapObjDef.Flags & 0x8) { - MapObject::Extract(mapObjDef, _wmoNames[mapObjDef.Id].c_str(), true, mapId, mapId, dirfile.get(), nullptr); - Doodad::ExtractSet(WmoDoodads[_wmoNames[mapObjDef.Id]], mapObjDef, true, mapId, mapId, dirfile.get(), nullptr); - } - else - { - std::string fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id); + fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id); ExtractSingleWmo(fileName); - MapObject::Extract(mapObjDef, fileName.c_str(), true, mapId, mapId, dirfile.get(), nullptr); - Doodad::ExtractSet(WmoDoodads[fileName], mapObjDef, true, mapId, mapId, dirfile.get(), nullptr); } + else + fileName = _wmoNames[mapObjDef.Id]; + + MapObject::Extract(mapObjDef, fileName.c_str(), true, mapId, mapId, dirfile.get(), nullptr); + Doodad::ExtractSet(WmoDoodads[fileName], mapObjDef, true, mapId, mapId, dirfile.get(), nullptr); } } } diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 001abad4907..77985aefacf 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -587,11 +587,6 @@ WMOGroup::~WMOGroup() void MapObject::Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, bool isGlobalWmo, uint32 mapID, uint32 originalMapId, FILE* pDirfile, std::vector<ADTOutputCache>* dirfileCache) { - // destructible wmo, do not dump. we can handle the vmap for these - // in dynamic tree (gameobject vmaps) - if ((mapObjDef.Flags & 0x1) != 0) - return; - //-----------add_in _dir_file---------------- std::string tempname = Trinity::StringFormat("{}/{}", szWorkDirWmo, WmoInstName); @@ -630,6 +625,17 @@ void MapObject::Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, boo uint8 nameSet = mapObjDef.NameSet; if (mapID != originalMapId) flags |= MOD_PARENT_SPAWN; + if (mapObjDef.Flags & 0x1) + { + flags |= MOD_PATH_ONLY; + //if (FILE* destro = fopen("Buildings/destructible.log", "a")) + //{ + // fprintf(destro, R"( { fileName: "%s", fileDataID: %u, mapId: %u, uniqueId: %u, pos: { x: %f, y: %f, z: %f }, rot: { x: %f, y: %f, z: %f } },)" "\n", + // WmoInstName, mapObjDef.Id, mapID, mapObjDef.UniqueId, 533.33333f * 32 - mapObjDef.Position.z, 533.33333f * 32 - mapObjDef.Position.x, mapObjDef.Position.y, + // mapObjDef.Rotation.x, mapObjDef.Rotation.y, mapObjDef.Rotation.z); + // fclose(destro); + //} + } //write Flags, NameSet, UniqueId, Pos, Rot, Scale, Bound_lo, Bound_hi, name fwrite(&flags, sizeof(uint8), 1, pDirfile); |
