// ResourceCheckerDlg.cpp : ±¸Çö ÆÄÀÏ // #include "stdafx.h" #include "ResourceChecker.h" #include "ResourceCheckerDlg.h" ////////////////////////////////////////////////////////////////////////// #include "FilePackSystem.h" #include "./client/FilterManager.h" #include "./client/GameResourceManager.h" #include "./client/uimanager.h" #include "./client/TarotManager.h" #include "./client/TipManager.h" #include "./client/TutorialManager.h" #include "./client/MakeStage.h" #include "./client/DramaturgyManager.h" #include "./client/ItemManager.h" #include "./client/TriggerManager.h" #include "./client/QuestManager.h" #include "./client/ShortcutManager.h" #include "./client/RenderSystem.h" #include "./client/ResourceManager.h" #include "./client/SoundSystem.h" #include "./client/TitleManager.h" #include "./client/LoadStage.h" #include "./client/WorldManager.h" #include "./client/SceneManager.h" #include "FilePack.h" #include "./application.h" //#include "./common/SkillScript.h" // #include "./client/ItemManager.h" #include "./client/ItemDefine.h" ////////////////////////////////////////////////////////////////////////// #ifdef _DEBUG #define new DEBUG_NEW #endif // ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù. class CAboutDlg : public CDialog { public: CAboutDlg(); // ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. // ±¸ÇöÀÔ´Ï´Ù. protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CResourceCheckerDlg ´ëÈ­ »óÀÚ CResourceCheckerDlg::CResourceCheckerDlg(CWnd* pParent /*=NULL*/) : CDialog(CResourceCheckerDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } CResourceCheckerDlg::~CResourceCheckerDlg() { SAFE_DELETE(mpMakeStage); SAFE_DELETE(mpTutorialManager); SAFE_DELETE(mpTipManager); SAFE_DELETE(mpTarotManager); SAFE_DELETE(mpUIManager); SAFE_DELETE(mpGameResourceManager); SAFE_DELETE(mpFilterManager); SAFE_DELETE(mpShortcutManager); SAFE_DELETE(mpQuestManager); SAFE_DELETE(mpFileSystem); SAFE_DELETE(mpTriggerManager); SAFE_DELETE(mpItemManager); SAFE_DELETE(mpDramaturgyManager); SAFE_DELETE(mpRenderSystem); SAFE_DELETE(mpResourceManager); SAFE_DELETE(mpSoundSystem); SAFE_DELETE(mpTitleManager); SAFE_DELETE(mpLoadStage); SAFE_DELETE(mpWorldManager); SAFE_DELETE(mpSceneManager); NiShutdown(); } void CResourceCheckerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_PATH, mEditPath); DDX_Control(pDX, IDC_COMBO_LANG, mComboLanguage); DDX_Control(pDX, ID_BUTTON_START, mButtonStart); DDX_Control(pDX, IDCANCEL, mButtonCancel); DDX_Control(pDX, IDC_BUTTON_PATH, mButtonPath); DDX_Control(pDX, IDC_NOTICE, mEditNotice); } BEGIN_MESSAGE_MAP(CResourceCheckerDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON_PATH, &CResourceCheckerDlg::OnBnClickedButtonPath) ON_BN_CLICKED(ID_BUTTON_START, &CResourceCheckerDlg::OnBnClickedButtonStart) END_MESSAGE_MAP() // CResourceCheckerDlg ¸Þ½ÃÁö 󸮱â BOOL CResourceCheckerDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. mComboLanguage.AddString( _T( "korea") ); mComboLanguage.SetCurSel( 0 ); TCHAR path[MAX_PATH] = {0,}; GetCurrentDirectory( sizeof(path), path ); mEditPath.SetWindowText( path ); mpDramaturgyManager = 0; mpItemManager = 0; mpTriggerManager = 0; mpFileSystem = 0; mpQuestManager = 0; mpShortcutManager = 0; mpFilterManager = 0; mpGameResourceManager = 0; mpUIManager = 0; mpTarotManager = 0; mpTipManager = 0; mpTutorialManager = 0; mpMakeStage = 0; mpRenderSystem = 0; mpResourceManager = 0; mpSoundSystem = 0; mpTitleManager = 0; mpLoadStage = 0; mpWorldManager = 0; mpSceneManager = 0; /// Gamebryo ½º¸¶Æ® Æ÷ÀÎÆ® »ç¿ë°´Ã¼¿¡ ´ëÇÑ Ã¼Å© #ifdef _DEBUG unsigned int initialCount = NiRefObject::GetTotalObjectCount(); #endif /// Static Data Manager ÃʱâÈ­ : library µéÀ» ¿ä±¸ÇÑ´Ù. Áï ¿£Áø ½Ã½ºÅÛÀÇ load¶ó°í º¸¿©Áü.. //NiInitOptions option; mBryoOption.SetFloodgateParallelExecution( false ); NiStaticDataManager::Init( &mBryoOption ); return TRUE; // Æ÷Ä¿½º¸¦ ÄÁÆ®·Ñ¿¡ ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. } void CResourceCheckerDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX ) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é // ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. void CResourceCheckerDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù. dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­ // ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. HCURSOR CResourceCheckerDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CResourceCheckerDlg::OnBnClickedButtonPath() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. TCHAR folderPath[MAX_PATH] = {0,}; TCHAR* pTitle = _T("Select IrisOnline Directory"); ITEMIDLIST *pidlBrowse = NULL; BROWSEINFO BrInfo; BrInfo.hwndOwner = GetSafeHwnd(); BrInfo.pidlRoot = NULL; memset( &BrInfo, 0, sizeof(BrInfo) ); BrInfo.pszDisplayName = folderPath; BrInfo.lpszTitle = pTitle; BrInfo.ulFlags = BIF_RETURNONLYFSDIRS; // ´ÙÀ̾ó·Î±×¸¦ ¶ç¿ì±â pidlBrowse = ::SHBrowseForFolder(&BrInfo); if( pidlBrowse != NULL) { // ÆÐ½º¸¦ ¾ò¾î¿È ::SHGetPathFromIDList( pidlBrowse, folderPath ); mEditPath.SetWindowText( folderPath ); if( SetCurrentDirectory( folderPath ) == FALSE ) { MessageBoxA( GetSafeHwnd(), "ÀÛ¾÷ Æú´õ ¼³Á¤ ½ÇÆÐ", "Error", MB_OK | MB_ICONERROR ); } } } void CResourceCheckerDlg::OnBnClickedButtonStart() { mButtonStart.EnableWindow( FALSE ); mButtonCancel.EnableWindow( FALSE ); mButtonPath.EnableWindow( FALSE ); mpDramaturgyManager = new cDramaturgyManager; if( !mpDramaturgyManager ) { MessageBoxA( NULL, "Failed to Init DramaturgyManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// ¾ÆÀÌÅÛ °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpItemManager = new cItemManager; if( mpItemManager == 0 ) { MessageBoxA( NULL, "Failed to Init Itemmanager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpTriggerManager = new cTriggerManager; if( mpTriggerManager == 0 ) { MessageBoxA( NULL, "Failed to Init Triggermanager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } ////////////////////////////////////////////////////////////////////////// // application.cpp Init() ºÎ // ÆÄÀÏ ÆÑ ½Ã½ºÅÛÀ» »ý¼º mpFileSystem = new cFilePackSystem; if( !mpFileSystem || !mpFileSystem->Init() ) { MessageBoxA( NULL, "Failed to Init FileSystem", "Error", MB_OK | MB_ICONERROR ); Clear(); return ; } /// ·»´õ¸µ ½Ã½ºÅÛÀ» »ý¼º ¹× ÃʱâÈ­ mpRenderSystem = new cRenderSystem( GetSafeHwnd() ); if( !mpRenderSystem || !mpRenderSystem->Init() ) { MessageBoxA( NULL, "Failed to Init RenderSystem", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// ÀÚ¿ø °ü¸®ÀÚ¸¦ »ý¼º ¹× ÃʱâÈ­ mpResourceManager = new cResourceManager; if( !mpResourceManager || !mpResourceManager->Init() ) { MessageBoxA( NULL, "Failed to Init Resource manager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// »ç¿îµå ½Ã½ºÅÛ »ý¼º ¹× ÃʱâÈ­ mpSoundSystem = new cSoundSystem; if( !mpSoundSystem || !mpSoundSystem->Init() ) { MessageBoxA( NULL,"Failed to Init SoundSystem", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpSoundSystem->SetHWND( GetSafeHwnd() ); /// Àå¸é °ü¸®ÀÚ¸¦ »ý¼º mpSceneManager = new cSceneManager; if( !mpSceneManager || !mpSceneManager->Init() ) { MessageBoxA( NULL,"Failed to Init scene manager", "Error", MB_OK | MB_ICONERROR ); Clear(); return ; } ////////////////////////////////////////////////////////////////////////// mpQuestManager = new cQuestManager; if( mpQuestManager == 0 ) { MessageBoxA( NULL, "Failed to Init Questmanager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpShortcutManager = new cShortcutManager; if( !mpShortcutManager ) { MessageBoxA( NULL, "Failed to Init ShortcutManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpFilterManager = new cFilterManager; if( mpFilterManager == 0 || mpFilterManager->Init() == false ) { MessageBoxA( NULL, "Failed to Init FilterManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// °ÔÀÓ ¸®¼Ò½º °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpGameResourceManager = new cGameResourceManager; if( !mpGameResourceManager || !mpGameResourceManager->Init() ) { MessageBoxA( NULL, "Failed to Init GameResourceManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpUIManager = new cUIManager; if( !mpUIManager || mpUIManager->Init() == false ) { MessageBoxA( NULL, "Failed to Init UIManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// Ÿ·Ô °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpTarotManager = new cTarotManager; if( mpTarotManager == 0 || mpTarotManager->Init() == false ) { MessageBoxA( NULL, "Failed to Init TarotManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// ÆÁ °ü¸®ÀÚ »ý¼º mpTipManager = new cTipManager; if( !mpTipManager || !mpTipManager->Init() ) { MessageBoxA( NULL, "Failed to Init TipManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpTutorialManager = new cTutorialManager; if( !mpTutorialManager || !mpTutorialManager->Init() ) { MessageBoxA( NULL, "Failed to Init TutorialManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } /// ȣĪ °ü¸®ÀÚ »ý¼º mpTitleManager = new cTitleManager; if( !mpTitleManager ) { MessageBoxA( NULL, "Failed to Init TitleManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } { ///¸Þ¸ð¸® Áß°£ ÇØÁ¦ SAFE_DELETE( mpTarotManager ); SAFE_DELETE( mpTipManager ); SAFE_DELETE( mpTutorialManager ); } mpGameResourceManager->IntroLoadThread(); mpResourceManager->Clean(); mpGameResourceManager->LoginLoadThread(); mpResourceManager->Clean(); mpGameResourceManager->InitLogin(); mpGameResourceManager->InitServer(); mpGameResourceManager->ServerLoadThread(); mpMakeStage = new cMakeStage; if( !mpMakeStage ) { MessageBoxA( NULL, "Failed to Init MakeStage", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpMakeStage->InitStage(); // ½ºÅ³ ¿¬Ã⠺κР°­Á¦ ·Îµù [12/14/2009 Jo_Client] typedef tPointerHashMap cSkillMap; cSkillMap* skillListMap = SKILLSCRIPT->GetPlayerSkillInfoMap(); if( skillListMap && skillListMap->IsEmpty() == false ) { cSkillMap::cConstIterator pos = skillListMap->Begin(); cSkillMap::cConstIterator end = skillListMap->End(); for( ; pos != end; ++pos ) { unsigned long skillIndex = (*pos).mFirst; sPlayerSkillBaseInfo* pSkillInfo = (sPlayerSkillBaseInfo*)(*pos).mSecond; if( pSkillInfo && pSkillInfo->mType != eSKILLTYPE_PASSIVE ) DRAMATURGYMAN->DirectLoadPlayerDramaObj( skillIndex ); } } mpResourceManager->Clean(); /// ¼Ò½º¿¡¼­ Á÷Á¢ ·Îµù ÇÏ´Â ÆÄÀÏµé ·Îµù for( int cnt = 0; cnt < eLoadTexture; ++cnt ) { if( RESOURCEMAN->LoadTexture( LoadInSource[cnt], false ) == false ) assert(0); } for( int cnt = eLoadTexture; cnt < eLoadMapTexture; ++cnt ) { if( RESOURCEMAN->LoadMapTexture( LoadInSource[cnt], false ) == false ) assert(0); } for( int cnt = eLoadMapTexture; cnt < eLoadNif; ++cnt ) { if( RESOURCEMAN->LoadNIF( LoadInSource[cnt], false ) == false ) assert(0); } for( int cnt = eLoadNif; cnt < eLoadMapNif; ++cnt ) { if( RESOURCEMAN->LoadMapNIF( LoadInSource[cnt] ) == false ) assert(0); } ////////////////////////////////////////////////////////////////////////// // ¿ùµå °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpWorldManager = new cWorldManager; if( !mpWorldManager )//|| !mpWorldManager->Init() ) { MessageBoxA( NULL, "Failed to Init WorldManager", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } mpLoadStage = new cLoadStage; if( !mpLoadStage ) { MessageBoxA( NULL, "Failed to Init LoadStage", "Error", MB_OK | MB_ICONERROR ); Clear(); return; } //////////////////////////////////////////////////////////////////////// typedef tPointerHashMap cArrayHashMap; cArrayHashMap* mapArr = mpGameResourceManager->GetMapInfo(); cArrayHashMap::cConstIterator pos; cArrayHashMap::cConstIterator end; if( mapArr ) { pos = mapArr->Begin(); end = mapArr->End(); } else pos = end; /// ³­À̵µ¿¡ µû¸¥ Áߺ¹µÈ ¸ÊÀ» ÀÐÁö ¾Êµµ·Ï üũ tHashSet loadMapSet; for( ; pos != end; ++pos ) { unsigned long mapIndex = (*pos).mFirst; cArrayHashMap* mapModeArr = (cArrayHashMap*)(*pos).mSecond; unsigned long mapMode = 0; if( mapModeArr ) { cArrayHashMap::cConstIterator pos2 = mapModeArr->Begin(); sMapInfo* pMapInfo = (sMapInfo*)(*pos2).mSecond; if( pMapInfo ) { /// Áߺ¹µÈ ¸Ê üũ // if( loadMapSet.Find( pMapInfo->folderIdx ) != loadMapSet.End() ) // continue; loadMapSet.Insert( pMapInfo->folderIdx ); mapMode = pMapInfo->mapMode; /// ¹Ì´Ï¸Ê ·Îµù cString pathName; pathName.Format( "./language/%s/MapImage_%02d.tga", cApplication::mLangaugeFolder.Cstr(), pMapInfo->folderIdx ); NiTexture* ptex = RESOURCEMAN->LoadTexture( pathName, false ); if( ptex == 0 ) { assert( 0 && "failed to load texture" ); return; } } else assert(0); } else assert(0); mpLoadStage->Open(); while( 1 ) { mpLoadStage->Process( mapIndex, mapMode ); if( mpLoadStage->GetLoadState() == cLoadStage::eLOADSTATE_END || mpLoadStage->GetLoadState() == cLoadStage::eLOADSTATE_NONE ) break; } mpSceneManager->Clear(); //mpResourceManager->Close(); mpResourceManager->Clean(); cStringT msg; msg.Format( _T("%s ¸Ê(³­À̵µ:%d) ·Îµù Áß"), GAMERESOURCEMAN->GetMapName( mapIndex ), mapMode ); mEditNotice.SetWindowText( msg.Cstr() ); mEditNotice.Invalidate(); } /// Ŭ¶óÀÌ¾ðÆ® Á¤º¸ ¼öÁý char currentPath[MAX_PATH] = {0,}; ::GetCurrentDirectoryA( MAX_PATH, currentPath ); Search( currentPath, gCheckFolder[0] ); Search( currentPath, gCheckFolder[1] ); Search( currentPath, gCheckFolder[2] ); Search( currentPath, gCheckFolder[3] ); /// ·ÎµåÇÑ µ¥ÀÌÅÍ Á¤º¸ ¼öÁý tHashSet& logList = mpFileSystem->GetLog(); if( logList.GetSize() < 1 ) assert(0); /// Ŭ¶óÀÌ¾ðÆ® ¸®½ºÆ®¿¡¼­ ¾È¾²´Â ÆÄÀÏ »Ì¾Æ³»±â tHashSet::cConstIterator logPos = logList.Begin(); tHashSet::cConstIterator logEnd = logList.End(); for( ; logPos != logEnd; ++logPos ) { cString fileName = (*logPos); tSet::cIterator findPos; findPos = mFileList.Find( fileName ); if( findPos != mFileList.End() ) { mFileList.Erase( findPos ); } } /// Ŭ¶óÀÌ¾ðÆ® ¸®½ºÆ®¿¡¼­ ¾È¾²´Â ÆÄÀÏ ÅØ½ºÆ® ÆÄÀÏ·Î ÀúÀåÇϱâ cString fileLIstName; fileLIstName.Format( "%s\\FileList.txt", currentPath ); FILE* stream; errno_t err; err = fopen_s( &stream, fileLIstName.Cstr(), "wt" ); if ( stream != NULL ) { tSet::cConstIterator pos = mFileList.Begin(); tSet::cConstIterator end = mFileList.End(); cString fileName; for( ; pos != end; ++pos ) { fileName = (*pos); if( fileName.GetLength() < 1 ) assert(0); char buffer[ 1024 ] = { 0, }; sprintf_s( buffer ,"%s\n" , fileName.Cstr() ); fputs( buffer, stream ); } } fclose( stream ); stream = NULL; Clear(); MessageBoxA( NULL, "Resource files Check End", "Notice", MB_OK | MB_APPLMODAL ); } void CResourceCheckerDlg::Clear() { if( mButtonStart ) mButtonStart.EnableWindow( TRUE ); if( mButtonCancel ) mButtonCancel.EnableWindow( TRUE ); if( mButtonPath ) mButtonPath.EnableWindow( TRUE ); SAFE_DELETE(mpMakeStage); SAFE_DELETE(mpTutorialManager); SAFE_DELETE(mpTipManager); SAFE_DELETE(mpTarotManager); SAFE_DELETE(mpUIManager); SAFE_DELETE(mpGameResourceManager); SAFE_DELETE(mpFilterManager); SAFE_DELETE(mpShortcutManager); SAFE_DELETE(mpQuestManager); SAFE_DELETE(mpFileSystem); SAFE_DELETE(mpTriggerManager); SAFE_DELETE(mpItemManager); SAFE_DELETE(mpDramaturgyManager); SAFE_DELETE(mpRenderSystem); SAFE_DELETE(mpResourceManager); SAFE_DELETE(mpSoundSystem); SAFE_DELETE(mpTitleManager); SAFE_DELETE(mpLoadStage); SAFE_DELETE(mpWorldManager); SAFE_DELETE(mpSceneManager); mFileList.Clear(); }; int CResourceCheckerDlg::Search( char* root, char* sub ) { HANDLE search = NULL; char where[ 1024 ]; char filename[ 1024 ]; WIN32_FIND_DATAA fileData; // ÇÏÀ§ µð·ºÅ丮 Àû¿ë¿©ºÎ if ( sub ) sprintf_s( where, "%s\\%s", root, sub ); else sprintf_s( where, "%s", root ); sprintf_s( filename, "%s\\*.*", where ); search = FindFirstFileA( filename, &fileData ); if ( search != INVALID_HANDLE_VALUE ) { do { if ( fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if ( (strcmp( fileData.cFileName, "." ) != 0) && (strcmp( fileData.cFileName, ".." ) != 0) ) { bool IsCheckFolder = false; char directory[ 1024 ] = {0,}; if ( sub ) sprintf_s( directory, "%s\\%s", sub, fileData.cFileName ); else sprintf_s( directory, "%s", fileData.cFileName ); bool isCheckFolder = false; for( int index = CHECK_FOLDER_DATA; index < CHECK_FOLDER_COUNT ; ++index ) { if( _strnicmp( directory, gCheckFolder[index], strlen( gCheckFolder[index] ) ) == 0 ) { isCheckFolder = true; break; } } if( isCheckFolder == false ) break; Search( root, directory ); // Àç±ÍÈ£Ãâ. } } else if ( fileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE ) { char fullpath[ 1024 ] = {0,};; charT fullpathW[ 1024 ] = {0,}; if ( sub ) sprintf_s( fullpath, "%s\\%s\\%s", root, sub, fileData.cFileName ); else sprintf_s( fullpath, "%s\\%s", root, fileData.cFileName ); ::ConvertToUnicode( fullpath, fullpathW, sizeof( fullpathW ) ); cString fileName; if( sub ) fileName.Format( "%s\\%s", sub, fileData.cFileName ); else fileName.Format( "%s", fileData.cFileName ); if( ::strstr( fileData.cFileName, ".pack" ) != NULL ) { cFilePack pack; if( pack.Open( fullpathW, cFilePack::OPEN_READONLY ) == true ) { for( unsigned int index = 0, index_limit = pack.GetNumFiles(); index < index_limit ; ++index ) { /// .pack ¿­±â cFileInPackInfo fipi; if( pack.GetFileInfo( &fipi, index) == false ) continue; if( fipi.IsDirectory() ) continue; char filePathInPack[1024] = {0,}; ConvertToAscii( fipi.GetPathName().Cstr(), filePathInPack, sizeof( filePathInPack) ); /// ¸íÈ®¼º °Ë»ç. fipi.pathname °ú filenameÀ» ºñ±³ÇÏ¿© ÇöÀç ¸Â´Â °æ·Î¿¡ ÀÖ´Â pack ÆÄÀÏÀ» ¿­¾ú´ÂÁö °Ë»ç. /// °ÔÀÓ ¼³Ä¡ Æú´õ ¾È¿¡ pack ÆÄÀÏÀÌ ´Ù¸¥ °÷À¸·Î ¿Å°Ü Á³°Å³ª, ´Ù¸¥ À̸§À¸·Î ÀúÀåµÇ¾ú´Ù¸é ÇöÀç pack ÆÄÀÏ ¹«½Ã. /// ±×¸®°í À̸§Àº ´Ù¸£Áö¸¸ ¾ÈÀÇ ³»¿ë¹°ÀÌ µ¿ÀÏÇÑ ÆÄÀÏÀÌ ÀÖ´Ù¸é key °ªÀ¸·Î µé¾î°¡´Â fipi.pathname ÀÌ °ãÄ¡¹Ç·Î ÇöÀç pack ÆÄÀÏ ¹«½ÃÇØ¾ß ÇÔ. if( index == 0 && _strnicmp( fileName.Cstr(), filePathInPack, ::strlen(fileName.Cstr()) - 5 ) != 0 ) break; //cString path = filePathInPack; cString path; path.Format( "%s/%s", root, filePathInPack ); path.Replace( '\\', '/' ); path.ToLower(); if( strstr( path.Cstr(), ".setting" ) == NULL ) mFileList.Insert( path ); } } pack.Close(); } else { cString path; // if ( sub ) // path.Format( "./%s\\%s", sub, fileData.cFileName ); // else // path.Format( "./%s", fileData.cFileName ); if ( sub ) path.Format( "%s\\%s\\%s", root, sub, fileData.cFileName ); else path.Format( "%s\\%s", root, fileData.cFileName ); path.Replace( '\\', '/' ); path.ToLower(); if( strstr( path.Cstr(), ".setting" ) == NULL ) { if( mFileList.Insert( path ) == false ) { assert(0); } } } } } while ( FindNextFileA( search, &fileData ) ); FindClose( search ); return 0; } return -1; // °Ë»ö ½ÇÆÐ. }