From cdb2c08e3f253071fd1c4b14fd262f8f9e7fca83 Mon Sep 17 00:00:00 2001 From: Foks Date: Thu, 6 Nov 2008 06:14:46 +0300 Subject: [PATCH] Multi-locale DBC extracting Signed-off-by: Foks Small related code fixed and cleanups. Signed-off-by: VladimirMangos --- contrib/extractor/System.cpp | 159 ++++++++++++++++------------ contrib/extractor/ad.exe | Bin 167936 -> 167936 bytes contrib/extractor/libmpq/mpq.cpp | 2 +- contrib/extractor/libmpq/mpq.h | 2 +- contrib/extractor/libmpq/parser.cpp | 2 +- contrib/extractor/mpq_libmpq.cpp | 2 +- contrib/extractor/mpq_libmpq.h | 9 +- 7 files changed, 101 insertions(+), 75 deletions(-) diff --git a/contrib/extractor/System.cpp b/contrib/extractor/System.cpp index 090fc557e..39bf1d5b1 100644 --- a/contrib/extractor/System.cpp +++ b/contrib/extractor/System.cpp @@ -39,7 +39,7 @@ enum Extract }; int extract = EXTRACT_MAP | EXTRACT_DBC; -static char* const langs[]={"deDE", "enGB", "enUS", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; +static char* const langs[]={"enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; #define LANG_COUNT 12 #define ADT_RES 64 @@ -167,11 +167,11 @@ void ExtractMapsFromMpq() path += "/maps/"; CreateDir(path); - for(int x = 0; x < ADT_RES; ++x) + for(unsigned int x = 0; x < ADT_RES; ++x) { - for(int y = 0; y < ADT_RES; ++y) + for(unsigned int y = 0; y < ADT_RES; ++y) { - for(int z = 0; z < map_count; ++z) + for(unsigned int z = 0; z < map_count; ++z) { sprintf(mpq_filename,"World\\Maps\\%s\\%s_%u_%u.adt",map_ids[z].name,map_ids[z].name,x,y); sprintf(output_filename,"%s/maps/%03u%02u%02u.map",output_path,map_ids[z].id,y,x); @@ -189,7 +189,7 @@ void ExtractMapsFromMpq() //bool WMO(char* filename); -void ExtractDBCFiles() +void ExtractDBCFiles(int locale, bool basicLocale) { printf("Extracting dbc files...\n"); @@ -198,26 +198,30 @@ void ExtractDBCFiles() // get DBC file list for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i) { - vector files = (*i)->GetFileList(); + vector files; + (*i)->GetFileListTo(files); for (vector::iterator iter = files.begin(); iter != files.end(); ++iter) if (iter->rfind(".dbc") == iter->length() - strlen(".dbc")) dbcfiles.insert(*iter); } - std::string path = output_path; + string path = output_path; path += "/dbc/"; CreateDir(path); + if(!basicLocale) + { + path += langs[locale]; + path += "/"; + CreateDir(path); + } // extract DBCs int count = 0; for (set::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter) { - string filename = output_path; - filename += "/dbc/"; + string filename = path; filename += (iter->c_str() + strlen("DBFilesClient\\")); - //cout << filename << endl; - FILE *output=fopen(filename.c_str(),"wb"); if(!output) { @@ -231,27 +235,10 @@ void ExtractDBCFiles() fclose(output); ++count; } - printf("Extracted %u DBC files\n", count); + printf("Extracted %u DBC files\n\n", count); } -int GetLocale() -{ - for (int i = 0; i < LANG_COUNT; i++) - { - char tmp1[512]; - sprintf(tmp1, "%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]); - if (FileExists(tmp1)) - { - printf("Detected locale: %s\n", langs[i]); - return i; - } - } - - printf("Could not detect locale.\n"); - return -1; -} - -void LoadMPQFiles(int const locale) +void LoadLocaleMPQFiles(int const locale) { char filename[512]; @@ -265,56 +252,98 @@ void LoadMPQFiles(int const locale) sprintf(ext, "-%i", i); sprintf(filename,"%s/Data/%s/patch-%s%s.MPQ",input_path,langs[locale],langs[locale],ext); - if(!FileExists(filename)) - break; - new MPQArchive(filename); - } - - //need those files only if extract maps - if(extract & EXTRACT_MAP) - { - sprintf(filename,"%s/Data/common.MPQ",input_path); - new MPQArchive(filename); - sprintf(filename,"%s/Data/expansion.MPQ",input_path); - new MPQArchive(filename); - - for(int i = 1; i < 5; ++i) - { - char ext[3] = ""; - if(i > 1) - sprintf(ext, "-%i", i); - - sprintf(filename,"%s/Data/patch%s.MPQ",input_path,ext); - if(!FileExists(filename)) - break; + if(FileExists(filename)) new MPQArchive(filename); - } } } +void LoadCommonMPQFiles() +{ + char filename[512]; + + sprintf(filename,"%s/Data/common.MPQ",input_path); + new MPQArchive(filename); + sprintf(filename,"%s/Data/expansion.MPQ",input_path); + new MPQArchive(filename); + + for(int i = 1; i < 5; ++i) + { + char ext[3] = ""; + if(i > 1) + sprintf(ext, "-%i", i); + + sprintf(filename,"%s/Data/patch%s.MPQ",input_path,ext); + if(FileExists(filename)) + new MPQArchive(filename); + } +} + +inline void CloseMPQFiles() +{ + for(ArchiveSet::iterator j = gOpenArchives.begin(); j != gOpenArchives.end();++j) (*j)->close(); + gOpenArchives.clear(); +} + int main(int argc, char * arg[]) { printf("Map & DBC Extractor\n"); - printf("===================\n"); + printf("===================\n\n"); HandleArgs(argc, arg); - int const locale = GetLocale(); - if(locale < 0) - return 1; + int FirstLocale = -1; - LoadMPQFiles(locale); + for (int i = 0; i < LANG_COUNT; i++) + { + char tmp1[512]; + sprintf(tmp1, "%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]); + if (FileExists(tmp1)) + { + printf("Detected locale: %s\n", langs[i]); - if(extract & EXTRACT_DBC) - ExtractDBCFiles(); + //Open MPQs + LoadLocaleMPQFiles(i); - if(extract & EXTRACT_MAP) + if((extract & EXTRACT_DBC) == 0) + { + FirstLocale=i; + break; + } + + //Extract DBC files + if(FirstLocale<0) + { + ExtractDBCFiles(i, true); + FirstLocale = i; + } + else + ExtractDBCFiles(i, false); + + //Close MPQs + CloseMPQFiles(); + } + } + + if(FirstLocale<0) + { + printf("No locales detected\n"); + return 0; + } + + if (extract & EXTRACT_MAP) + { + printf("Using locale: %s\n", langs[FirstLocale]); + + // Open MPQs + LoadLocaleMPQFiles(FirstLocale); + LoadCommonMPQFiles(); + + // Extract maps ExtractMapsFromMpq(); - //Close MPQs - for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i) - (*i)->close(); - gOpenArchives.clear(); + // Close MPQs + CloseMPQFiles(); + } return 0; } diff --git a/contrib/extractor/ad.exe b/contrib/extractor/ad.exe index e9606e8e0eb6c359622315eccfc671674d28af96..1f2c45dfc5628396d14318608d799122738f8f4e 100755 GIT binary patch delta 15611 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 delta 16196 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 GetFileList() { - vector filelist; - + void GetFileListTo(vector& filelist) { mpq_hash hash = GetHashEntry("(listfile)"); uint32 blockindex = hash.blockindex; if ((blockindex == 0xFFFFFFFF) || (blockindex == 0)) - return filelist; + return; uint32 size = libmpq_file_info(&mpq_a, LIBMPQ_FILE_UNCOMPRESSED_SIZE, blockindex); char *buffer = new char[size]; @@ -79,8 +77,7 @@ public: token = strtok(NULL, seps); } - delete buffer; - return filelist; + delete[] buffer; } }; typedef std::deque ArchiveSet;