DragonNest/Server/DNDBServer/DNDarkLairTask.cpp
2024-12-19 09:48:26 +08:00

95 lines
No EOL
3 KiB
C++

#include "StdAfx.h"
#include "DNDarkLairTask.h"
#include "DNConnection.h"
#include "DNSQLConnectionManager.h"
#include "DNSQLMembership.h"
#include "DNSQLWorld.h"
#include "Log.h"
CDNDarkLairTask::CDNDarkLairTask(CDNConnection* pConnection)
: CDNMessageTask(pConnection)
{
}
CDNDarkLairTask::~CDNDarkLairTask(void)
{
}
void CDNDarkLairTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData)
{
CDNSQLMembership *pMembershipDB = NULL;
CDNSQLWorld *pWorldDB = NULL;
int nRet = ERROR_DB;
switch (nSubCmd)
{
case QUERY_UPDATE_DARKLAIR_RESULT:
{
TQUpdateDarkLairResult* pDarkLair = reinterpret_cast<TQUpdateDarkLairResult*>(pData);
TAUpdateDarkLairResult DarkLair;
memset( &DarkLair, 0, sizeof(DarkLair) );
DarkLair.nRetCode = ERROR_DB;
DarkLair.iRoomID = pDarkLair->iRoomID;
DarkLair.iProtectionKey = pDarkLair->iProtectionKey;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pDarkLair->cWorldSetID );
if( pWorldDB )
{
DarkLair.nRetCode = pWorldDB->QueryUpdateDarkLairResult( pDarkLair, &DarkLair);
}
if( DarkLair.nRetCode != ERROR_NONE )
g_Log.Log(LogType::_ERROR, pDarkLair->cWorldSetID, pDarkLair->nAccountDBID, 0, 0, L"[QUERY_UPDATE_DARKLAIR_RESULT:%d] (Ret:%d)\r\n", pDarkLair->cWorldSetID, DarkLair.nRetCode);
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&DarkLair), sizeof(DarkLair) );
break;
}
case QUERY_GET_DARKLAIR_RANK_BOARD:
{
TQGetDarkLairRankBoard* pDarkLair = reinterpret_cast<TQGetDarkLairRankBoard*>(pData);
TAGetDarkLairRankBoard DarkLair;
memset( &DarkLair, 0, sizeof(DarkLair) );
DarkLair.nRetCode = ERROR_DB;
DarkLair.nAccountDBID = pDarkLair->nAccountDBID;
DarkLair.cPartyUserCount = pDarkLair->cPartyUserCount;
#if defined(PRE_ADD_CHALLENGE_DARKLAIR)
DarkLair.iMapIndex = pDarkLair->iMapIndex;
#endif
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pDarkLair->cWorldSetID );
if( pWorldDB )
{
do
{
// °³Àκ£½ºÆ® ¾ò±â
TQUpdateDarkLairResult pTempQ;
memset( &pTempQ, 0, sizeof(pTempQ) );
pTempQ.sUserData[0].i64CharacterDBID = pDarkLair->biCharacterDBID;
pTempQ.iMapIndex = pDarkLair->iMapIndex;
pTempQ.cPartyUserCount = pDarkLair->cPartyUserCount;
TAUpdateDarkLairResult pTempA;
memset( &pTempA, 0, sizeof(pTempA) );
DarkLair.nRetCode = pWorldDB->QueryGetDarkLairPersonalBest( &pTempQ, &pTempA, 0 );
if( DarkLair.nRetCode != ERROR_NONE )
break;
DarkLair.sBestHistory = pTempA.sBestUserData[0];
// ´ÙÅ©·¹¾î Rank ¾ò±â
DarkLair.nRetCode = pWorldDB->QueryGetListDarkLairTopRanker( pDarkLair, &DarkLair );
}while( false );
}
if( DarkLair.nRetCode != ERROR_NONE )
g_Log.Log(LogType::_ERROR, pDarkLair->cWorldSetID, pDarkLair->nAccountDBID, pDarkLair->biCharacterDBID, 0, L"[QUERY_GET_DARKLAIR_RANK_BOARD:%d] (Ret:%d)\r\n", pDarkLair->cWorldSetID, DarkLair.nRetCode);
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&DarkLair), sizeof(DarkLair) );
break;
}
}
}