aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tools/vmap4_extractor/adtfile.cpp44
-rw-r--r--src/tools/vmap4_extractor/adtfile.h10
-rw-r--r--src/tools/vmap4_extractor/gameobject_extract.cpp20
-rw-r--r--src/tools/vmap4_extractor/model.cpp6
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp4
-rw-r--r--src/tools/vmap4_extractor/wdtfile.cpp4
-rw-r--r--src/tools/vmap4_extractor/wmo.cpp4
7 files changed, 44 insertions, 48 deletions
diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp
index 17b00514974..c07757295b8 100644
--- a/src/tools/vmap4_extractor/adtfile.cpp
+++ b/src/tools/vmap4_extractor/adtfile.cpp
@@ -40,31 +40,31 @@ char* GetPlainName(char* FileName)
return FileName;
}
-void fixnamen(char* name, size_t len)
+void FixNameCase(char* name, size_t len)
{
- if (len < 3)
- return;
+ char* ptr = name + len - 1;
- for (size_t i = 0; i < len - 3; i++)
+ //extension in lowercase
+ for (; *ptr != '.'; --ptr)
+ *ptr |= 0x20;
+
+ for (; ptr >= name; --ptr)
{
- if (i > 0 && name[i] >= 'A' && name[i] <= 'Z' && isalpha(name[i-1]))
- name[i] |= 0x20;
- else if ((i == 0 || !isalpha(name[i-1])) && name[i]>='a' && name[i]<='z')
- name[i] &= ~0x20;
+ if (ptr > name && *ptr >= 'A' && *ptr <= 'Z' && isalpha(*(ptr - 1)))
+ *ptr |= 0x20;
+ else if ((ptr == name || !isalpha(*(ptr - 1))) && *ptr >= 'a' && *ptr <= 'z')
+ *ptr &= ~0x20;
}
- //extension in lowercase
- for (size_t i = len - 3; i < len; i++)
- name[i] |= 0x20;
}
-void fixname2(char* name, size_t len)
+void FixNameSpaces(char* name, size_t len)
{
if (len < 3)
return;
for (size_t i = 0; i < len - 3; i++)
if (name[i] == ' ')
- name[i] = '_';
+ name[i] = '_';
}
char* GetExtension(char* FileName)
@@ -114,21 +114,22 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
{
if (size)
{
- char *buf = new char[size];
+ char* buf = new char[size];
_file.read(buf, size);
char *p = buf;
while (p < buf + size)
{
- fixnamen(p, strlen(p));
+ std::string path(p);
+
char* s = GetPlainName(p);
- fixname2(s, strlen(s));
+ FixNameCase(s, strlen(s));
+ FixNameSpaces(s, strlen(s));
ModelInstanceNames.emplace_back(s);
- std::string path(p);
ExtractSingleModel(path);
- p = p+strlen(p)+1;
+ p += strlen(p) + 1;
}
delete[] buf;
}
@@ -145,8 +146,9 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
std::string path(p);
char* s = GetPlainName(p);
- fixnamen(s, strlen(s));
- fixname2(s, strlen(s));
+ FixNameCase(s, strlen(s));
+ FixNameSpaces(s, strlen(s));
+
WmoInstanceNames.emplace_back(s);
ExtractSingleWmo(path);
@@ -184,9 +186,11 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
}
}
}
+
//======================
_file.seek(nextpos);
}
+
_file.close();
fclose(dirfile);
return true;
diff --git a/src/tools/vmap4_extractor/adtfile.h b/src/tools/vmap4_extractor/adtfile.h
index d762e8aebe5..559d696b697 100644
--- a/src/tools/vmap4_extractor/adtfile.h
+++ b/src/tools/vmap4_extractor/adtfile.h
@@ -72,11 +72,11 @@ public:
*/
};
-const char * GetPlainName(const char * FileName);
-char * GetPlainName(char * FileName);
-char * GetExtension(char * FileName);
-void fixnamen(char *name, size_t len);
-void fixname2(char *name, size_t len);
+char const* GetPlainName(char const* FileName);
+char* GetPlainName(char* FileName);
+char* GetExtension(char* FileName);
+void FixNameCase(char* name, size_t len);
+void FixNameSpaces(char* name, size_t len);
//void fixMapNamen(char *name, size_t len);
#endif
diff --git a/src/tools/vmap4_extractor/gameobject_extract.cpp b/src/tools/vmap4_extractor/gameobject_extract.cpp
index a025574eedb..d446483c0c7 100644
--- a/src/tools/vmap4_extractor/gameobject_extract.cpp
+++ b/src/tools/vmap4_extractor/gameobject_extract.cpp
@@ -31,18 +31,15 @@ bool ExtractSingleModel(std::string& fname)
std::string extension = fname.substr(fname.length() - 4, 4);
if (extension == ".mdx" || extension == ".MDX" || extension == ".mdl" || extension == ".MDL")
{
- // replace .mdx -> .m2
- fname.erase(fname.length()-2,2);
+ fname.erase(fname.length() - 2, 2);
fname.append("2");
}
- // >= 3.1.0 ADT MMDX section store filename.m2 filenames for corresponded .m2 file
- // nothing do
std::string originalName = fname;
char* name = GetPlainName((char*)fname.c_str());
- fixnamen(name, strlen(name));
- fixname2(name, strlen(name));
+ FixNameCase(name, strlen(name));
+ FixNameSpaces(name, strlen(name));
std::string output(szWorkDirWmo);
output += "/";
@@ -89,9 +86,9 @@ void ExtractGameobjectModels()
if (path.length() < 4)
continue;
- fixnamen((char*)path.c_str(), path.size());
+ FixNameCase((char*)path.c_str(), path.size());
char * name = GetPlainName((char*)path.c_str());
- fixname2(name, strlen(name));
+ FixNameSpaces(name, strlen(name));
char * ch_ext = GetExtension(name);
if (!ch_ext)
@@ -106,15 +103,10 @@ void ExtractGameobjectModels()
isWmo = 1;
result = ExtractSingleWmo(path);
}
- else if (!strcmp(ch_ext, ".mdl"))
- {
- // TODO: extract .mdl files, if needed
+ else if (!strcmp(ch_ext, ".mdl")) // TODO: extract .mdl files, if needed
continue;
- }
else //if (!strcmp(ch_ext, ".mdx") || !strcmp(ch_ext, ".m2"))
- {
result = ExtractSingleModel(path);
- }
if (result)
{
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp
index 49e812916b3..431428d9e1b 100644
--- a/src/tools/vmap4_extractor/model.cpp
+++ b/src/tools/vmap4_extractor/model.cpp
@@ -47,7 +47,7 @@ bool Model::open()
_unload();
memcpy(&header, f.getBuffer(), sizeof(ModelHeader));
- if(header.nBoundingTriangles > 0)
+ if (header.nBoundingTriangles > 0)
{
f.seek(0);
f.seekRelative(header.ofsBoundingVertices);
@@ -201,8 +201,8 @@ void Doodad::ExtractSet(WMODoodadData const& doodadData, ADT::MODF const& wmo, u
std::string ModelInstName = GetPlainName(&doodadData.Paths[doodad.NameIndex]);
uint32 nlen = ModelInstName.length();
- fixnamen(ModelInstName.data(), nlen);
- fixname2(ModelInstName.data(), nlen);
+ FixNameCase(ModelInstName.data(), nlen);
+ FixNameSpaces(ModelInstName.data(), nlen);
if (ModelInstName.ends_with(".mdx") || ModelInstName.ends_with(".mdl"))
ModelInstName.replace(ModelInstName.length() - 2, 2, "2");
diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp
index 9c6270d23d4..60e515fe099 100644
--- a/src/tools/vmap4_extractor/vmapexport.cpp
+++ b/src/tools/vmap4_extractor/vmapexport.cpp
@@ -88,8 +88,8 @@ bool ExtractSingleWmo(std::string& fname)
std::string originalName = fname;
char* plain_name = GetPlainName(&fname[0]);
- fixnamen(plain_name, strlen(plain_name));
- fixname2(plain_name, strlen(plain_name));
+ FixNameCase(plain_name, strlen(plain_name));
+ FixNameSpaces(plain_name, strlen(plain_name));
std::string szLocalFile = Trinity::StringFormat("{}/{}", szWorkDirWmo, plain_name);
if (FileExists(szLocalFile.c_str()))
diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp
index 3071926e035..c0a206d31fb 100644
--- a/src/tools/vmap4_extractor/wdtfile.cpp
+++ b/src/tools/vmap4_extractor/wdtfile.cpp
@@ -82,8 +82,8 @@ bool WDTFile::init(uint32 mapId)
std::string path(p);
char* s = wdtGetPlainName(p);
- fixnamen(s, strlen(s));
- fixname2(s, strlen(s));
+ FixNameCase(s, strlen(s));
+ FixNameSpaces(s, strlen(s));
p = p + strlen(p) + 1;
_wmoNames.push_back(s);
diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp
index 4e7e0eb2e2d..5bd1f642061 100644
--- a/src/tools/vmap4_extractor/wmo.cpp
+++ b/src/tools/vmap4_extractor/wmo.cpp
@@ -89,8 +89,8 @@ bool WMORoot::open()
std::string path = ptr;
char* s = GetPlainName(ptr);
- fixnamen(s, strlen(s));
- fixname2(s, strlen(s));
+ FixNameCase(s, strlen(s));
+ FixNameSpaces(s, strlen(s));
uint32 doodadNameIndex = ptr - f.getPointer();
ptr += path.length() + 1;