AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
gameobject_extract.cpp File Reference
#include "adtfile.h"
#include "dbcfile.h"
#include "model.h"
#include "vmapexport.h"
#include <algorithm>
#include <cstdio>

Go to the source code of this file.

Functions

bool ExtractSingleModel (std::string &fname)
 
void ExtractGameobjectModels ()
 

Function Documentation

◆ ExtractGameobjectModels()

void ExtractGameobjectModels ( )
Todo:
: extract .mdl files, if needed
61{
62 printf("Extracting GameObject models...");
63 DBCFile dbc("DBFilesClient\\GameObjectDisplayInfo.dbc");
64 if (!dbc.open())
65 {
66 printf("Fatal error: Invalid GameObjectDisplayInfo.dbc file format!\n");
67 exit(1);
68 }
69
70 std::string basepath = szWorkDirWmo;
71 basepath += "/";
72 std::string path;
73
74 std::string modelListPath = basepath + "temp_gameobject_models";
75 FILE* model_list = fopen(modelListPath.c_str(), "wb");
76 if (!model_list)
77 {
78 printf("Fatal error: Could not open file %s\n", modelListPath.c_str());
79 return;
80 }
81
82 fwrite(VMAP::RAW_VMAP_MAGIC, 1, 8, model_list);
83
84 for (const auto & it : dbc)
85 {
86 path = it.getString(1);
87
88 if (path.length() < 4)
89 continue;
90
91 fixnamen((char*)path.c_str(), path.size());
92 char* name = GetPlainName((char*)path.c_str());
93 fixname2(name, strlen(name));
94
95 char* ch_ext = GetExtension(name);
96 if (!ch_ext)
97 continue;
98
99 strToLower(ch_ext);
100
101 bool result = false;
102 uint8 isWmo = 0;
103 if (!strcmp(ch_ext, ".wmo"))
104 {
105 isWmo = 1;
106 result = ExtractSingleWmo(path);
107 }
108 else if (!strcmp(ch_ext, ".mdl"))
109 {
111 continue;
112 }
113 else //if (!strcmp(ch_ext, ".mdx") || !strcmp(ch_ext, ".m2"))
114 {
115 result = ExtractSingleModel(path);
116 }
117
118 if (result)
119 {
120 uint32 displayId = it.getUInt(0);
121 uint32 path_length = strlen(name);
122 fwrite(&displayId, sizeof(uint32), 1, model_list);
123 fwrite(&isWmo, sizeof(uint8), 1, model_list);
124 fwrite(&path_length, sizeof(uint32), 1, model_list);
125 fwrite(name, sizeof(char), path_length, model_list);
126 }
127 }
128
129 fclose(model_list);
130
131 printf("Done!\n");
132}
ModelList model_list
Definition: GameObjectModel.cpp:43
std::uint8_t uint8
Definition: Define.h:110
std::uint32_t uint32
Definition: Define.h:108
void strToLower(std::string &str)
Definition: Util.cpp:384
void fixnamen(char *name, size_t len)
Definition: adtfile.cpp:45
void fixname2(char *name, size_t len)
Definition: adtfile.cpp:63
char const * GetPlainName(char const *FileName)
Definition: adtfile.cpp:27
char * GetExtension(char *FileName)
Definition: adtfile.cpp:73
bool ExtractSingleModel(std::string &fname)
Definition: gameobject_extract.cpp:25
char const * szWorkDirWmo
Definition: vmapexport.cpp:68
bool ExtractSingleWmo(std::string &fname)
Definition: vmapexport.cpp:98
const char RAW_VMAP_MAGIC[]
Definition: VMapDefinitions.h:27
Definition: dbcfile.h:26

References ExtractSingleModel(), ExtractSingleWmo(), fixname2(), fixnamen(), GetExtension(), GetPlainName(), model_list, DBCFile::open(), VMAP::RAW_VMAP_MAGIC, strToLower(), and szWorkDirWmo.

Referenced by main().

◆ ExtractSingleModel()

bool ExtractSingleModel ( std::string &  fname)
26{
27 if (fname.length() < 4)
28 return false;
29
30 std::string extension = fname.substr(fname.length() - 4, 4);
31 if (extension == ".mdx" || extension == ".MDX" || extension == ".mdl" || extension == ".MDL")
32 {
33 // replace .mdx -> .m2
34 fname.erase(fname.length() - 2, 2);
35 fname.append("2");
36 }
37 // >= 3.1.0 ADT MMDX section store filename.m2 filenames for corresponded .m2 file
38 // nothing do
39
40 std::string originalName = fname;
41
42 char* name = GetPlainName((char*)fname.c_str());
43 fixnamen(name, strlen(name));
44 fixname2(name, strlen(name));
45
46 std::string output(szWorkDirWmo);
47 output += "/";
48 output += name;
49
50 if (FileExists(output.c_str()))
51 return true;
52
53 Model mdl(originalName);
54 if (!mdl.open())
55 return false;
56
57 return mdl.ConvertToVMAPModel(output.c_str());
58}
bool FileExists(const char *FileName)
Definition: System.cpp:143
Definition: model.h:33

References Model::ConvertToVMAPModel(), FileExists(), fixname2(), fixnamen(), GetPlainName(), Model::open(), and szWorkDirWmo.

Referenced by ExtractGameobjectModels(), ADTFile::init(), and WMORoot::open().