本文整理汇总了C++中DBCFile::getRecord方法的典型用法代码示例。如果您正苦于以下问题:C++ DBCFile::getRecord方法的具体用法?C++ DBCFile::getRecord怎么用?C++ DBCFile::getRecord使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DBCFile
的用法示例。
在下文中一共展示了DBCFile::getRecord方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sizeof
SkillNameMgr::SkillNameMgr()
{
DBCFile SkillDBC;
if(!SkillDBC.open(format("%s/SkillLine.dbc", sWorld.DBCPath.c_str()).c_str()))
{
Log.Error( "SkillNameMgr", "Cannot find file %s/SkillLine.dbc", sWorld.DBCPath.c_str());
return;
}
//This will become the size of the skill name lookup table
maxskill = SkillDBC.getRecord(SkillDBC.getRecordCount()-1).getUInt(0);
//SkillNames = (char **) malloc(maxskill * sizeof(char *));
SkillNames = new char * [maxskill+1]; //(+1, arrays count from 0.. not 1.)
memset(SkillNames,0,(maxskill+1) * sizeof(char *));
for(uint32 i = 0; i < SkillDBC.getRecordCount(); i++)
{
unsigned int SkillID = SkillDBC.getRecord(i).getUInt(0);
const char *SkillName = SkillDBC.getRecord(i).getString(3);
SkillNames[SkillID] = new char [strlen(SkillName)+1];
//When the DBCFile gets cleaned up, so does the record data, so make a copy of it..
memcpy(SkillNames[SkillID],SkillName,strlen(SkillName)+1);
}
}
示例2: ReadLiquidTypeTableDBC
// copied from contrib/extractor/System.cpp
void ReadLiquidTypeTableDBC()
{
switch(expansion)
{
case 0:
{
printf("Setting liquid types...");
LiqType = new uint16[21];
memset(LiqType, 0xff, (21)*sizeof(uint16));
LiqType[1] = 0;
LiqType[2] = 1;
LiqType[3] = 2;
LiqType[4] = 3;
LiqType[21] = 3;
printf("Done! (5 LiqTypes set)\n");
}break;
case 1:
{
printf("Setting liquid types...");
LiqType = new uint16[62];
memset(LiqType, 0xff, (62)*sizeof(uint16));
LiqType[1] = 0;
LiqType[2] = 1;
LiqType[3] = 2;
LiqType[4] = 3;
LiqType[21] = 3;
LiqType[41] = 0;
LiqType[61] = 0;
printf("Done! (7 LiqTypes set)\n");
}break;
default:
{
printf("Read LiquidType.dbc file...");
DBCFile* dbc = new DBCFile("DBFilesClient\\LiquidType.dbc");
dbc->open();
size_t LiqType_count = dbc->getRecordCount();
size_t LiqType_maxid = dbc->getRecord(LiqType_count - 1).getUInt(0);
LiqType = new uint16[LiqType_maxid + 1];
memset(LiqType, 0xff, (LiqType_maxid + 1) * sizeof(uint16));
for(uint32 x = 0; x < LiqType_count; ++x)
LiqType[dbc->getRecord(x).getUInt(0)] = dbc->getRecord(x).getUInt(3);
printf("Done! (%u LiqTypes loaded)\n", LiqType_count);
}break;
}
}
示例3:
LfgMgr::LfgMgr()
{
DBCFile f;
if(f.open("DBC/LFGDungeons.dbc"))
{
for(uint32 i = 0; i < f.getRecordCount(); ++i)
{
DBCFile::Record r = f.getRecord(i);
uint32 id = r.getUInt(0);
uint32 typ = r.getUInt(20);
if(id >= MAX_DUNGEONS)
printf("!! WARNING !! LFGDungeons contains an out of range dungeon id %u.\n", id);
else
LfgDungeonTypes[id] = typ;
}
}
else
printf("!! WARNING !! LFGDungeons.dbc not found, LFG tool will not function correctly.\n");
}
示例4: main
int main(int argc, char ** argv)
{
bool success=true;
const char *versionString = "V4.00 2012_02";
// Use command line arguments, when some
if (!processArgv(argc, argv, versionString))
return 1;
// some simple check if working dir is dirty
else
{
std::string sdir = std::string(szWorkDirWmo) + "/dir";
std::string sdir_bin = std::string(szWorkDirWmo) + "/dir_bin";
struct stat status;
if (!stat(sdir.c_str(), &status) || !stat(sdir_bin.c_str(), &status))
{
printf("Your output directory seems to be polluted, please use an empty directory!\n");
printf("<press return to exit>");
char garbage[2];
return scanf("%c", garbage);
}
}
printf("Extract %s. Beginning work ....\n\n",versionString);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if (mkdir(szWorkDirWmo
#if defined(__linux__) || defined(__APPLE__)
, 0711
#endif
))
success = (errno == EEXIST);
LoadCommonMPQFiles(CONF_TargetBuild);
for (int i = 0; i < LOCALES_COUNT; ++i)
{
//Open MPQs
if (!LoadLocaleMPQFile(i))
{
if (GetLastError() != ERROR_PATH_NOT_FOUND)
printf("Unable to load %s locale archives!\n", Locales[i]);
continue;
}
printf("Detected and using locale: %s\n", Locales[i]);
break;
}
ReadLiquidTypeTableDBC();
// extract data
if (success)
success = ExtractWmo();
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if (success)
{
DBCFile * dbc = new DBCFile(LocaleMpq, "DBFilesClient\\Map.dbc");
if (!dbc->open())
{
delete dbc;
printf("FATAL ERROR: Map.dbc not found in data file.\n");
return 1;
}
map_count=dbc->getRecordCount ();
map_ids=new map_id[map_count];
for (unsigned int x=0;x<map_count;++x)
{
map_ids[x].id=dbc->getRecord (x).getUInt(0);
strcpy(map_ids[x].name,dbc->getRecord(x).getString(1));
printf("Map - %s\n",map_ids[x].name);
}
delete dbc;
ParsMapFiles();
delete [] map_ids;
//nError = ERROR_SUCCESS;
// Extract models, listed in GameObjectDisplayInfo.dbc
ExtractGameobjectModels();
}
SFileCloseArchive(LocaleMpq);
SFileCloseArchive(WorldMpq);
printf("\n");
if (!success)
{
printf("ERROR: Extract %s. Work NOT complete.\n Precise vector data=%d.\nPress any key.\n",versionString, preciseVectorData);
getchar();
}
printf("Extract %s. Work complete. No errors.\n",versionString);
delete [] LiqType;
return 0;
}
示例5: main
int main(int argc, char ** argv)
{
bool success=true;
const char *versionString = "V3.00 2010_07";
// Use command line arguments, when some
if (!processArgv(argc, argv, versionString))
return 1;
// some simple check if working dir is dirty
else
{
std::string sdir = std::string(szWorkDirWmo) + "/dir";
std::string sdir_bin = std::string(szWorkDirWmo) + "/dir_bin";
struct stat status;
if (!stat(sdir.c_str(), &status) || !stat(sdir_bin.c_str(), &status))
{
printf("Your output directory seems to be polluted, please use an empty directory!\n");
printf("<press return to exit>");
char garbage[2];
return scanf("%c", garbage);
}
}
printf("Extract %s. Beginning work ....\n",versionString);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if (mkdir(szWorkDirWmo
#ifdef __linux__
, 0711
#endif
))
success = (errno == EEXIST);
// prepare archive name list
std::vector<std::string> archiveNames;
fillArchiveNameVector(archiveNames);
for (size_t i = 0; i < archiveNames.size(); ++i)
{
MPQArchive *archive = new MPQArchive(archiveNames[i].c_str());
if (!gOpenArchives.size() || gOpenArchives.front() != archive)
delete archive;
}
if (gOpenArchives.empty())
{
printf("FATAL ERROR: None MPQ archive found by path '%s'. Use -d option with proper path.\n",input_path);
return 1;
}
// extract data
if (success)
success = ExtractWmo();
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if (success)
{
DBCFile * dbc = new DBCFile("DBFilesClient\\Map.dbc");
if (!dbc->open())
{
delete dbc;
printf("FATAL ERROR: Map.dbc not found in data file.\n");
return 1;
}
map_count=dbc->getRecordCount ();
map_ids=new map_id[map_count];
for (unsigned int x = 0; x < map_count; ++x)
{
map_ids[x].id=dbc->getRecord (x).getUInt(0);
strcpy(map_ids[x].name,dbc->getRecord(x).getString(1));
printf("Map - %s\n",map_ids[x].name);
}
delete dbc;
ParsMapFiles();
delete[] map_ids;
//nError = ERROR_SUCCESS;
}
printf("\n");
if (!success)
{
printf("ERROR: Extract %s. Work NOT complete.\n Precise vector data=%d.\nPress any key.\n",versionString, preciseVectorData);
getchar();
}
printf("Extract %s. Work complete. No errors.\n",versionString);
return 0;
}
示例6: main
int main(int argc, char ** argv)
{
bool success = true;
const char *versionString = "V4.03 2015_05";
// Use command line arguments, when some
if (!processArgv(argc, argv, versionString))
return 1;
// some simple check if working dir is dirty
else
{
std::string sdir = std::string(szWorkDirWmo) + "/dir";
std::string sdir_bin = std::string(szWorkDirWmo) + "/dir_bin";
struct stat status;
if (!stat(sdir.c_str(), &status) || !stat(sdir_bin.c_str(), &status))
{
printf("Your output directory seems to be polluted, please use an empty directory!\n");
printf("<press return to exit>");
char garbage[2];
return scanf("%c", garbage);
}
}
printf("Extract %s. Beginning work ....\n\n", versionString);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if (mkdir(szWorkDirWmo
#if defined(__linux__) || defined(__APPLE__)
, 0711
#endif
))
success = (errno == EEXIST);
int FirstLocale = -1;
for (int i = 0; i < TOTAL_LOCALES; ++i)
{
if (i == LOCALE_none)
continue;
if (!OpenCascStorage(i))
continue;
FirstLocale = i;
uint32 build = ReadBuild(i);
if (!build)
{
CascCloseStorage(CascStorage);
continue;
}
printf("Detected client build: %u\n\n", build);
break;
}
if (!OpenCascStorage(FirstLocale))
{
if (GetLastError() != ERROR_PATH_NOT_FOUND)
printf("Unable to open storage!\n");
return 1;
}
// Extract models, listed in GameObjectDisplayInfo.dbc
ExtractGameobjectModels();
ReadLiquidTypeTableDBC();
// extract data
if (success)
success = ExtractWmo();
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if (success)
{
DBCFile * dbc = new DBCFile(CascStorage, "DBFilesClient\\Map.dbc");
if (!dbc->open())
{
delete dbc;
printf("FATAL ERROR: Map.dbc not found in data file.\n");
return 1;
}
map_count = dbc->getRecordCount();
map_ids = new map_id[map_count];
for (unsigned int x = 0; x < map_count; ++x)
{
map_ids[x].id = dbc->getRecord(x).getUInt(0);
const char* map_name = dbc->getRecord(x).getString(1);
size_t max_map_name_length = sizeof(map_ids[x].name);
if (strlen(map_name) >= max_map_name_length)
{
delete dbc;
delete[] map_ids;
printf("FATAL ERROR: Map name too long.\n");
return 1;
}
strncpy(map_ids[x].name, map_name, max_map_name_length);
//.........这里部分代码省略.........
示例7: main
int main(int argc, char ** argv)
{
//char tmp[512];
// FILE* pDatei;
// char tmp[512];
// char tmp1[512];
//char tmp2[512];
// char tmp3[512];
// char tmp4[512];
// char szMpqName[MAX_PATH] = "";
// char szListFile[MAX_PATH] = "";
int nError = ERROR_SUCCESS;
char *versionString = "V2.4 2007_07_12";
// Use command line arguments, when some
if(!processArgv(argc, argv, versionString))
return 1;
printf("Extract %s. Beginning work ....\n",versionString);
// Set the lowest priority to allow running in the background
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if(nError == ERROR_SUCCESS)
{
//if(!CreateDirectory(szWorkDirMaps, NULL))
// nError = GetLastError();
if(!CreateDirectory(szWorkDirWmo, NULL))
nError = GetLastError();
if(nError == ERROR_ALREADY_EXISTS)
nError = ERROR_SUCCESS;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// patch goes first -> fake priority handling
std::vector<MPQArchive*> archives;
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
std::vector<std::string> archiveNames;
fillArchiveNameVector(archiveNames);
for (size_t i=0; i<archiveNames.size(); i++) {
archives.push_back(new MPQArchive(archiveNames[i].c_str()));
}
ExtractWmo(archiveNames);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if(nError == ERROR_SUCCESS)
{
DBCFile * dbc = new DBCFile("DBFilesClient\\Map.dbc");
dbc->open();
map_count=dbc->getRecordCount ();
map_ids=new map_id[map_count];
for(unsigned int x=0;x<map_count;x++)
{
map_ids[x].id=dbc->getRecord (x).getUInt(0);
strcpy(map_ids[x].name,dbc->getRecord(x).getString(1));
printf("Map - %s\n",map_ids[x].name);
}
delete dbc;
ParsMapFiles();
delete [] map_ids;
nError = ERROR_SUCCESS;
}
clreol();
if(nError != ERROR_SUCCESS) {
printf("ERROR: Extract %s. Work NOT complete.\n Precise vector data=%d.\nPress any key.\n",versionString, preciseVectorData);
_getch();
}
printf("Extract %s. Work complete. No errors.",versionString);
}
示例8: dump_as_sql
void dump_as_sql()
{
if(SPELL_COLUMN_COUNT!=dbc.getFieldCount())
{
printf("error,column counts do not match update code for latest dbc format\n");
exit(1);
}
printf("will start dumping data into sql file (we will drop not required fields!)\n");
FILE *fsql=fopen("dbc_spell.sql","w");
//drop table if already exist
fprintf(fsql,"%s","DROP TABLE IF EXISTS `dbc_spell`;\n");
//create the table
fprintf(fsql,"%s","CREATE TABLE dbc_spell (\n");
for(int i=0;i<SPELL_COLUMN_COUNT;i++)
if(sql_translation_table[i][2][0]=='0')
{
if(sql_translation_table[i][0][0]=='u')
fprintf(fsql,"\t `%s` INT (11) UNSIGNED DEFAULT '0' NOT NULL,\n",sql_translation_table[i][1]);
else if(sql_translation_table[i][0][0]=='i')
fprintf(fsql,"\t `%s` INT (11) DEFAULT '0' NOT NULL,\n",sql_translation_table[i][1]);
else if(sql_translation_table[i][0][0]=='f')
fprintf(fsql,"\t `%s` FLOAT DEFAULT '0' NOT NULL,\n",sql_translation_table[i][1]);
else if(sql_translation_table[i][0][0]=='s')
fprintf(fsql,"\t `%s` VARCHAR(2000),\n",sql_translation_table[i][1]);
}
fprintf(fsql,"%s","PRIMARY KEY(id), UNIQUE(id), INDEX(id));\n");
fprintf(fsql,"\n\n");
//start dumping the data from the DBC
char tstr[2000];
for(unsigned int j=0;j<dbc.getRecordCount();j++)
{
//we start a new insert block
if((j % SQL_INSERTS_PER_QUERY) == 0)
{
fprintf(fsql,"%s","INSERT INTO dbc_spell (");
for(int i=0;i<SPELL_COLUMN_COUNT-1;i++)
if(sql_translation_table[i][2][0]=='0')
fprintf(fsql,"`%s`,",sql_translation_table[i][1]);
fprintf(fsql,"`%s`) values \n",sql_translation_table[SPELL_COLUMN_COUNT-1][1]);
fprintf(fsql," (");
}
else
fprintf(fsql,",(");
for(int i=0;i<SPELL_COLUMN_COUNT;i++)
if(sql_translation_table[i][2][0]=='0')
{
if(i!=0)
fprintf(fsql,",");
if(sql_translation_table[i][0][0]=='u')
fprintf(fsql,"%u",dbc.getRecord(j).getUInt(i));
else if(sql_translation_table[i][0][0]=='i')
fprintf(fsql,"%d",dbc.getRecord(j).getInt(i));
else if(sql_translation_table[i][0][0]=='f')
fprintf(fsql,"%f",dbc.getRecord(j).getFloat(i));
else if(sql_translation_table[i][0][0]=='s')
{
const char *dstr=dbc.getRecord(j).getString(i);
int otherindex=0;
for(unsigned int k=0;k<=strlen(dstr);k++)
if(dstr[k]=='\'' || dstr[k]=='"' || dstr[k]=='#' || dstr[k]=='-')
{
tstr[otherindex++] = '\\';
tstr[otherindex++] = dstr[k];
}
else
tstr[otherindex++] = dstr[k];
fprintf(fsql,"\"%s\"",tstr);
}
}
//we need to end an insert block
if(((j+1) % SQL_INSERTS_PER_QUERY)==0)
fprintf(fsql,");\n");
else fprintf(fsql,")\n");
}
fprintf(fsql,";");
fprintf(fsql,"\n\n");
fclose(fsql);
}
示例9: main
//.........这里部分代码省略.........
tf = fopen("Data/lichking.MPQ", "r");
if (tf)
{
fclose(tf);
new MPQArchive("Data/lichking.MPQ");
if ( -1 != locale )
{
sprintf(tmp, "Data/%s/lichking-locale-%s.MPQ", localeNames[locale], localeNames[locale]);
new MPQArchive(tmp);
}
}
tf = fopen("Data/patch.MPQ", "r");
if (tf)
{
fclose(tf);
new MPQArchive("Data/patch.MPQ");
for(int i = 2; i <= maxPatches; i++)
{
sprintf(tmp, "Data/patch-%d.MPQ", i);
tf = fopen(tmp, "r");
if (!tf)
continue;
fclose(tf);
new MPQArchive(tmp);
}
if ( -1 != locale )
{
sprintf(tmp, "Data/%s/patch-%s.MPQ", localeNames[locale], localeNames[locale]);
tf = fopen(tmp, "r");
if (tf)
{
fclose(tf);
new MPQArchive(tmp);
for(int i = 2; i <= maxPatches; i++)
{
sprintf(tmp, "Data/%s/patch-%s-%d.MPQ", localeNames[locale], localeNames[locale], i);
tf = fopen(tmp, "r");
if (!tf)
continue;
fclose(tf);
new MPQArchive(tmp);
}
}
}
}
printf("\nExtracting DBC Files: Identifying files...\n");
std::set<std::string> dbcFiles;
int itc = 0;
for(std::vector<MPQArchive*>::iterator it = gOpenArchives.begin(); it != gOpenArchives.end(); ++it)
{
std::vector<std::string> files;
files = (*it)->GetFileList();
for (vector<string>::iterator iter = files.begin(); iter != files.end(); ++iter)
if (iter->rfind(".dbc") == iter->length() - strlen(".dbc"))
dbcFiles.insert(*iter);
SimpleProgressBar(++itc, gOpenArchives.size());
}
CleanCache();
ClearProgressBar();
printf("Extracting...\n");
CreateDirectory("DBC", NULL);
// extract DBCs
int count = 0;
for (set<string>::iterator iter = dbcFiles.begin(); iter != dbcFiles.end(); ++iter)
{
string filename = "DBC\\";
filename += (iter->c_str() + strlen("DBFilesClient\\"));
if(ExtractFile(iter->c_str(), filename))
++count;
SimpleProgressBar(count, dbcFiles.size());
}
CleanCache();
ClearProgressBar();
printf("Extracted %u DBC files\n\n", count);
//map.dbc
DBCFile * dbc = new DBCFile("DBFilesClient\\Map.dbc");
dbc->open();
MapCount = dbc->getRecordCount ();
map_ids = new map_id[MapCount];
for(unsigned int x = 0; x < MapCount; x++)
{
map_ids[x].id = dbc->getRecord (x).getUInt(0);
strcpy(map_ids[x].name, dbc->getRecord(x).getString(1));
}
delete dbc;
CreateDirectory("maps", NULL);
ExtractMapsFromMpq();
delete [] map_ids;
return 0; // Exit The Program
}
示例10: main
int main(int argc, char ** argv)
{
//char tmp[512];
// FILE* pDatei;
// char tmp[512];
// char tmp1[512];
//char tmp2[512];
// char tmp3[512];
// char tmp4[512];
// char szMpqName[MAX_PATH] = "";
// char szListFile[MAX_PATH] = "";
int nError = ERROR_SUCCESS;
char *versionString = "V2.4 2007_07_12";
// Use command line arguments, when some
if(!processArgv(argc, argv, versionString))
return 1;
printf("Extract %s. Beginning work ....\n",versionString);
// Set the lowest priority to allow running in the background
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if(nError == ERROR_SUCCESS)
{
//if(!CreateDirectory(szWorkDirMaps, NULL))
// nError = GetLastError();
if(!CreateDirectory(szWorkDirWmo, NULL))
nError = GetLastError();
if(nError == ERROR_ALREADY_EXISTS)
nError = ERROR_SUCCESS;
}
// prepare archive name list
std::vector<std::string> archiveNames;
fillArchiveNameVector(archiveNames);
if(!gOpenArchives.Open(archiveNames))
{
printf("FATAL ERROR: None MPQ archive found by path '%s'. Use -d option with proper path.\n",input_path);
return 1;
}
// extract data
ExtractWmo();
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if(nError == ERROR_SUCCESS)
{
DBCFile * dbc = new DBCFile("DBFilesClient\\Map.dbc");
if(!dbc->open())
{
delete dbc;
printf("FATAL ERROR: Map.dbc not found in data file.\n");
return 1;
}
map_count=dbc->getRecordCount ();
map_ids=new map_id[map_count];
for(unsigned int x=0;x<map_count;++x)
{
map_ids[x].id=dbc->getRecord (x).getUInt(0);
strcpy(map_ids[x].name,dbc->getRecord(x).getString(1));
printf("Map - %s\n",map_ids[x].name);
}
delete dbc;
ParsMapFiles();
delete [] map_ids;
nError = ERROR_SUCCESS;
}
clreol();
if(nError != ERROR_SUCCESS)
{
printf("ERROR: Extract %s. Work NOT complete.\n Precise vector data=%d.\nPress any key.\n",versionString, preciseVectorData);
_getch();
}
printf("Extract %s. Work complete. No errors.",versionString);
}
示例11: main
int main(int argc, char** argv)
{
printf("mangos-zero vmap (version %s) extractor\n\n", szRawVMAPMagic);
bool success = true;
// Use command line arguments, when some
if (!processArgv(argc, argv))
{ return 1; }
// some simple check if working dir is dirty
else
{
std::string sdir = std::string(szWorkDirWmo) + "/dir";
std::string sdir_bin = std::string(szWorkDirWmo) + "/dir_bin";
struct stat status;
if (!stat(sdir.c_str(), &status) || !stat(sdir_bin.c_str(), &status))
{
printf("Your output directory seems to be polluted, please use an empty directory!\n");
printf("<press return to exit>");
char garbage[2];
int ret = scanf("%c", garbage);
return 1;
}
}
printf("Beginning work ....\n");
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if (mkdir(szWorkDirWmo
#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
, 0711
#endif
))
{ success = (errno == EEXIST); }
// prepare archive name list
std::vector<std::string> archiveNames;
fillArchiveNameVector(archiveNames);
for (size_t i = 0; i < archiveNames.size(); ++i)
{
MPQArchive* archive = new MPQArchive(archiveNames[i].c_str());
if (!gOpenArchives.size() || gOpenArchives.front() != archive)
{ delete archive; }
}
if (gOpenArchives.empty())
{
printf("FATAL ERROR: None MPQ archive found by path '%s'. Use -d option with proper path.\n", input_path);
return 1;
}
ReadLiquidTypeTableDBC();
// extract data
if (success)
{ success = ExtractWmo(); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if (success)
{
DBCFile* dbc = new DBCFile("DBFilesClient\\Map.dbc");
if (!dbc->open())
{
delete dbc;
printf("FATAL ERROR: Map.dbc not found in data file.\n");
return 1;
}
map_count = dbc->getRecordCount();
map_ids = new map_id[map_count];
for (unsigned int x = 0; x < map_count; ++x)
{
map_ids[x].id = dbc->getRecord(x).getUInt(0);
strcpy(map_ids[x].name, dbc->getRecord(x).getString(1));
printf("Map - %s\n", map_ids[x].name);
}
delete dbc;
ParsMapFiles();
delete [] map_ids;
//nError = ERROR_SUCCESS;
// Extract models, listed in DameObjectDisplayInfo.dbc
ExtractGameobjectModels();
}
printf("\n");
if (!success)
{
printf("ERROR: Work NOT complete.\n Precise vector data=%d.\nPress any key.\n", preciseVectorData);
getchar();
}
printf("Work complete. No errors.\n");
delete [] LiqType;
return 0;
}
示例12: main
int main(int argc, char ** argv)
{
bool success=true;
const char *versionString = "V2.90 2010_05";
// Use command line arguments, when some
if(!processArgv(argc, argv, versionString))
return 1;
printf("Extract %s. Beginning work ....\n",versionString);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if(mkdir(szWorkDirWmo
#ifdef __linux__
, 0711
#endif
))
success = (errno == EEXIST);
// prepare archive name list
std::vector<std::string> archiveNames;
fillArchiveNameVector(archiveNames);
for (size_t i=0; i < archiveNames.size(); ++i)
{
MPQArchive *archive = new MPQArchive(archiveNames[i].c_str());
if(!gOpenArchives.size() || gOpenArchives.front() != archive)
delete archive;
}
if(gOpenArchives.empty())
{
printf("FATAL ERROR: None MPQ archive found by path '%s'. Use -d option with proper path.\n",input_path);
return 1;
}
ReadLiquidTypeTableDBC();
// extract data
if(success)
success = ExtractWmo();
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//map.dbc
if(success)
{
DBCFile * dbc = new DBCFile("DBFilesClient\\Map.dbc");
if(!dbc->open())
{
delete dbc;
printf("FATAL ERROR: Map.dbc not found in data file.\n");
return 1;
}
map_count=dbc->getRecordCount ();
map_ids=new map_id[map_count];
for(unsigned int x=0;x<map_count;++x)
{
map_ids[x].id=dbc->getRecord (x).getUInt(0);
strcpy(map_ids[x].name,dbc->getRecord(x).getString(1));
printf("Map - %s\n",map_ids[x].name);
}
delete dbc;
ParsMapFiles();
delete [] map_ids;
//nError = ERROR_SUCCESS;
}
clreol();
if(!success)
{
printf("ERROR: Extract %s. Work NOT complete.\n Precise vector data=%d.\nPress any key.\n",versionString, preciseVectorData);
getchar();
}
printf("Extract %s. Work complete. No errors.\n",versionString);
delete [] LiqType;
return 0;
}