root/trunk/contrib/vmap_extractor_v2/vmapextract/wdtfile.cpp

Revision 2, 2.2 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1#define __STORMLIB_SELF__
2
3#include "wdtfile.h"
4#include "adtfile.h"
5
6
7char * wdtGetPlainName(char * FileName)
8{
9    char * szTemp;
10
11    if((szTemp = strrchr(FileName, '\\')) != NULL)
12        FileName = szTemp + 1;
13    return FileName;
14}
15
16WDTFile::WDTFile(char* file_name, char* file_name1):WDT(file_name)
17{
18        filename.append(file_name1,strlen(file_name1));
19}
20
21bool WDTFile::init(char *map_id)
22{
23
24        if (WDT.isEof())
25        {
26        //printf("Can't find WDT file.\n");
27        return false;
28        }
29       
30        char fourcc[5];
31        size_t size;
32       
33
34        const char dirname[] = "buildings\\dir";
35        FILE *dirfile;
36    dirfile = fopen(dirname, "ab");
37        if(!dirfile)
38        {
39                printf("Can't open dirfile!'%s'\n");
40                return false;
41        }
42
43
44        while (!WDT.isEof()) 
45        {
46                WDT.read(fourcc,4);
47                WDT.read(&size, 4);
48
49                flipcc(fourcc);
50                fourcc[4] = 0;
51
52                size_t nextpos = WDT.getPos() + size;
53
54                if (!strcmp(fourcc,"MAIN")) 
55                {
56                }
57        if (!strcmp(fourcc,"MWMO")) 
58                {
59                        // global map objects
60                        if (size) 
61                        {
62                            char *buf = new char[size];
63                                WDT.read(buf, size);
64                                char *p=buf;
65                                int q = 0;
66                gWmoInstansName = new string[size];
67                                while (p<buf+size) 
68                                {
69                                        string path(p);
70                    char* s=wdtGetPlainName(p);
71                                        fixnamen(s,strlen(s));
72                                        p=p+strlen(p)+1;
73                                        gWmoInstansName[q++] = s;
74                                }
75                                delete[] buf;
76                        }
77                }               
78                else 
79                if (!strcmp(fourcc,"MODF")) 
80                {
81                        // global wmo instance data
82                        if (size)
83            {
84                            gnWMO = (int)size / 64;
85                                string gWMO_mapname;
86                                string fake_mapname;
87                                fake_mapname = "65 65 ";
88                //gWMO_mapname = fake_mapname + filename;
89                gWMO_mapname = fake_mapname + std::string(map_id);
90                            for (int i=0; i<gnWMO; i++) 
91                            {
92                                    int id;
93                                    WDT.read(&id, 4);
94                                    WMOInstance inst(WDT,gWmoInstansName[id].c_str(),gWMO_mapname.c_str(), dirfile);
95                            }
96                        delete[] gWmoInstansName;
97                        }
98                }
99                WDT.seek((int)nextpos);
100        }
101
102        WDT.close();
103    fclose(dirfile);
104        return true;
105}
106
107WDTFile::~WDTFile(void)
108{
109        WDT.close();
110}
111
112ADTFile* WDTFile::GetMap(int x, int z)
113{
114        if(!(x>=0 && z >= 0 && x<64 && z<64)) return NULL;
115       
116        char name[512];
117
118        sprintf(name,"World\\Maps\\%s\\%s_%d_%d.adt", filename.c_str(), filename.c_str(), x, z);
119        return new ADTFile(name);
120}
Note: See TracBrowser for help on using the browser.