257 lines
No EOL
12 KiB
C++
257 lines
No EOL
12 KiB
C++
#include "StdAfx.h"
|
|
#include "DNMissionTask.h"
|
|
#include "DNConnection.h"
|
|
#include "DNSQLConnectionManager.h"
|
|
#include "DNSQLMembership.h"
|
|
#include "DNSQLWorld.h"
|
|
#include "Log.h"
|
|
|
|
CDNMissionTask::CDNMissionTask(CDNConnection* pConnection)
|
|
: CDNMessageTask(pConnection)
|
|
{
|
|
|
|
}
|
|
|
|
CDNMissionTask::~CDNMissionTask(void)
|
|
{
|
|
}
|
|
|
|
void CDNMissionTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData)
|
|
{
|
|
CDNSQLMembership *pMembershipDB = NULL;
|
|
CDNSQLWorld *pWorldDB = NULL;
|
|
int nRet = ERROR_DB;
|
|
|
|
switch (nSubCmd)
|
|
{
|
|
case QUERY_MISSIONGAIN:
|
|
{
|
|
TQMissionGain *pUpdate = (TQMissionGain*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QueryUpsGainMissionBin(pUpdate->biCharacterDBID, pUpdate->MissionGain);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MISSIONGAIN:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MISSIONGAIN:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case QUERY_MISSIONACHIEVE:
|
|
{
|
|
TQMissionAchieve *pUpdate = (TQMissionAchieve*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QueryAddAchieveMission(pUpdate->biCharacterDBID, pUpdate->nMissionID, pUpdate->cMissionType, pUpdate->MissionAchieve);
|
|
|
|
switch (nRet)
|
|
{
|
|
case ERROR_NONE:
|
|
case 103125: // 이미 달성한 미션
|
|
break;
|
|
|
|
default:
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MISSIONACHIEVE:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MISSIONACHIEVE:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case QUERY_SETDAILYMISSION:
|
|
{
|
|
TQSetDailyMission *pUpdate = (TQSetDailyMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_DAY, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETDAILYMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETDAILYMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case QUERY_SETWEEKLYMISSION:
|
|
{
|
|
TQSetWeeklyMission *pUpdate = (TQSetWeeklyMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_WEEK, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETWEEKLYMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETWEEKLYMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
|
|
#if defined(PRE_ADD_MONTHLY_MISSION)
|
|
case QUERY_SETMONTHLYMISSION:
|
|
{
|
|
TQSetMonthlyMission *pUpdate = (TQSetMonthlyMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_MONTH, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETMONTHLYMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETMONTHLYMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
#endif // #if defined(PRE_ADD_MONTHLY_MISSION)
|
|
|
|
case QUERY_SETWEEKENDEVENTMISSION:
|
|
{
|
|
TQSetWeekendEventMission *pUpdate = (TQSetWeekendEventMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_WEEKENDEVENT, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETEVENTMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETEVENTMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
case QUERY_SETGUILDWARMISSION:
|
|
{
|
|
TQSetGuildWarMission *pUpdate = (TQSetGuildWarMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_GUILDWAR, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETGUILDWARMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETGUILDWARMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
case QUERY_SETGUILDCOMMONMISSION:
|
|
{
|
|
TQSetGuildCommonMission *pUpdate = (TQSetGuildCommonMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_GUILDCOMMON, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETGUILDCOMMONMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETGUILDCOMMONMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
case QUERY_SETWEEKENDREPEATMISSION:
|
|
{
|
|
TQSetWeekendRepeatMission *pUpdate = (TQSetWeekendRepeatMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_WEEKENDREPEAT, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETWEEKENDREPEATMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETWEEKENDREPEATMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case QUERY_SETPCBANGMISSION:
|
|
{
|
|
TQSetPCBangMission *pUpdate = (TQSetPCBangMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QuerySetDailyWeeklyMission(pUpdate->biCharacterDBID, DAILYMISSION_PCBANG, pUpdate->nMissionIDs);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETPCBANGMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_SETPCBANGMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
case QUERY_MODDAILYWEEKLYMISSION:
|
|
{
|
|
TQModDailyWeeklyMission *pUpdate = (TQModDailyWeeklyMission*)pData;
|
|
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pUpdate->cWorldSetID);
|
|
if (pWorldDB){
|
|
nRet = pWorldDB->QueryModDailyWeeklyMissionDetail(pUpdate->biCharacterDBID, pUpdate->cDailyMissionType, pUpdate->cMissionIndex, pUpdate->Mission, pUpdate->nMissionScore);
|
|
if (nRet != ERROR_NONE){
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MODDAILYWEEKLYMISSION:%d] Query Error Ret:%d\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID, nRet);
|
|
|
|
m_pConnection->QueryResultError(pUpdate->nAccountDBID, nRet, nMainCmd, nSubCmd); // 디비에서 뭔가 에러값을 뱉어냈으니 걍 끊어버린다
|
|
}
|
|
}
|
|
else{
|
|
g_Log.Log(LogType::_ERROR, pUpdate->cWorldSetID, pUpdate->nAccountDBID, pUpdate->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_MODDAILYWEEKLYMISSION:%d] pWorldDB not found\r\n", pUpdate->biCharacterDBID, pUpdate->cWorldSetID);
|
|
}
|
|
}
|
|
break;
|
|
case QUERY_CLEARMISSION :
|
|
{
|
|
TQClearMission *pClearMission = (TQClearMission*)pData;
|
|
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pClearMission->cWorldSetID);
|
|
TAHeader tReturn;
|
|
tReturn.nAccountDBID = pClearMission->nAccountDBID;
|
|
tReturn.nRetCode = ERROR_DB;
|
|
if (pWorldDB)
|
|
{
|
|
tReturn.nRetCode = pWorldDB->QueryDelAllMissionsForCheat(pClearMission->biCharacterDBID);
|
|
}
|
|
else
|
|
g_Log.Log(LogType::_ERROR, pClearMission->cWorldSetID, pClearMission->nAccountDBID, pClearMission->biCharacterDBID, 0, L"[CDBID:%lld] [QUERY_CLEARMISSION:%d] pWorldDB not found\r\n", pClearMission->biCharacterDBID, pClearMission->cWorldSetID);
|
|
|
|
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&tReturn), sizeof(tReturn) );
|
|
}
|
|
break;
|
|
}
|
|
} |