Index: contrib/map_extractor/libmpq/common.cpp =================================================================== --- contrib/map_extractor/libmpq/common.cpp (working copy) +++ contrib/map_extractor/libmpq/common.cpp (working copy) @@ -395,7 +395,13 @@ /* Read the hash table into the buffer */ bytes = mpq_a->header->hashtablesize * sizeof(mpq_hash); - _lseek(mpq_a->fd, mpq_a->header->hashtablepos, SEEK_SET); + + #ifdef WIN32 + _lseeki64(mpq_a->fd, mpq_a->header->hashtablepos, SEEK_SET); + #else + lseek64(mpq_a->fd, mpq_a->header->hashtablepos, SEEK_SET); + #endif + rb = _read(mpq_a->fd, mpq_a->hashtable, bytes); if (rb != bytes) { return LIBMPQ_EFILE_CORRUPT; @@ -448,7 +454,13 @@ /* Read the block table into the buffer */ bytes = mpq_a->header->blocktablesize * sizeof(mpq_block); memset(mpq_a->blocktable, 0, mpq_a->header->blocktablesize * sizeof(mpq_block)); - _lseek(mpq_a->fd, mpq_a->header->blocktablepos, SEEK_SET); + + #ifdef WIN32 + _lseeki64(mpq_a->fd, mpq_a->header->blocktablepos, SEEK_SET); + #else + lseek64(mpq_a->fd, mpq_a->header->blocktablepos, SEEK_SET); + #endif + rb = _read(mpq_a->fd, mpq_a->blocktable, bytes); if (rb != bytes) { return LIBMPQ_EFILE_CORRUPT; @@ -507,7 +519,12 @@ unsigned int nread; if (mpq_f->mpq_b->filepos != mpq_a->filepos) { - _lseek(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); + #ifdef WIN32 + _lseeki64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); + #else + lseek64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); + + #endif } /* Read block positions from begin of file. */ @@ -552,7 +569,13 @@ if (mpq_f->blockpos[0] != nread) { /* Try once again to detect file seed and decrypt the blocks */ - _lseek(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); + + #ifdef WIN32 + _lseeki64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); + #else + lseek64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); + #endif + nread = _read(mpq_a->fd, mpq_f->blockpos, (mpq_f->nblocks + 1) * sizeof(int)); mpq_f->seed = libmpq_detect_fileseed(mpq_a, mpq_f->blockpos, nread); libmpq_decrypt_block(mpq_a, mpq_f->blockpos, nread, mpq_f->seed - 1); @@ -589,7 +612,13 @@ /* Set file pointer, if necessary. */ if (mpq_a->filepos != readpos) { - mpq_a->filepos = _lseek(mpq_a->fd, readpos, SEEK_SET); + + #ifdef WIN32 + mpq_a->filepos = _lseeki64(mpq_a->fd, readpos, SEEK_SET); + #else + mpq_a->filepos = lseek64(mpq_a->fd, readpos, SEEK_SET); + #endif + } /* 15018F87 - Read all requested blocks. */ Index: contrib/map_extractor/libmpq/parser.cpp =================================================================== --- contrib/map_extractor/libmpq/parser.cpp (working copy) +++ contrib/map_extractor/libmpq/parser.cpp (working copy) @@ -183,7 +183,11 @@ break; } } - fseek(fp, 0L, SEEK_SET); + #ifdef WIN32 + _lseeki64((int)fp, 0L, SEEK_SET); + #else + lseek64((int)fp, 0L, SEEK_SET); + #endif return result; } @@ -286,7 +290,11 @@ } /* we got all files, so rewind stream */ - fseek(fp, 0L, SEEK_SET); + #ifdef WIN32 + _lseeki64((int)fp, 0L, SEEK_SET); + #else + lseek64((int)fp, 0L, SEEK_SET); + #endif (*filelist)[fl_count] = NULL; Index: contrib/map_extractor/libmpq/mpq.cpp =================================================================== --- contrib/map_extractor/libmpq/mpq.cpp (working copy) +++ contrib/map_extractor/libmpq/mpq.cpp (working copy) @@ -76,7 +76,11 @@ while (!ncnt) { mpq_a->header->id = 0; - _lseek(mpq_a->fd, mpq_a->mpqpos, SEEK_SET); + #ifdef WIN32 + _lseeki64(mpq_a->fd, mpq_a->mpqpos, SEEK_SET); + #else + lseek64(mpq_a->fd, mpq_a->mpqpos, SEEK_SET); + #endif rb = _read(mpq_a->fd, mpq_a->header, sizeof(mpq_header)); /* if different number of bytes read, break the loop */ Index: contrib/map_extractor/adt.cpp =================================================================== --- contrib/map_extractor/adt.cpp (working copy) +++ contrib/map_extractor/adt.cpp (working copy) @@ -405,10 +405,9 @@ bool ConvertADT(char * filename,char * filename2) { - // if(!strstr(filename,"oth_32_48"))return false; if(!LoadADT(filename))return false; - + FILE *output=fopen(filename2,"wb"); if(!output) { @@ -419,26 +418,27 @@ // write magic header fwrite(MAP_MAGIC,1,8,output); - for(unsigned int x=0;x<16;x++) - for(unsigned int y=0;y<16;y++) - { - if(mcells->ch[y][x].area_id) - { - if(areas[mcells->ch[y][x].area_id]==0xffff) - printf("\nCan't find area flag for areaid %d.\n",mcells->ch[y][x].area_id); - - fwrite(&areas[mcells->ch[y][x].area_id],1,2,output); - - } - else - { - uint16 flag=0xffff; - fwrite(&flag,1,2,output); - } - } - for(unsigned int x=0;x<16;x++) + { for(unsigned int y=0;y<16;y++) + { + if(mcells->ch[y][x].area_id && mcells->ch[y][x].area_id < 0xf77) + { + if(areas[mcells->ch[y][x].area_id]==0xffff) + printf("\nCan't find area flag for areaid %u.\n",mcells->ch[y][x].area_id); + + fwrite(&areas[mcells->ch[y][x].area_id],1,2,output); + } + else + { + uint16 flag=0xffff; + fwrite(&flag,1,2,output); + } + } + } + + for(unsigned int x=0;x<16;x++) + for(unsigned int y=0;y<16;y++) fwrite(&mcells->ch[y][x].flag,1,1,output); TransformWaterData(); @@ -457,12 +457,8 @@ (((double)(y))*TILESIZE)/((double)(iRes-1)), (((double)(x))*TILESIZE)/((double)(iRes-1))); - - - fwrite(&z,1,sizeof(z),output); } - fclose(output); delete cell; @@ -485,3 +481,4 @@ } + Index: contrib/map_extractor/System.cpp =================================================================== --- contrib/map_extractor/System.cpp (working copy) +++ contrib/map_extractor/System.cpp (working copy) @@ -37,141 +37,175 @@ void ExtractMapsFromMpq() { - char mpq_filename[128]; - char output_filename[256]; -// char tmp[256]; -// sprintf(tmp,"%s/Data/%s",input_path,filename); + char mpq_filename[128]; + char output_filename[256]; + // char tmp[256]; + // sprintf(tmp,"%s/Data/%s",input_path,filename); - //MPQArchive* p=new MPQArchive(tmp); -// map_count=1; - unsigned int total=map_count*64*64; - unsigned int done=0; + //MPQArchive* p=new MPQArchive(tmp); + // map_count=1; + unsigned int total=map_count*64*64; + unsigned int done=0; - for(unsigned int x=0;x<64;x++) - { - for(unsigned int z=0;z archives; -} + char LANG[5]; + LANG[0]='e'; LANG[1]='n'; LANG[2]='G'; LANG[3]='B'; LANG[4]='\0'; // enGB by default... -bool WMO(char* filename); -int main(int argc, char * arg[]) -{ - - char tmp[512]; - for(int c=1;c archives; - const char* archiveNames[] = {"patch-2.MPQ", "patch.MPQ", "terrain.MPQ","dbc.MPQ"}; - //, "wmo.MPQ"}; + pDatei=fopen("./Data/esES/locale-esES.MPQ", "rb"); + if (pDatei!=NULL) + { + LANG[0]='e'; LANG[1]='s'; LANG[2]='E'; LANG[3]='S'; + fclose(pDatei); + } - for (size_t i=0; i<4; i++) - { - sprintf(tmp,"%s/Data/%s",input_path,archiveNames[i]); - archives.push_back(new MPQArchive(tmp)); + sprintf(tmp1,"%s/locale-%s.MPQ",LANG,LANG); + //sprintf(tmp2,"%s/expansion-locale-%s.MPQ",LANG,LANG); + sprintf(tmp3,"%s/patch-%s.MPQ",LANG,LANG); + sprintf(tmp4,"%s/patch-%s-2.MPQ",LANG,LANG); + + //char* archiveNames[]={"expansion.MPQ", "common.MPQ", "patch-2.MPQ", "patch.MPQ", tmp4, tmp3, tmp2, tmp1}; + char* archiveNames[]={"patch-2.MPQ", "patch.MPQ", "common.MPQ", "expansion.MPQ", tmp4, tmp3, tmp1}; + + //for (size_t i=0; i<8; i++) + for (size_t i=0; i<7; i++) + { + sprintf(tmp,"%s/Data/%s",input_path,archiveNames[i]); + archives.push_back(new MPQArchive(tmp)); } - + //map.dbc + DBCFile * dbc= new DBCFile("DBFilesClient\\Map.dbc"); + if(dbc) + dbc->open(); + else + return (1); + map_count=dbc->getRecordCount(); + map_ids=new map_id[map_count]; + //maps_extr = new extr_map [map_count]; + //memset(maps_extr,false, sizeof(extr_map) *map_count); + for(unsigned int x=0;xgetRecord (x).getUInt(0); + strcpy(map_ids[x].name,dbc->getRecord(x).getString(1)); + } + delete dbc; + //map.dbc - //map.dbc - DBCFile * dbc= new DBCFile("DBFilesClient\\Map.dbc"); - dbc->open(); + //areatable.dbc + dbc = new DBCFile("DBFilesClient\\AreaTable.dbc"); + dbc->open(); - map_count=dbc->getRecordCount (); - map_ids=new map_id[map_count]; - //maps_extr = new extr_map [map_count]; - //memset(maps_extr,false, sizeof(extr_map) *map_count); - for(unsigned int x=0;xgetRecord (x).getUInt(0); - strcpy(map_ids[x].name,dbc->getRecord(x).getString(1)); - } - delete dbc; - //map.dbc - - //areatable.dbc - dbc = new DBCFile("DBFilesClient\\AreaTable.dbc"); - dbc->open(); + unsigned int area_count=dbc->getRecordCount (); + uint32 maxi=0; + for(unsigned int x=0;xgetRecord(x).getUInt(0)) + maxi=dbc->getRecord(x).getUInt(0); + // printf("\n%d %d",dbc->getRecord(x).getUInt(0),dbc->getRecord(x).getUInt(3)); + } + maxi++;//not needed actually + areas=new uint16[maxi]; + memset(areas,0xff,maxi*2); + for(unsigned int x=0;xgetRecord(x).getUInt(0)] =dbc->getRecord(x).getUInt(3); - unsigned int area_count=dbc->getRecordCount (); - uint32 maxi=0; - for(unsigned int x=0;xgetRecord(x).getUInt(0)) - maxi=dbc->getRecord(x).getUInt(0); -// printf("\n%d %d",dbc->getRecord(x).getUInt(0),dbc->getRecord(x).getUInt(3)); - } - maxi++;//not needed actually - areas=new uint16[maxi]; - memset(areas,0xff,maxi*2); - for(unsigned int x=0;xgetRecord(x).getUInt(0)] =dbc->getRecord(x).getUInt(3); + delete dbc; - delete dbc; + //areatable.dbc - //areatable.dbc + ExtractMapsFromMpq(); - ExtractMapsFromMpq(); + delete [] areas; + delete [] map_ids; - delete [] areas; - delete [] map_ids; - /* // This would be nice someday (don't have time to get it to work right now): cout << "Extracting dbc files..." << endl; for (size_t i=3; i>0; i--) @@ -197,5 +231,5 @@ } } */ - return (0); // Exit The Program + return (0); // Exit The Program }