rendered paste bodyIndex: src/shared/vmap/ModelContainer.cpp===================================================================--- src/shared/vmap/ModelContainer.cpp (revision 4943)+++ src/shared/vmap/ModelContainer.cpp (working copy)@@ -21,6 +21,9 @@ #include <string.h> +#include <string>+#include <zlib.h>+ #include "ModelContainer.h" #include "VMapDefinitions.h" @@ -361,52 +364,53 @@ char ident[8]; char chunk[4]; unsigned int ival;- FILE *rf = fopen(filename, "rb");+ gzFile rf = gzopen(filename, "rb");+ if(!rf) rf = gzopen((std::string(filename)+".gz").c_str(),"rb"); if(rf) { free(); result = true;- if(result && fread(ident,8,1,rf) != 1) result = false;- if(result && fread(&flags,sizeof(unsigned int),1,rf) != 1) result = false;+ if(result && gzread(rf,ident,8) != 8) result = false;+ if(result && gzread(rf,&flags,sizeof(unsigned int)) != sizeof(unsigned int)) result = false; //POS- if(result && fread(chunk,4,1,rf) != 1) result = false;- if(result && fread(&size,4,1,rf) != 1) result = false;+ if(result && gzread(rf,chunk,4) != 4) result = false;+ if(result && gzread(rf,&size,4) != 4) result = false; Vector3 basePos;- if(result && fread(&basePos,sizeof(float),3,rf) != 3) result = false;+ if(result && gzread(rf,&basePos,sizeof(float)*3) != sizeof(float)*3) result = false; setBasePosition(basePos); //---- Box- if(result && fread(chunk,4,1,rf) != 1) result = false;- if(result && fread(&size,4,1,rf) != 1) result = false;+ if(result && gzread(rf,chunk,4) != 4) result = false;+ if(result && gzread(rf,&size,4) != 4) result = false; Vector3 low,high;- if(result && fread(&low,sizeof(float),3,rf) != 3) result = false;- if(result && fread(&high,sizeof(float),3,rf) != 3) result = false;+ if(result && gzread(rf,&low,sizeof(float)*3) != sizeof(float)*3) result = false;+ if(result && gzread(rf,&high,sizeof(float)*3) != sizeof(float)*3) result = false; setBounds(low, high); //---- TreeNodes- if(result && fread(chunk,4,1,rf) != 1) result = false;- if(result && fread(&size,4,1,rf) != 1) result = false;+ if(result && gzread(rf,chunk,4) != 4) result = false;+ if(result && gzread(rf,&size,4) != 4) result = false; - if(result && fread(&ival,sizeof(unsigned int),1,rf) != 1) result = false;+ if(result && gzread(rf,&ival,sizeof(unsigned int)) != sizeof(unsigned int)) result = false; if(result) setNNodes(ival); if(result) setTreeNodeArray(new TreeNode[getNNodes()]);- if(result && fread(getTreeNodes(),sizeof(TreeNode),getNNodes(),rf) != getNNodes()) result = false;+ if(result && gzread(rf,getTreeNodes(),sizeof(TreeNode)*getNNodes()) != sizeof(TreeNode)*getNNodes()) result = false; //---- TriengleBoxes- if(result && fread(chunk,4,1,rf) != 1) result = false;- if(result && fread(&size,4,1,rf) != 1) result = false;+ if(result && gzread(rf,chunk,4) != 4) result = false;+ if(result && gzread(rf,&size,4) != 4) result = false; - if(result && fread(&ival,sizeof(unsigned int),1,rf) != 1) result = false;+ if(result && gzread(rf,&ival,sizeof(unsigned int)) != sizeof(unsigned int)) result = false; setNTriangles(ival); if(result) setTriangleArray(new TriangleBox[getNTriangles()]);- if(result && fread(getTriangles(),sizeof(TriangleBox),getNTriangles(),rf) != getNTriangles()) result = false;+ if(result && gzread(rf,getTriangles(),sizeof(TriangleBox)*getNTriangles()) != sizeof(TriangleBox)*getNTriangles()) result = false; //---- SubModel- if(result && fread(chunk,4,1,rf) != 1) result = false;- if(result && fread(&size,4,1,rf) != 1) result = false;+ if(result && gzread(rf,chunk,4) != 4) result = false;+ if(result && gzread(rf,&size,4) != 4) result = false; - if(result && fread(&iNSubModel,sizeof(unsigned int),1,rf) != 1) result = false;+ if(result && gzread(rf,&iNSubModel,sizeof(unsigned int)) != sizeof(unsigned int)) result = false; if(result) iSubModel = new SubModel[iNSubModel]; if(result)@@ -414,13 +418,13 @@ for(unsigned int i=0;i<iNSubModel && result; ++i) { unsigned char readBuffer[52]; // this is the size of SubModel on 32 bit systems- if(fread(readBuffer,sizeof(readBuffer),1,rf) != 1) result = false;+ if(gzread(rf,readBuffer,sizeof(readBuffer)) != sizeof(readBuffer)) result = false; iSubModel[i].initFromBinBlock(readBuffer); iSubModel[i].setTriangleArray(getTriangles()); iSubModel[i].setTreeNodeArray(getTreeNodes()); } }- fclose(rf);+ gzclose(rf); } return result; }Index: src/shared/Database/DBCStores.cpp===================================================================--- src/shared/Database/DBCStores.cpp (revision 4943)+++ src/shared/Database/DBCStores.cpp (working copy)@@ -26,6 +26,8 @@ #include <map> +#include <zlib.h>+ typedef std::map<uint16,uint32> AreaFlagByAreaID; typedef std::map<uint32,uint32> AreaFlagByMapID; @@ -153,13 +155,14 @@ else { // sort problematic dbc to (1) non compatible and (2) non-existed- FILE * f=fopen(filename.c_str(),"rb");+ gzFile f=gzopen(filename.c_str(),"rb");+ if(!f) f=gzopen((filename+".gz").c_str(),"rb"); if(f) { char buf[100]; snprintf(buf,100," (exist, but have %d fields instead %d) Wrong client version DBC file?",storage.fieldCount,strlen(storage.fmt)); errlist.push_back(filename + buf);- fclose(f);+ gzclose(f); } else errlist.push_back(filename);Index: src/shared/Database/dbcfile.cpp===================================================================--- src/shared/Database/dbcfile.cpp (revision 4943)+++ src/shared/Database/dbcfile.cpp (working copy)@@ -20,6 +20,9 @@ #include <stdlib.h> #include <string.h> +#include <string>+#include <zlib.h>+ #include "dbcfile.h" DBCFile::DBCFile()@@ -37,19 +40,20 @@ delete [] data; data=NULL; }- FILE * f=fopen(filename,"rb");- if(!f)return false;+ gzFile f=gzopen(filename,"rb");+ if(!f) f=gzopen((std::string(filename)+".gz").c_str(),"rb");+ if(!f) return false; - fread(&header,4,1,f); // Number of records+ gzread(f,&header,4); // Number of records if(header!=0x43424457) { //printf("not dbc file"); return false; //'WDBC' }- fread(&recordCount,4,1,f); // Number of records- fread(&fieldCount,4,1,f); // Number of fields- fread(&recordSize,4,1,f); // Size of a record- fread(&stringSize,4,1,f); // String size+ gzread(f,&recordCount,4); // Number of records+ gzread(f,&fieldCount,4); // Number of fields+ gzread(f,&recordSize,4); // Size of a record+ gzread(f,&stringSize,4); // String size fieldsOffset = new uint32[fieldCount]; fieldsOffset[0] = 0;@@ -64,8 +68,8 @@ data = new unsigned char[recordSize*recordCount+stringSize]; stringTable = data + recordSize*recordCount;- fread(data,recordSize*recordCount+stringSize,1,f);- fclose(f);+ gzread(f,data,recordSize*recordCount+stringSize);+ gzclose(f); return true; } Index: src/game/Map.cpp===================================================================--- src/game/Map.cpp (revision 4943)+++ src/game/Map.cpp (working copy)@@ -37,6 +37,8 @@ #include "MapInstanced.h" #include "VMapFactory.h" +#include <zlib.h>+ #define DEFAULT_GRID_EXPIRY 300 #define MAX_GRID_LOAD_TIME 50 @@ -56,12 +58,16 @@ bool Map::ExistMap(uint32 mapid,int x,int y) {- int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+1;+ int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+4; char* tmp = new char[len]; snprintf(tmp, len, (char *)(sWorld.GetDataPath()+"maps/%03u%02u%02u.map").c_str(),mapid,x,y); - FILE *pf=fopen(tmp,"rb");-+ gzFile pf=gzopen(tmp,"rb");+ if (!pf) {+ strcat(tmp,".gz");+ pf=gzopen(tmp,"rb");+ }+ if(!pf) { sLog.outError("Check existing of map file '%s': not exist!",tmp);@@ -70,17 +76,17 @@ } char magic[8];- fread(magic,1,8,pf);+ gzread(pf,magic,8); if(strncmp(MAP_MAGIC,magic,8)) { sLog.outError("Map file '%s' is non-compatible version (outdated?). Please, create new using ad.exe program.",tmp); delete [] tmp;- fclose(pf); //close file before return+ gzclose(pf); //close file before return return false; } delete [] tmp;- fclose(pf);+ gzclose(pf); return true; }@@ -156,12 +162,17 @@ // map file name char *tmp=NULL; // Pihhan: dataPath length + "maps/" + 3+2+2+ ".map" length may be > 32 !- int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+1;+ int len = sWorld.GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+4; tmp = new char[len]; snprintf(tmp, len, (char *)(sWorld.GetDataPath()+"maps/%03u%02u%02u.map").c_str(),mapid,x,y); sLog.outDetail("Loading map %s",tmp); // loading data- FILE *pf=fopen(tmp,"rb");+ gzFile pf=gzopen(tmp,"rb");+ if (!pf) {+ strcat(tmp,".gz");+ pf=gzopen(tmp,"rb");+ }+ if(!pf) { delete [] tmp;@@ -169,19 +180,19 @@ } char magic[8];- fread(magic,1,8,pf);+ gzread(pf,magic,8); if(strncmp(MAP_MAGIC,magic,8)) { sLog.outError("Map file '%s' is non-compatible version (outdated?). Please, create new using ad.exe program.",tmp); delete [] tmp;- fclose(pf); //close file before return+ gzclose(pf); //close file before return return; } delete [] tmp; GridMap * buf= new GridMap;- fread(buf,1,sizeof(GridMap),pf);- fclose(pf);+ gzread(pf,buf,sizeof(GridMap));+ gzclose(pf); GridMaps[x][y] = buf; }