5 char * GetPlainName(char * FileName
)
9 if((szTemp
= strrchr(FileName
, '\\')) != NULL
)
10 FileName
= szTemp
+ 1;
14 void fixnamen(char *name
, size_t len
)
16 for (size_t i
=0; i
<len
-3; i
++)
18 if (i
>0 && name
[i
]>='A' && name
[i
]<='Z' && isalpha(name
[i
-1]))
21 } else if ((i
==0 || !isalpha(name
[i
-1])) && name
[i
]>='a' && name
[i
]<='z')
27 void fixname2(char *name
, size_t len
)
29 for (size_t i
=0; i
<len
-3; i
++)
36 ADTFile::ADTFile(char* filename
): ADT(filename
)
38 Adtfilename
.append(filename
);
41 bool ADTFile::init(char *map_id
)
51 Adtfilename
.erase(Adtfilename
.find(".adt"),4);
53 TempMapNumber
= Adtfilename
.substr(Adtfilename
.length()-6,6);
54 xMap
= TempMapNumber
.substr(TempMapNumber
.find("_")+1,(TempMapNumber
.find_last_of("_")-1) - (TempMapNumber
.find("_")));
55 yMap
= TempMapNumber
.substr(TempMapNumber
.find_last_of("_")+1,(TempMapNumber
.length()) - (TempMapNumber
.find_last_of("_")));
56 Adtfilename
.erase((Adtfilename
.length()-xMap
.length()-yMap
.length()-2), (xMap
.length()+yMap
.length()+2));
57 string AdtMapNumber
= xMap
+ ' ' + yMap
+ ' ' + GetPlainName((char*)Adtfilename
.c_str());
58 printf("Processing map %s...\n", AdtMapNumber
.c_str());
59 //printf("MapNumber = %s\n", TempMapNumber.c_str());
60 //printf("xMap = %s\n", xMap.c_str());
61 //printf("yMap = %s\n", yMap.c_str());
63 const char dirname
[] = "buildings\\dir";
65 dirfile
= fopen(dirname
, "ab");
68 printf("Can't open dirfile!'%s'\n");
81 size_t nextpos
= ADT
.getPos() + size
;
83 if (!strcmp(fourcc
,"MCIN"))
87 else if (!strcmp(fourcc
,"MTEX"))
90 else if (!strcmp(fourcc
,"MMDX"))
94 char *buf
= new char[size
];
98 ModelInstansName
= new string
[size
];
101 fixnamen(p
,strlen(p
));
103 char* s
=GetPlainName(p
);
104 fixname2(s
,strlen(s
));
106 ModelInstansName
[t
++] = s
;
108 // < 3.1.0 ADT MMDX section store filename.mdx filenames for corresponded .m2 file
109 std::string ext3
= path
.size() >= 4 ? path
.substr(path
.size()-4,4) : "";
110 std::transform( ext3
.begin(), ext3
.end(), ext3
.begin(), ::tolower
);
113 // replace .mdx -> .m2
114 path
.erase(path
.length()-2,2);
117 // >= 3.1.0 ADT MMDX section store filename.m2 filenames for corresponded .m2 file
120 char szLocalFile
[MAX_PATH
];
121 sprintf(szLocalFile
, ".\\buildings\\%s", s
);
122 FILE * output
= fopen(szLocalFile
,"rb");
125 Model
* m2
= new Model(path
);
127 m2
->ConvertToVMAPModel(szLocalFile
);
138 else if (!strcmp(fourcc
,"MWMO"))
142 char *buf
= new char[size
];
146 WmoInstansName
= new string
[size
];
150 char* s
=GetPlainName(p
);
151 fixnamen(s
,strlen(s
));
152 fixname2(s
,strlen(s
));
154 WmoInstansName
[q
++] = s
;
159 //======================
160 else if (!strcmp(fourcc
,"MDDF"))
164 nMDX
= (int)size
/ 36;
165 for (int i
=0; i
<nMDX
; ++i
)
169 ModelInstance
inst(ADT
,ModelInstansName
[id
].c_str(),map_id
, dirfile
);//!!!!!!!!!!!
171 delete[] ModelInstansName
;
174 else if (!strcmp(fourcc
,"MODF"))
178 nWMO
= (int)size
/ 64;
179 for (int i
=0; i
<nWMO
; ++i
)
183 WMOInstance
inst(ADT
,WmoInstansName
[id
].c_str(),map_id
, dirfile
);//!!!!!!!!!!!!!
185 delete[] WmoInstansName
;
188 //======================
190 else if (!strcmp(fourcc
,"MDDF"))
194 nMDX
= (int)size
/ 36;
195 for (int i
=0; i
<nMDX
; ++i
)
199 ModelInstance
inst(ADT
,ModelInstansName
[id
].c_str(),AdtMapNumber
.c_str(), dirfile
);
201 delete[] ModelInstansName
;
204 else if (!strcmp(fourcc
,"MODF"))
208 nWMO
= (int)size
/ 64;
209 for (int i
=0; i
<nWMO
; ++i
)
213 WMOInstance
inst(ADT
,WmoInstansName
[id
].c_str(),AdtMapNumber
.c_str(), dirfile
);
215 delete[] WmoInstansName
;