DragonNest/Client/RMakeCmd/RMakeCmd.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

761 lines
No EOL
22 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// RMakeCmd.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <conio.h>
#include <Shlwapi.h>
#include <windows.h>
#include <direct.h>
#include <stdio.h>
#include "DNTableFile.h"
#include "SundriesFunc.h"
#include "MiniDump.h"
#include <time.h>
#include <errno.h>
#include <fcntl.h>
#include <direct.h>
#include "zip.h"
#include "iowin32.h"
#include "Zipper.h"
bool EmptyTargetPath( const char *szPath );
bool CopyFolder( const char *szPath, const char *szTargetPath, bool bSubFolder = true );
bool CopyGrid( const char *szPath, const char *szTargetPath, char *szGridName );
void LoadConfig( const char *szFileName );
void GetDepthPath( const char *szPath, char *szBuf, int nDepth );
int GetDepthPathCount( const char *szPath );
void _GetLastPathName( char *szBuf, const char *szPath );
int MakeDir( char *szBuf );
void PrintError( const char *szString, ... );
std::string s_szNation;
std::map<std::string, std::string> s_szMapIgnoreFileList;
char s_cMakeType = -1;
uLong filetime(
const char *f, /* name of file to get info on */
tm_zip *tmzip, /* return value: access, modific. and creation times */
uLong *dt /* dostime */
)
{
int ret = 0;
{
FILETIME ftLocal;
HANDLE hFind;
WIN32_FIND_DATA ff32;
hFind = FindFirstFile(f,&ff32);
if (hFind != INVALID_HANDLE_VALUE)
{
FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);
FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0);
FindClose(hFind);
ret = 1;
}
}
return ret;
}
char g_szErrorFileName[512];
int Run( int argc, _TCHAR* argv[] )
{
if( argc < 4 ) {
printf( "Argument\nRMakeCmd [Original Resource Path] [Target Resource Path] [/C/S(L,M,V,G)] [Nation(null)] [/zip(/unzip)] /revision:[Number]\n" );
return -1;
}
////////////////////////
char szResultFile[512] = { 0, };
sprintf_s( szResultFile, "%s\\rmakeresult.txt", argv[2] );
SetFileAttributes( szResultFile, FILE_ATTRIBUTE_NORMAL );
DeleteFile( szResultFile );
sprintf_s( g_szErrorFileName, "%s\\rmakeerror.txt", argv[2] );
SetFileAttributes( g_szErrorFileName, FILE_ATTRIBUTE_NORMAL );
DeleteFile( g_szErrorFileName );
///////////////////////
if( argc == 4 ) {
s_szNation = "";
}
else {
s_szNation = argv[4];
if( _stricmp( argv[4], "null" ) == NULL ) s_szNation = "";
}
if( _stricmp( argv[3], "/c" ) == NULL ) s_cMakeType = 0;
else if( _stricmp( argv[3], "/sl" ) == NULL ) s_cMakeType = 1;
else if( _stricmp( argv[3], "/sm" ) == NULL ) s_cMakeType = 2;
else if( _stricmp( argv[3], "/sv" ) == NULL ) s_cMakeType = 3;
else if( _stricmp( argv[3], "/sg" ) == NULL ) s_cMakeType = 4;
else {
PrintError( "Invalid Make Resource Type\n" );
return -1;
}
// <20><><EFBFBD><EFBFBD> äũ.
bool bCompress = false;
char szCompressFileName[512] = { 0, };
if( argc >= 6 ) {
if( _stricmp( argv[5], "/zip" ) == NULL ) {
bCompress = true;
switch( s_cMakeType ) {
case 0: sprintf_s( szCompressFileName, "DragonNest.zip" ); break;
case 1: sprintf_s( szCompressFileName, "LoginRes.zip" ); break;
case 2: sprintf_s( szCompressFileName, "MasterRes.zip" ); break;
case 3: sprintf_s( szCompressFileName, "VillageRes.zip" ); break;
case 4: sprintf_s( szCompressFileName, "GameRes.zip" ); break;
}
}
}
bool bMakeRevision = false;
int nRevision = 0;
if( argc >= 7 ) {
char szTemp[512] = { 0, };
sprintf_s( szTemp, argv[6] );
_strlwr_s( szTemp );
if( strstr( szTemp, "/revision:" ) ) {
bMakeRevision = true;
char *pPtr = _GetParsePipe( 1, szTemp, ':' );
nRevision = atoi( pPtr );
}
}
// Original üũ
if( PathIsDirectory( argv[1] ) == FALSE ) {
PrintError( "Invalid Original Resource Path\n" );
return -1;
}
// Target üũ
bool bCreateTargetPath = false;
BOOL bResult = PathIsDirectory( argv[2] );
if( PathIsDirectory( argv[2] ) == FALSE ) {
/*
if( _mkdir( argv[2] ) != 0 ) {
PrintError( "Invalid Target Resource Path\n" );
return -1;
}
else bCreateTargetPath = true;
*/
char szBuf[512];
int nDepth = GetDepthPathCount( argv[2] );
for( int i=nDepth; i>=0; i-- ) {
memset( szBuf, 0, sizeof(szBuf) );
GetDepthPath( argv[2], szBuf, i );
if( PathIsDirectory( szBuf ) == FALSE ) {
if( MakeDir( szBuf ) != 0 ) {
PrintError( "Invalid Target Resource Path\n" );
return -1;
}
}
}
bCreateTargetPath = true;
}
// Target Resource Path <20><><EFBFBD><EFBFBD>
if( !bCreateTargetPath ) {
bool bResult = EmptyTargetPath( argv[2] );
if( !bResult ) {
PrintError( "Can't Empty Target Path(1)\n" );
return -1;
}
if( PathIsDirectory( argv[2] ) == FALSE ) {
if( MakeDir( argv[2] ) != 0 ) {
PrintError( "Can't Create Target Path(2)\n" );
return -1;
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20><> <20>۷ι<DBB7> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
char szMouleName[512] = { 0, };
char szConfigFileName[512] = { 0, };
GetModuleFileName( GetModuleHandle( NULL ), szMouleName, 512 );
_GetPath( szConfigFileName, szMouleName );
sprintf_s( szMouleName, "%srmakecmd.cfg", szConfigFileName );
LoadConfig( szMouleName );
/*
s_szMapIgnoreFileList.insert( make_pair( "Thumbs.db", "" ) );
s_szMapIgnoreFileList.insert( make_pair( "lpk.dll", "" ) );
s_szMapIgnoreFileList.insert( make_pair( "midimap.dll", "" ) );
s_szMapIgnoreFileList.insert( make_pair( ".svn", "" ) );
*/
// <20>ϴ<EFBFBD> Resource <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>°<EFBFBD><C2B0> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD> <20>Ѵ<EFBFBD>.
// <20><><EFBFBD>߿<EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ھƼ<DABE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Resource <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20>ΰ<EFBFBD> <20>Ǹ<EFBFBD>
// <20>׶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>Ľ<EFBFBD><C4BD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>.( <20>̰͵<CCB0> <20>ϸ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD> <20><> <20><> )
char szOrig[512];
char szTarget[512];
sprintf_s( szOrig, "%s\\Resource", argv[1] );
sprintf_s( szTarget, "%s\\Resource", argv[2] );
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - Resource\n" );
return -1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( !s_szNation.empty() ) {
sprintf_s( szOrig, "%s\\Resource_%s", argv[1], s_szNation.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - Resource_Nation\n" );
return -1;
}
}
}
if( s_szMapIgnoreFileList.find( "/mapdata" ) == s_szMapIgnoreFileList.end() ) {
// MapData <20><><EFBFBD><EFBFBD>
sprintf_s( szOrig, "%s\\MapData", argv[1] );
sprintf_s( szTarget, "%s\\MapData", argv[2] );
if( PathFileExists( szOrig ) ) {
if( CopyFolder( szOrig, szTarget, false ) == false ) {
PrintError( "Copy Error - Map Infomation\n" );
return -1;
}
}
// Envi
sprintf_s( szOrig, "%s\\MapData\\Resource\\Envi", argv[1] );
sprintf_s( szTarget, "%s\\MapData\\Resource\\Envi", argv[2] );
if( PathFileExists( szOrig ) ) {
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Envi\n" );
return -1;
}
}
// Prop
sprintf_s( szOrig, "%s\\MapData\\Resource\\Prop", argv[1] );
sprintf_s( szTarget, "%s\\MapData\\Resource\\Prop", argv[2] );
if( PathFileExists( szOrig ) ) {
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Prop\n" );
return -1;
}
}
// Sound
sprintf_s( szOrig, "%s\\MapData\\Resource\\Sound", argv[1] );
sprintf_s( szTarget, "%s\\MapData\\Resource\\Sound", argv[2] );
if( PathFileExists( szOrig ) ) {
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Sound\n" );
return -1;
}
}
// Tile
sprintf_s( szOrig, "%s\\MapData\\Resource\\Tile", argv[1] );
sprintf_s( szTarget, "%s\\MapData\\Resource\\Tile", argv[2] );
if( PathFileExists( szOrig ) ) {
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Tile\n" );
return -1;
}
}
// Trigger
sprintf_s( szOrig, "%s\\MapData\\Resource\\Trigger", argv[1] );
sprintf_s( szTarget, "%s\\MapData\\Resource\\Trigger", argv[2] );
if( PathFileExists( szOrig ) ) {
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Trigger\n" );
return -1;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EEBEAF><EFBFBD><EFBFBD>.
if( !s_szNation.empty() ) {
// Envi
sprintf_s( szOrig, "%s\\MapData_%s\\Resource\\Envi", argv[1], s_szNation.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
sprintf_s( szTarget, "%s\\MapData\\Resource\\Envi", argv[2] );
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Envi_Nation\n" );
return -1;
}
}
// Prop
sprintf_s( szOrig, "%s\\MapData_%s\\Resource\\Prop", argv[1], s_szNation.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
sprintf_s( szTarget, "%s\\MapData\\Resource\\Prop", argv[2] );
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Prop_Nation\n" );
return -1;
}
}
// Sound
sprintf_s( szOrig, "%s\\MapData_%s\\Resource\\Sound", argv[1], s_szNation.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
sprintf_s( szTarget, "%s\\MapData\\Resource\\Sound", argv[2] );
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Sound_Nation\n" );
return -1;
}
}
// Tile
sprintf_s( szOrig, "%s\\MapData_%s\\Resource\\Tile", argv[1], s_szNation.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
sprintf_s( szTarget, "%s\\MapData\\Resource\\Tile", argv[2] );
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Tile_Nation\n" );
return -1;
}
}
// Trigger
sprintf_s( szOrig, "%s\\MapData_%s\\Resource\\Trigger", argv[1], s_szNation.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
sprintf_s( szTarget, "%s\\MapData\\Resource\\Trigger", argv[2] );
if( CopyFolder( szOrig, szTarget ) == false ) {
PrintError( "Copy Error - MapData_Trigger_Nation\n" );
return -1;
}
}
}
// Grid <20><><EFBFBD><EFBFBD> <20><><EFBFBD>鱸..
if( s_szMapIgnoreFileList.find( "/grid" ) == s_szMapIgnoreFileList.end() ) {
sprintf_s( szTarget, "%s\\MapData\\Grid", argv[2] );
if( PathIsDirectory( szTarget ) == FALSE ) {
if( MakeDir( szTarget ) != 0 ) {
PrintError( "Copy Error - Grid\n" );
return -1;
}
}
// SOX <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
DNTableFileFormat *pSox = new DNTableFileFormat;
bool bValidNation = false;
if( !s_szNation.empty() ) {
sprintf_s( szOrig, "%s\\Resource_%s\\Ext\\MapTable.ext", argv[1], s_szNation.c_str() );
if( PathFileExists( szOrig ) == TRUE ) {
bValidNation = true;
if( pSox->Load( szOrig ) == false ) {
PrintError( "Ext Open Error - Nation\n" );
return -1;
}
}
}
if( !bValidNation ) {
sprintf_s( szOrig, "%s\\Resource\\Ext\\MapTable.ext", argv[1], s_szNation.c_str() );
if( pSox->Load( szOrig ) == false ) {
PrintError( "Ext Open Error - Local\n" );
return -1;
}
}
char szLabel[64];
std::string szMapName;
for( int i=0; i<pSox->GetItemCount(); i++ ) {
int nItemID = pSox->GetItemID(i);
for( int j=0; j<10; j++ ) {
sprintf_s( szLabel, "_ToolName%d", j + 1 );
szMapName = pSox->GetFieldFromLablePtr( nItemID, szLabel )->GetString();
if( pSox->GetFieldFromLablePtr( nItemID, "_IncludeBuild" )->GetInteger() == 0 ) continue;
if( !szMapName.empty() ) {
bool bExistNation = false;
if( !s_szNation.empty() ) {
sprintf_s( szOrig, "%s\\MapData_%s\\Grid\\%s", argv[1], s_szNation.c_str(), szMapName.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
bExistNation = true;
sprintf_s( szOrig, "%s\\MapData_%s\\Grid", argv[1], s_szNation.c_str() );
sprintf_s( szTarget, "%s\\MapData\\Grid", argv[2] );
if( CopyGrid( szOrig, szTarget, (char*)szMapName.c_str() ) == false ) {
PrintError( "Copy Error - Grid( %s )\n", szMapName.c_str() );
return -1;
}
}
}
if( !bExistNation ) {
sprintf_s( szOrig, "%s\\MapData\\Grid\\%s", argv[1], szMapName.c_str() );
if( PathIsDirectory( szOrig ) != FALSE ) {
sprintf_s( szOrig, "%s\\MapData\\Grid", argv[1] );
sprintf_s( szTarget, "%s\\MapData\\Grid", argv[2] );
if( CopyGrid( szOrig, szTarget, (char*)szMapName.c_str() ) == false ) {
PrintError( "Copy Error - Grid( %s )\n", szMapName.c_str() );
return -1;
}
}
}
}
}
}
}
}
char szTemp[512] = { 0, };
sprintf_s( szTemp, "%s\\ResourceRevision.txt", argv[2] );
if( bMakeRevision ) {
FILE *fp;
fopen_s( &fp, szTemp, "wt" );
if( fp ) {
fprintf_s( fp, "Last Changed Rev: %d\n", nRevision );
fclose(fp);
}
}
if( bCompress ) {
printf( "\n\nCompress Resource................\n" );
CZipper Zip;
char szTargetCompPath[512] = { 0, };
sprintf_s( szTargetCompPath, "%s\\%s", argv[2], szCompressFileName );
DeleteFile( szTargetCompPath );
if( Zip.OpenZip( szTargetCompPath, false) == false ) {
PrintError( "Compress Error!!\n" );
return -1;
}
char szTemp[512] = { 0, };
sprintf_s( szTemp, "%s\\Resource", argv[2] );
if( PathFileExists( szTemp ) ) {
if( Zip.AddFolderToZip(szTemp, false) == false ) {
PrintError( "Compress Error!!\n" );
return -1;
}
}
sprintf_s( szTemp, "%s\\MapData", argv[2] );
if( PathFileExists( szTemp ) ) {
if( Zip.AddFolderToZip(szTemp, false) == false ) {
PrintError( "Compress Error!!\n" );
return -1;
}
}
sprintf_s( szTemp, "%s\\ResourceRevision.txt", argv[2] );
if( PathFileExists( szTemp ) ) {
if( Zip.AddFileToZip( szTemp, false ) == false ) {
PrintError( "Compress Error!!\n" );
return -1;
}
}
/*
if( CZipper::ZipFolder( argv[2], false ) == false ) {
PrintError( "Compress Error!!\n" );
return -1;
}
*/
}
////////////////////////
FILE *fp;
fopen_s( &fp, szResultFile, "w" );
fclose(fp);
///////////////////////
}
int _tmain(int argc, _TCHAR* argv[])
{
return Run( argc, argv );
}
bool EmptyTargetPath( const char *szPath )
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
char szFindFile[512];
char szTemp[512];
char szTemp2[512];
bool bResult = true;
sprintf_s( szFindFile, "%s\\*.*", szPath );
hFind = FindFirstFile( szFindFile, &FindFileData );
while( hFind != INVALID_HANDLE_VALUE ) {
if( !( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) {
sprintf_s( szTemp, "%s\\%s", szPath, FindFileData.cFileName );
SetFileAttributes( szTemp, FILE_ATTRIBUTE_NORMAL );
sprintf_s( szTemp2, "%s", szTemp );
_strlwr_s( szTemp2 );
if( strstr( szTemp2, "resourcerevision.txt" ) == NULL ) {
if( DeleteFile( szTemp ) == FALSE ) bResult = false;
}
}
if( ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) {
if( strcmp( FindFileData.cFileName, "." ) && strcmp( FindFileData.cFileName, ".." ) && strcmp( FindFileData.cFileName, ".svn" ) && strcmp( FindFileData.cFileName, "_svn" ) ) {
if( !( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) ) {
sprintf_s( szTemp, "%s\\%s", szPath, FindFileData.cFileName );
if( EmptyTargetPath( szTemp ) == false ) bResult = false;
}
}
}
if( !FindNextFile( hFind, &FindFileData ) ) break;
}
/*
if( strstr( szPath, ".svn" ) == NULL && strstr( szPath, "_svn" ) == NULL ) {
if( RemoveDirectory( szPath ) == FALSE ) bResult = false;
}
*/
FindClose( hFind );
return bResult;
}
void GetDepthPath( const char *szPath, char *szBuf, int nDepth )
{
if( nDepth == 0 ) {
strcpy( szBuf, szPath );
return;
}
int nLength = (int)strlen(szPath);
int nCount = 0;
for( int i=nLength-1; i>=0; i-- ) {
if( szPath[i] == '\\' ) {
nCount++;
if( nCount == nDepth ) {
strncpy( szBuf, szPath, i );
szBuf[i] = 0;
return;
}
}
}
}
int GetDepthPathCount( const char *szPath )
{
int nLength = (int)strlen(szPath);
int nCount = 0;
for( int i=nLength-1; i>=0; i-- ) {
if( szPath[i] == '\\' ) {
nCount++;
}
}
return nCount;
}
bool CopyFolder( const char *szPath, const char *szTargetPath, bool bSubFolder )
{
if( PathIsDirectory( szPath ) == FALSE ) return false;
char szBuf[512];
char szFindFile[512];
char szTemp[512];
char szTemp2[512];
memset( szBuf, 0, sizeof(szBuf) );
memset( szTemp, 0, sizeof(szTemp) );
_GetLastPathName( szBuf, szPath );
_strlwr_s( szBuf );
sprintf_s( szTemp, "/%s", szBuf );
if( s_szMapIgnoreFileList.find( szTemp ) != s_szMapIgnoreFileList.end() ) return true;
int nDepth = GetDepthPathCount( szTargetPath );
for( int i=nDepth; i>=0; i-- ) {
memset( szBuf, 0, sizeof(szBuf) );
GetDepthPath( szTargetPath, szBuf, i );
if( PathIsDirectory( szBuf ) == FALSE ) {
if( MakeDir( szBuf ) != 0 ) return false;
printf( "Make Folder : %s\n", szBuf );
}
}
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
bool bResult = true;
sprintf_s( szFindFile, "%s\\*.*", szPath );
hFind = FindFirstFile( szFindFile, &FindFileData );
while( hFind != INVALID_HANDLE_VALUE ) {
if( !( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) ) {
if( !( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) {
memset( szTemp2, 0, sizeof(szTemp2) );
sprintf_s( szTemp2, FindFileData.cFileName );
_strlwr_s( szTemp2 );
if( s_szMapIgnoreFileList.find( szTemp2 ) == s_szMapIgnoreFileList.end() ) {
memset( szTemp, 0, sizeof(szTemp) );
_GetExt( szTemp, szTemp2 );
bool bValid = true;
if( strlen(szTemp) > 0 ) {
sprintf_s( szTemp2, "*.%s", szTemp );
if( s_szMapIgnoreFileList.find( szTemp2 ) != s_szMapIgnoreFileList.end() ) bValid = false;
}
if( bValid ) {
sprintf_s( szTemp, "%s\\%s", szPath, FindFileData.cFileName );
sprintf_s( szTemp2, "%s\\%s", szTargetPath, FindFileData.cFileName );
_strlwr_s( szTemp2 );
CopyFile( szTemp, szTemp2, FALSE );
printf( "Copy File : %s -> %s\n", szTemp, szTemp2 );
SetFileAttributes( szTemp2, FILE_ATTRIBUTE_NORMAL );
}
}
}
if( ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) {
memset( szTemp2, 0, sizeof(szTemp2) );
sprintf_s( szTemp2, "/%s", FindFileData.cFileName );
_strlwr_s( szTemp2 );
if( s_szMapIgnoreFileList.find( szTemp2 ) == s_szMapIgnoreFileList.end() ) {
if( strcmp( FindFileData.cFileName, "." ) && strcmp( FindFileData.cFileName, ".." ) ) {
if( bSubFolder ) {
sprintf_s( szTemp, "%s\\%s", szPath, FindFileData.cFileName );
sprintf_s( szTemp2, "%s\\%s", szTargetPath, FindFileData.cFileName );
if( PathIsDirectory( szTemp2 ) == FALSE ) {
if( MakeDir( szTemp2 ) != 0 ) bResult = false;
else {
CopyFolder( szTemp, szTemp2 );
}
}
else CopyFolder( szTemp, szTemp2 );
}
}
}
}
}
if( !FindNextFile( hFind, &FindFileData ) ) break;
}
FindClose( hFind );
return bResult;
}
bool CopyGrid( const char *szPath, const char *szTargetPath, char *szGridName )
{
char szTemp[512];
char szTemp2[512];
sprintf_s( szTemp, "%s\\%s", szPath, szGridName );
sprintf_s( szTemp2, "%s\\%s", szTargetPath, szGridName );
if( CopyFolder( szTemp, szTemp2 ) == false ) return false;
sprintf_s( szTemp2, "%s\\%s\\GridInfo.ini", szTargetPath, szGridName );
FILE *fp;
fopen_s( &fp, szTemp2, "rb" );
if( fp == NULL ) return false;
DWORD dwGridX, dwGridY;
fseek( fp, 64, SEEK_SET );
fread( &dwGridX, sizeof(DWORD), 1, fp );
fread( &dwGridY, sizeof(DWORD), 1, fp );
fclose(fp);
for( DWORD j=0; j<dwGridY; j++ ) {
for( DWORD i=0; i<dwGridX; i++ ) {
sprintf_s( szTemp2, "%s\\%s\\%d_%d\\Thumbnail.tga", szTargetPath, szGridName, i, j );
SetFileAttributes( szTemp2, FILE_ATTRIBUTE_NORMAL );
DeleteFile( szTemp2 );
}
}
std::vector<std::string> szVecList;
sprintf_s( szTemp2, "%s\\%s", szTargetPath, szGridName );
FindFileListInDirectory( szTemp2, "*.dds", szVecList, false, false );
char szName[512];
char szTempGridName[512];
for( DWORD i=0; i<szVecList.size(); i++ ) {
memset( szName, 0, sizeof(szName) );
memset( szTempGridName, 0, sizeof(szTempGridName) );
strcpy_s( szTempGridName, szGridName );
_GetFileName( szName, szVecList[i].c_str() );
_strlwr_s( szName );
_strlwr_s( szTempGridName );
if( strstr( szName, szTempGridName ) == NULL ) {
sprintf_s( szTemp2, "%s\\%s\\%s", szTargetPath, szGridName, szVecList[i].c_str() );
DeleteFile( szTemp2 );
}
}
return true;
}
void LoadConfig( const char *szFileName )
{
FILE *fp;
fopen_s( &fp, szFileName, "rt" );
if( fp == NULL ) return;
char szTemp[1024];
char cFlag = -1;
while( !feof(fp) ) {
memset( szTemp, 0, sizeof(szTemp) );
fscanf_s( fp, "%s", szTemp, 1024 );
if( _stricmp( szTemp, "[Common]" ) == NULL ) cFlag = 0;
else if( _stricmp( szTemp, "[Client]" ) == NULL ) cFlag = 1;
else if( _stricmp( szTemp, "[Server]" ) == NULL ) cFlag = 2;
else if( _stricmp( szTemp, "[Login]" ) == NULL ) cFlag = 3;
else if( _stricmp( szTemp, "[Master]" ) == NULL ) cFlag = 4;
else if( _stricmp( szTemp, "[Village]" ) == NULL ) cFlag = 5;
else if( _stricmp( szTemp, "[Game]" ) == NULL ) cFlag = 6;
else {
if( strlen( szTemp ) == 0 ) continue;
_strlwr_s( szTemp );
switch( cFlag ) {
case 0:
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
case 1:
if( s_cMakeType != 0 ) break;
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
case 2:
if( s_cMakeType < 1 ) break;
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
case 3:
if( s_cMakeType != 1 ) break;
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
case 4:
if( s_cMakeType != 2 ) break;
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
case 5:
if( s_cMakeType != 3 ) break;
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
case 6:
if( s_cMakeType != 4 ) break;
s_szMapIgnoreFileList.insert( make_pair( szTemp, "" ) );
break;
default:
continue;
}
}
}
fclose(fp);
}
void _GetLastPathName( char *szBuf, const char *szPath )
{
int nLength = (int)strlen(szPath);
int nOffset = 0;
for( int i=nLength - 1; i>=0; i-- ) {
if( szPath[i] == '\\' || szPath[i] == ':' ) {
memcpy( szBuf, szPath + i + 1, nOffset );
szBuf[nOffset] = 0;
break;
}
// szBuf[nOffset] = szPath[i];
nOffset++;
}
}
int MakeDir( char *szBuf )
{
char szTemp[512] = { 0, };
sprintf_s( szTemp, szBuf );
_strlwr_s( szTemp );
return _mkdir( szTemp );
}
void PrintError( const char *szString, ... )
{
va_list list;
char szTemp[65535];
va_start( list, szString );
vsprintf_s( szTemp, szString, list );
printf( szTemp );
FILE *fp;
fopen_s( &fp, g_szErrorFileName, "at" );
if( fp ) {
fprintf_s( fp, szTemp );
fclose(fp);
}
s_pDefaultOutputDebugFunc( szTemp );
va_end( list );
}