105 lines
3.6 KiB
C++
105 lines
3.6 KiB
C++
#include "StdAfx.h"
|
||
#include "DNReputationTask.h"
|
||
#include "DNConnection.h"
|
||
#include "DNSQLConnectionManager.h"
|
||
#include "DNSQLMembership.h"
|
||
#include "DNSQLWorld.h"
|
||
#include "Log.h"
|
||
|
||
CDNReputationTask::CDNReputationTask(CDNConnection* pConnection)
|
||
: CDNMessageTask(pConnection)
|
||
{
|
||
|
||
}
|
||
|
||
CDNReputationTask::~CDNReputationTask(void)
|
||
{
|
||
}
|
||
|
||
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
||
void CDNReputationTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData)
|
||
{
|
||
CDNSQLWorld *pWorldDB = NULL;
|
||
int nRet = ERROR_DB;
|
||
|
||
switch( nSubCmd )
|
||
{
|
||
case QUERY_MOD_NPCLOCATION:
|
||
{
|
||
TQModNPCLocation* pPacket = reinterpret_cast<TQModNPCLocation*>(pData);
|
||
|
||
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
|
||
if (pWorldDB)
|
||
nRet = pWorldDB->QueryModNpcLocation( pPacket );
|
||
else
|
||
g_Log.Log( LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[ADBID:%d] [QUERY_MOD_NPCLOCATION:%d] WorldDB not found\r\n", pPacket->nAccountDBID, pPacket->cWorldSetID);
|
||
|
||
if( nRet != ERROR_NONE )
|
||
g_Log.Log( LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[ADBID:%d] [QUERY_MOD_NPCLOCATION:%d] (Ret:%d)\r\n", pPacket->nAccountDBID, pPacket->cWorldSetID, nRet);
|
||
break;
|
||
}
|
||
|
||
case QUERY_MOD_NPCFAVOR:
|
||
{
|
||
TQModNPCFavor* pPacket = reinterpret_cast<TQModNPCFavor*>(pData);
|
||
|
||
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
|
||
if (pWorldDB)
|
||
nRet = pWorldDB->QueryModNpcFavor( pPacket );
|
||
else
|
||
g_Log.Log( LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[ADBID:%d] [QUERY_MOD_NPCFAVOR:%d] WorldDB not found\r\n", pPacket->nAccountDBID, pPacket->cWorldSetID);
|
||
|
||
if( nRet != ERROR_NONE )
|
||
g_Log.Log( LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[ADBID:%d] [QUERY_MOD_NPCFAVOR:%d] (Ret:%d)\r\n", pPacket->nAccountDBID, pPacket->cWorldSetID, nRet);
|
||
break;
|
||
}
|
||
|
||
case QUERT_GET_LISTNPCFAVOR:
|
||
{
|
||
TQGetListNpcFavor* pPacket = reinterpret_cast<TQGetListNpcFavor*>(pData);
|
||
TAGetListNpcFavor Packet;
|
||
Packet.nAccountDBID = pPacket->nAccountDBID;
|
||
Packet.nRetCode = ERROR_DB;
|
||
Packet.bLastPage = true;
|
||
Packet.cCount = 0;
|
||
|
||
std::vector<TNpcReputation> vReputation;
|
||
|
||
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
|
||
if (pWorldDB)
|
||
nRet = pWorldDB->QueryGetListNpcFavor( pPacket, vReputation );
|
||
else
|
||
g_Log.Log( LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[ADBID:%d] [QUERT_GET_LISTNPCFAVOR:%d] WorldDB not found\r\n", pPacket->nAccountDBID, pPacket->cWorldSetID);
|
||
|
||
if( nRet != ERROR_NONE )
|
||
g_Log.Log( LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, 0, 0, L"[ADBID:%d] [QUERT_GET_LISTNPCFAVOR:%d] (Ret:%d)\r\n", pPacket->nAccountDBID, pPacket->cWorldSetID, nRet);
|
||
|
||
int iSendCount = 0;
|
||
do
|
||
{
|
||
if( vReputation.size()-iSendCount > _countof(Packet.ReputationArr) )
|
||
{
|
||
Packet.bLastPage = false;
|
||
Packet.cCount = _countof(Packet.ReputationArr);
|
||
}
|
||
else
|
||
{
|
||
Packet.bLastPage = true;
|
||
Packet.cCount = static_cast<BYTE>(vReputation.size()-iSendCount);
|
||
}
|
||
|
||
// <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~
|
||
for( UINT i=0 ; i<Packet.cCount ; ++i )
|
||
Packet.ReputationArr[i] = vReputation[iSendCount+i];
|
||
|
||
iSendCount += Packet.cCount;
|
||
|
||
int iSize = sizeof(Packet)-sizeof(Packet.ReputationArr)+Packet.cCount*sizeof(Packet.ReputationArr[0]);
|
||
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Packet), iSize );
|
||
} while( iSendCount < (int)vReputation.size() );
|
||
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|