#include "StdAfx.h" #include "DNEtcTask.h" #include "DNConnection.h" #include "DNSQLConnectionManager.h" #include "DNSQLMembership.h" #include "DNSQLWorld.h" #include "TimeSet.h" #include "Log.h" #if defined( PRE_FIX_67546 ) #include "DNIocpManager.h" #endif extern TDBConfig g_Config; CDNEtcTask::CDNEtcTask(CDNConnection* pConnection) : CDNMessageTask(pConnection) { } CDNEtcTask::~CDNEtcTask(void) { } void CDNEtcTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData) { CDNSQLMembership *pMembershipDB = NULL; CDNSQLWorld *pWorldDB = NULL; int nRet = ERROR_DB; switch (nSubCmd) { case QUERY_UPDATEQUERYQUEUE: { // ÁÖÀÇ!!! - ½ÇÁ¦ DB ÀÛ¾÷ ¼öÇàÀº º» ¸Þ¼­µå¸¦ Àç±ÍÈ£Ãâ ÇÏ¿© ÀÌ·ç¾îÁö¸ç Àç±ÍÈ£Ã⠽à º» ÆÐŶ (MAINCMD_ETC / QUERY_UPDATEQUERYQUEUE) Àº Àý´ë Æ÷ÇԵǾ ¾ÊµÊ !!! TDBQueryQueue* pEtc = reinterpret_cast(pData); DN_ASSERT(NULL != pEtc, "Invalid!"); DN_ASSERT(pEtc->CheckIntegrity(), "Invalid!"); if (DBQUERYAUTOCHKSUM != pEtc->m_nCheckSum) { // 20091022 ÆÐŶ ó¸® ½Ã ¹«°á¼º üũ¸¦ À§ÇØ Àӽà Ãß°¡ ??? (b4nfter) DN_BREAK; } for (int nCurPtr = 0 ; pEtc->m_nSize > nCurPtr ; ) { TDBQueryData* pDBQueryData = pEtc->At(nCurPtr); DN_ASSERT(NULL != pDBQueryData, "Check!"); if (MAINCMD_ETC == pDBQueryData->cMainCmd && QUERY_UPDATEQUERYQUEUE == pDBQueryData->cSubCmd) { DN_ASSERT(0, "Invalid!"); // ÇØ´ç ¸ÞÀθí·ÉÀº º» DB ´©ÀûÀÛ¾÷ µî·Ï¿ë À̹ǷΠ»ç¿ëÇÒ ÀÌÀ¯°¡ ¾øÀ¸¸ç »ç¿ë ½Ã ¹«ÇÑÀç±Í¿¡ ºüÁú ¼öµµ ÀÖÀ½ ? } m_pConnection->DBMessageProcess(reinterpret_cast(pDBQueryData), nThreadID); // P.S.> ÀÌ ºÎºÐÀÇ ÇÔ¼ö Àç±ÍÈ£Ãâ 󸮸¦ À§ÇØ TDBQueryData ´Â DNTPacket ¿Í µ¿ÀÏÇÑ ±¸Á¶¸¦ °¡Áöµµ·Ï ÀǵµÀûÀ¸·Î ¼³°èµÇ¾úÀ½ (Â÷ÈÄ º¯°æ ÇÊ¿ä ½Ã À̿Ͱ°Àº ¼³°è Àǵµ¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Êµµ·Ï ÁÖÀÇÇÒ °Í !!!) nCurPtr += (sizeof(DNTPacketHeader) + pDBQueryData->iLen); } } break; case QUERY_EVENTLIST: { TQEventList * pEtc = (TQEventList*)pData; TAEventList Etc; memset(&Etc, 0, sizeof(Etc)); Etc.cWorldSetID = pEtc->cWorldSetID; Etc.nRetCode = ERROR_DB; #if defined(PRE_ADD_WORLD_EVENT) pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB) { Etc.nRetCode = pMembershipDB->QueryEventList(pEtc, &Etc); } else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_EVENTLIST:%d] pMembershipDB Error\r\n", pEtc->cWorldSetID); #else //#if defined(PRE_ADD_WORLD_EVENT) pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if (pWorldDB) { Etc.nRetCode = pWorldDB->QueryEventList(pEtc, &Etc); } else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_EVENTLIST:%d] pWorldDB Error\r\n", pEtc->cWorldSetID); #endif // #if defined(PRE_ADD_WORLD_EVENT) m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Etc, sizeof(Etc) - sizeof(Etc.EventList) + (Etc.cCount * sizeof(TEventInfo))); } break; #ifdef PRE_MOD_RESTRICT_IDENTITY_IP case QUERY_GET_SIMPLECONFIG: { TQSimpleConfig * pPacket = (TQSimpleConfig*)pData; TASimpleConfig packet; memset(&packet, 0, sizeof(TASimpleConfig)); packet.nRetCode = ERROR_DB; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB) { pMembershipDB->QueryGetSimpleConfigValue(&packet); } else g_Log.Log(LogType::_RESTRICTIP, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[QUERY_GET_SIMPLECONFIG] pMembershipDB Error\r\n"); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet) - sizeof(packet.Configs) + (packet.cCount * sizeof(SimpleConfig::ConfigData))); } break; #endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP #ifdef PRE_ADD_SEETMAINTENANCEFLAG case QUERY_MAINTENANCEFLAG: { TQMaintenanceInfo * pPacket = reinterpret_cast(pData); pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB) { pMembershipDB->QuerySetMaintenanceFlag(pPacket->nFlag); } } break; #endif //#ifdef PRE_ADD_SEETMAINTENANCEFLAG case QUERY_GET_DBSID: { TAGetDBSID packet; memset(&packet, 0, sizeof(TAGetDBSID)); packet.nServerID = g_Config.nManagedID; m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet)); } break; case QUERY_GETGAMEOPTION: { TQGetGameOption * pOption = (TQGetGameOption*)pData; TAGetGameOption packet; memset(&packet, 0, sizeof(packet)); packet.nAccountDBID = pOption->nAccountDBID; packet.biCharacterDBID = pOption->biCharacterDBID; packet.nRetCode = ERROR_DB; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB){ packet.nRetCode = pMembershipDB->QueryGetGameOption(pOption->nAccountDBID, packet.Option); } else g_Log.Log(LogType::_ERROR, pOption->cWorldSetID, pOption->nAccountDBID, pOption->biCharacterDBID, 0, L"[QUERY_GETGAMEOPTION:%d] pMembershipDB Error\r\n", pOption->cWorldSetID); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet)); } break; case QUERY_SETGAMEOPTION: { TQSetGameOption * pOption = (TQSetGameOption*)pData; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB){ pMembershipDB->QueryModGameOption(pOption->nAccountDBID, pOption->Option); } else g_Log.Log(LogType::_ERROR, pOption->cWorldSetID, pOption->nAccountDBID, pOption->biCharacterDBID, 0, L"[QUERY_GETGAMEOPTION:%d] pMembershipDB Error\r\n", pOption->cWorldSetID); } break; case QUERY_RESTRAINT: { TQRestraint * pRestraint = (TQRestraint*)pData; TARestraint packet; memset(&packet, 0, sizeof(TARestraint)); packet.nAccountDBID = pRestraint->nAccountDBID; packet.nRetCode = ERROR_DB; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pRestraint->cWorldSetID); if (pWorldDB){ } else g_Log.Log(LogType::_ERROR, pRestraint->cWorldSetID, pRestraint->nAccountDBID, 0, 0, L"[QUERY_RESTRAINT:%d] pWorldDB Error\r\n", pRestraint->cWorldSetID); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet) - sizeof(packet.restraint) + (packet.cCount * sizeof(TRestraint))); } break; case QUERY_SETRESTRAINT: { TQSetRestraint * pAddRestraint = (TQSetRestraint*)pData; pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID ); if (pMembershipDB) { TIMESTAMP_STRUCT _tStartTime, _tEndTime; // ½ÃÀ۽ð¢ CTimeSet TimeSet; memcpy( &_tStartTime, &TimeSet.GetDbTimeStamp(), sizeof(TIMESTAMP_STRUCT )); // ³¡½Ã°£ TimeSet.AddSecond( ONEDAYSEC * 30 ); memcpy( &_tEndTime, &TimeSet.GetDbTimeStamp(), sizeof(TIMESTAMP_STRUCT )); #ifdef PRE_ADD_ABUSE_ACCOUNT_RESTRAINT int nRetCode = pMembershipDB->QueryAddRestraint((DBDNWorldDef::RestraintTargetCode::eCode)pAddRestraint->cTargetCode, pAddRestraint->nAccountDBID, \ pAddRestraint->biCharacterDBID, pAddRestraint->nDolisReasonCode, (DBDNWorldDef::RestraintTypeCode::eCode)pAddRestraint->cRestraintCode, pAddRestraint->wszRestraintreasonForDolis, pAddRestraint->wszRestraintreason, _tStartTime, _tEndTime); #else //#ifdef PRE_ADD_ABUSE_ACCOUNT_RESTRAINT //ReasonID 110¹øÀº »ó¼ö·Î ¹ÚÇô ÀÖÀ¸¸ç, ÀÌÂÊ ¹øÈ£ º¯°æ½Ã Ȳ½Ã¿¬¾¾¿¡°Ô ¹®ÀÇ ¹Ù¶÷. int nRetCode = pMembershipDB->QueryAddRestraint((DBDNWorldDef::RestraintTargetCode::eCode)pAddRestraint->cTargetCode, pAddRestraint->nAccountDBID, \ pAddRestraint->biCharacterDBID, 110, (DBDNWorldDef::RestraintTypeCode::eCode)pAddRestraint->cRestraintCode, pAddRestraint->wszRestraintreasonForDolis, pAddRestraint->wszRestraintreason, _tStartTime, _tEndTime); #endif //#ifdef PRE_ADD_ABUSE_ACCOUNT_RESTRAINT if (nRetCode != ERROR_NONE) g_Log.Log(LogType::_ERROR, pAddRestraint->cWorldSetID, pAddRestraint->nAccountDBID, 0, 0, L"[QUERY_SETRESTRAINT:%d] Error[Code:%d]\r\n", pAddRestraint->cWorldSetID, nRetCode); } else g_Log.Log(LogType::_ERROR, pAddRestraint->cWorldSetID, pAddRestraint->nAccountDBID, 0, 0, L"[QUERY_SETRESTRAINT:%d] pMembershipDB Error\r\n", pAddRestraint->cWorldSetID); } break; case QUERY_GET_KEYSETTING_OPTION: { TQGetKeySettingOption* pEtc = reinterpret_cast(pData); TAGetKeySettingOption Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID ); if (pMembershipDB) Etc.nRetCode = pMembershipDB->QueryGetKeySettingOption( pEtc->nAccountDBID, &Etc.sKeySetting ); if( Etc.nRetCode != ERROR_NONE ) g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_GET_KEYSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode); break; } case QUERY_MOD_KEYSETTING_OPTION: { TQModKeySettingOption* pEtc = reinterpret_cast(pData); TAModKeySettingOption Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID ); if (pMembershipDB) Etc.nRetCode = pMembershipDB->QueryModKeySettingOption(pEtc, &Etc); if( Etc.nRetCode != ERROR_NONE ) g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_MOD_KEYSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode); break; } case QUERY_GET_PADSETTING_OPTION: { TQGetPadSettingOption* pEtc = reinterpret_cast(pData); TAGetPadSettingOption Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID ); if (pMembershipDB) Etc.nRetCode = pMembershipDB->QueryGetPadSettingOption( pEtc->nAccountDBID, &Etc.sPadSetting ); if( Etc.nRetCode != ERROR_NONE ) g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_GET_PADSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode); break; } case QUERY_MOD_PADSETTING_OPTION: { TQModPadSettingOption* pEtc = reinterpret_cast(pData); TAModPadSettingOption Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID ); if (pMembershipDB) Etc.nRetCode = pMembershipDB->QueryModPadSettingOption(pEtc, &Etc); if( Etc.nRetCode != ERROR_NONE ) g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_MOD_PADSETTING_OPTION:%d] (Ret:%d)\r\n", pEtc->cWorldSetID, Etc.nRetCode); break; } case QUERY_SET_PROFILE: { TQSetProfile *pEtc = (TQSetProfile*)pData; TASetProfile Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; // ¼­¹ö¿¡¼­ Àü¼ÛÇÑ µ¥ÀÌÅ͸¦ ±×´ë·Î ¹Ýȯ - ¼º°øÇÏ¸é ¼­¹ö¿¡¼­ ij¸¯ÅÍ ¸Þ¸ð¸®·Î Àû¿ëÇÑ´Ù. Etc.sProfile.cGender = pEtc->sProfile.cGender; _wcscpy(Etc.sProfile.wszGreeting, _countof(Etc.sProfile.wszGreeting), pEtc->sProfile.wszGreeting, (int)wcslen(pEtc->sProfile.wszGreeting)); Etc.sProfile.bOpenPublic = pEtc->sProfile.bOpenPublic; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if (pWorldDB) Etc.nRetCode = pWorldDB->QuerySetProfile(pEtc->biCharacterDBID, pEtc->sProfile); if( Etc.nRetCode != ERROR_NONE ) g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SET_PROFILE:%d] (Ret:%d)\r\n", pEtc->biCharacterDBID, pEtc->cWorldSetID, Etc.nRetCode); m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc) ); } break; case QUERY_GET_PROFILE: { TQGetProfile *pEtc = (TQGetProfile*)pData; TAGetProfile Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if (pWorldDB){ nRet = pWorldDB->QueryGetProfile(pEtc->biCharacterDBID, Etc.sProfile); Etc.nRetCode = nRet; if( nRet == 103212 ) nRet = ERROR_NONE; // 103212´Â ÇÁ·ÎÇÊÀÌ ¼³Á¤µÇÁö ¾ÊÀº °æ¿ì·Î DB¿¡·¯´Â ¾Æ´Ï´Ù. - ¾µµ¥¾ø´Â ·Î±×¸¦ ÂïÁö ¾Ê±â À§ÇØ~ if (nRet != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_GET_PROFILE:%d] (Ret:%d)\r\n", pEtc->biCharacterDBID, pEtc->cWorldSetID, nRet); } } m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc) ); } break; case QUERY_ADD_ABUSELOG: { TQAddAbuseLog *pEtc = (TQAddAbuseLog*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if (pWorldDB){ nRet = pWorldDB->QueryAddAbuseLog(pEtc); if (nRet != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_ADD_ABUSELOG:%d] (Ret:%d)\r\n", pEtc->biCharacterDBID, pEtc->cWorldSetID, nRet); } } } break; case QUERY_ADD_ABUSEMONITOR: { TQAddAbuseMonitor* pEtc = reinterpret_cast(pData); pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if( pWorldDB ) pWorldDB->QueryAddAbuseMonitor( pEtc ); break; } case QUERY_DEL_ABUSEMONITOR: { TQDelAbuseMonitor* pEtc = reinterpret_cast(pData); pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if( pWorldDB ) pWorldDB->QueryDelAbuseMonitor( pEtc ); break; } case QUERY_GET_ABUSEMONITOR: { TQGetAbuseMonitor* pEtc = reinterpret_cast(pData); TAGetAbuseMonitor Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if( pWorldDB ) Etc.nRetCode = pWorldDB->QueryGetAbuseMonitor( pEtc, &Etc ); m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc) ); break; } case QUERY_GET_WHOLE_ABUSEMONITOR: { TQGetWholeAbuseMonitor * pPacket = (TQGetWholeAbuseMonitor*)pData; TAGetWholeAbuseMonitor packet; memset(&packet, 0, sizeof(TAGetWholeAbuseMonitor)); packet.nAccountDBID = pPacket->nAccountDBID; packet.nRetCode = ERROR_DB; #if defined(PRE_ADD_MULTILANGUAGE) packet.cSelectedLang = pPacket->cSelectedLang; #endif //#if defined(PRE_ADD_MULTILANGUAGE) pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID); if( pWorldDB ) packet.nRetCode = pWorldDB->QueryGetWholeAbuseMonitor(pPacket, &packet); m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast(&packet), sizeof(TAGetWholeAbuseMonitor) - sizeof(packet.Abuse) + (sizeof(TAbuseMonitor) * packet.cCount) ); break; } case QUERY_VALIDATE_SECONDAUTH: { TQValidateSecondAuth* pEtc = reinterpret_cast(pData); pMembershipDB = g_SQLConnectionManager.FindMembershipDB( nThreadID ); TAValidateSecondAuth Etc; memset( &Etc, 0, sizeof(Etc) ); Etc.nAccountDBID = pEtc->nAccountDBID; Etc.nAuthCheckType = pEtc->nAuthCheckType; Etc.nRetCode = ERROR_DB; if( pMembershipDB ) Etc.nRetCode = pMembershipDB->QueryValidataSecondAuthPassphrase( pEtc->nAccountDBID, pEtc->wszPW, Etc.cFailCount ); m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc) ); break; } case QUERY_LOGOUT: { TQLogout *pUpdate = (TQLogout*)pData; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB){ #if defined (_KR) nRet = pMembershipDB->QueryLogout(pUpdate->nAccountDBID, pUpdate->nSessionID, pUpdate->szMachineID); #else nRet = pMembershipDB->QueryLogout(pUpdate->nAccountDBID, pUpdate->nSessionID); #endif if (nRet != ERROR_NONE){ g_Log.Log( LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, 0, pUpdate->nSessionID, L"[ADBID:%u] [QUERY_LOGOUT:%d] (Ret:%d)\r\n", pUpdate->nAccountDBID, pUpdate->cWorldSetID, nRet); m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù } } else g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, 0, pUpdate->nSessionID, L"[ADBID:%u] [QUERY_LOGOUT:%d] pMembershipDB not found\r\n", pUpdate->nAccountDBID, pUpdate->cWorldSetID); } break; case QUERY_LOGINCHARACTER: { TQLoginCharacter* pEtc = reinterpret_cast(pData); pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pEtc->cWorldSetID ); if (pWorldDB) { pWorldDB->QueryLoginCharacter( pEtc ); } else { g_Log.Log (LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, pEtc->uiSessionID, L"[QUERY_LOGINCHARACTER:%d] pWorldDB Error\r\n", pEtc->cWorldSetID ); } break; } case QUERY_LOGOUTCHARACTER: { TQLogoutCharacter* pEtc = reinterpret_cast(pData); pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pEtc->cWorldSetID ); if (pWorldDB) { pWorldDB->QueryLogoutCharacter( pEtc ); } else { if( pEtc->cWorldSetID > 0 ) g_Log.Log (LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, pEtc->uiSessionID, L"[QUERY_LOGOUTCHARACTER:%d] pWorldDB Error\r\n", pEtc->cWorldSetID ); } break; } case QUERY_UPDATECONNECTINGTIME: { TQSaveConnectDurationTime *pEtc = (TQSaveConnectDurationTime*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if (pWorldDB) pWorldDB->QuerySaveConnectDurationTime(pEtc); else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[QUERY_UPDATECONNECTINGTIME:%d] pWorldDB Error\r\n", pEtc->cWorldSetID); } break; case QUERY_MODLASTCONNECTDATE: { TQHeader *pEtc = (TQHeader*)pData; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB){ nRet = pMembershipDB->QueryModLastConnectDate(pEtc->nAccountDBID); if (nRet != ERROR_NONE){ g_Log.Log( LogType::_ERROR, 0, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_MODLASTCONNECTDATE:%d] (Ret:%d)\r\n", pEtc->nAccountDBID, pEtc->cWorldSetID, nRet); m_pConnection->QueryResultError(pEtc->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù } } else g_Log.Log(LogType::_ERROR, 0, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_MODLASTCONNECTDATE:%d] pMembershipDB not found\r\n", pEtc->nAccountDBID, pEtc->cWorldSetID); } break; #if defined( PRE_FIX_67546 ) case QUERY_ADD_CHANNELCOUNT: { TQAddThreadCount *pEtc = (TQAddThreadCount*)pData; if( g_pIocpManager ) { TAAddThreadCount Etc; memset(&Etc, 0, sizeof(Etc)); g_pIocpManager->AddConnectionCount( pEtc->cChoiceThreadID ); int nCount[THREADMAX]; g_pIocpManager->GetConnectionCount( nCount ); memcpy( Etc.nConnectionCount, nCount, sizeof(Etc.nConnectionCount) ); int nConnectionCount = g_pIocpManager->GetVillageGameConnectionCount(); for(int i=0;iGetVillageGameConnection(i); if( pCon && pCon->GetActive() ) { pCon->AddSendData( nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc) ); } } } } break; #endif #if defined( PRE_ADD_GAMEQUIT_REWARD ) case QUERY_MOD_NEWBIE_REWARDFLAG: { TQModNewbieRewardFlag *pEtc = (TQModNewbieRewardFlag*)pData; TAHeader Etc; memset(&Etc, 0, sizeof(Etc)); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if(pMembershipDB) { Etc.nRetCode = pMembershipDB->QueryModNewbieRewardFlag(pEtc->nAccountDBID, pEtc->bRewardFlag); } else g_Log.Log(LogType::_GAMEQUITREWARD, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_MOD_NEWBIE_REWARDFLAG:%d] pMembershipDB not found\r\n", pEtc->nAccountDBID, pEtc->bRewardFlag); m_pConnection->AddSendData(nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc)); } break; #endif // #if defined( PRE_ADD_GAMEQUIT_REWARD ) #if defined(PRE_ADD_CP_RANK) case QUERY_ADD_STAGE_CLEAR_BEST : { TQAddStageClearBest* pEtc = (TQAddStageClearBest*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if (pWorldDB) nRet = pWorldDB->QueryAddStageClearBest(pEtc); else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, pEtc->biCharacterDBID, 0, L"[QUERY_ADD_STAGE_CLEAR_BEST:%d] pWorldDB Error\r\n", pEtc->cWorldSetID); if( nRet != ERROR_NONE) g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[QUERY_ADD_STAGE_CLEAR_BEST] Error[Code:%d]\r\n", nRet); } break; case QUERY_GET_STAGE_CLEAR_BEST : { TQGetStageClearBest *pEtc = (TQGetStageClearBest*)pData; TAGetStageClearBest Etc; memset(&Etc, 0, sizeof(Etc)); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if(pWorldDB) { Etc.nRetCode = pWorldDB->QueryGetStageClearBest(pEtc, &Etc); } else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_GET_STAGE_CLEAR_BEST] pWorldDB not found\r\n", pEtc->nAccountDBID); m_pConnection->AddSendData(nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc)); } break; case QUERY_GET_STAGE_PERSONAL_BEST : { TQGetStageClearPersonalBest *pEtc = (TQGetStageClearPersonalBest*)pData; TAGetStageClearPersonalBest Etc; memset(&Etc, 0, sizeof(Etc)); Etc.nRetCode = ERROR_DB; Etc.nAccountDBID = pEtc->nAccountDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if(pWorldDB) { Etc.nRetCode = pWorldDB->QueryGetStageClearPersonalBest(pEtc, &Etc); } else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_GET_STAGE_PERSONAL_BEST] pWorldDB not found\r\n", pEtc->nAccountDBID); m_pConnection->AddSendData(nMainCmd, nSubCmd, reinterpret_cast(&Etc), sizeof(Etc)); } break; case QUERY_INIT_STAGE_BEST : { TQInitStageCP *pEtc = (TQInitStageCP*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pEtc->cWorldSetID); if(pWorldDB) { pWorldDB->QueryInitStageClearBest(pEtc->cInitType); } else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, pEtc->nAccountDBID, 0, 0, L"[ADBID:%u] [QUERY_INIT_STAGE_BEST] pWorldDB not found\r\n", pEtc->nAccountDBID); } break; #endif //#if defined(PRE_ADD_CP_RANK) case QUERY_MODCHARACTERSLOTCOUNT: { TQModCharacterSlotCount *pEtc = (TQModCharacterSlotCount*)pData; pMembershipDB = g_SQLConnectionManager.FindMembershipDB(nThreadID); if (pMembershipDB) { char cMaxCount = 0; nRet = pMembershipDB->QueryModCharacterSlotCount(pEtc->biCharacterDBID, 1, cMaxCount); // 34: ij¸¯ÅÍ ½½·Ô °³¼öÁ¦ÇÑ } else g_Log.Log(LogType::_ERROR, pEtc->cWorldSetID, 0, 0, 0, L"[QUERY_MODCHARACTERSLOTCOUNT:%d] pMembershipDB Error\r\n", pEtc->cWorldSetID); } break; } }