DragonNest/Server/DNDBServer/DNPartyTask.cpp

585 lines
21 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DNPartyTask.h"
#include "DNSQLMembership.h"
#include "DNSQLWorld.h"
#include "DNSQLConnectionManager.h"
#include "Log.h"
#include "DNConnection.h"
#if defined( PRE_PARTY_DB )
extern TDBConfig g_Config;
#endif
#if defined( PRE_PARTY_DB )
CDNPartyTask::CDNPartyTask(CDNConnection* pConnection)
: CDNMessageTask(pConnection)
{
}
CDNPartyTask::~CDNPartyTask(void)
{
}
void CDNPartyTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData)
{
CDNSQLMembership *pMembershipDB = NULL;
CDNSQLWorld *pWorldDB = NULL;
int nRet = ERROR_DB;
switch (nSubCmd)
{
case QUERY_DELPARTY_FORSERVER:
{
TQDelPartyForServer* pParty = reinterpret_cast<TQDelPartyForServer*>(pData);
TADelPartyForServer Party;
memset( &Party, 0, sizeof(Party) );
Party.nRetCode = ERROR_DB;
Party.iServerID = pParty->iServerID;
if( pParty->cWorldSetID <= 0)
break;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryDelPartyForServer( pParty );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QUERY_DELPARTY_FORSERVER:%d] (Ret:%d) SID:%d\r\n", pParty->cWorldSetID, Party.nRetCode, pParty->iServerID );
}
else
g_Log.Log(LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QUERY_DELPARTY_FORSERVER:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_DELPARTY_FORGAMESERVER:
{
TQDelPartyForServer* pParty = reinterpret_cast<TQDelPartyForServer*>(pData);
TADelPartyForServer Party;
memset( &Party, 0, sizeof(Party) );
Party.nRetCode = ERROR_DB;
for (int i = 0; i < g_Config.nWorldDBCount; i++)
{
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, g_Config.WorldDB[i].nWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryDelPartyForServer( pParty );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QUERY_DELPARTY_FORSERVER:%d] (Ret:%d) SID:%d\r\n", pParty->cWorldSetID, Party.nRetCode, pParty->iServerID );
}
else
{
continue;
}
if( Party.nRetCode != ERROR_NONE )
{
Party.iServerID = i;
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
}
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_ADDPARTY:
#if defined( PRE_WORLDCOMBINE_PARTY )
case QUERY_ADDWORLDPARTY:
#endif
{
TQAddParty* pParty = reinterpret_cast<TQAddParty*>(pData);
TAAddParty Party;
memset( &Party, 0, sizeof(Party) );
Party.nAccountDBID = pParty->nAccountDBID;
Party.Data = pParty->Data;
Party.nRetCode = ERROR_DB;
Party.bCheat = pParty->bCheat;
char cWorldID = pParty->cWorldSetID;
#if defined( PRE_WORLDCOMBINE_PARTY )
if( Party::bIsWorldCombineParty(pParty->Data.PartyData.Type) )
{
if( g_Config.nCombineWorldDBID <= 0 )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
cWorldID = g_Config.nCombineWorldDBID;
pParty->cWorldSetID = cWorldID;
}
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, cWorldID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryAddParty( pParty, &Party );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, cWorldID, pParty->nAccountDBID, pParty->Data.PartyData.biLeaderCharacterDBID, 0, L"[QueryAddParty:%d] (Ret:%d)\r\n", cWorldID, Party.nRetCode);
}
else
g_Log.Log(LogType::_ERROR, cWorldID, pParty->nAccountDBID, pParty->Data.PartyData.biLeaderCharacterDBID, 0, L"[QueryAddParty:%d] pWorldDB Error\r\n", cWorldID );
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_ADDPARTYANDMEMBERGAME:
{
TQAddPartyAndMemberGame* pParty = reinterpret_cast<TQAddPartyAndMemberGame*>(pData);
TAAddPartyAndMemberGame Party;
memset( &Party, 0, sizeof(Party) );
Party.nAccountDBID = pParty->nAccountDBID;
Party.Data = pParty->Data;
memcpy( Party.nKickedMemberList, pParty->nKickedMemberList, sizeof(Party.nKickedMemberList) );
Party.nRetCode = ERROR_DB;
char cWorldID = pParty->cWorldSetID;
#if defined( PRE_WORLDCOMBINE_PARTY )
if( Party::bIsWorldCombineParty(pParty->Data.PartyData.Type) )
{
if( g_Config.nCombineWorldDBID <= 0 )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
cWorldID = g_Config.nCombineWorldDBID;
pParty->cWorldSetID = cWorldID;
}
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, cWorldID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryAddPartyAndMemberGame( pParty, &Party );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, cWorldID, pParty->nAccountDBID, pParty->Data.PartyData.biLeaderCharacterDBID, 0, L"[QueryAddPartyAndMemberGame:%d] (Ret:%d)\r\n", cWorldID, Party.nRetCode);
}
else
g_Log.Log(LogType::_ERROR, cWorldID, pParty->nAccountDBID, pParty->Data.PartyData.biLeaderCharacterDBID, 0, L"[QueryAddPartyAndMemberGame:%d] pWorldDB Error\r\n", cWorldID );
#if defined( PRE_WORLDCOMBINE_PARTY )
if( Party.nRetCode == ERROR_NONE && Party::bIsWorldCombineParty(pParty->Data.PartyData.Type) == false )
#else
if( Party.nRetCode == ERROR_NONE )
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
{
// <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
TQJoinParty Member;
memset( &Member, 0, sizeof(TQJoinParty) );
Member.PartyID = Party.Data.PartyData.PartyID;
Member.iMaxUserCount = pParty->Data.PartyData.nPartyMaxCount;
for(int i=0;i<pParty->Data.PartyData.iCurMemberCount;i++)
{
Member.biCharacterDBID = pParty->Member[i].biCharacterDBID;
#if defined( PRE_ADD_NEWCOMEBACK )
Member.bCheckComeBackParty = pParty->Member[i].bCheckComebackAppellation;
#endif
pWorldDB->QueryJoinParty( &Member );
}
}
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_ADDPARTYANDMEMBERVILLAGE:
{
TQAddPartyAndMemberVillage* pParty = reinterpret_cast<TQAddPartyAndMemberVillage*>(pData);
TAAddPartyAndMemberVillage Party;
memset( &Party, 0, sizeof(Party) );
Party.nAccountDBID = pParty->nAccountDBID;
Party.Data = pParty->Data;
memcpy( Party.nKickedMemberList, pParty->nKickedMemberList, sizeof(Party.nKickedMemberList) );
for(int i=0;i<pParty->Data.PartyData.iCurMemberCount;i++)
Party.MemberInfo[i] = pParty->MemberInfo[i];
Party.nVoiceChannelID = pParty->nVoiceChannelID;
Party.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryAddPartyAndMemberVillage( pParty, &Party );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->Data.PartyData.biLeaderCharacterDBID, 0, L"[QueryAddPartyAndMemberVillage:%d] (Ret:%d)\r\n", pParty->cWorldSetID, Party.nRetCode);
}
else
g_Log.Log(LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->Data.PartyData.biLeaderCharacterDBID, 0, L"[QueryAddPartyAndMemberVillage:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
if( Party.nRetCode == ERROR_NONE )
{
// <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
TQJoinParty Member;
memset( &Member, 0, sizeof(TQJoinParty) );
Member.PartyID = Party.Data.PartyData.PartyID;
Member.iMaxUserCount = pParty->Data.PartyData.nPartyMaxCount;
for(int i=0;i<pParty->Data.PartyData.iCurMemberCount;i++)
{
Member.biCharacterDBID = pParty->MemberInfo[i].biCharacterDBID;
#if defined( PRE_ADD_NEWCOMEBACK )
Member.bCheckComeBackParty = pParty->MemberInfo[i].bCheckComebackAppellation;
#endif
pWorldDB->QueryJoinParty( &Member );
}
}
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_DELPARTY:
{
TQDelParty* pParty = reinterpret_cast<TQDelParty*>(pData);
TADelParty Party;
memset( &Party, 0, sizeof(Party) );
Party.nAccountDBID = pParty->nAccountDBID;
Party.nRetCode = ERROR_DB;
Party.PartyID = pParty->PartyID;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryDelParty( pParty );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryDelParty:%d] (Ret:%d) PartyID=%I64d\r\n", pParty->cWorldSetID, Party.nRetCode, pParty->PartyID );
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryDelParty:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
if( Party.nRetCode == ERROR_NONE )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
}
#if defined( PRE_WORLDCOMBINE_PARTY )
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB<44><42> <20>ѹ<EFBFBD> <20><> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>.
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, g_Config.nCombineWorldDBID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryDelParty( pParty );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, g_Config.nCombineWorldDBID, pParty->nAccountDBID, 0, 0, L"[QueryDelParty:%d] (Ret:%d) PartyID=%I64d\r\n", g_Config.nCombineWorldDBID, Party.nRetCode, pParty->PartyID );
}
else
g_Log.Log( LogType::_ERROR, g_Config.nCombineWorldDBID, pParty->nAccountDBID, 0, 0, L"[QueryDelParty:%d] pWorldDB Error\r\n", g_Config.nCombineWorldDBID );
if( Party.nRetCode == ERROR_NONE )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
}
}
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
break;
}
case QUERY_JOINPARTY:
{
TQJoinParty* pParty = reinterpret_cast<TQJoinParty*>(pData);
TAJoinParty Party;
memset( &Party, 0, sizeof(Party) );
Party.nAccountDBID = pParty->nAccountDBID;
Party.nRetCode = ERROR_DB;
Party.PartyID = pParty->PartyID;
Party.biCharacterDBID = pParty->biCharacterDBID;
Party.nSessionID = pParty->nSessionID;
Party.cThreadID = pParty->cThreadID;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryJoinParty( pParty );
switch( Party.nRetCode )
{
case ERROR_NONE:
case 103322: // <20>ش<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
case 103323: // <20>̹<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>Ե<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
case 103330: // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD><CAB0>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.
break;
default:
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QueryJoinParty:%d] (Ret:%d) PartyID=%I64d\r\n", pParty->cWorldSetID, Party.nRetCode, pParty->PartyID );
break;
}
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QueryJoinParty:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_OUTPARTY:
{
TQOutParty* pParty = reinterpret_cast<TQOutParty*>(pData);
TAOutParty Party;
memset( &Party, 0, sizeof(Party) );
Party.nRetCode = ERROR_DB;
Party.nAccountDBID = pParty->nAccountDBID;
Party.PartyID = pParty->PartyID;
Party.biCharacterDBID =pParty->biCharacterDBID;
Party.nSessionID = pParty->nSessionID;
Party.Type = pParty->Type;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryOutParty( pParty, &Party );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QueryOutParty:%d] (Ret:%d) PartyID=%I64d\r\n", pParty->cWorldSetID, Party.nRetCode, pParty->PartyID );
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QueryOutParty:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_GETLISTPARTY:
{
TQGetListParty* pParty = reinterpret_cast<TQGetListParty*>(pData);
TAGetListParty Party;
memset( &Party, 0, sizeof(Party) );
std::vector<Party::Data> vData;
Party.nRetCode = ERROR_DB;
Party.bIsStart = true;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryGetListParty( pParty, vData );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListParty:%d] (Ret:%d)\r\n", pParty->cWorldSetID, Party.nRetCode );
#if defined( PRE_WORLDCOMBINE_PARTY )
if( g_Config.nCombineWorldDBID>0 && pParty->cWorldSetID != g_Config.nCombineWorldDBID )
{
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, g_Config.nCombineWorldDBID );
if( pWorldDB )
{
pWorldDB->QueryGetListParty( g_Config.nCombineWorldDBID, _WORLDCOMBINE_PARTY, vData );
}
else
{
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListParty:%d] WorldCombineWorldDB Error\r\n", g_Config.nCombineWorldDBID );
}
}
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListParty:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
if( Party.nRetCode == ERROR_NONE && vData.size() )
{
size_t TotalCount = 0;
do
{
Party.DataArr[Party.nCount++] = vData[TotalCount++];
if( Party.nCount == _countof(Party.DataArr) )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
Party.nCount = 0;
Party.bIsStart = false;
}
}while( TotalCount < vData.size() );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( Party.nCount > 0 )
{
int iSize = static_cast<int>(sizeof(Party)-sizeof(Party.DataArr)+(Party.nCount*sizeof(Party.DataArr[0])));
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), iSize );
}
}
else
{
int iSize = static_cast<int>(sizeof(Party)-sizeof(Party.DataArr));
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), iSize );
}
break;
}
case QUERY_MODPARTY:
{
TQModParty* pParty = reinterpret_cast<TQModParty*>(pData);
TAModParty Party;
memset( &Party, 0, sizeof(Party) );
Party.PartyData = pParty->PartyData;
Party.iRoomID = pParty->iRoomID;
Party.nRetCode = ERROR_DB;
char cWorldID = pParty->cWorldSetID;
#if defined( PRE_WORLDCOMBINE_PARTY )
if( Party::bIsWorldCombineParty(pParty->PartyData.Type) )
{
if( g_Config.nCombineWorldDBID <= 0 )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
cWorldID = g_Config.nCombineWorldDBID;
}
#endif // #if defined( PRE_WORLDCOMBINE_PARTY )
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, cWorldID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryModParty( pParty );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, cWorldID, pParty->nAccountDBID, 0, 0, L"[QueryModParty:%d] (Ret:%d)\r\n", cWorldID, Party.nRetCode );
}
else
g_Log.Log( LogType::_ERROR, cWorldID, pParty->nAccountDBID, 0, 0, L"[QueryModParty:%d] pWorldDB Error\r\n", cWorldID );
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
case QUERY_MODPARTYLEADER:
{
TQModPartyLeader* pParty = reinterpret_cast<TQModPartyLeader*>(pData);
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
int iRet = pWorldDB->QueryModPartyLeader( pParty );
if( iRet != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QueryModPartyLeader:%d] (Ret:%d) PartyID:%I64d\r\n", pParty->cWorldSetID, iRet, pParty->PartyID );
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QueryModPartyLeader:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
break;
}
case QUERY_GETPARTY_JOINMEMBERS:
{
TQGetListPartyMember* pParty = reinterpret_cast<TQGetListPartyMember*>(pData);
TAGetListPartyMember Party;
memset( &Party, 0, sizeof(Party) );
Party.nRetCode = ERROR_DB;
Party.nAccountDBID = pParty->nAccountDBID;
Party.PartyID = pParty->PartyID;
std::vector<Party::MemberData> vData;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryGetListPartyMember( pParty, &Party, vData );
if( Party.nRetCode != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListPartyMember:%d] (Ret:%d) PartyID:%I64d\r\n", pParty->cWorldSetID, Party.nRetCode, pParty->PartyID );
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListPartyMember:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
if( Party.nRetCode == ERROR_NONE )
{
for( UINT i=0 ; i<vData.size() ; ++i )
{
Party.MemberData[Party.nCount++] = vData[i];
if( Party.nCount == _countof(Party.MemberData) )
break;
}
}
int iSize = sizeof(Party)-sizeof(Party.MemberData)+(Party.nCount*sizeof(Party.MemberData[0]));
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
break;
}
#if defined( PRE_WORLDCOMBINE_PARTY )
case QUERY_GETLISTWORLDPARTY:
{
// <20>̰<EFBFBD> <20><><EFBFBD>ص<EFBFBD><D8B5>񿡼<EFBFBD><F1BFA1BC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>
TQGetListParty* pParty = reinterpret_cast<TQGetListParty*>(pData);
TAGetListParty Party;
memset( &Party, 0, sizeof(Party) );
std::vector<Party::Data> vData;
Party.nRetCode = ERROR_DB;
Party.bIsStart = true;
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
if( g_Config.nCombineWorldDBID>0 && pParty->cWorldSetID == g_Config.nCombineWorldDBID )
{
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, g_Config.nCombineWorldDBID );
if( pWorldDB )
{
Party.nRetCode = pWorldDB->QueryGetListParty( g_Config.nCombineWorldDBID, _WORLDCOMBINE_PARTY, vData );
}
else
{
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListParty:%d] WorldCombineWorldDB Error\r\n", g_Config.nCombineWorldDBID );
}
}
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, 0, 0, L"[QueryGetListParty:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
if( Party.nRetCode == ERROR_NONE && vData.size() )
{
size_t TotalCount = 0;
do
{
Party.DataArr[Party.nCount++] = vData[TotalCount++];
if( Party.nCount == _countof(Party.DataArr) )
{
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), sizeof(Party) );
Party.nCount = 0;
Party.bIsStart = false;
}
}while( TotalCount < vData.size() );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( Party.nCount > 0 )
{
int iSize = static_cast<int>(sizeof(Party)-sizeof(Party.DataArr)+(Party.nCount*sizeof(Party.DataArr[0])));
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), iSize );
}
}
else
{
int iSize = static_cast<int>(sizeof(Party)-sizeof(Party.DataArr));
m_pConnection->AddSendData( nMainCmd, nSubCmd, reinterpret_cast<char*>(&Party), iSize );
}
}
break;
#endif
#if defined( PRE_ADD_NEWCOMEBACK )
case QUERY_MOD_COMEBACKINFO:
{
TQModPartyMemberComeback* pParty = reinterpret_cast<TQModPartyMemberComeback*>(pData);
pWorldDB = g_SQLConnectionManager.FindWorldDB( nThreadID, pParty->cWorldSetID );
if( pWorldDB )
{
int iRet = pWorldDB->QueryModPartyMemberComeback( pParty );
if( iRet != ERROR_NONE )
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QUERY_MOD_COMEBACKINFO:%d] (Ret:%d) PartyID:%I64d\r\n", pParty->cWorldSetID, iRet, pParty->PartyID );
}
else
g_Log.Log( LogType::_ERROR, pParty->cWorldSetID, pParty->nAccountDBID, pParty->biCharacterDBID, 0, L"[QUERY_MOD_COMEBACKINFO:%d] pWorldDB Error\r\n", pParty->cWorldSetID);
break;
}
break;
#endif
}
}
#endif // #if defined( PRE_PARTY_DB )