diff --git a/Server/DNDBServer/DNDBServer.cpp b/Server/DNDBServer/DNDBServer.cpp index 418e66f8..5a38ed7d 100644 --- a/Server/DNDBServer/DNDBServer.cpp +++ b/Server/DNDBServer/DNDBServer.cpp @@ -102,7 +102,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) g_Config.nCombineWorldDBID = nCombineWorldID; if( g_Config.nCombineWorldDBID <= 0 ) - g_Log.Log(LogType::_FILELOG, L" DBID Ǿ Ȯּ. ̿ ϴ.\r\n"); + g_Log.Log(LogType::_FILELOG, L"월드통합 관련 DBID가 설정되었는지 확인해주세요. 설정하지 않으면 제대로 이용할 수가 없습니다.\r\n"); else g_Log.Log(LogType::_FILELOG, L"CombineWorld = %d\r\n", g_Config.nCombineWorldDBID); #endif @@ -130,7 +130,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) #if defined( PRE_WORLDCOMBINE_PARTY ) g_IniFile.GetValue(L"DB_DNWorld", L"CombineWorldDB", &g_Config.nCombineWorldDBID); if( g_Config.nCombineWorldDBID <= 0 ) - g_Log.Log(LogType::_FILELOG, L" DBID Ǿ Ȯּ. ̿ ϴ.\r\n"); + g_Log.Log(LogType::_FILELOG, L"월드통합 관련 DBID가 설정되었는지 확인해주세요. 설정하지 않으면 제대로 이용할 수가 없습니다.\r\n"); #endif // #if defined( PRE_WORLDCOMBINE_PARTY ) WCHAR wszLogStr[128] = {0,}; @@ -170,7 +170,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) g_IniFile.GetValue(L"DB_DNWorld", wszData, g_Config.WorldDB[i].wszDBName); } - // ResourcePath ش. + // ResourcePath 등록해준다. WCHAR wszPath[_MAX_PATH] = { 0, }; char szPath[_MAX_PATH] = { 0, }; @@ -193,10 +193,10 @@ bool LoadConfig(int argc, TCHAR * argv[]) } } - //󸶴 Ʋ config д´. + //나라마다 틀리고 고정 값은 공통으로 config에서 읽는다. if (g_Config.nThreadMax > THREADMAX) g_Config.nThreadMax = THREADMAX; - // ̵ ڰ ڵ忡 . + // 미들웨어 쓰레드 인자값과 상관없이 코드에 박음. g_Config.nThreadMax = THREADMAX; #if defined(_KRAZ) @@ -242,7 +242,7 @@ bool InitApp(int argc, TCHAR * argv[]) #if defined(_DEBUG) && defined(_WORK) if ( CheckWorkingFolder(L"out") == false ) { - wprintf(L"۾ 丮 ּ!!!! setworking folder error " ); + wprintf(L"작업 디렉토리를 설정해주세요!!!! setworking folder error " ); } #endif @@ -289,12 +289,16 @@ bool InitApp(int argc, TCHAR * argv[]) g_Log.SetServerID(g_Config.nManagedID); - // ResourceMng + // ResourceMng 생성 CEtResourceMng::CreateInstance(); - // Path + // TODO(Cussrro): 固定资源路径 + std::string path = ".\\GameRes"; + g_Config.szResourcePath = path; + + // Path 설정 std::string szResource = g_Config.szResourcePath + "\\Resource"; - // + // 국가별 셋팅 std::string szNationStr; if( szNationStr.empty() && !g_Config.szResourceNation.empty() ) szNationStr = g_Config.szResourceNation; if( !szNationStr.empty() ) @@ -413,12 +417,12 @@ void ClearApp() int _tmain(int argc, TCHAR* argv[]) { #if defined( PRE_PARTY_DB ) - // PartyList ɰ µ Ŷ ִ Network 󿡼 ִ ִ ũⰡ Ѿ Ÿӽ ˻Ѵ. + // PartyList 를 쪼개서 보내는데 한 패킷의 최대사이즈가 Network 상에서 보낼수 있는 최대 크기가 넘어가는지 컴파일타임시 검사한다. BOOST_STATIC_ASSERT( (40*1024) >= sizeof(TAGetListParty) ); #endif // #if defined( PRE_PARTY_DB ) - // DB KeySetting ִ ̳ʸ ũⰡ 59Ʈ Ǿ Ƿ - // ũ⺸ Ŀ . + // DB에 KeySetting 저장할 수 있는 바이너리 크기가 59바이트로 고정되어 있으므로 + // 지정된 크기보다 커지면 컴파일 에러를 내버린다. #if defined(PRE_ADD_SKILLSLOT_EXTEND) BOOST_STATIC_ASSERT( 79 >= sizeof(TKeySetting) ); BOOST_STATIC_ASSERT( 201 >= sizeof(TPadSetting) ); @@ -439,8 +443,8 @@ int _tmain(int argc, TCHAR* argv[]) setlocale(LC_ALL, "Korean"); #endif - // ó غ - DWORD dwRetVal = CExceptionReport::GetInstancePtr()->Open(_T(".\\"), TRUE, TRUE); // Release C4744 ߻Ͽ Singleton , CExceptionReport::GetInstancePtr() inline ȭ ( : http://msdn.microsoft.com/ko-kr/library/a7za416f.aspx) + // 예외 처리자 준비 + DWORD dwRetVal = CExceptionReport::GetInstancePtr()->Open(_T(".\\"), TRUE, TRUE); // Release 모드 컴파일 시 C4744 경고가 발생하여 Singleton 구현 변경, CExceptionReport::GetInstancePtr() 을 inline 화 하지 않음 (참고 : http://msdn.microsoft.com/ko-kr/library/a7za416f.aspx) if (NOERROR != dwRetVal) { DWORD dwErrNo = ::GetLastError(); DN_RETURN(dwErrNo); @@ -452,7 +456,7 @@ int _tmain(int argc, TCHAR* argv[]) return 0; } - wprintf(L"exit ġ \r\n"); + wprintf(L"exit 명령을 치면 종료\r\n"); char szCmd[256] = {0}; while (1) diff --git a/Server/DNGameServer/DnMainFrame.cpp b/Server/DNGameServer/DnMainFrame.cpp index 6c0b00e8..3fe82984 100644 --- a/Server/DNGameServer/DnMainFrame.cpp +++ b/Server/DNGameServer/DnMainFrame.cpp @@ -40,11 +40,15 @@ void CDnMainFrame::InitializeLocalize() bool CDnMainFrame::PreInitialize() { - // Path + // TODO(Cussrro): 固定资源路径 + std::string path = ".\\GameRes"; + g_Config.szResourcePath = path; + + // Path 설정 std::string szResource = g_Config.szResourcePath + "\\Resource"; std::string szMapData = g_Config.szResourcePath + "\\MapData"; - // + // 국가별 셋팅 std::string szNationStr; if( szNationStr.empty() && !g_Config.szResourceNation.empty() ) szNationStr = g_Config.szResourceNation; if( !szNationStr.empty() ) { @@ -80,7 +84,7 @@ bool CDnMainFrame::PreInitialize() strNationFileName.clear(); strNationFileName = "uistring"; - if (i != 0) //0 Ʈ + if (i != 0) //0번은 디폴트 strNationFileName.append(MultiLanguage::NationString[i]); strNationFileName.append(".xml"); @@ -92,7 +96,7 @@ bool CDnMainFrame::PreInitialize() #ifdef PRE_ADD_UISTRING_DIVIDE strNationItemFileName = "uistring_item"; - if (i != 0) //0 Ʈ + if (i != 0) //0번은 디폴트 strNationItemFileName.append(MultiLanguage::NationString[i]); strNationItemFileName.append(".xml"); diff --git a/Server/DNLoginServer/DNLoginServer.cpp b/Server/DNLoginServer/DNLoginServer.cpp index ea098105..272cfb5a 100644 --- a/Server/DNLoginServer/DNLoginServer.cpp +++ b/Server/DNLoginServer/DNLoginServer.cpp @@ -148,7 +148,7 @@ void LoadUserSessionID() fclose(fp); - nSessionID += DEFAULTUSERSESSIONID; // Ȥ ȵǼ dzʶ Ƿ Ǽ N ! + nSessionID += DEFAULTUSERSESSIONID; // 혹시 저장 제대로 안되서 건너뛸 수 있으므로 꽁수로 N 더해줌! if (0x00FFFFFF <= nSessionID) nSessionID = DEFAULTUSERSESSIONID; g_IDGenerator.SetUserConnectionID(nSessionID); @@ -206,7 +206,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) WCHAR wszBuf[128] = { 0, }; //, wszStr[64] = { 0, }; char szData[128] = { 0, }, *pStr = NULL; - wstring wszFileName = L"./Config/DNLogin.ini"; // ѱ + wstring wszFileName = L"./Config/DNLogin.ini"; // 한국 if (!g_IniFile.Open(wszFileName.c_str())){ g_Log.Log(LogType::_FILELOG, L"%s File not Found!!\r\n", wszFileName.c_str()); @@ -351,7 +351,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) g_IniFile.GetValue(L"DB_DNWorld", wszData, g_Config.WorldDB[i].wszDBName); } - // ResourcePath ش. + // ResourcePath 등록해준다. WCHAR wszPath[_MAX_PATH] = { 0, }; char szPath[_MAX_PATH] = { 0, }; @@ -374,11 +374,11 @@ bool LoadConfig(int argc, TCHAR * argv[]) } } - //󸶴 Ʋ config д´. + //나라마다 틀리고 고정 값은 공통으로 config에서 읽는다. #if defined(_TW) USES_CONVERSION; - wstring wszGamaniaAuth = L"./Config/DNGamaniaAuth.ini"; // 븸 + wstring wszGamaniaAuth = L"./Config/DNGamaniaAuth.ini"; // 대만 if (!g_IniFile.Open(wszGamaniaAuth.c_str())){ g_Log.Log(LogType::_FILELOG, L"%s File not Found!!\r\n", wszGamaniaAuth.c_str()); @@ -545,10 +545,14 @@ bool InitApp(int argc, TCHAR * argv[]) } g_Log.SetServerID(g_Config.nManagedID); - // ResourceMng + // ResourceMng 생성 CEtResourceMng::CreateInstance(); - // Path + // TODO(Cussrro): 固定资源路径 + std::string path = ".\\GameRes"; + g_Config.szResourcePath = path; + + // Path 설정 std::string szResource = g_Config.szResourcePath + "\\Resource"; std::string szNationStr; if( szNationStr.empty() && !g_Config.szResourceNation.empty() ) szNationStr = g_Config.szResourceNation; @@ -579,7 +583,7 @@ bool InitApp(int argc, TCHAR * argv[]) strNationFileName.clear(); strNationFileName = "uistring"; - if (i != 0) //0 Ʈ + if (i != 0) //0번은 디폴트 strNationFileName.append(MultiLanguage::NationString[i]); strNationFileName.append(".xml"); @@ -599,7 +603,7 @@ bool InitApp(int argc, TCHAR * argv[]) strNationItemFileName.clear(); strNationItemFileName = "uistring_item"; - if (i != 0) //0 Ʈ + if (i != 0) //0번은 디폴트 strNationItemFileName.append(MultiLanguage::NationString[i]); strNationItemFileName.append(".xml"); @@ -685,7 +689,7 @@ bool InitApp(int argc, TCHAR * argv[]) if (!g_pUserConnectionManager) return false; #if defined(_GPK) - // Shanda + // Shanda 보안 g_Config.pDynCode = GPKCreateSvrDynCode(); if (!g_Config.pDynCode){ g_Log.Log(LogType::_FILELOG, L"SvrDynCode NULL!!!\r\n"); @@ -722,7 +726,7 @@ bool InitApp(int argc, TCHAR * argv[]) return false; } - if (g_Config.pDynCode->LoadAuthFile("AuthData.dat") == false) // CSAuthõ + if (g_Config.pDynCode->LoadAuthFile("AuthData.dat") == false) // CSAuth관련된 애 { g_Log.Log(LogType::_FILELOG, L"LoadAuthFile() Fail!!!\r\n"); return false; @@ -751,7 +755,7 @@ bool InitApp(int argc, TCHAR * argv[]) g_Log.Log(LogType::_FILELOG, L"Iocp Initialize Sucess(%d)\r\n", g_Config.nIocpMax); } - // α׿ 񽺸޴ ó ࿡ ϵ (ڿ ) + //변경 로그와 서비스메니저의 연결은 런처를 통한 실행에서만 동작하도록 하자(실행인자에 의한 실행) g_pLogConnection = new CDNLogConnection; if( !g_pLogConnection ) return false; g_pLogConnection->SetIp(g_Config.LogInfo.szIP); @@ -790,7 +794,7 @@ bool InitApp(int argc, TCHAR * argv[]) } #endif // #if defined(_KRAZ) - g_pAuthManager = new CDNAuthManager; // P.S.> _FINAL_BUILD ƴ ڰ MasterServer Acceptor , ʱȭǾ g_Config.nManagedID + g_pAuthManager = new CDNAuthManager; // P.S.> _FINAL_BUILD 가 아닌 경우 인증 관리자가 MasterServer Acceptor 보다 먼저 생성, 초기화되어야 g_Config.nManagedID 를 세팅할 수 있음 if (!g_pAuthManager) { g_Log.Log(LogType::_FILELOG, L"g_pAuthManager Create Fail\r\n"); return false; @@ -823,10 +827,10 @@ bool InitApp(int argc, TCHAR * argv[]) LoadUserSessionID(); // Client Accept - // QUERY_RESETAUTHSERVER AcceptѴ. + // QUERY_RESETAUTHSERVER 응답받으면 Accept한다. -#if defined(_KR) // Nexon - // +#if defined(_KR) // Nexon 인증 + // 인증 int nRet = AuthCheck_SetLocale(kLocaleID_KR); if (nRet == AUTHCHECK_ERROR_OK){ g_Log.Log(LogType::_FILELOG, L"Nexon AuthCheck OK!!\r\n"); @@ -849,8 +853,8 @@ bool InitApp(int argc, TCHAR * argv[]) if (!g_pActozShield->Init()) return false; -#elif defined(_US) // Nexon - // +#elif defined(_US) // Nexon 인증 + // 인증 NMLOCALEID Locale = (NMLOCALEID)g_Config.nLocaleID; int nRet = AuthCheck_SetLocale(Locale); if (nRet == AUTHCHECK_ERROR_OK){ @@ -862,15 +866,15 @@ bool InitApp(int argc, TCHAR * argv[]) } #if defined(_FINAL_BUILD) - // PI + // PI인증 g_pNexonPI = new CDNNexonPI; if (!g_pNexonPI) return false; #endif // #if defined(_FINAL_BUILD) #elif defined(_JP) && defined(_FINAL_BUILD) - // - int nRet = HanAuthInit("J_DNEST"); // ߿ Ÿ ٲ + // 인증 + int nRet = HanAuthInit("J_DNEST"); // 나중에 서비스 타입 바꿔야함 if (nRet == HAN_AUTHSVR_OK){ g_Log.Log(LogType::_FILELOG, L"HanAuthInit OK!!\r\n"); } @@ -984,7 +988,7 @@ void ClearApp() DWORD dwRetVal = NOERROR; HShieldSvrWrapper::AhnHS_CloseServerHandle(g_Config.hHSServer, &dwRetVal); if (NOERROR != dwRetVal) { - // ߻ + // 예외 발생 } g_Config.hHSServer = ANTICPX_INVALID_HANDLE_VALUE; @@ -1078,8 +1082,8 @@ int _tmain(int argc, TCHAR* argv[]) _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif - // ó غ - DWORD dwRetVal = CExceptionReport::GetInstancePtr()->Open(_T(".\\"), TRUE, TRUE, MiniDumpWithFullMemory); // Release C4744 ߻Ͽ Singleton , CExceptionReport::GetInstancePtr() inline ȭ ( : http://msdn.microsoft.com/ko-kr/library/a7za416f.aspx) + // 예외 처리자 준비 + DWORD dwRetVal = CExceptionReport::GetInstancePtr()->Open(_T(".\\"), TRUE, TRUE, MiniDumpWithFullMemory); // Release 모드 컴파일 시 C4744 경고가 발생하여 Singleton 구현 변경, CExceptionReport::GetInstancePtr() 을 inline 화 하지 않음 (참고 : http://msdn.microsoft.com/ko-kr/library/a7za416f.aspx) if (NOERROR != dwRetVal) { DWORD dwErrNo = ::GetLastError(); DN_RETURN(dwErrNo); @@ -1095,7 +1099,7 @@ int _tmain(int argc, TCHAR* argv[]) g_Log.Log(LogType::_FILELOG, L"[Thread-Start] MainThread - PID ; %d, TID : %d\r\n", ::GetCurrentProcessId(), ::GetCurrentThreadId()); - wprintf(L"exit ġ \r\n"); + wprintf(L"exit 명령을 치면 종료\r\n"); //SetConsoleTitleA(FormatA("LoginServer Rev.%s", revDNLoginServer).c_str()); diff --git a/Server/DNMasterServer/DNMasterServer.cpp b/Server/DNMasterServer/DNMasterServer.cpp index e038db4c..0515d46d 100644 --- a/Server/DNMasterServer/DNMasterServer.cpp +++ b/Server/DNMasterServer/DNMasterServer.cpp @@ -73,7 +73,7 @@ void LoadPartyID() FILE * fp = NULL; if (_access(szFileName.c_str(), 0) == -1) { - // ٸ Ѵ. + //파일이 없다면 생성한다. fp = fopen(szFileName.c_str(), "a"); fclose(fp); } @@ -86,7 +86,7 @@ void LoadPartyID() fclose(fp); - nPartyIdx += 10000; //Ȥ ȵǼ dzʶ Ƿ Ǽ 10000 ! + nPartyIdx += 10000; //혹시 저장 제대로 안되서 건너뛸 수 있으므로 꽁수로 10000 더해줌! g_IDGenerator.SetPartyID(nPartyIdx); } @@ -109,7 +109,7 @@ void LoadVoiceChannelID() FILE * fp = NULL; if (_access(szFileName.c_str(), 0) == -1) { - // ٸ Ѵ. + //파일이 없다면 생성한다. fp = fopen(szFileName.c_str(), "a"); fclose(fp); } @@ -122,7 +122,7 @@ void LoadVoiceChannelID() fclose(fp); - nChannelID += 10000; //Ȥ ȵǼ dzʶ Ƿ Ǽ 10000 ! + nChannelID += 10000; //혹시 저장 제대로 안되서 건너뛸 수 있으므로 꽁수로 10000 더해줌! g_IDGenerator.SetVoiceChannelID(nChannelID); } @@ -311,7 +311,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) g_Log.Log(LogType::_FILELOG, L"LogInfo (Ip:%S, Port:%d)\r\n", g_Config.LogInfo.szIP, g_Config.LogInfo.nPort); - // ResourcePath ش. + // ResourcePath 등록해준다. WCHAR wszPath[_MAX_PATH] = { 0, }; char szPath[_MAX_PATH] = { 0, }; g_IniFile.GetValue( L"Resource", L"Path", wszPath ); @@ -338,9 +338,9 @@ bool LoadConfig(int argc, TCHAR * argv[]) g_IniFile.GetValue(L"Info", L"PCBangGrade", &g_nPCBangGrade); #endif // #if defined(_FINAL_BUILD) - //󸶴 Ʋ config д´. + //나라마다 틀리고 고정 값은 공통으로 config에서 읽는다. #if defined(_KR) && defined(_FINAL_BUILD) - wstring wszAuthFileName = L"./Config/DNNexonAuth.ini"; // ѱ + wstring wszAuthFileName = L"./Config/DNNexonAuth.ini"; // 한국 if (!g_IniFile.Open(wszAuthFileName.c_str())){ g_Log.Log(LogType::_FILELOG, L"%s File not Found!!\r\n", wszAuthFileName.c_str()); @@ -375,7 +375,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) #elif defined(_TW) && defined(_FINAL_BUILD) USES_CONVERSION; - wstring wszGamaniaAuth = L"./Config/DNGamaniaAuth.ini"; // 븸 + wstring wszGamaniaAuth = L"./Config/DNGamaniaAuth.ini"; // 대만 if (!g_IniFile.Open(wszGamaniaAuth.c_str())){ g_Log.Log(LogType::_FILELOG, L"%s File not Found!!\r\n", wszGamaniaAuth.c_str()); @@ -390,7 +390,7 @@ bool LoadConfig(int argc, TCHAR * argv[]) g_IniFile.GetValue(L"GamaniaAuth", L"Port2", &g_Config.AuthInfoTW.nPort); #elif defined(_TH) - wstring wszAsiaSoftPCCafe = L"./Config/DNAsiaSoftPCCafe.ini"; // ± + wstring wszAsiaSoftPCCafe = L"./Config/DNAsiaSoftPCCafe.ini"; // 태국 if (!g_IniFile.Open(wszAsiaSoftPCCafe.c_str())){ g_Log.Log(LogType::_FILELOG, L"%s File not Found!!\r\n", wszAsiaSoftPCCafe.c_str()); @@ -490,20 +490,24 @@ bool InitApp(int argc, TCHAR * argv[]) g_Log.Init(wszLogName, LOGTYPE_CRT_FILE_DAY); #endif - // ε ñ⶧ DivisionManager . 081208 + // 로딩 시기때문에 DivisionManager에서 빼냈음. 081208 if (!LoadConfig(argc, argv)){ g_Log.Log(LogType::_FILELOG, L"LoadConfig Failed\r\n"); return false; } g_Log.SetServerID(g_Config.nManagedID); - // ResourceMng + // ResourceMng 생성 CEtResourceMng::CreateInstance(); - // Path + // TODO(Cussrro): 固定资源路径 + std::string path = ".\\GameRes"; + g_Config.szResourcePath = path; + + // Path 설정 std::string szResource = g_Config.szResourcePath + "\\Resource"; std::string szMapData = g_Config.szResourcePath + "\\MapData"; - // + // 국가별 셋팅 std::string szNationStr; if( szNationStr.empty() && !g_Config.szResourceNation.empty() ) szNationStr = g_Config.szResourceNation; @@ -540,7 +544,7 @@ bool InitApp(int argc, TCHAR * argv[]) g_Log.Log(LogType::_FILELOG, L"Iocp Initialize Success(%d)\r\n", 100); } - // worldid, worldname DataManager ٽ ϰ ٲ + // worldid, worldname을 DataManager에서 다시 세팅하게 바꿈 g_pExtManager = new CDNExtManager; if (!g_pExtManager) { @@ -611,7 +615,7 @@ bool InitApp(int argc, TCHAR * argv[]) strNationFileName.clear(); strNationFileName = "uistring"; - if (i != 0) //0 Ʈ + if (i != 0) //0번은 디폴트 strNationFileName.append(MultiLanguage::NationString[i]); strNationFileName.append(".xml"); @@ -632,7 +636,7 @@ bool InitApp(int argc, TCHAR * argv[]) #ifdef PRE_ADD_UISTRING_DIVIDE strNationItemFileName = "uistring_item"; - if (i != 0) //0 Ʈ + if (i != 0) //0번은 디폴트 strNationItemFileName.append(MultiLanguage::NationString[i]); strNationItemFileName.append(".xml"); @@ -702,8 +706,8 @@ bool InitApp(int argc, TCHAR * argv[]) g_Log.Log(LogType::_FILELOG, L"GameAcceptPort (%d)\r\n", g_Config.nGameAcceptPort); } -#if defined(_KR) && defined(_FINAL_BUILD) // Nexon - // pc +#if defined(_KR) && defined(_FINAL_BUILD) // Nexon 인증 + // pc방 g_pNexonAuth = new CDNNexonAuth; if (!g_pNexonAuth) return false; @@ -714,8 +718,8 @@ bool InitApp(int argc, TCHAR * argv[]) if (!g_pActozShield->Init()) return false; -#elif defined(_US) && defined(_FINAL_BUILD) // Nexon - // PI +#elif defined(_US) && defined(_FINAL_BUILD) // Nexon 인증 + // PI인증 g_pNexonPI = new CDNNexonPI; if (!g_pNexonPI) return false; @@ -724,7 +728,7 @@ bool InitApp(int argc, TCHAR * argv[]) g_pShandaFCM = new CDNShandaFCM; if (!g_pShandaFCM) return false; - if (!g_pShandaFCM->InitService()){ // FCM ʱȭ۾ + if (!g_pShandaFCM->InitService()){ // FCM 초기화작업 g_Log.Log(LogType::_FILELOG, L"g_pShandaFCM->InitService() Fail!!\r\n"); } #elif defined (_JP) && defined(_FINAL_BUILD) && defined (WIN64) @@ -866,8 +870,8 @@ int _tmain(int argc, TCHAR* argv[]) setlocale(LC_ALL, "Korean"); #endif - // ó غ - DWORD dwRetVal = CExceptionReport::GetInstancePtr()->Open(_T(".\\"), TRUE, TRUE, MiniDumpWithFullMemory); // Release C4744 ߻Ͽ Singleton , CExceptionReport::GetInstancePtr() inline ȭ ( : http://msdn.microsoft.com/ko-kr/library/a7za416f.aspx) + // 예외 처리자 준비 + DWORD dwRetVal = CExceptionReport::GetInstancePtr()->Open(_T(".\\"), TRUE, TRUE, MiniDumpWithFullMemory); // Release 모드 컴파일 시 C4744 경고가 발생하여 Singleton 구현 변경, CExceptionReport::GetInstancePtr() 을 inline 화 하지 않음 (참고 : http://msdn.microsoft.com/ko-kr/library/a7za416f.aspx) if (NOERROR != dwRetVal) { DWORD dwErrNo = ::GetLastError(); DN_RETURN(dwErrNo); @@ -879,7 +883,7 @@ int _tmain(int argc, TCHAR* argv[]) return 0; } - wprintf(L"exit ġ \r\n"); + wprintf(L"exit 명령을 치면 종료\r\n"); char szCmd[256] = {0}; while (1) @@ -1009,23 +1013,23 @@ int _tmain(int argc, TCHAR* argv[]) std::vector vSplit; boost::algorithm::split( vSplit, strValue, boost::algorithm::is_any_of("/") ); - // ɾ + // 명령어 if( vSplit.size() >= 1 ) { if( stricmp( vSplit[0].c_str(), "create" ) ) break; } - // 氳 + // 방개수 if( vSplit.size() >= 2 ) { iDefaultCreateCount = boost::lexical_cast( vSplit[1] ); } - // õ + // 랜덤시드 if( vSplit.size() >= 3 ) { iRandomSeed = boost::lexical_cast( vSplit[2] ); } - // ʹȣ + // 맵번호 if( vSplit.size() >= 4 ) { iDefaultMapIndex = boost::lexical_cast( vSplit[3] ); diff --git a/Server/DNVillageServer/DNVillageServer.cpp b/Server/DNVillageServer/DNVillageServer.cpp index a68681c0..0ee8a4d6 100644 Binary files a/Server/DNVillageServer/DNVillageServer.cpp and b/Server/DNVillageServer/DNVillageServer.cpp differ