diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-06 00:04:19 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-03-06 00:04:19 +0100 |
commit | 382e76f02df5a41c2ba1d964ac6d9258e68265e6 (patch) | |
tree | cd035dd536b5c9502c0d7dbbb0a5b2edfaab2759 /src | |
parent | 1aa04cabe1e4ceb093b3dfed780adb5ed827cbf9 (diff) |
Tools/vmap_extractor: Preserve UniqueId from MODF adt chunks in final vmap output (used in db2 files and packets)
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/vmap4_extractor/model.cpp | 4 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 7 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/vmapexport.h | 2 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 2 |
4 files changed, 9 insertions, 6 deletions
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index 9c8d3f5ac6b..f49df2ea119 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -176,7 +176,7 @@ void Doodad::Extract(ADT::MDDF const& doodadDef, char const* ModelInstName, uint Vec3D position = fixCoords(doodadDef.Position); uint8 nameSet = 0;// not used for models - uint32 uniqueId = GenerateUniqueObjectId(doodadDef.UniqueId, 0); + uint32 uniqueId = GenerateUniqueObjectId(doodadDef.UniqueId, 0, false); uint8 tcflags = MOD_M2; if (mapID != originalMapId) tcflags |= MOD_PARENT_SPAWN; @@ -284,7 +284,7 @@ void Doodad::ExtractSet(WMODoodadData const& doodadData, ADT::MODF const& wmo, b rotation.y = G3D::toDegrees(rotation.y); uint8 nameSet = 0; // not used for models - uint32 uniqueId = GenerateUniqueObjectId(wmo.UniqueId, doodadId); + uint32 uniqueId = GenerateUniqueObjectId(wmo.UniqueId, doodadId, false); uint8 tcflags = MOD_M2; if (mapID != originalMapId) tcflags |= MOD_PARENT_SPAWN; diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 759750bcfd0..d8444bc6b84 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -164,11 +164,14 @@ uint32 GetInstalledLocalesMask() return 0; } +uint32 uniqueObjectIdGenerator = std::numeric_limits<uint32>::max() - 1; std::map<std::pair<uint32, uint16>, uint32> uniqueObjectIds; -uint32 GenerateUniqueObjectId(uint32 clientId, uint16 clientDoodadId) +uint32 GenerateUniqueObjectId(uint32 clientId, uint16 clientDoodadId, bool isWmo) { - return uniqueObjectIds.emplace(std::make_pair(clientId, clientDoodadId), uniqueObjectIds.size() + 1).first->second; + // WMO client ids must be preserved, they are used in DB2 files + uint32 newId = isWmo ? clientId : uniqueObjectIdGenerator--; + return uniqueObjectIds.emplace(std::make_pair(clientId, clientDoodadId), newId).first->second; } // Local testing functions diff --git a/src/tools/vmap4_extractor/vmapexport.h b/src/tools/vmap4_extractor/vmapexport.h index fe977cb639a..611e9711604 100644 --- a/src/tools/vmap4_extractor/vmapexport.h +++ b/src/tools/vmap4_extractor/vmapexport.h @@ -34,7 +34,7 @@ struct WMODoodadData; extern const char * szWorkDirWmo; extern std::unordered_map<std::string, WMODoodadData> WmoDoodads; -uint32 GenerateUniqueObjectId(uint32 clientId, uint16 clientDoodadId); +uint32 GenerateUniqueObjectId(uint32 clientId, uint16 clientDoodadId, bool isWmo); bool FileExists(const char * file); diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 555559cfb95..de53598c3d5 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -617,7 +617,7 @@ void MapObject::Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, boo float scale = 1.0f; if (mapObjDef.Flags & 0x4) scale = mapObjDef.Scale / 1024.0f; - uint32 uniqueId = GenerateUniqueObjectId(mapObjDef.UniqueId, 0); + uint32 uniqueId = GenerateUniqueObjectId(mapObjDef.UniqueId, 0, true); uint8 flags = MOD_HAS_BOUND; uint8 nameSet = mapObjDef.NameSet; if (mapID != originalMapId) |