#include "StdAfx.h" #include "DNQuestTask.h" #include "DNConnection.h" #include "DNSQLConnectionManager.h" #include "DNSQLMembership.h" #include "DNSQLWorld.h" #include "Log.h" CDNQuestTask::CDNQuestTask(CDNConnection* pConnection) : CDNMessageTask(pConnection) { } CDNQuestTask::~CDNQuestTask(void) { } void CDNQuestTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData) { CDNSQLMembership *pMembershipDB = NULL; CDNSQLWorld *pWorldDB = NULL; int nRet = ERROR_DB; TQHeader *pHeader = (TQHeader*)pData; if( pHeader->nAccountDBID > 0) { if( g_pSPErrorCheckManager->bIsError(pHeader->nAccountDBID) == true ) { //g_Log.Log(LogType::_ERROR, pHeader->cWorldSetID, pHeader->nAccountDBID, 0, 0, L"[SP_ERRORCHECK] Main:%d, Sub:%d\r\n", nMainCmd, nSubCmd); return; } } switch (nSubCmd) { // Quest case QUERY_ADDQUEST: { TQAddQuest *pQuest = (TQAddQuest*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB){ nRet = pWorldDB->QueryAddQuest(pQuest->biCharacterDBID, pQuest->cIdx, pQuest->Quest); if (nRet != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_ADDQUEST:%d] Query Error Ret:%d\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID, nRet); m_pConnection->QueryResultError(pQuest->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù } } else{ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_ADDQUEST:%d] pWorldDB not found\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID); } } break; case QUERY_DELQUEST: { TQDelQuest *pQuest = (TQDelQuest*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB){ nRet = pWorldDB->QueryDelQuest(pQuest->biCharacterDBID, pQuest->cIdx, pQuest->nQuestID, pQuest->bComplete, pQuest->bRepeat, pQuest->CompleteQuest); if (nRet != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_DELQUEST:%d] Query Error Ret:%d\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID, nRet); m_pConnection->QueryResultError(pQuest->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù } } else{ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_DELQUEST:%d] pWorldDB not found\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID); } } break; case QUERY_MODQUEST: { TQModQuest *pQuest = (TQModQuest*)pData; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { // ÇöÀç´Â ÀúÀåBit ¸¦ ³ª´©±â°¡ ¹¹Çؼ­..¿ì¼±Àº ¸ðµç ºñÆ®¼Ó¼º ´Ù ÀúÀåÇÑ´Ù.(³ªÁß¿¡ ºô¸®Áö¼­¹ö,°ÔÀÓ¼­¹ö ÂÊ¿¡¼­ ¹Ù²ï°Å¸¸ ÄÁÆ®·ÑÇØ¼­ Á¶ÀýÇØÁà¾ß ÇÑ´Ù.) nRet = pWorldDB->QueryModQuest(pQuest->biCharacterDBID, pQuest->cIndex, 0xFFFFFFFF, pQuest->cQuestStatusCode, pQuest->Quest); if (nRet != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MODQUEST:%d] Query Error Ret:%d\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID, nRet); m_pConnection->QueryResultError(pQuest->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù } } else{ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MODQUEST:%d] pWorldDB not found\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID); } } break; case QUERY_CLEARQUEST: // Äù½ºÆ® ÃʱâÈ­ { TQClearQuest *pQuest = reinterpret_cast(pData); pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { nRet = pWorldDB->QueryClearQuest(pQuest->biCharacterDBID); if (nRet != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_CLEARQUEST:%d] Query Error Ret:%d\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID, nRet); m_pConnection->QueryResultError(pQuest->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù } } else { g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_CLEARQUEST:%d] pWorldDB not found\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID); } } break; case QUERY_FORCECOMPLETEQUEST: // Äù½ºÆ® °­Á¦ ¿Ï·á { TQForceCompleteQuest* pQuest = reinterpret_cast(pData); pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { nRet = pWorldDB->QueryAddCompleteQuest(pQuest->biCharacterDBID, pQuest->nQuestID, pQuest->nQuestCode); if (nRet != ERROR_NONE) { g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_FORCECOMPLETEQUEST QueryAddCompleteQuest:%d] Query Error Ret:%d\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID, nRet); m_pConnection->QueryResultError(pQuest->nAccountDBID, nRet, nMainCmd, nSubCmd); // µðºñ¿¡¼­ ¹º°¡ ¿¡·¯°ªÀ» ¹ñ¾î³ÂÀ¸´Ï °Á ²÷¾î¹ö¸°´Ù break; } } else { g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_FORCECOMPLETEQUEST:%d] pWorldDB not found\r\n", pQuest->biCharacterDBID, pQuest->cWorldSetID); } } break; case QUERY_DELETE_CHARACTER_PERIODQUEST: { TQDeletePeriodQuest *pQuest = reinterpret_cast(pData); TADeletePeriodQuest Quest; memset(&Quest, 0, sizeof(Quest)); Quest.nRetCode = ERROR_DB; Quest.cWorldID = pQuest->cWorldSetID; Quest.nAccountDBID = pQuest->nAccountDBID; Quest.biCharacterDBID = pQuest->biCharacterDBID; Quest.nPeriodQuestType = pQuest->nPeriodQuestType; Quest.nQuestCount = pQuest->nQuestCount; memcpy (Quest.nQuestIDs, pQuest->nQuestIDs, sizeof(int)*pQuest->nQuestCount); pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { Quest.nRetCode = pWorldDB->QueryDeletePeriodQuestList(pQuest, &Quest); if (Quest.nRetCode != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_DELETE_CHARACTER_PERIODQUEST:%d] Query Error Ret:%d\r\n", pQuest->cWorldSetID, Quest.nRetCode); m_pConnection->QueryResultError(pQuest->nAccountDBID, Quest.nRetCode, nMainCmd, nSubCmd); } } else g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_DELETE_CHARACTER_PERIODQUEST:%d] WorldDB not found\r\n", pQuest->cWorldSetID); int nLen = sizeof(TADeletePeriodQuest) - sizeof(Quest.nQuestIDs) + (sizeof(int)*Quest.nQuestCount); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Quest, nLen); } break; case QUERY_GET_CHARACTER_PERIODQUESTDATE: { TQGetPeriodQuestDate *pQuest = reinterpret_cast(pData); TAGetPeriodQuestDate Quest; memset(&Quest, 0, sizeof(Quest)); Quest.nRetCode = ERROR_DB; Quest.cWorldID = pQuest->cWorldSetID; Quest.nAccountDBID = pQuest->nAccountDBID; Quest.biCharacterDBID = pQuest->biCharacterDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { Quest.nRetCode = pWorldDB->QueryGetPeriodQuestDate(pQuest, &Quest); if (Quest.nRetCode != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_GET_CHARACTER_PERIODQUESTDATE:%d] Query Error Ret:%d\r\n", pQuest->cWorldSetID, Quest.nRetCode); m_pConnection->QueryResultError(pQuest->nAccountDBID, Quest.nRetCode, nMainCmd, nSubCmd); } } else g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_GET_CHARACTER_PERIODQUESTDATE:%d] WorldDB not found\r\n", pQuest->cWorldSetID); int nLen = sizeof(TAGetPeriodQuestDate) - sizeof(Quest.PeriodQuestDate) + (sizeof(TPeriodQuestDate)*Quest.nCount); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Quest, nLen); } break; case QUERY_GET_LISTCOMPLETE_EVENTQUEST: { TQGetListCompleteEventQuest *pQuest = reinterpret_cast(pData); TAGetListCompleteEventQuest Quest; memset(&Quest, 0, sizeof(Quest)); Quest.nRetCode = ERROR_DB; Quest.cWorldID = pQuest->cWorldSetID; Quest.nAccountDBID = pQuest->nAccountDBID; Quest.biCharacterDBID = pQuest->biCharacterDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { Quest.nRetCode = pWorldDB->QueryGetListCompleteEventQuest(pQuest, &Quest); if (Quest.nRetCode != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_GET_LISTCOMPLETE_EVENTQUEST:%d] Query Error Ret:%d\r\n", pQuest->cWorldSetID, Quest.nRetCode); m_pConnection->QueryResultError(pQuest->nAccountDBID, Quest.nRetCode, nMainCmd, nSubCmd); } } else g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_GET_LISTCOMPLETE_EVENTQUEST:%d] WorldDB not found\r\n", pQuest->cWorldSetID); int nLen = sizeof(TAGetListCompleteEventQuest) - sizeof(Quest.EventQuestList) + (sizeof(TCompleteEventQuest)*Quest.nCount); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Quest, nLen); } break; case QUERY_COMPLETE_EVENTQUEST: { TQCompleteEventQuest *pQuest = reinterpret_cast(pData); TACompleteEventQuest Quest; memset(&Quest, 0, sizeof(Quest)); Quest.nRetCode = ERROR_DB; Quest.cWorldID = pQuest->cWorldSetID; Quest.nAccountDBID = pQuest->nAccountDBID; Quest.biCharacterDBID = pQuest->biCharacterDBID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { Quest.nRetCode = pWorldDB->QueryCompleteEventQuest(pQuest, &Quest); if (Quest.nRetCode != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_COMPLETE_EVENTQUEST:%d] Query Error Ret:%d\r\n", pQuest->cWorldSetID, Quest.nRetCode); m_pConnection->QueryResultError(pQuest->nAccountDBID, Quest.nRetCode, nMainCmd, nSubCmd); } } else g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_COMPLETE_EVENTQUEST:%d] WorldDB not found\r\n", pQuest->cWorldSetID); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Quest, sizeof(TACompleteEventQuest)); } break; case QUERY_GET_WORLDEVENTQUESTCOUNTER: { TQGetWorldEventQuestCounter *pQuest = reinterpret_cast(pData); TAGetWorldEventQuestCounter Quest; memset(&Quest, 0, sizeof(Quest)); Quest.nRetCode = ERROR_DB; Quest.cWorldSetID = pQuest->cWorldSetID; Quest.nScheduleID = pQuest->nScheduleID; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { Quest.nRetCode = pWorldDB->QueryGetWorldEventQuestCounter(pQuest, &Quest); if (Quest.nRetCode != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, 0, 0, L"[QUERY_GET_WORLDEVENTQUESTCOUNTER:%d] Query Error Ret:%d\r\n", pQuest->cWorldSetID, Quest.nRetCode); m_pConnection->QueryResultError(pQuest->nAccountDBID, Quest.nRetCode, nMainCmd, nSubCmd); } } else g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, 0, 0, L"[QUERY_GET_WORLDEVENTQUESTCOUNTER:%d] WorldDB not found\r\n", pQuest->cWorldSetID); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Quest, sizeof(TAGetWorldEventQuestCounter)); } break; case QUERY_MOD_WORLDEVENTQUESTCOUNTER: { TQModWorldEventQuestCounter *pQuest = reinterpret_cast(pData); TAModWorldEventQuestCounter Quest; memset(&Quest, 0, sizeof(Quest)); Quest.nRetCode = ERROR_DB; Quest.cWorldSetID = pQuest->cWorldSetID; Quest.nScheduleID = pQuest->nScheduleID; Quest.nCounterDelta = pQuest->nCounterDelta; pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pQuest->cWorldSetID); if (pWorldDB) { Quest.nRetCode = pWorldDB->QueryModWorldEventQuestCounter(pQuest, &Quest); if (Quest.nRetCode != ERROR_NONE){ g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_MOD_WORLDEVENTQUESTCOUNTER:%d] Query Error Ret:%d\r\n", pQuest->cWorldSetID, Quest.nRetCode); m_pConnection->QueryResultError(pQuest->nAccountDBID, Quest.nRetCode, nMainCmd, nSubCmd); } } else g_Log.Log(LogType::_ERROR, pQuest->cWorldSetID, pQuest->nAccountDBID, pQuest->biCharacterDBID, 0, L"[QUERY_MOD_WORLDEVENTQUESTCOUNTER:%d] WorldDB not found\r\n", pQuest->cWorldSetID); m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&Quest, sizeof(TAModWorldEventQuestCounter)); } break; } }