DragonNest/Server/ServerCommon/DNDBConnection.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

10078 lines
No EOL
373 KiB
C++

#include "StdAfx.h"
#include "DNDBConnection.h"
#include "DNIocpManager.h"
#include "DNGameDataManager.h"
#include "Log.h"
#include "DNEvent.h"
#include "DNDBConnectionManager.h"
#include "DNUserSession.h"
#include "DNGuildSystem.h"
#include "DNUserItem.h"
#if defined(_VILLAGESERVER)
#include "DNUserSessionManager.h"
#include "MasterSystemCacheRepository.h"
#include "DNMasterConnection.h"
extern TVillageConfig g_Config;
#include "DNFarm.h"
#include "DNGuildWarManager.h"
#include "DNGuildVillage.h"
#if defined( PRE_PARTY_DB )
#include "DNPartyManager.h"
#endif // #if defined( PRE_PARTY_DB )
#if defined(PRE_ADD_DWC)
#include "DNDWCSystem.h"
#endif
#elif defined(_GAMESERVER) // #if defined(_VILLAGESERVER)
#include "DNGameServerManager.h"
#include "DNRUDPGameServer.h"
#include "DNGameRoom.h"
#include "DnGameTask.h"
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#include "DNMasterConnectionManager.h"
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#include "GrowingArea.h"
#include "DNFarmGameRoom.h"
extern TGameConfig g_Config;
#if defined(PRE_ADD_DOORS_PROJECT)
#include "DnPlayerActor.h"
#endif //#if defined(PRE_ADD_DOORS_PROJECT)
#endif // #if defined(_GAMESERVER)
#include "DnLogConnection.h"
#include "VarArg.h"
#include "DNAuthManager.h"
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#include "DNMailSender.h"
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#include "DNPeriodQuestSystem.h"
#include "DNServiceConnection.h"
#include "Version.h"
#include "DNMissionSystem.h"
#include "DNGuildRecruitCacheRepository.h"
#if defined( PRE_PRIVATECHAT_CHANNEL )
#include "DNPrivateChatChannel.h"
#include "DnPrivateChatManager.h"
#endif
#if defined( PRE_WORLDCOMBINE_PVP )
#if defined( _VILLAGESERVER )
#include "DNPvPRoomManager.h"
#endif
#endif
// 모든 패킷 선언할때 마다 선언하고 초기화 하길래 해봤습니다. 그닥 효율이 좋은것도 아니라 가독성에 조금이라도 불편함이 생기면 자삭 하겠습니다. hgoori
#define ALLOC_PACKET(T) \
T packet; \
memset(&packet, 0, sizeof(packet))
CDNDBConnection::CDNDBConnection(void): CConnection()
{
#if defined(_FINAL_BUILD)
Init(1024 * 1024 * 10, 1024 * 1024 * 10);
#else
Init(1024 * 100, 1024 * 100);
#endif
#if defined( _US )
m_dwKeepAliveTick = timeGetTime();
#endif // #if defined( _US )
m_nServerID = -1;
}
CDNDBConnection::~CDNDBConnection(void)
{
}
int CDNDBConnection::AddSendData(int iMainCmd, int iSubCmd, char *pData, int iLen, BYTE cSeq)
{
if(!GetActive()) return 0;
DN_ASSERT(NULL != g_pDBConnectionManager, "Invalid!");
DN_ASSERT(CHECK_LIMIT(iMainCmd, 255), "Invalid!");
DN_ASSERT(CHECK_LIMIT(iSubCmd, 255), "Invalid!");
DN_ASSERT(NULL != pData, "Invalid!");
DN_ASSERT(0 < iLen, "Invalid!");
DWORD nThreadID = ::GetCurrentThreadId();
DN_ASSERT(0 != nThreadID, "Check!");
return(CConnection::AddSendData(iMainCmd, iSubCmd, pData, iLen, NULL, cSeq));
}
#if defined( _US )
void CDNDBConnection::KeepAlive()
{
if( timeGetTime()-m_dwKeepAliveTick <(60*1000*10) )
return;
if( GetActive() == false )
return;
TQKeepAlive TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
m_dwKeepAliveTick = timeGetTime();
AddSendData( MAINCMD_ETC, QUERY_KEEPALIVE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif // #if defined( _US )
void CDNDBConnection::GetDBSID()
{
if( GetActive() == false )
return;
if( m_nServerID != -1 )
return;
TQGetDBSID packet;
memset(&packet, 0, sizeof(packet));
AddSendData(MAINCMD_ETC, QUERY_GET_DBSID, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::Reconnect()
{
if(!GetActive() && !GetConnecting() && g_pIocpManager)
{
SetConnecting(true);
if(g_pIocpManager->AddConnectionEx(this, CONNECTIONKEY_DB, m_szIP, m_wPort) < 0)
{
SetConnecting(false);
#if defined( STRESS_TEST )
#else
g_Log.Log(LogType::_ERROR, L"DBServer Fail(%S, %d)\r\n", m_szIP, m_wPort);
#endif // #if defined( STRESS_TEST )
}
else {
#if defined( STRESS_TEST )
#else
g_Log.Log(LogType::_NORMAL, L"DBServer(%S, %d) Connecting..\r\n", m_szIP, m_wPort);
#endif // #if defined( STRESS_TEST )
}
}
}
#if defined( _GAMESERVER )
CDNRUDPGameServer* CDNDBConnection::_GetGameServer( int iMainCmd, int iSubCmd, char* pData )
{
if( !g_pGameServerManager )
return NULL;
switch( iMainCmd )
{
case MAINCMD_DARKLAIR:
{
switch(iSubCmd )
{
case QUERY_UPDATE_DARKLAIR_RESULT:
{
TAUpdateDarkLairResult* pPacket = reinterpret_cast<TAUpdateDarkLairResult*>(pData);
return g_pGameServerManager->GetGameServerByRoomID( pPacket->iRoomID );
}
}
}
break;
case MAINCMD_FARM:
{
switch(iSubCmd)
{
case QUERY_GETLIST_FIELD:
{
TAGetListField* pPacket = reinterpret_cast<TAGetListField*>(pData);
return g_pGameServerManager->GetGameServerByRoomID( pPacket->iRoomID );
}
// 아래 TA~ 류의 패킷의 최상위변수는 반드시 RoomID 이어야한다!!!!!!
case QUERY_ADD_FIELD:
case QUERY_DEL_FIELD:
case QUERY_HARVEST:
case QUERY_ADD_FIELD_ATTACHMENT:
case QUERY_GET_FIELDITEMCOUNT:
case QUERY_GETLIST_FIELD_FORCHARACTER:
case QUERY_ADD_FIELD_FORCHARACTER:
case QUERY_DEL_FIELD_FORCHARACTER:
case QUERY_ADD_FIELD_FORCHARACTER_ATTACHMENT:
case QUERY_HARVEST_FORCHARACTER:
{
int iRoomID;
memcpy( &iRoomID, pData+sizeof(TAHeader), sizeof(int) );
return g_pGameServerManager->GetGameServerByRoomID( iRoomID );
}
}
}
break;
#if defined( PRE_PARTY_DB )
case MAINCMD_PARTY:
{
switch(iSubCmd)
{
case QUERY_ADDPARTYANDMEMBERGAME:
{
TAAddPartyAndMemberGame* pPacket = reinterpret_cast<TAAddPartyAndMemberGame*>(pData);
pPacket->nAccountDBID = 0;
return g_pGameServerManager->GetGameServerByRoomID( pPacket->Data.PartyData.iRoomID );
}
case QUERY_MODPARTY:
{
TAModParty* pPacket = reinterpret_cast<TAModParty*>(pData);
return g_pGameServerManager->GetGameServerByRoomID( pPacket->PartyData.iRoomID );
}
#if defined( PRE_WORLDCOMBINE_PARTY )
case QUERY_ADDWORLDPARTY:
{
TAAddParty* pPacket = reinterpret_cast<TAAddParty*>(pData);
return g_pGameServerManager->GetGameServerByRoomID( pPacket->Data.PartyData.iRoomID );
}
#endif
}
}
break;
#endif
#if defined(PRE_ADD_DWC)
case MAINCMD_DWC:
{
switch(iSubCmd)
{
case QUERY_ADD_DWC_RESULT:
{
TAAddPvPDWCResult* pPacket = reinterpret_cast<TAAddPvPDWCResult*>(pData);
pPacket->nAccountDBID = 0;
return g_pGameServerManager->GetGameServerByRoomID( pPacket->nRoomID );
}
case QUERY_GET_DWC_SCORELIST:
{
TAGetListDWCScore* pPacket = reinterpret_cast<TAGetListDWCScore*>(pData);
return g_pGameServerManager->GetGameServerByRoomID( pPacket->nRoomID );
}
}
}
break;
#endif
}
UINT uiAccountDBID;
memcpy( &uiAccountDBID, pData, sizeof(UINT) );
return g_pGameServerManager->GetGameServerByAID( uiAccountDBID );
}
#endif // #if defined( _GAMESERVER )
int CDNDBConnection::MessageProcess(int nMainCmd, int nSubCmd, char *pData, int nLen)
{
UINT nAccountDBID;
memcpy(&nAccountDBID, pData, sizeof(UINT));
#if defined(_VILLAGESERVER)
if(PreMessageProcess(nMainCmd, nSubCmd, pData, nLen) == true)
return ERROR_NONE;
CDNUserSession *pUserObj = NULL;
if( nMainCmd == MAINCMD_AUTH && nSubCmd == QUERY_CHECKAUTH)
{
TACheckAuth *pA = (TACheckAuth*)pData;
pUserObj = g_pUserSessionManager->FindTempUserSession(pA->nSessionID);
if( pA->nRetCode == ERROR_NONE )
{
if (pUserObj == NULL)
{
// 이런 애들은 ResetAuth가 안될꺼다 CheckAuth 받기전에 끊겨서..강제로 ㄱㄱㄱ
g_Log.Log(LogType::_ERROR, g_Config.nWorldSetID, nAccountDBID, 0, 0, L"[ADBID:%u] Duplicate ResetAuth \r\n", nAccountDBID);
g_pAuthManager->QueryResetAuth(pA->cWorldSetID, pA->nAccountDBID, pA->nSessionID);
return ERROR_GENERIC_INVALIDREQUEST;
}
else
{
pUserObj->SetAccountDBID(nAccountDBID);
if (!g_pUserSessionManager->InsertSession(pUserObj))
{
#ifdef PRE_FIX_VILLAGEZOMBIE
volatile bool bInserted = false;
DWORD dwCurTime = timeGetTime();
CDNUserSession * pDuplicateSession;
pDuplicateSession = g_pUserSessionManager->FindUserSessionByAccountDBID(nAccountDBID);
if (pDuplicateSession == NULL)
pDuplicateSession = g_pUserSessionManager->FindUserSession(pUserObj->GetSessionID());
if (pDuplicateSession && pDuplicateSession->GetInsideDisconnectTick() + (60*1000*30) < dwCurTime)
{
pDuplicateSession->SetZombieChecked();
g_pUserSessionManager->DelSession(pDuplicateSession, pDuplicateSession->GetSocketContext());
if (g_pUserSessionManager->InsertSession(pUserObj))
bInserted = true;
}
if (bInserted == false)
{
pUserObj->DetachConnection(L"Connect|Duplicate SessionID");
return ERROR_GENERIC_UNKNOWNERROR;
}
#else //#ifdef PRE_FIX_VILLAGEZOMBIE
pUserObj->DetachConnection(L"Connect|Duplicate SessionID");
return ERROR_GENERIC_UNKNOWNERROR;
#endif //PRE_FIX_VILLAGEZOMBIE
}
}
}
}
else
{
pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(nAccountDBID);
}
if (pUserObj == NULL)
{
if (nMainCmd != MAINCMD_STATUS && nSubCmd != QUERY_LASTUPDATEUSERDATA)
g_Log.Log(LogType::_ERROR, g_Config.nWorldSetID, nAccountDBID, 0, 0, L"[ADBID:%u] CDNDBConnection::MessageProcess UserCon not found Main:%d, Sub:%d\r\n", nAccountDBID, nMainCmd, nSubCmd);
return ERROR_GENERIC_INVALIDREQUEST;
}
pUserObj->DBMessageProcess(nMainCmd, nSubCmd, pData, nLen);
#elif defined(_GAMESERVER)
if(PreMessageProcess(nMainCmd, nSubCmd, pData, nLen) == false)
{
CDNRUDPGameServer* pServer = _GetGameServer( nMainCmd, nSubCmd, pData );
if(pServer) //디비 메세지 파싱
{
pServer->StoreExternalBuffer(nAccountDBID, nMainCmd, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE);
return ERROR_NONE;
}
// 여기서 CheckAuth와 관련된 넘인지 확인절차..
else if( nMainCmd == MAINCMD_AUTH && nSubCmd == QUERY_CHECKAUTH)
{
TACheckAuth *pA = (TACheckAuth*)pData;
if( pA->nRetCode == ERROR_NONE )
{
// 이런 애들은 ResetAuth가 안될꺼다 CheckAuth 받기전에 끊겨서..강제로 ㄱㄱㄱ
g_Log.Log(LogType::_ERROR, pA->cWorldSetID, pA->nAccountDBID, 0, 0, L"[ADBID:%u] Duplicate ResetAuth \r\n", pA->nAccountDBID);
g_pAuthManager->QueryResetAuth(pA->cWorldSetID, pA->nAccountDBID, pA->nSessionID );
}
}
}
return ERROR_GENERIC_UNKNOWNERROR;
#endif
return ERROR_NONE;
}
bool CDNDBConnection::PreMessageProcess(int nMainCmd, int nSubCmd, char * pData, int nLen)
{
switch(nMainCmd)
{
case MAINCMD_AUTH: return OnRecvAuth(nSubCmd, pData); break;
case MAINCMD_ETC: return OnRecvEtc(nSubCmd, pData); break;
case MAINCMD_QUEST: return OnRecvQuest(nSubCmd, pData); break;
case MAINCMD_GUILD: return OnRecvGuild(nSubCmd, pData); break;
case MAINCMD_MASTERSYSTEM: return OnRecvMasterSystem( nSubCmd, pData ); break;
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
case MAINCMD_MAIL: return OnRecvMail(nSubCmd,pData); break;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
case MAINCMD_FARM: return OnDBRecvFarm(nSubCmd, pData, nLen); break;
case MAINCMD_JOBSYSTEM: return OnDBRecvDBJobSystem(nSubCmd, pData); break;
case MAINCMD_GUILDRECRUIT: return OnRecvGuildRecruit(nSubCmd, pData); break;
#if defined (PRE_ADD_DONATION)
case MAINCMD_DONATION: return OnRecvDonation(nSubCmd, pData, nLen);
#endif // #if defined (PRE_ADD_DONATION)
#if defined( PRE_PARTY_DB )
case MAINCMD_PARTY: return OnRecvParty( nSubCmd, pData, nLen );
#endif // #if defined( PRE_PARTY_DB ) && defined( _VILLAGESERVER )
#ifdef PRE_MOD_PVPRANK
case MAINCMD_PVP: return OnRecvPvP(nSubCmd, pData, nLen);
#endif //#ifdef PRE_MOD_PVPRANK
#if defined( PRE_WORLDCOMBINE_PVP ) && !defined(PRE_MOD_PVPRANK)
case MAINCMD_PVP: return OnRecvPvP(nSubCmd, pData, nLen);
#endif
#if defined( PRE_PRIVATECHAT_CHANNEL )
case MAINCMD_PRIVATECHATCHANNEL: return OnRecvPrivateChannel( nSubCmd, pData, nLen );
#endif
#if defined( PRE_ADD_CHNC2C )
case MAINCMD_ITEM : return OnRecvItem( nSubCmd, pData, nLen );
#endif //#if defined( PRE_ADD_CHNC2C )
#if defined(PRE_ADD_DWC)
case MAINCMD_DWC: return OnRecvDWC( nSubCmd, pData );
#endif
default: return false;
}
return false;
}
bool CDNDBConnection::OnRecvAuth(int nSubCmd, char *pData)
{
switch(nSubCmd)
{
case QUERY_RESETAUTHSERVER:
{
TAResetAuthServer *pA = (TAResetAuthServer*)pData;
if(!g_pAuthManager->IsResetAuthServer()) {
if(ERROR_NONE != pA->nResult) {
_DANGER_POINT();
break;
// DN_BREAK;
}
g_pAuthManager->SetResetAuthServer(true);
// 서버 시작
g_pIocpManager->VerifyAccept(ACCEPTOPEN_VERIFY_TYPE_RESETAUTH);
}
}
break;
default:
return false;
}
return true;
}
bool CDNDBConnection::OnRecvEtc(int nSubCmd, char *pData)
{
switch(nSubCmd)
{
case QUERY_EVENTLIST:
{
TAEventList * pPacket = (TAEventList*)pData;
if(pPacket->nRetCode == ERROR_NONE)
{
if(pPacket->cCount > 0)
g_pEvent->AddWorldEvent(pPacket->cWorldSetID, pPacket->cCount, pPacket->EventList);
}
else
_DANGER_POINT();
}
break;
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
case QUERY_GET_SIMPLECONFIG:
{
#ifdef _VILLAGESERVER
TASimpleConfig * pPacket = (TASimpleConfig*)pData;
if (pPacket->nRetCode != ERROR_NONE)
{
_DANGER_POINT();
break;
}
#endif //#ifdef _VILLAGESERVER
}
break;
#endif
case QUERY_GET_DBSID:
{
TAGetDBSID * pPacket = (TAGetDBSID*)pData;
m_nServerID = pPacket->nServerID;
g_Log.Log(LogType::_DBCONNECTIONLOG, L"QUERY_GET_DBSID [SessionID:%d][ServerID:%d]\r\n", m_nSessionID, m_nServerID);
}
break;
#if defined( PRE_FIX_67546 )
case QUERY_ADD_CHANNELCOUNT:
{
#if defined( _VILLAGESERVER )
TAAddThreadCount * pPacket = (TAAddThreadCount*)pData;
g_pDBConnectionManager->AddVillageDBConnectionInfo( GetSessionID(), pPacket->nConnectionCount);
#endif
}
break;
#endif
default:
return false;
}
return true;
}
bool CDNDBConnection::OnRecvQuest(int nSubCmd, char *pData)
{
switch(nSubCmd)
{
case QUERY_GET_WORLDEVENTQUESTCOUNTER:
{
TAGetWorldEventQuestCounter * pPacket = (TAGetWorldEventQuestCounter*)pData;
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_GET_WORLDEVENTQUESTCOUNTER FAIL\r\n");
break;
}
// 완료여부를 확인이 필요
g_pPeriodQuestSystem->UpdateWorldEvent(pPacket->cWorldSetID, pPacket->nScheduleID, pPacket->nCount, true);
}
break;
case QUERY_MOD_WORLDEVENTQUESTCOUNTER:
{
TAModWorldEventQuestCounter * pPacket = (TAModWorldEventQuestCounter*)pData;
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_MOD_WORLDEVENTQUESTCOUNTER FAIL\r\n");
break;
}
#if defined(_VILLAGESERVER)
// 마스터를 통해 전체서버 전송
g_pMasterConnection->SendWorldEventCounter(pPacket->cWorldSetID, pPacket->nScheduleID, pPacket->nCountAfter);
#endif // #if defined(_VILLAGESERVER)
}
break;
default:
return false;
}
return true;
}
bool CDNDBConnection::OnRecvGuild(int nSubCmd, char *pData)
{
switch(nSubCmd)
{
case QUERY_GETGUILDINFO: // 길드 정보 결과
{
TAGetGuildInfo *pPacket = reinterpret_cast<TAGetGuildInfo*>(pData);
// 패킷 조사
if(ERROR_NONE != pPacket->nRetCode || GUILDDBID_DEF == pPacket->nGuildDBID)
break;
g_pGuildManager->UpdateGuildResource(pPacket);
// P.S.> 길드 시각정보 동기화는 각 세션 별로 알아서 수행하므로 여기서는 불필요 ?
#if defined(_VILLAGESERVER)
// 길드전 예선이나 보상기간이면 길드 점수 가져오기
if( g_pGuildWarManager && (g_pGuildWarManager->GetStepIndex() == GUILDWAR_STEP_TRIAL || g_pGuildWarManager->GetStepIndex() == GUILDWAR_STEP_REWARD) )
QueryGetGuildWarPoint(rand()%THREADMAX, g_Config.nWorldSetID, 0, 'G', pPacket->nGuildDBID);
// 길드 보상 완료내역
if( g_pGuildWarManager && g_pGuildWarManager->GetStepIndex() == GUILDWAR_STEP_REWARD )
QueryGetGuildWarRewarForGuild(rand()%THREADMAX, g_Config.nWorldSetID, g_pGuildWarManager->GetScheduleID(), pPacket->nGuildDBID);
#endif
}
break;
case QUERY_GET_GUILDMEMBER:
{
TAGetGuildMember *pPacket = reinterpret_cast<TAGetGuildMember*>(pData);
g_pGuildManager->UpdateGuildMember(pPacket);
}
break;
case QUERY_GET_GUILDREWARDITEM:
{
//통째로 받은 경우
TAGetGuildRewardItem *pGuildRewardItem = (TAGetGuildRewardItem*)pData;
g_pGuildManager->UpdateGuildRewardItem(pGuildRewardItem);
}
break;
case QUERY_CHANGEGUILDINFO: // 길드 정보 변경 결과
{
return false;
}
break;
case QUERY_GET_GUILDWAREINFO: // 길드창고 슬롯 결과
{
TAGetGuildWareInfo *pPacket = reinterpret_cast<TAGetGuildWareInfo*>(pData);
// 패킷 조사
if(ERROR_NONE != pPacket->nErrNo || GUILDDBID_DEF == pPacket->nGuildDBID)
break;
g_pGuildManager->OpenGuildWare(pPacket);
}
break;
case QUERY_ADD_GUILDWARPOINT : // 예선 미션 클리어시 포인트 적립
{
const TAAddGuildWarPointRecodrd * pPacket = reinterpret_cast<TAAddGuildWarPointRecodrd*>(pData);
// 패킷 조사
if(ERROR_NONE != pPacket->nRetCode)
break;
const TGuildUID GuildUID(pPacket->cWorldSetID, pPacket->nGuildDBID);
#if defined(_VILLAGESERVER)
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
pUserObj->AddGuildWarPoint(pPacket->nOpeningPoint);
}
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendAddGuildWarPoint(pPacket->cTeamColorCode, GuildUID, pPacket->nOpeningPoint);
#endif//#if defined(_VILLAGESERVER)
#if defined(_GAMESERVER)
if( g_pMasterConnectionManager )
{
//const TGuildUID GuildUID(pPacket->cWorldSetID, pPacket->nGuildDBID);
g_pMasterConnectionManager->SendAddGuildWarPoint(pPacket->cWorldSetID, pPacket->cTeamColorCode, GuildUID, pPacket->nOpeningPoint );
}
#endif //#if defined(_GAMESERVER)
}
break;
case QUERY_ADD_GUILDWARFINALRESULTS : // 길드전 본선 결과 저장
{
}
break;
case QUERY_ADD_GUILDWAR_REWARD_GUILD : // 길드전 길드 보상결과 저장
{
TAAddGuildWarRewardGuild* pPacket = reinterpret_cast<TAAddGuildWarRewardGuild*>(pData);
// 솔직히 여기서 볼껀 4-길드 예선 보상 포인트 밖에 없다..나머지는 에러나도 처리할 방법이 엄써서 안씀.
const TGuildUID GuildUID(pPacket->cWorldSetID, static_cast<UINT>(pPacket->nGuildDBID));
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if(pGuild)
{
// 무조건 셋팅..에러났으면 이미 보상이 지급된거임.
pGuild->SetGuildWarRewardResultIndex(pPacket->cRewardType, true);
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if(FALSE == pGuild->IsEnable()) break;
#endif
if( pPacket->nRetCode == ERROR_NONE)
{
#if defined(_VILLAGESERVER)
switch(pPacket->cRewardType)
{
case GUILDWAR_REWARD_GUILD_TRIAL_POINT :
{
//예선전 길드 포인트 넣어주기
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
pGuild->AddPoint(GUILDPOINTTYPE_WAR, g_pGuildWarManager->GetGuildWarPoint(GuildUID.nDBID));
}
break;
}
#endif
}
}
}
break;
case QUERY_GET_GUILDWAR_REWARD_GUILD : // 길드전 길드 보상결과 가져오기
{
TAGetGuildWarRewardGuild* pPacket = reinterpret_cast<TAGetGuildWarRewardGuild*>(pData);
if( pPacket->nRetCode == ERROR_NONE)
{
#if defined(_VILLAGESERVER)
if( pPacket->cQueryType == 'M')
{
if( pPacket->bRewardResults[GUILDWAR_REWARD_GUILD_SKILL] ) // 스킬이 지급이 되었으면..
{
// 제스쳐 주라고 알리자..
g_pMasterConnection->SendSetGuildWarPreWinReward();
// 전체 길드의 길드 포인트 갱신
QueryGetGuildWarPointFinalRewards(rand()%THREADMAX, g_Config.nWorldSetID);
}
}
else
#endif
{
const TGuildUID GuildUID(pPacket->cWorldSetID, static_cast<UINT>(pPacket->nGuildDBID));
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
if (FALSE == pGuild->IsEnable()) break;
#endif
pGuild->SetGuildWarRewardResults(pPacket->bRewardResults);
}
}
}
else
g_Log.Log(LogType::_GUILDWAR, L"[GUILDWAR] QUERY_GET_GUILDWAR_REWARD_GUILD Ret:%d !!\r\n", pPacket->nRetCode);
}
break;
#if defined(_VILLAGESERVER)
case QUERY_GET_GUILDWARSCHEDULE: // 길드전 일정
{
TAGetGuildWarSchedule* pPacket = reinterpret_cast<TAGetGuildWarSchedule*>(pData);
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendSetGuildWarSchedule(pPacket->nRetCode, pPacket->wScheduleID, pPacket->wWinersWeightRate, pPacket->EventInfo, false, pPacket->bFinalProgress, pPacket->tRewardExpireDate);
}
break;
case QUERY_GET_GUILDWARFINALSCHEDULE : // 본선 일정 가져오기
{
TAGetGuildWarFinalSchedule* pPacket = reinterpret_cast<TAGetGuildWarFinalSchedule*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendSetGuildWarFinalSchedule(pPacket->GuildWarFinalSchedule);
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARFINALSCHEDULE Ret:%d !!\r\n", pPacket->nRetCode);
}
break;
case QUERY_GET_GUILDWARPOINT : // 예선 포인트 조회(캐릭터, 길드, 팀)
{
TAGetGuildWarPoint* pPacket = reinterpret_cast<TAGetGuildWarPoint*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
switch(pPacket->cQueryType)
{
case 'T' : // 팀..요건 마스터 서버로.
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendSetGuildWarPoint(pPacket->nRetCode, pPacket->nBlueTeamPoint, pPacket->nRedTeamPoint);
}
break;
case 'C' : // 캐릭터..개인 셋팅
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
pUserObj->SetGuildWarPoint(pPacket->nCharOpeningPoint);
}
}
break;
case 'G' : // 길드..길드 셋팅
{
const TGuildUID GuildUID(g_Config.nWorldSetID, static_cast<UINT>(pPacket->biDBID));
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if(FALSE == pGuild->IsEnable()) break;
#endif
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
pGuildVillage->SetGuildWarPoint(pPacket->nGuildOpeningPoint);
}
}
break;
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOINT Ret:%d Type:%d!!\r\n", pPacket->nRetCode, pPacket->cQueryType);
}
break;
case QUERY_GET_GUILDWARPOINT_PARTTOTAL : // 부문별 1위 조회(개인)
{
TAGetGuildWarPointPartTotal* pPacket = reinterpret_cast<TAGetGuildWarPointPartTotal*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
if( pPacket->cQueryType == 'A') // 전체 순위
{
g_pGuildWarManager->SetGuildWarMissionRankingInfo(pPacket);
// 다음 조회
QueryGetGuildWarPointGuildPartTotal(rand()%THREADMAX, g_Config.nWorldSetID, 0, 'A', 0);
}
else if( pPacket->cQueryType == 'C') // 개인
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
pUserObj->SetGuildWarMissionRankingInfo(pPacket);
// 요기 온거면 길드전 예선 결과 조회입니다.
pUserObj->SendGuildWarTrialResultOpen();
}
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOINT_PARTTOTAL Ret:%d Type:%d!!\r\n", pPacket->nRetCode, pPacket->cQueryType);
}
break;
case QUERY_GET_GUILDWARPOINT_GUILD_PARTTOTAL : // 부문별 길드 순위
{
TAGetGuildWarPointGuildPartTotal* pPacket = reinterpret_cast<TAGetGuildWarPointGuildPartTotal*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
if( pPacket->cQueryType == 'A')
{
g_pGuildWarManager->SetGuildWarMissionGuildRankingInfo(pPacket);
// 다음 조회
QueryGetGuildWarPointDaily(rand()%THREADMAX, g_Config.nWorldSetID);
}
else if( pPacket->cQueryType == 'G')
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
CDNGuildBase* pGuild = g_pGuildManager->At(pUserObj->GetGuildUID());
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if(FALSE == pGuild->IsEnable()) break;
#endif
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
pGuildVillage->SetGuildWarTotalRankingInfo(pPacket);
// 다음 조회
QueryGetGuildWarPointGuildTotal(pGuild->GetDBThreadID(), g_Config.nWorldSetID, pPacket->nAccountDBID, false, 'G', g_pGuildWarManager->GetScheduleID(), pUserObj->GetGuildUID().nDBID);
}
}
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOINT_GUILD_PARTTOTAL Ret:%d Type:%d!!\r\n", pPacket->nRetCode, pPacket->cQueryType);
}
break;
case QUERY_GET_GUILDWARPOINT_DAILY : // 예선전 각 일자별 1위
{
TAGetGuildWarPointDaily* pPacket = reinterpret_cast<TAGetGuildWarPointDaily*>(pData);
if( pPacket->nRetCode == ERROR_NONE)
{
g_pGuildWarManager->SetGuildDailyAward(pPacket);
// 다음 조회
QueryGetGuildWarPointGuildTotal(rand()%THREADMAX, g_Config.nWorldSetID, 0, false, 'A', g_pGuildWarManager->GetScheduleID(), 0);
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOINT_DAILY Ret:%d !!\r\n", pPacket->nRetCode);
}
break;
case QUERY_GET_GUILDWARPOINT_GUILD_TOTAL : // 각 길드의 포인트 집계 순위현황(여기서 본선 진출팀 조회도 가능함)
{
TAGetGuildWarPointGuildTotal* pPacket = reinterpret_cast<TAGetGuildWarPointGuildTotal*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
if( pPacket->cQueryType == 'A' ) // 전체 순위
{
if( pPacket->bMasterServer )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendSetGuildWarFinalTeam(pPacket);
}
else
g_pGuildWarManager->SetGuildWarRankingInfo(pPacket);
}
else if( pPacket->cQueryType == 'G') // 길드 순위
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
if( pPacket->nTotalCount == 1 ) // 길드 순위에 없을 수도 있음.
{
CDNGuildBase* pGuild = g_pGuildManager->At(pUserObj->GetGuildUID());
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if(FALSE == pGuild->IsEnable()) break;
#endif
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
pGuildVillage->SetGuildWarMyRankingInfo(pPacket);
}
}
// 요까지 왔으면 이제 개인 정보 수집.
QueryGetGuildWarPointPartTotal(rand()%THREADMAX, g_Config.nWorldSetID, pPacket->nAccountDBID, 'C', pUserObj->GetCharacterDBID());
}
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOINT_GUILD_TOTAL Ret:%d Type:%d!!\r\n", pPacket->nRetCode, pPacket->cQueryType);
}
break;
case QUERY_ADD_GUILDWAR_FINAL_MATCHLIST : // 본선 대진표 저장(여기서 뭐 할게 있을깡?)
{
TAAddGuildWarFinalMatchList* pPacket = reinterpret_cast<TAAddGuildWarFinalMatchList*>(pData);
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendMatchListSaveResult(pPacket->nRetCode);
}
}
break;
case QUERY_ADD_GUILDWARPOPULARITYVOTE : // 인기 투표 저장
{
TAGetGuildWarPopularityVote* pPacket = reinterpret_cast<TAGetGuildWarPopularityVote*>(pData);
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
pUserObj->SendGuildWarVote(pPacket->nRetCode, 1000);
if( pPacket->nRetCode == ERROR_NONE)
{
pUserObj->SetGuildWarVote(true);
// 여기서 축제 포인트 지급..1000점 고정이요..
int nFestivalPoint = 1000;
// 추가 길드 축제 포인트
const TGuildUID GuildUID = pUserObj->GetGuildUID();
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
#endif
#if !defined( PRE_ADD_NODELETEGUILD )
if ( pGuild->IsEnable() )
{
#endif
TGuildRewardItem* GuildRewardItem = pGuild->GetGuildRewardItem();
if( GuildRewardItem[GUILDREWARDEFFECT_TYPE_EXTRAFESTPOINT].nItemID > 0 &&
GuildRewardItem[GUILDREWARDEFFECT_TYPE_EXTRAFESTPOINT].nEffectValue > 0 )
{
nFestivalPoint += (int)(nFestivalPoint * GuildRewardItem[GUILDREWARDEFFECT_TYPE_EXTRAFESTPOINT].nEffectValue * 0.01);
}
#if !defined( PRE_ADD_NODELETEGUILD )
}
#endif
}
pUserObj->AddEtcPoint(DBDNWorldDef::EtcPointCode::GuildWar_Festival, nFestivalPoint);
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_ADD_GUILDWARPOPULARITYVOTE Ret:%d !!\r\n", pPacket->nRetCode);
}
}
break;
case QUERY_GET_GUILDWARPOPULARITYVOTE : // 인기 투표 결과
{
TAGetGuildWarPopularityVote* pPacket = reinterpret_cast<TAGetGuildWarPopularityVote*>(pData);
if( pPacket->nRetCode == ERROR_NONE)
{
if( pPacket->cQueryType == 'C')
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
pUserObj->SetGuildWarVoteLoading(true);
if( pPacket->nGuildDBID == 0 )// 요건 투표한적 없다는 얘기.
pUserObj->SetGuildWarVote(false);
else
pUserObj->SetGuildWarVote(true);
pUserObj->SendGuildWarTournamentInfoOpen(!pUserObj->GetGuildWarVote());
}
}
else if( pPacket->cQueryType == 'G')
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
g_pGuildWarManager->SetGuildWarVoteCount(pPacket->nPopularityVoteCount);
g_pGuildWarManager->SetGuildWarVoteGuildName(pPacket->wszGuildName);
g_pGuildWarManager->SetGuildWarVote(true);
pUserObj->SendGuildWarVoteTop(pPacket->nPopularityVoteCount, pPacket->wszGuildName);
}
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOPULARITYVOTE Ret:%d Type:%d!!\r\n", pPacket->nRetCode, pPacket->cQueryType);
}
break;
case QUERY_GET_GUILDWARFINALRESULTS : // 길드전 본선 결과 가져오기
{
TAGetGuildWarFinalResults* pPacket = reinterpret_cast<TAGetGuildWarFinalResults*>(pData);
if( pPacket->nRetCode == ERROR_NONE)
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendSetGuildWarTournamentInfo(pPacket);
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARFINALRESULTS Ret:%d!!\r\n", pPacket->nRetCode);
}
break;
case QUERY_GET_GUILDWAR_PRE_WIN_GUILD : // 길드전 지난 차수 우승팀 가져오기
{
TAGetGuildWarPreWinGuild* pPacket = reinterpret_cast<TAGetGuildWarPreWinGuild*>(pData);
if( pPacket->nRetCode == ERROR_NONE)
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
TGuildUID GuildUID(g_Config.nWorldSetID, pPacket->nGuildDBID);
g_pMasterConnection->SendSetGuildWarPreWinGuild(GuildUID, pPacket->wScheduleID);
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWAR_PRE_WIN_GUILD Ret:%d!!\r\n", pPacket->nRetCode);
}
break;
case QUERY_ADD_GUILDWAR_REWARD_CHARACTER : // 길드전 예선 보상결과 저장
{
TAAddGuildWarRewardCharacter* pPacket = reinterpret_cast<TAAddGuildWarRewardCharacter*>(pData);
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
{
// 무조건 셋팅..에러났으면 이미 보상이 지급된거임.
pUserObj->SetGuildWarRewardResultIndex(pPacket->cRewardType, true);
if( pPacket->nRetCode == ERROR_NONE)
{
TGuildWarRewardData* pRewardData = NULL;
//여기서 보상 나가자..타입별로..
switch(pPacket->cRewardType)
{
case GUILDWAR_REWARD_CHAR_PRESENT :
{
bool bWin = g_pGuildWarManager->IsGuildWarTrialWIn(pUserObj->GetGuildSelfView().cTeamColorCode);
if( bWin )
pRewardData = g_pDataManager->GetGuildWarRewardData(DBDNWorldDef::GuildWarRewardType::GuildWarFestivalWin, pUserObj->GetClassID());
else
pRewardData = g_pDataManager->GetGuildWarRewardData(DBDNWorldDef::GuildWarRewardType::GuildWarFestivalLose, pUserObj->GetClassID());
// 선물함에 왕관주기.
if( pRewardData )
CDNMailSender::Process(pUserObj, pRewardData->nPresentID, DBDNWorldDef::PayMethodCode::GuildWar_Reward, 0);
}
break;
case GUILDWAR_REWARD_CHAR_MAIL :
{
// 메일로 축제카드 보내기
bool bWin = g_pGuildWarManager->IsGuildWarTrialWIn(pUserObj->GetGuildSelfView().cTeamColorCode);
if( bWin )
pRewardData = g_pDataManager->GetGuildWarRewardData(DBDNWorldDef::GuildWarRewardType::GuildWarFestivalWin, pUserObj->GetClassID());
else
pRewardData = g_pDataManager->GetGuildWarRewardData(DBDNWorldDef::GuildWarRewardType::GuildWarFestivalLose, pUserObj->GetClassID());
if( pRewardData )
CDNMailSender::Process(pUserObj, pRewardData->nMailID, DBDNWorldDef::PayMethodCode::GuildWar_Reward, 0);
}
break;
case GUILDWAR_REWARD_CHAR_POINT :
{
// 축제 포인트 넣어주기
int nFestivalPoint = g_pGuildWarManager->CalcGuildWarFestivalPoint(pUserObj->GetGuildSelfView().cTeamColorCode, pUserObj->GetCharacterDBID(), pUserObj->GetGuildWarPoint());
// 추가 길드 축제 포인트
const TGuildUID GuildUID = pUserObj->GetGuildUID();
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if(pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if ( pGuild->IsEnable() )
{
#endif
TGuildRewardItem* GuildRewardItem = pGuild->GetGuildRewardItem();
if( GuildRewardItem[GUILDREWARDEFFECT_TYPE_EXTRAFESTPOINT].nItemID > 0 &&
GuildRewardItem[GUILDREWARDEFFECT_TYPE_EXTRAFESTPOINT].nEffectValue > 0 )
{
nFestivalPoint += (int)(nFestivalPoint * GuildRewardItem[GUILDREWARDEFFECT_TYPE_EXTRAFESTPOINT].nEffectValue * 0.01);
}
#if !defined( PRE_ADD_NODELETEGUILD )
}
#endif
}
pUserObj->AddEtcPoint(DBDNWorldDef::EtcPointCode::GuildWar_Festival, nFestivalPoint);
}
break;
}
}
// 다음꺼 보내기.
if( pUserObj->IsGuildWarReward() )
{
QueryAddGuildWarRewarForCharacter(rand()%THREADMAX, pUserObj);
}
else
{
//완료
pUserObj->SendGuildWarReward(ERROR_NONE);
}
}
}
break;
case QUERY_GET_GUILDWAR_REWARD_CHARACTER : // 길드전 예선 보상결과 가져오기
{
TAGetGuildWarRewardCharacter* pPacket = reinterpret_cast<TAGetGuildWarRewardCharacter*>(pData);
if( pPacket->nRetCode == ERROR_NONE)
{
// 보상결과 셋팅..
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if( pUserObj )
pUserObj->SetGuildWarRewardResults(pPacket->bRewardResults);
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWAR_REWARD_CHARACTER Ret:%d!!\r\n", pPacket->nRetCode);
}
break;
case QUERY_GET_GUILDWARPOINT_RUNNING_TOTAL : // 길드전 예선전 점수 현황(24위까지)
{
TAGetGuildWarPointRunningTotal* pPacket = reinterpret_cast<TAGetGuildWarPointRunningTotal*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendSetGuildWarPointRunning(pPacket);
}
}
else
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GET_GUILDWARPOINT_RUNNING_TOTAL Ret:%d!!\r\n", pPacket->nRetCode);
}
break;
case QUERY_GET_GUILDWARPOINT_FINAL_REWARDS : // 길드전 본선 보상으로 받은 길드포인트 Refresh
{
TAGetGuildWarPointFinalRewards* pPacket = reinterpret_cast<TAGetGuildWarPointFinalRewards*>(pData);
if( pPacket->nRetCode == ERROR_NONE )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendGuildWarRefreshGuildPoint(pPacket);
}
}
}
break;
case QUERY_GETLIST_GUILDWAR_ITEM_TRADE_RECORD:
{
TAGetListGuildWarItemTradeRecord* pPacket = reinterpret_cast<TAGetListGuildWarItemTradeRecord*>(pData);
if (pPacket->nRetCode == ERROR_NONE)
{
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
if (pUserObj)
{
for (int i = 0; i < pPacket->count; ++i)
{
pUserObj->AddGuildWarBuyedItem(pPacket->itemCount[i].id, pPacket->itemCount[i].count);
}
}
}
else
g_Log.Log(LogType::_GUILDWAR, g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QUERY_GETLIST_GUILDWAR_ITEM_TRADE_RECORD Ret:%d\r\n", pPacket->nRetCode);
}
break;
#endif //#if defined(_VILLAGESERVER)
case QUERY_MOD_GUILDEXP:
{
TAModGuildExp* pPacket = reinterpret_cast<TAModGuildExp*>(pData);
if (pPacket->nRetCode != ERROR_NONE)
break;
const TGuildUID GuildUID(pPacket->cWorldSetID, pPacket->nGuildDBID);
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if (!pGuild)
break;
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if (FALSE == pGuild->IsEnable()) break;
#endif
#if defined(_VILLAGESERVER)
if (g_pMasterConnection)
g_pMasterConnection->SendUpdateGuildExp(GuildUID, pPacket);
#elif defined (_GAMESERVER)
if (g_pMasterConnectionManager)
g_pMasterConnectionManager->SendUpdateGuildExp(GuildUID, pPacket);
#endif
}
break;
case QUERY_MOD_GUILDCHEAT:
{
TAModGuildCheat* pPacket = reinterpret_cast<TAModGuildCheat*>(pData);
if (pPacket->nRetCode != ERROR_NONE)
break;
const TGuildUID GuildUID(pPacket->cWorldSetID, pPacket->nGuildDBID);
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if (!pGuild)
break;
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if (FALSE == pGuild->IsEnable()) break;
#endif
if (pPacket->cCheatType == 1)
{
pGuild->SetInfo()->wGuildLevel = pPacket->cLevel;
pGuild->SetInfo()->iTotalGuildExp = pPacket->nPoint;
#if defined(_VILLAGESERVER)
pGuild->SendGuildLevelUp (pPacket->cLevel);
#endif
}
else if (pPacket->cCheatType == 2)
{
pGuild->SetInfo()->iDailyStagePoint = 0;
pGuild->SetInfo()->iDailyMissionPoint = 0;
}
}
break;
default:
return false;
}
return true;
}
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
bool CDNDBConnection::OnRecvMail( int nSubCmd, char* pData )
{
UINT uiAccountDBID;
memcpy( &uiAccountDBID, pData, sizeof(UINT) );
switch( nSubCmd )
{
case QUERY_SENDSYSTEMMAIL:
{
TASendSystemMail* pMail = reinterpret_cast<TASendSystemMail*>(pData);
if( pMail->nRetCode != ERROR_NONE )
return true;
#if defined( _VILLAGESERVER )
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendSyncSystemMail( pMail );
#elif defined( _GAMESERVER )
if( g_pMasterConnectionManager )
g_pMasterConnectionManager->SendSyncSystemMail( pMail );
#endif // #if defined( _VILLAGESERVER )
return true;
}
}
return false;
}
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
bool CDNDBConnection::OnDBRecvFarm(int nSubCmd, char * pData, int nLen)
{
switch(nSubCmd)
{
#ifdef _GAMESERVER
case QUERY_GETLIST_FARM:
{
TAGetListFarm * pPacket = (TAGetListFarm*)pData;
if(pPacket->nRetCode != ERROR_NONE)
{
_DANGER_POINT();
return true;
}
if(pPacket->cCount <= 0)
return true;
for (int i = 0; i < g_pGameServerManager->GetGameServerSize(); i++)
{
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerIndex(i);
if(pServer)
pServer->StoreExternalBuffer(0, MAINCMD_FARM, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE);
}
return true;
}
/*case QUERY_UPDATEFARM_ACTIVATION:
{
TAUpdateFarmActivation * pPacket = (TAUpdateFarmActivation*)pData;
if(pPacket->nRetCode != ERROR_NONE)
{
_DANGER_POINT();
return true;
}
if(pPacket->cCount <= 0)
return true;
for (int i = 0; i < g_pGameServerManager->GetGameServerSize(); i++)
{
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerIndex(i);
if(pServer)
pServer->StoreExternalBuffer(0, MAINCMD_FARM, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE);
}
return true;
}*/
#endif
#ifdef _VILLAGESERVER
case QUERY_GETLIST_FARM:
{
TAGetListFarm * pPacket = (TAGetListFarm*)pData;
for (int i = 0; i < pPacket->cCount; i++)
#if defined( PRE_ADD_VIP_FARM ) || defined( PRE_ADD_FARM_DOWNSCALE )
g_pFarm->AddFarmList( &pPacket->Farms[i] );
#else
g_pFarm->AddFarmList(pPacket->Farms[i].iFarmDBID, pPacket->Farms[i].iFarmMapID, pPacket->Farms[i].iFarmMaxUser, pPacket->Farms[i].wszFarmName, pPacket->Farms[i].bStartActivate);
#endif // #if defined( PRE_ADD_VIP_FARM ) || defined( PRE_ADD_FARM_DOWNSCALE )
g_pFarm->SetInitFlag(true);
BYTE cCount = 0;
TFarmItemFromDB Farms[Farm::Max::FARMCOUNT];
memset(Farms, 0, sizeof(Farms));
g_pFarm->GetFarmList(Farms, cCount);
g_pMasterConnection->SendFarmListGot(Farms, cCount);
return true;
}
#endif
break;
}
return false;
}
bool CDNDBConnection::OnRecvMasterSystem( int nSubCmd, char* pData )
{
#if defined( _VILLAGESERVER )
UINT uiAccountDBID;
memcpy( &uiAccountDBID, pData, sizeof(UINT) );
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( uiAccountDBID );
switch( nSubCmd )
{
case QUERY_GET_PAGEMASTERCHARACTER:
{
TAGetPageMasterCharacter* pA = reinterpret_cast<TAGetPageMasterCharacter*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetMasterList( pSession, pA );
return true;
}
case QUERY_GET_MASTERCHARACTER_TYPE1:
{
TAGetMasterCharacterType1* pA = reinterpret_cast<TAGetMasterCharacterType1*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetMasterCharacter( pSession, pA );
return true;
}
case QUERY_GET_MASTERCHARACTER_TYPE2:
{
TAGetMasterCharacterType2* pA = reinterpret_cast<TAGetMasterCharacterType2*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetMyMasterInto( pSession, pA );
return true;
}
case QUERY_GET_PUPILLIST:
{
TAGetListPupil* pA = reinterpret_cast<TAGetListPupil*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetPupilList( pSession, pA );
return true;
}
case QUERY_REGISTER_MASTER:
{
TAAddMasterCharacter* pA = reinterpret_cast<TAAddMasterCharacter*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetRegisterMaster( pSession, pA );
return true;
}
case QUERY_REGISTERCANCEL_MASTER:
{
TADelMasterCharacter* pA = reinterpret_cast<TADelMasterCharacter*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetRegisterMaster( pSession, pA );
return true;
}
case QUERY_JOIN_MASTERSYSTEM:
{
TAAddMasterAndPupil* pA = reinterpret_cast<TAAddMasterAndPupil*>(pData);
if( pSession )
pSession->SendMasterSystemJoin( pA->nRetCode, pA->bIsDirectMenu, (pA->Code == DBDNWorldDef::TransactorCode::Master) ? true : false, true );
if( pA->nRetCode == ERROR_NONE )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendMasterSystemSyncSimpleInfo( pA->Code == DBDNWorldDef::TransactorCode::Master ? pA->biPupilCharacterDBID : pA->biMasterCharacterDBID, MasterSystem::EventType::Join );
g_pMasterConnection->SendMasterSystemSyncJoin( pA->Code == DBDNWorldDef::TransactorCode::Master ? pA->biPupilCharacterDBID : pA->biMasterCharacterDBID, pA->Code == DBDNWorldDef::TransactorCode::Master ? false : true );
}
}
else if( pSession && pA->bIsDirectMenu == true )
{
CDNUserSession* pOppositeSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pA->uiOppositeAccountDBID );
if( pOppositeSession )
{
if( pA->Code == DBDNWorldDef::TransactorCode::Master )
{
pOppositeSession->SendMasterSystemJoinDirect( ERROR_MASTERSYSTEM_CANT_JOINSTATE, pSession->GetCharacterName() );
}
else
{
pOppositeSession->SendMasterSystemInvitePupil( ERROR_MASTERSYSTEM_CANT_JOINSTATE, pSession->GetCharacterName() );
}
}
}
return true;
}
case QUERY_LEAVE_MASTERSYSTEM:
{
TADelMasterAndPupil* pA = reinterpret_cast<TADelMasterAndPupil*>(pData);
if( pSession )
pSession->SendMasterSystemLeave( pA->nRetCode, pA->Code == DBDNWorldDef::TransactorCode::Master ? true : false, pA->iPenaltyRespectPoint );
if( pA->nRetCode == ERROR_NONE )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendMasterSystemSyncSimpleInfo( pA->Code == DBDNWorldDef::TransactorCode::Master ? pA->biPupilCharacterDBID : pA->biMasterCharacterDBID, MasterSystem::EventType::Leave );
g_pMasterConnection->SendMasterSystemSyncLeave( pA->Code == DBDNWorldDef::TransactorCode::Master ? pA->biPupilCharacterDBID : pA->biMasterCharacterDBID, pA->Code == DBDNWorldDef::TransactorCode::Master ? false : true );
}
}
return true;
}
case QUERY_GET_MASTERANDCLASSMATE:
{
TAGetListMyMasterAndClassmate* pA = reinterpret_cast<TAGetListMyMasterAndClassmate*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetMasterClassmateList( pSession, pA );
return true;
}
case QUERY_GET_CLASSMATEINFO:
{
TAGetMyClassmate* pA = reinterpret_cast<TAGetMyClassmate*>(pData);
MasterSystem::CCacheRepository::GetInstance().SetClassmateInfo( pSession, pA );
return true;
}
case QUERY_GET_MASTERANDFAVORPOINT:
{
ParseGetMasterAndFavorPoint( reinterpret_cast<TAGetMasterAndFavorPoint*>(pData) );
return true;
}
case QUERY_GRADUATE:
{
TAGraduate* pA = reinterpret_cast<TAGraduate*>(pData);
// 스승에게 졸업 알림 및 SimpleInfo 동기화
for( int i=0 ;i<pA->cCount ; ++i )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendMasterSystemSyncSimpleInfo( pA->biMasterCharacterDBIDList[i], MasterSystem::EventType::Graduated );
g_pMasterConnection->SendMasterSystemSyncGraduate( pA->biMasterCharacterDBIDList[i], pA->wszPupilCharName );
}
}
// 졸업은 각 세션에게 통보해줘야 하는것들이 남아있어서 UserBase 로 넘긴다.
return false;
}
}
#elif defined( _GAMESERVER )
switch( nSubCmd )
{
case QUERY_GRADUATE:
{
TAGraduate* pA = reinterpret_cast<TAGraduate*>(pData);
// 스승에게 졸업 알림 및 SimpleInfo 동기화
for( int i=0 ;i<pA->cCount ; ++i )
{
if( g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendMasterSystemSyncSimpleInfo( pA->cWorldSetID, pA->biMasterCharacterDBIDList[i], MasterSystem::EventType::Graduated );
g_pMasterConnectionManager->SendMasterSystemSyncGraduate( pA->cWorldSetID, pA->biMasterCharacterDBIDList[i], pA->wszPupilCharName );
}
}
// 졸업은 각 세션에게 통보해줘야 하는것들이 남아있어서 UserBase 로 넘긴다.
return false;
}
case QUERY_GET_MASTERANDFAVORPOINT:
{
ParseGetMasterAndFavorPoint( reinterpret_cast<TAGetMasterAndFavorPoint*>(pData) );
return true;
}
}
#endif // #if defined( _VILLAGESERVER )
return false;
}
void CDNDBConnection::ParseGetMasterAndFavorPoint( TAGetMasterAndFavorPoint* pA )
{
if( pA->cCount == 0 )
return;
TMasterSystemDecreaseTableData* pTableData = g_pDataManager->GetMasterSystemDecreaseTableData( pA->cLevel );
if( pTableData == NULL )
return;
// 스승에게 메일 보내기
for( UINT i=0 ; i<pA->cCount ; ++i )
{
int iMailID = 0;
if( pA->MasterAndFavorPoint[i].iFavorPoint >= pTableData->iPupilFavor )
iMailID = pTableData->iMasterSuccessMailID;
else
iMailID = pTableData->iMasterFailureMailID;
CDNMailSender::Process( pA->MasterAndFavorPoint[i].biCharacterDBID, pA->cWorldSetID, iMailID, pA->wszPupilCharName );
}
// 제자에게 메일 보내기
for( UINT i=0 ; i<pA->cCount ; ++i )
{
int iMailID = 0;
if( pA->MasterAndFavorPoint[i].iFavorPoint >= pTableData->iPupilFavor )
iMailID = pTableData->iPupilSuccessMailID;
else
iMailID = pTableData->iPupilFailureMailID;
CDNMailSender::Process( pA->biPupilCharacterDBID, pA->cWorldSetID, iMailID, pA->MasterAndFavorPoint[i].wszCharName );
}
}
bool CDNDBConnection::OnDBRecvDBJobSystem(int nSubCmd, char* pData)
{
#if defined(_VILLAGESERVER)
switch(nSubCmd)
{
case QUERY_ADD_JOB_RESERVE:
{
TAAddJobReserve * pPacket = (TAAddJobReserve*)pData;
//일단은 그냥 마스터로 통보합니다. 다른곳에서 사용시 여기서 분기하면됨.
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendAddJobReserve(pPacket->nRetCode, pPacket->cJobType, pPacket->nJobSeq);
}
break;
case QUERY_GET_JOB_RESERVE :
{
TAGetJobReserve * pPacket = (TAGetJobReserve*)pData;
//일단은 그냥 마스터로 통보합니다. 다른곳에서 사용시 여기서 분기하면됨.
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendGetJobReserve(pPacket->nRetCode, pPacket->nJobSeq, pPacket->cJobStatus);
}
break;
}
#endif //#if defined(_VILLAGESERVER)
return true;
}
bool CDNDBConnection::OnRecvGuildRecruit(int nSubCmd, char* pData)
{
#if defined(_VILLAGESERVER)
UINT uiAccountDBID;
memcpy( &uiAccountDBID, pData, sizeof(UINT) );
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( uiAccountDBID );
switch(nSubCmd)
{
case QUERY_GET_PAGEGUILDRECRUIT:
{
TAGetGuildRecruit* pA = reinterpret_cast<TAGetGuildRecruit*>(pData);
GuildRecruitSystem::CCacheRepository::GetInstance().SetGuildRecruitList( pSession, pA );
return true;
}
break;
case QUERY_GET_PAGEGUILDRECRUITCHARACTER:
{
TAGetGuildRecruitCharacter* pA = reinterpret_cast<TAGetGuildRecruitCharacter*>(pData);
GuildRecruitSystem::CCacheRepository::GetInstance().SetGuildRecruitCharacter( pSession, pA );
return true;
}
break;
case QUERY_GET_MYGUILDRECRUIT:
{
TAGetMyGuildRecruit* pA = reinterpret_cast<TAGetMyGuildRecruit*>(pData);
GuildRecruitSystem::CCacheRepository::GetInstance().SetMyGuildRecruit( pSession, pA );
return true;
}
break;
case QUERY_GET_GUILDRECRUIT_REQUESTCOUNT:
{
TAGetGuildRecruitRequestCount* pA = reinterpret_cast<TAGetGuildRecruitRequestCount*>(pData);
if( pSession )
pSession->SendGuildRecruitRequestCount( pA->nRetCode, pA->cCount, GuildRecruitSystem::Max::MaxRequestCount );
return true;
}
break;
case QUERY_REGISTERINFO_GUILDRECRUIT:
{
TARegisterInfoGuildRecruit* pA = reinterpret_cast<TARegisterInfoGuildRecruit*>(pData);
if( pSession )
{
#if defined( PRE_ADD_GUILD_EASYSYSTEM )
pSession->SendRegisterGuildRecruitInfo( pA->cClassCode, pA->nMinLevel, pA->nMaxLevel, pA->wszGuildIntroduction, pA->cPurposeCode, pA->bCheckHomePage );
#else
pSession->SendRegisterGuildRecruitInfo( pA->cClassCode, pA->nMinLevel, pA->nMaxLevel, pA->wszGuildIntroduction );
#endif
}
return true;
}
break;
}
#endif
return false;
}
#if defined (PRE_ADD_DONATION)
bool CDNDBConnection::OnRecvDonation(int nSubCmd, char* pData, int nLen)
{
switch(nSubCmd)
{
case QUERY_DONATION_TOP_RANKER:
{
#if defined(_VILLAGESERVER)
TADonationTopRanker* pA = reinterpret_cast<TADonationTopRanker*>(pData);
g_pUserSessionManager->SendWorldSystemMsg(pA->wszCharacterName, WORLDCHATTYPE_DONATION, 0, 0);
#else
for (int i = 0; i < g_pGameServerManager->GetGameServerSize(); i++)
{
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerIndex(i);
if(pServer)
pServer->StoreExternalBuffer(0, MAINCMD_DONATION, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE);
}
#endif // #if defined(_VILLAGESERVER)
}
break;
default:
return false;
}
return true;
}
#endif // #if defined (PRE_ADD_DONATION)
#if defined( PRE_PARTY_DB ) && defined( _VILLAGESERVER )
bool CDNDBConnection::OnRecvParty( int nSubCmd, char* pData, int nLen )
{
switch( nSubCmd )
{
case QUERY_DELPARTY_FORSERVER:
{
g_pPartyManager->QueryDelPartyForServerResponse( reinterpret_cast<const TADelPartyForServer*>(pData) );
return true;
}
case QUERY_GETLISTPARTY:
{
g_pPartyManager->QueryGetListPartyResponse( reinterpret_cast<const TAGetListParty*>(pData) );
return true;
}
case QUERY_ADDPARTY:
{
const TAAddParty* pA = reinterpret_cast<const TAAddParty*>(pData);
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pA->nAccountDBID );
if( pSession )
return false;
if( pA->nRetCode == ERROR_NONE )
g_pPartyManager->QueryDelParty( pA->Data.PartyData.PartyID );
break;
}
case QUERY_DELPARTY:
{
g_pPartyManager->QueryDelPartyResponse( reinterpret_cast<const TADelParty*>(pData) );
break;
}
case QUERY_JOINPARTY:
{
const TAJoinParty* pA = reinterpret_cast<const TAJoinParty*>(pData);
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pA->nAccountDBID );
if( pSession )
return false;
if( pA->nRetCode == ERROR_NONE )
QueryOutParty( g_Config.nWorldSetID, pA->nAccountDBID, pA->biCharacterDBID, pA->nSessionID, pA->PartyID, Party::QueryOutPartyType::Normal );
break;
}
case QUERY_OUTPARTY:
{
const TAOutParty* pA = reinterpret_cast<const TAOutParty*>(pData);
g_pPartyManager->QueryOutPartyResponse( pA );
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pA->nAccountDBID );
if( pSession )
return false;
// 유저의 접속 종료로 인한 파티 탈퇴의 경우 여기서 처리해줘야함
CDNParty* pParty = g_pPartyManager->GetParty( pA->PartyID );
if( pParty == NULL )
return false;
g_pPartyManager->DelPartyMember( pParty, pA );
break;
}
case QUERY_ADDPARTYANDMEMBERVILLAGE:
{
TAAddPartyAndMemberVillage* pA = reinterpret_cast<TAAddPartyAndMemberVillage*>(pData);
if(pA->nRetCode != ERROR_NONE)
break;
// 이 상황에서는 해당 유저가 없을 수도 있기때문에 여기서 해당 패킷 처리
if ( g_pPartyManager->PushParty(pA) == NULL )
_DANGER_POINT();
break;
}
case QUERY_MODPARTY:
{
const TAModParty* pA = reinterpret_cast<const TAModParty*>(pData);
if(pA->nRetCode != ERROR_NONE)
break;
g_pPartyManager->ModParty(pA);
break;
}
#if defined( PRE_WORLDCOMBINE_PARTY )
case QUERY_GETLISTWORLDPARTY:
{
g_pPartyManager->QueryGetListWorldPartyResponse( reinterpret_cast<const TAGetListParty*>(pData) );
return true;
}
break;
#endif
default:
return false;
}
return true;
}
#elif defined( PRE_PARTY_DB ) && defined( _GAMESERVER )
bool CDNDBConnection::OnRecvParty( int nSubCmd, char* pData, int nLen )
{
switch( nSubCmd )
{
case QUERY_DELPARTY_FORGAMESERVER:
{
const TADelPartyForServer* pA = reinterpret_cast<const TADelPartyForServer*>(pData);
if(pA->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_DELPARTY_FORGAMESERVER FAIL nRet = %d WorldID = %d\r\n", pA->nRetCode, pA->iServerID);
}
}
break;
default:
return false;
}
return true;
}
#endif // #if defined( PRE_PARTY_DB ) && defined( _GAMESERVER )
#ifdef PRE_MOD_PVPRANK
bool CDNDBConnection::OnRecvPvP( int nSubCmd, char* pData, int nLen )
{
switch( nSubCmd )
{
case QUERY_UPDATE_PVPRANKCRITERIA:
{
g_pDBConnectionManager->UpdatedPvPRankCriteria();
}
break;
#if defined( PRE_WORLDCOMBINE_PVP )
#if defined( _GAMESERVER )
case QUERY_ADD_WORLDPVPROOM:
{
const TAAddWorldPvPRoom* pPacket = reinterpret_cast<const TAAddWorldPvPRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_ADD_WORLDPVPROOM FAIL nRet = %d WorldID = %d\r\n", pPacket->nRetCode, pPacket->cWorldSetID);
}
else
{
if( g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendDelWorldPvPRoom( pPacket->cWorldSetID, pPacket->nRoomIndex );
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerByRoomID(pPacket->nRoomID);
if (pServer)
pServer->StoreExternalBuffer( 0, MAINCMD_PVP, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE, pPacket->cWorldSetID );
}
}
}
break;
#endif // #if defined( _GAMESERVER )
#if defined( _VILLAGESERVER )
case QUERY_GETLIST_WORLDPVPROOM:
{
const TAGetListWorldPvPRoom* pPacket = reinterpret_cast<const TAGetListWorldPvPRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_GETLIST_WORLDPVPROOM FAIL nRet = %d\r\n", pPacket->nRetCode);
}
else
{
CDNPvPRoomManager::GetInstance().OnRecvWorldPvPRoomList(pPacket);
}
}
break;
case QUERY_UPDATE_WORLDPVPROOM:
{
const TAUpdateWorldPvPRoom* pPacket = reinterpret_cast<const TAUpdateWorldPvPRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_UPDATE_WORLDPVPROOM FAIL nRet = %d\r\n", pPacket->nRetCode);
}
else
{
CDNPvPRoomManager::GetInstance().SetApplyWorldPvPRoom(pPacket->bFlag);
g_Log.Log(LogType::_NORMAL, L"QUERY_UPDATE_WORLDPVPROOM Sucess nRet = %d\r\n", pPacket->bFlag);
}
if (g_pServiceConnection )
g_pServiceConnection->SendUpdateWorldPvPRoom(pPacket->nRetCode);
}
break;
#endif // #if defined( _VILLAGESERVER )
#endif // #if defined( PRE_WORLDCOMBINE_PVP )
#if defined( PRE_PVP_GAMBLEROOM )
#if defined( _GAMESERVER )
case QUERY_ADD_GAMBLEROOM:
{
const TAAddGambleRoom* pPacket = reinterpret_cast<const TAAddGambleRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_ADD_GAMBLEROOM FAIL nRet = %d WorldID = %d\r\n", pPacket->nRetCode, pPacket->cWorldSetID);
}
else
{
if( g_pMasterConnectionManager )
{
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerByRoomID(pPacket->nRoomID);
if (pServer)
pServer->StoreExternalBuffer( 0, MAINCMD_PVP, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE, pPacket->cWorldSetID );
}
}
}
break;
#endif // #if defined( _GAMESERVER )
#endif // #if defined( PRE_PVP_GAMBLEROOM )
default:
return false;
}
return true;
}
#endif //#ifdef PRE_MOD_PVPRANK
#if defined( PRE_WORLDCOMBINE_PVP ) && !defined(PRE_MOD_PVPRANK)
bool CDNDBConnection::OnRecvPvP( int nSubCmd, char* pData, int nLen )
{
switch( nSubCmd )
{
#if defined( PRE_WORLDCOMBINE_PVP )
#if defined( _GAMESERVER )
case QUERY_ADD_WORLDPVPROOM:
{
const TAAddWorldPvPRoom* pPacket = reinterpret_cast<const TAAddWorldPvPRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_ADD_WORLDPVPROOM FAIL nRet = %d WorldID = %d\r\n", pPacket->nRetCode, pPacket->cWorldSetID);
}
else
{
if( g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendDelWorldPvPRoom( pPacket->cWorldSetID, pPacket->nRoomIndex );
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerByRoomID(pPacket->nRoomID);
if (pServer)
pServer->StoreExternalBuffer( 0, MAINCMD_PVP, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE, pPacket->cWorldSetID );
}
}
}
break;
#endif // #if defined( _GAMESERVER )
#if defined( _VILLAGESERVER )
case QUERY_GETLIST_WORLDPVPROOM:
{
const TAGetListWorldPvPRoom* pPacket = reinterpret_cast<const TAGetListWorldPvPRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_GETLIST_WORLDPVPROOM FAIL nRet = %d\r\n", pPacket->nRetCode);
}
else
{
CDNPvPRoomManager::GetInstance().OnRecvWorldPvPRoomList(pPacket);
}
}
break;
#endif // #if defined( _VILLAGESERVER )
#endif // #if defined( PRE_WORLDCOMBINE_PVP )
#if defined( PRE_PVP_GAMBLEROOM )
#if defined( _GAMESERVER )
case QUERY_ADD_GAMBLEROOM:
{
const TAAddGambleRoom* pPacket = reinterpret_cast<const TAAddGambleRoom*>(pData);
if(pPacket->nRetCode != ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"QUERY_ADD_GAMBLEROOM FAIL nRet = %d WorldID = %d\r\n", pPacket->nRetCode, pPacket->cWorldSetID);
}
else
{
if( g_pMasterConnectionManager )
{
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerByRoomID(pPacket->nRoomID);
if (pServer)
pServer->StoreExternalBuffer( 0, MAINCMD_PVP, nSubCmd, pData, nLen, EXTERNALTYPE_DATABASE, pPacket->cWorldSetID );
}
}
}
break;
#endif // #if defined( _GAMESERVER )
#endif // #if defined( PRE_PVP_GAMBLEROOM )
default:
return false;
}
return true;
}
#endif // #if defined( PRE_WORLDCOMBINE_PVP ) && !defined(PRE_MOD_PVPRANK)
#if defined( PRE_PRIVATECHAT_CHANNEL )
bool CDNDBConnection::OnRecvPrivateChannel( int nSubCmd, char* pData, int nLen )
{
switch( nSubCmd )
{
case QUERY_GET_PRIVATECHATCHANNEL:
{
const TAPrivateChatChannelInfo* pA = reinterpret_cast<const TAPrivateChatChannelInfo*>(pData);
if(g_pPrivateChatChannelManager)
{
for( int i=0;i<pA->nCount;i++ )
{
g_pPrivateChatChannelManager->AddPrivateChatChannel(pA->cWorldSetID, pA->tPrivateChatChannel[i]);
}
}
}
break;
case QUERY_GET_PRIVATECHATCHANNELMEMBER:
{
const TAPrivateChatChannelMember* pA = reinterpret_cast<const TAPrivateChatChannelMember*>(pData);
if (ERROR_NONE == pA->nRetCode)
{
if(g_pPrivateChatChannelManager)
{
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo( pA->cWorldSetID, pA->nPrivateChatChannelID);
if(pPrivateChatChannel)
{
TPrivateChatChannelMember Member;
for( int i=0;i<pA->nCount;i++ )
{
memset(&Member, 0, sizeof(Member));
Member = pA->Member[i];
if( pPrivateChatChannel->GetMasterCharacterDBID() == Member.biCharacterDBID )
Member.bMaster = true;
pPrivateChatChannel->AddPrivateChannelMember(Member);
}
pPrivateChatChannel->SetLoaded(true);
}
}
}
return false;
}
break;
case QUERY_CREATE_PRIVATECHATCHANNEL:
{
const TAAddPrivateChatChannel* pA = reinterpret_cast<const TAAddPrivateChatChannel*>(pData);
if( pA->nRetCode == ERROR_NONE )
{
g_pPrivateChatChannelManager->AddPrivateChatChannel(pA->cWorldSetID, pA->tPrivateChatChannel);
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pA->cWorldSetID, pA->tPrivateChatChannel.nPrivateChatChannelID);
if(pPrivateChatChannel)
{
TPrivateChatChannelMember Member;
memset(&Member, 0, sizeof(Member));
Member.tJoinDate = pA->tJoinDate;
Member.nAccountDBID = pA->nAccountDBID;
Member.biCharacterDBID = pA->tPrivateChatChannel.biMasterCharacterDBID;
Member.bMaster = true;
_wcscpy(Member.wszCharacterName, _countof(Member.wszCharacterName), pA->wszCharacterName, (int)wcslen(pA->wszCharacterName));
pPrivateChatChannel->AddPrivateChannelMember( Member );
pPrivateChatChannel->SetLoaded(true);
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendAddPrivateChatChannel( pPrivateChatChannel->GetChannelInfo() );
g_pMasterConnection->SendAddPrivateChatChannelMember( pA->tPrivateChatChannel.nPrivateChatChannelID, Member );
}
#elif defined( _GAMESERVER )
if( g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendAddPrivateChatChannel( pA->cWorldSetID, pPrivateChatChannel->GetChannelInfo() );
g_pMasterConnectionManager->SendAddPrivateChatChannelMember( pA->cWorldSetID, pA->tPrivateChatChannel.nPrivateChatChannelID, Member );
}
#endif
}
}
return false;
}
break;
case QUERY_ADD_PRIVATECHATMEMBER:
{
const TAAddPrivateChatMember* pA = reinterpret_cast<const TAAddPrivateChatMember*>(pData);
if( pA->nRetCode == ERROR_NONE || pA->nRetCode == 103345 )
{
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pA->cWorldSetID, pA->nPrivateChatChannelID);
if(pPrivateChatChannel)
{
TPrivateChatChannelMember Member;
memset(&Member, 0, sizeof(Member));
Member = pA->Member;
if( !pPrivateChatChannel->CheckPrivateChannelMember(pPrivateChatChannel->GetMasterCharacterDBID()) )
{
Member.bMaster = true;
pPrivateChatChannel->ModPrivateChannelInfo( PrivateChatChannel::Common::ChangeMaster, pPrivateChatChannel->GetChannelPassword(), Member.biCharacterDBID );
}
pPrivateChatChannel->AddPrivateChannelMember( Member );
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendAddPrivateChatChannelMember( pA->nPrivateChatChannelID, Member );
}
#elif defined( _GAMESERVER )
if(g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendAddPrivateChatChannelMember( pA->cWorldSetID, pA->nPrivateChatChannelID, Member );
}
#endif
}
}
return false;
}
break;
case QUERY_KICK_PRIVATECHATMEMBER:
{
const TADelPrivateChatMember* pA = reinterpret_cast<const TADelPrivateChatMember*>(pData);
if( pA->nRetCode == ERROR_NONE )
{
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pA->cWorldSetID, pA->nPrivateChatChannelID);
if(pPrivateChatChannel)
{
pPrivateChatChannel->DelPrivateChannelMember( PrivateChatChannel::Common::KickMember, pA->biCharacterDBID );
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendKickPrivateChatChannelMemberResult( pA->biCharacterDBID );
g_pMasterConnection->SendDelPrivateChatChannelMember( PrivateChatChannel::Common::KickMember, pA->nPrivateChatChannelID, pA->biCharacterDBID, pA->wszName );
}
#elif defined( _GAMESERVER )
if(g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendKickPrivateChatChannelMemberResult( pA->cWorldSetID, pA->biCharacterDBID );
g_pMasterConnectionManager->SendDelPrivateChatChannelMember( pA->cWorldSetID, PrivateChatChannel::Common::KickMember, pA->nPrivateChatChannelID, pA->biCharacterDBID, pA->wszName );
}
#endif
}
}
return false;
}
break;
case QUERY_INVITE_PRIVATECHATMEMBER:
{
const TAInvitePrivateChatMember* pA = reinterpret_cast<const TAInvitePrivateChatMember*>(pData);
if( pA->nRetCode == ERROR_NONE )
{
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pA->cWorldSetID, pA->nPrivateChatChannelID);
if(pPrivateChatChannel)
{
TPrivateChatChannelMember Member;
memset(&Member, 0, sizeof(Member));
Member = pA->Member;
if(pPrivateChatChannel->GetMasterCharacterDBID() == 0)
Member.bMaster = true;
pPrivateChatChannel->AddPrivateChannelMember( Member );
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendAddPrivateChatChannelMember( pA->nPrivateChatChannelID, Member );
g_pMasterConnection->SendInvitePrivateChatChannelResult(ERROR_NONE, pA->nMasterAccountDBID);
}
#elif defined( _GAMESERVER )
if(g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendAddPrivateChatChannelMember( pA->cWorldSetID, pA->nPrivateChatChannelID, Member );
g_pMasterConnectionManager->SendInvitePrivateChatChannelResult(pA->cWorldSetID, ERROR_NONE, pA->nMasterAccountDBID);
}
#endif
}
}
return false;
}
break;
case QUERY_DEL_PRIVATEMEMBERSERVERID:
{
const TADelPrivateChatMemberServerID* pA = reinterpret_cast<const TADelPrivateChatMemberServerID*>(pData);
for( int i=0;i<pA->nCount;i++ )
{
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pA->cWorldSetID, pA->Member[i].nPrivateChatChannelID);
if( pPrivateChatChannel )
{
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
{
g_pMasterConnection->SendDelPrivateChatChannelMember( PrivateChatChannel::Common::OutMember, pA->Member[i].nPrivateChatChannelID, pA->Member[i].biCharacterDBID, pA->Member[i].wszCharacterName );
}
#elif defined( _GAMESERVER )
if(g_pMasterConnectionManager )
{
g_pMasterConnectionManager->SendDelPrivateChatChannelMember( pA->cWorldSetID, PrivateChatChannel::Common::OutMember, pA->Member[i].nPrivateChatChannelID, pA->Member[i].biCharacterDBID, pA->Member[i].wszCharacterName );
}
#endif
}
}
}
break;
default:
return false;
}
return true;
}
#endif
#if defined( PRE_ADD_CHNC2C )
bool CDNDBConnection::OnRecvItem(int nSubCmd, char* pData, int nLen )
{
switch( nSubCmd )
{
case QUERY_GET_GAMEMONEY :
{
const TAGetGameMoney* pA = reinterpret_cast<const TAGetGameMoney*>(pData);
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendC2CCoinBalanceResult(pA->nRetCode, pA->biCoinBalance, pA->szSeqID);
#endif
}
break;
case QUERY_KEEP_GAMEMONEY :
{
const TAKeepGameMoney* pA = reinterpret_cast<const TAKeepGameMoney*>(pData);
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendC2CReduceCoinResult(pA->nRetCode, pA->szSeqID);
#elif defined( _GAMESERVER )
if(g_pMasterConnectionManager )
g_pMasterConnectionManager->SendC2CReduceCoinResult(pA->cWorldSetID, pA->nRetCode, pA->szSeqID);
#endif
return false;
}
break;
case QUERY_TRANSFER_GAMEMONEY :
{
const TATransferGameMoney* pA = reinterpret_cast<const TATransferGameMoney*>(pData);
#if defined( _VILLAGESERVER )
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
g_pMasterConnection->SendC2CAddCoinResult(pA->nRetCode, pA->szSeqID);
#elif defined( _GAMESERVER )
if(g_pMasterConnectionManager )
g_pMasterConnectionManager->SendC2CAddCoinResult(pA->cWorldSetID, pA->nRetCode, pA->szSeqID);
#endif
return false;
}
break;
default:
return false;
}
return true;
}
#endif // #if defined( PRE_ADD_CHNC2C )
#if defined(PRE_ADD_DWC)
bool CDNDBConnection::OnRecvDWC(int nSubCmd, char *pData)
{
switch(nSubCmd)
{
case QUERY_GET_DWC_CHANNELINFO:
{
#if defined(_VILLAGESERVER)
TAGetDWCChannelInfo * pPacket = (TAGetDWCChannelInfo*)pData;
g_pDWCTeamManager->Initialize(pPacket);
#endif
return true;
}
break;
default:
return false;
}
return false;
}
#endif //#if defined(PRE_ADD_DWC)
int CDNDBConnection::QueryMWTest( TQMWTest* pQ )
{
return AddSendData( MAINCMD_ITEM, QUERY_MWTEST, (char*)pQ, sizeof(TQMWTest) );
}
//#########################################################################################################################################
// MAINCMD_AUTH
//#########################################################################################################################################
int CDNDBConnection::QueryStoreAuth(char cLastServerType, CDNUserSession *pUserSession)
{
TQStoreAuth Auth;
memset(&Auth, 0, sizeof(Auth));
Auth.cThreadID = pUserSession->GetDBThreadID();
Auth.nAccountDBID = pUserSession->GetAccountDBID();
Auth.biCertifyingKey = pUserSession->GetCertifyingKey();
Auth.nCurServerID = g_pAuthManager->GetServerID();
Auth.cWorldSetID = pUserSession->GetWorldSetID();
Auth.nSessionID = pUserSession->GetSessionID();
Auth.biCharacterDBID = pUserSession->GetCharacterDBID();
if (pUserSession->GetAccountName())
_wcscpy(Auth.wszAccountName, _countof(Auth.wszAccountName), pUserSession->GetAccountName(), (int)wcslen(pUserSession->GetAccountName()));
if (pUserSession->GetCharacterName())
_wcscpy(Auth.wszCharacterName, _countof(Auth.wszCharacterName), pUserSession->GetCharacterName(), (int)wcslen(pUserSession->GetCharacterName()));
Auth.bIsAdult = pUserSession->m_bAdult;
Auth.nAge = pUserSession->GetAge();
Auth.nDailyCreateCount = pUserSession->GetDailyCreateCount();
Auth.nPrmInt1 = pUserSession->GetPrmInt1();
Auth.cLastServerType = cLastServerType;
return (AddSendData(MAINCMD_AUTH, QUERY_STOREAUTH, (char*)&Auth, sizeof(Auth)));
}
int CDNDBConnection::QueryCheckAuth(INT64 biCertifyingKey, CDNUserSession *pUserSesion)
{
return QueryCheckAuth(biCertifyingKey, pUserSesion->GetDBThreadID(), pUserSesion->GetAccountDBID(), pUserSesion->GetSessionID());
}
int CDNDBConnection::QueryCheckAuth(INT64 biCertifyingKey, BYTE cThreadID, int nAccountDBID, int nSessionID)
{
TQCheckAuth Auth;
Auth.cThreadID = cThreadID;
Auth.nAccountDBID = nAccountDBID;
Auth.biCertifyingKey = biCertifyingKey;
Auth.nCurServerID = g_pAuthManager->GetServerID();
Auth.nSessionID = nSessionID;
return (AddSendData(MAINCMD_AUTH, QUERY_CHECKAUTH, (char*)&Auth, sizeof(Auth)));
}
int CDNDBConnection::QueryResetAuth(BYTE cThreadID, int uAccountDBID, UINT nSessionID)
{
TQResetAuth Auth;
Auth.cThreadID = cThreadID;
Auth.nAccountDBID = uAccountDBID;
Auth.nSessionID = nSessionID;
return (AddSendData(MAINCMD_AUTH, QUERY_RESETAUTH, (char*)&Auth, sizeof(Auth)));
}
int CDNDBConnection::QueryResetAuthServer( BYTE cThreadID, int nServerID)
{
TQResetAuthServer Auth;
Auth.cThreadID = cThreadID;
Auth.nServerID = nServerID;
return (AddSendData(MAINCMD_AUTH, QUERY_RESETAUTHSERVER, (char*)&Auth, sizeof(Auth)));
}
int CDNDBConnection::QueryResetErrorCheck( UINT uAccountDBID )
{
TQHeader Reset;
memset(&Reset, 0, sizeof(TQHeader));
Reset.nAccountDBID = uAccountDBID;
return (AddSendData(MAINCMD_AUTH, QUERY_RESETERRORCHECK, (char*)&Reset, sizeof(Reset)));
}
//#########################################################################################################################################
// MAINCMD_STATUS
//#########################################################################################################################################
// Character관련
#if defined( PRE_PARTY_DB )
void CDNDBConnection::QuerySelectCharacter(BYTE cThreadID, CDNUserSession *pSession)
#else
void CDNDBConnection::QuerySelectCharacter(BYTE cThreadID, CDNUserSession *pSession, TPARTYID PartyID)
#endif
{
TQSelectCharacter Select;
memset(&Select, 0, sizeof(TQSelectCharacter));
Select.cThreadID = cThreadID;
Select.cWorldSetID = pSession->GetWorldSetID();
Select.nAccountDBID = pSession->GetAccountDBID();
Select.biCharacterDBID = pSession->GetCharacterDBID();
#if !defined( PRE_PARTY_DB )
Select.PartyID = PartyID;
#endif
Select.nLastServerType = _SERVER_TYPEID;
if (pSession->GetAccountName())
_wcscpy(Select.wszAccountName, _countof(Select.wszAccountName), pSession->GetAccountName(), (int)wcslen(pSession->GetAccountName()));
AddSendData(MAINCMD_STATUS, QUERY_SELECTCHARACTER, (char*)&Select, sizeof(TQSelectCharacter));
}
void CDNDBConnection::QueryUpdateUserData(int nMainCmd, CDNUserSession *pSession, TUserData *pUserData, bool bExecuteScheduleedTask )
{
TQUpdateCharacter Update;
memset(&Update, 0, sizeof(TQUpdateCharacter));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nMapIndex = pUserData->Status.nMapIndex;
Update.nLastVillageMapIndex = pUserData->Status.nLastVillageMapIndex;
Update.nLastSubVillageMapIndex = pUserData->Status.nLastSubVillageMapIndex;
Update.cLastVillageGateNo = pUserData->Status.cLastVillageGateNo;
Update.nPosX = pUserData->Status.nPosX;
Update.nPosY = pUserData->Status.nPosY;
Update.nPosZ = pUserData->Status.nPosZ;
Update.fRotate = pUserData->Status.fRotate;
Update.nGlyphDelayTime = pUserData->Status.nGlyphDelayTime;
Update.nGlyphRemainTime = pUserData->Status.nGlyphRemainTime;
Update.bExecuteScheduleedTask = bExecuteScheduleedTask;
memcpy(Update.cViewCashEquipBitmap, pUserData->Status.cViewCashEquipBitmap, sizeof(Update.cViewCashEquipBitmap));
memcpy(Update.QuickSlot, pUserData->Status.QuickSlot, sizeof(Update.QuickSlot));
for (int i = 0; i < SKILLMAX; i++){
Update.SkillCoolTime[i].nSkillID = pUserData->Skill[0].SkillList[i].nSkillID;
Update.SkillCoolTime[i].nCoolTime = pUserData->Skill[0].SkillList[i].nCoolTime;
}
for (int i = 0; i < SKILLMAX; i++){
Update.SkillCoolTime2[i].nSkillID = pUserData->Skill[1].SkillList[i].nSkillID;
Update.SkillCoolTime2[i].nCoolTime = pUserData->Skill[1].SkillList[i].nCoolTime;
}
#if defined( PRE_ITEMBUFF_COOLTIME )
CDNUserItem *pItem = pSession->GetItem();
#if defined(PRE_PERIOD_INVENTORY)
for (int i = 0; i < INVENTORYTOTALMAX; i++)
{
if (i == pItem->GetInventoryCount()){
i = INVENTORYMAX;
}
#else // #if defined(PRE_PERIOD_INVENTORY)
for (int i = 0; i < pItem->GetInventoryCount(); i++)
{
#endif // #if defined(PRE_PERIOD_INVENTORY)
if(!pItem->GetInventory(i))
continue;
if( pItem->GetInventory(i)->nCoolTime <= 0)
continue;
TItemData* pItemData = g_pDataManager->GetItemData( pItem->GetInventory(i)->nItemID );
if ( pItemData == NULL )
return;
if( pItemData->nType != ITEMTYPE_GLOBAL_PARTY_BUFF)
continue;
Update.Inventory[i].biItemSerial = pItem->GetInventory(i)->nSerial;
Update.Inventory[i].nCoolTime = pItem->GetInventory(i)->nCoolTime;
}
#if defined(PRE_PERIOD_INVENTORY)
for (int i = 0; i < WAREHOUSETOTALMAX; i++){
if (i == pItem->GetWarehouseCount()){
i = WAREHOUSEMAX;
}
#else // #if defined(PRE_PERIOD_INVENTORY)
for (int i = 0; i < pItem->GetWarehouseCount(); i++){
#endif // #if defined(PRE_PERIOD_INVENTORY)
if(!pItem->GetWarehouse(i))
continue;
if( pItem->GetWarehouse(i)->nCoolTime <= 0)
continue;
TItemData* pItemData = g_pDataManager->GetItemData( pItem->GetWarehouse(i)->nItemID );//GetInventory
if ( pItemData == NULL )
return;
if( pItemData->nType != ITEMTYPE_GLOBAL_PARTY_BUFF)
continue;
Update.Warehouse[i].biItemSerial = pItem->GetWarehouse(i)->nSerial;
Update.Warehouse[i].nCoolTime = pItem->GetWarehouse(i)->nCoolTime;
}
pItem->GetCashInventoryCoolTime(Update.CashInventory);
#if defined( PRE_ADD_SERVER_WAREHOUSE )
pItem->GetServerWareCoolTime(Update.ServerWare);
pItem->GetServerWareCashCoolTime(Update.ServerWareCash);
#endif // #if defined( PRE_ADD_SERVER_WAREHOUSE )
#endif // #if defined( PRE_ITEMBUFF_COOLTIME )
/*
CDNUserItem *pItem = pSession->GetItem();
for (int i = 0; i < EQUIPMAX; i++){
if(!pItem->GetEquip(i)) continue;
Update.Equip[i].biItemSerial = pItem->GetEquip(i)->nSerial;
Update.Equip[i].nCoolTime = pItem->GetEquip(i)->nCoolTime;
}
for (int i = 0; i < INVENTORYMAX; i++){
if(!pItem->GetInventory(i)) continue;
Update.Inventory[i].biItemSerial = pItem->GetInventory(i)->nSerial;
Update.Inventory[i].nCoolTime = pItem->GetInventory(i)->nCoolTime;
}
for (int i = 0; i < WAREHOUSEMAX; i++){
if(!pItem->GetWarehouse(i)) continue;
Update.Warehouse[i].biItemSerial = pItem->GetWarehouse(i)->nSerial;
Update.Warehouse[i].nCoolTime = pItem->GetWarehouse(i)->nCoolTime;
}
for (int i = 0; i < CASHEQUIPMAX; i++){
if(!pItem->GetCashEquip(i)) continue;
Update.CashEquip[i].biItemSerial = pItem->GetCashEquip(i)->nSerial;
Update.CashEquip[i].nCoolTime = pItem->GetCashEquip(i)->nCoolTime;
}
for (int i = 0; i < pItem->GetCashInventoryCount(); i++){
if(!pItem->GetCashInventory(i))
continue;
if( i >= _countof(Update.CashInventory) )
continue;
Update.CashInventory[i].biItemSerial = pItem->GetCashInventory(i)->nSerial;
Update.CashInventory[i].nCoolTime = pItem->GetCashInventory(i)->nCoolTime;
}
*/
#if defined(_VILLAGESERVER)
g_pUserSessionManager->AddSaveSendData(nMainCmd, (char*)&Update, sizeof(TQUpdateCharacter));
#elif defined(_GAMESERVER)
CDNRUDPGameServer * pServer = g_pGameServerManager->GetGameServerByAID(pSession->GetAccountDBID());
if(pServer)
{
pServer->AddSaveSendData(nMainCmd, (char*)&Update, sizeof(TQUpdateCharacter));
}
else
_DANGER_POINT();
#endif
}
//펫 경험치 INT64 biPetItemSerial, int nPetExp 추가.
void CDNDBConnection::QueryChangeStageUserData(CDNUserSession *pSession, BYTE cPCBangRebirthCoin, std::vector<INT64> &VecSerialList, std::vector<USHORT> &VecDurList,
int nDeathCount, BYTE cDifficult, INT64 biPickUpCoin, INT64 biPetItemSerial, int nPetExp)
{
TQChangeStageUserData Update;
memset(&Update, 0, sizeof(TQChangeStageUserData));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.PartyID = pSession->GetPartyID();
Update.nExp = pSession->GetExp();
Update.biCoin = pSession->GetCoin();
Update.cRebirthCoin = pSession->GetRebirthCoin() + pSession->GetVIPRebirthCoin();
Update.cPCBangRebirthCoin = cPCBangRebirthCoin;
Update.nDeathCount = nDeathCount;
Update.cDifficult = cDifficult;
Update.biPickUpCoin = biPickUpCoin;
Update.biPetItemSerial = biPetItemSerial;
Update.nPetExp = nPetExp;
int nCount = 0;
if(!VecSerialList.empty()){
for (int i = 0; i <(int)VecSerialList.size(); i++){
Update.ItemDurArr[i].biSerial = VecSerialList[i];
nCount++;
}
}
if(!VecDurList.empty()){
for (int i = 0; i <(int)VecDurList.size(); i++){
Update.ItemDurArr[i].wDur = VecDurList[i];
}
}
Update.nCount = nCount;
int nLen = sizeof(TQChangeStageUserData) - sizeof(Update.ItemDurArr) +(sizeof(DBPacket::TDurabilityInfo) * nCount);
AddSendData(MAINCMD_STATUS, QUERY_CHANGESTAGEUSERDATA, (char*)&Update, nLen);
}
void CDNDBConnection::QueryGetCharacterPartialyByName(CDNUserSession *pSession, const WCHAR *pCharName, BYTE cReqType)
{
TQGetCharacterPartialyByName Packet;
memset( &Packet, 0, sizeof(Packet) );
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
if(pCharName) _wcscpy(Packet.wszName, NAMELENMAX, pCharName, (int)wcslen(pCharName));
Packet.cReqType = cReqType;
AddSendData(MAINCMD_STATUS, QUERY_GETCHARACTERPARTIALYBYNAME, (char*)&Packet, sizeof(TQGetCharacterPartialyByName));
}
void CDNDBConnection::QueryGetCharacterPartialyByDBID(CDNUserSession *pSession, INT64 biCharacterDBID, BYTE cReqType)
{
TQGetCharacterPartialyByDBID Packet;
memset( &Packet, 0, sizeof(Packet) );
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = biCharacterDBID;
Packet.cReqType = cReqType;
AddSendData(MAINCMD_STATUS, QUERY_GETCHARACTERPARTIALYBYDBID, (char*)&Packet, sizeof(TQGetCharacterPartialyByDBID));
}
void CDNDBConnection::QueryCheckFirstVillage(CDNUserSession *pSession)
{
TQCheckFirstVillage Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STATUS, QUERY_CHECKFIRSTVILLAGE, (char*)&Update, sizeof(TQCheckFirstVillage));
}
void CDNDBConnection::QueryLevel(CDNUserSession *pSession, char cChangeCode)
{
TQLevel Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cLevel = pSession->GetLevel();
Update.cChangeCode = cChangeCode;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
if( pSession->GetCharacterName() )
_wcscpy( Update.wszCharName, _countof(Update.wszCharName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()) );
AddSendData(MAINCMD_STATUS, QUERY_LEVEL, (char*)&Update, sizeof(TQLevel));
}
void CDNDBConnection::QueryExp(CDNUserSession *pSession, char cChangeCode, INT64 biFKey)
{
TQExp Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nExp = pSession->GetExp();
Update.cChangeCode = cChangeCode;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.biFKey = biFKey;
AddSendData(MAINCMD_STATUS, QUERY_EXP, (char*)&Update, sizeof(TQExp));
}
void CDNDBConnection::QueryCoin(CDNUserSession *pSession, char cCoinChangeCode, INT64 biChangeKey, INT64 nChangeCoin, INT64 nTotalCoin)
{
TQCoin Update;
memset(&Update, 0, sizeof(TQCoin));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cCoinChangeCode = cCoinChangeCode;
Update.biChangeKey = biChangeKey;
Update.nChangeCoin = nChangeCoin;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.nTotalCoin = nTotalCoin;
AddSendData(MAINCMD_STATUS, QUERY_COIN, (char*)&Update, sizeof(TQCoin));
}
void CDNDBConnection::QueryWarehouseCoin(CDNUserSession *pSession, char cCoinChangeCode, INT64 nChangeCoin, INT64 nTotalCoin, INT64 nTotalWarehouseCoin)
{
TQWarehouseCoin Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cCoinChangeCode = cCoinChangeCode;
Update.nChangeCoin = nChangeCoin;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.nTotalCoin = nTotalCoin;
Update.nTotalWarehouseCoin = nTotalWarehouseCoin;
AddSendData(MAINCMD_STATUS, QUERY_WAREHOUSECOIN, (char*)&Update, sizeof(TQWarehouseCoin));
}
void CDNDBConnection::QueryMapInfo(CDNUserSession *pSession)
{
TQMapInfo Update;
memset(&Update, 0, sizeof(TQMapInfo));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cLastVillageGateNo = pSession->GetLastVillageGateNo();
Update.nLastVillageMapIndex = pSession->GetLastVillageMapIndex();
Update.nLastSubVillageMapIndex = pSession->GetLastSubVillageMapIndex();
Update.nMapIndex = pSession->GetMapIndex();
AddSendData(MAINCMD_STATUS, QUERY_MAPINFO, (char*)&Update, sizeof(TQMapInfo));
}
void CDNDBConnection::QueryCashRebirthCoin(CDNUserSession *pSession)
{
TQCashRebirthCoin Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
_wcscpy( Update.wszIP, _countof(Update.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData(MAINCMD_STATUS, QUERY_CASHREBIRTHCOIN, (char*)&Update, sizeof(TQCashRebirthCoin));
}
void CDNDBConnection::QueryAddCashRebirthCoin(CDNUserSession *pSession, int nRebirthCount, int nRebirthPrice, int nRebirthCode, int nRebirthKey)
{
TQAddCashRebirthCoin Update;
memset(&Update, 0, sizeof(TQAddCashRebirthCoin));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nRebirthCount = nRebirthCount;
Update.nRebirthPrice = nRebirthPrice;
Update.nRebirthCode = nRebirthCode;
Update.nRebirthKey = nRebirthKey;
AddSendData(MAINCMD_STATUS, QUERY_ADDCASHREBIRTHCOIN, (char*)&Update, sizeof(TQAddCashRebirthCoin));
}
void CDNDBConnection::QueryRebirthCoin(CDNUserSession *pSession, int nRebirthCoin, int nPCBangRebirthCoin, int nVIPRebirthCoin)
{
TQRebirthCoin Update;
memset(&Update, 0, sizeof(TQRebirthCoin));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cRebirthCoin = nRebirthCoin + nVIPRebirthCoin;
Update.cPCBangRebirthCoin = nPCBangRebirthCoin;
AddSendData(MAINCMD_STATUS, QUERY_REBIRTHCOIN, (char*)&Update, sizeof(TQRebirthCoin));
}
void CDNDBConnection::QueryFatigue(CDNUserSession *pSession, char cFatigueTypeCode, int nChangeFatigue)
{
TQFatigue Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cFatigueTypeCode = cFatigueTypeCode;
Update.nChangeFatigue = nChangeFatigue;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
AddSendData(MAINCMD_STATUS, QUERY_FATIGUE, (char*)&Update, sizeof(TQFatigue));
}
void CDNDBConnection::QueryEventFatigue(CDNUserSession *pSession, int nChangeFatigue, bool bReset, char cInitTime)
{
TQEventFatigue Update;
memset(&Update, 0, sizeof(TQEventFatigue));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nChangeFatigue = nChangeFatigue;
Update.bReset = bReset;
Update.cInitTime = cInitTime;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
AddSendData(MAINCMD_STATUS, QUERY_EVENTFATIGUE, (char*)&Update, sizeof(TQEventFatigue));
}
void CDNDBConnection::QueryJob(CDNUserSession *pSession, int nJob)
{
TQJob Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cJob = nJob;
AddSendData(MAINCMD_STATUS, QUERY_JOB, (char*)&Update, sizeof(TQJob));
}
void CDNDBConnection::QueryGlyphDelayTime(CDNUserSession *pSession, int nTime)
{
TQGlyphAttributeTime Update;
memset(&Update, 0, sizeof(Update));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nTime = nTime;
AddSendData(MAINCMD_STATUS, QUERY_GLYPHDELAYTIME, (char*)&Update, sizeof(TQGlyphAttributeTime));
}
void CDNDBConnection::QueryGlyphRemainTime(CDNUserSession *pSession, int nTime)
{
TQGlyphAttributeTime Update;
memset(&Update, 0, sizeof(Update));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nTime = nTime;
AddSendData(MAINCMD_STATUS, QUERY_GLYPHREMAINTIME, (char*)&Update, sizeof(TQGlyphAttributeTime));
}
void CDNDBConnection::QueryNotifier(CDNUserSession *pSession, int nSlot, int nNotifierType, int nID)
{
TQNotifier Update;
memset(&Update, 0, sizeof(TQNotifier));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cNotifierSlot = nSlot;
Update.cNotifierType = static_cast<char>(nNotifierType);
Update.nID = nID;
AddSendData(MAINCMD_STATUS, QUEST_NOTIFIER, (char*)&Update, sizeof(TQNotifier));
}
#if !defined(PRE_DELETE_DUNGEONCLEAR)
void CDNDBConnection::QueryDungeonClear(CDNUserSession *pSession, int nType, int nMapIndex)
{
TQDungeonClear Update;
memset(&Update, 0, sizeof(TQDungeonClear));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cType = nType;
Update.nMapIndex = nMapIndex;
AddSendData(MAINCMD_STATUS, QUERY_DUNGEONCLEAR, (char*)&Update, sizeof(TQDungeonClear));
}
#endif // #if !defined(PRE_DELETE_DUNGEONCLEAR)
void CDNDBConnection::QueryEternityItem(CDNUserSession *pSession, int nEternityCode, int nValue)
{
TQEternityItem Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cEternityCode = nEternityCode;
Update.nEternityValue = nValue;
AddSendData(MAINCMD_STATUS, QUERY_ETERNITYITEM, (char*)&Update, sizeof(TQEternityItem));
}
void CDNDBConnection::QueryColor(CDNUserSession *pSession, int nItemType, DWORD dwColor)
{
TQColor Update;
memset(&Update, 0, sizeof(Update));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cItemType = nItemType;
Update.dwColor = dwColor;
AddSendData(MAINCMD_STATUS, QUERY_COLOR, (char*)&Update, sizeof(TQColor));
}
void CDNDBConnection::QueryNestClear(CDNUserSession *pSession, int nMapIndex, char cClearType/* = NestClear::Type::Normal*/)
{
TQNestClearCount Update;
memset(&Update, 0, sizeof(TQNestClearCount));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nMapIndex = nMapIndex;
Update.cClearType = cClearType;
AddSendData(MAINCMD_STATUS, QUERY_NESTCLEARCOUNT, (char*)&Update, sizeof(TQNestClearCount));
}
void CDNDBConnection::QueryInitNestClearCount(CDNUserSession *pSession)
{
TQInitNestClearCount Update;
memset(&Update, 0, sizeof(TQInitNestClearCount));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STATUS, QUERY_INITNESTCLEARCOUNT, (char*)&Update, sizeof(TQInitNestClearCount));
}
void CDNDBConnection::QueryChangeCharacterName(CDNUserSession *pSession, LPCWSTR pChangeCharacterName, INT64 biItemSerial)
{
TQChangeCharacterName packet;
memset(&packet, 0, sizeof(TQChangeCharacterName));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.nCharacterDBID = pSession->GetCharacterDBID();
packet.biItemSerial = biItemSerial;
packet.btChangeCode = CHANGECODE_CHARNAME; // 캐릭터 이름변경 아이템 코드(강제로 세팅합니다)
packet.nReservedPeriodDay = RESERVEDPERIOD_CHARNAME;
packet.nNextPeriodDay = NEXTPERIOD_CHARNAME;
if(pSession->GetCharacterName()) _wcscpy(packet.wszOriginName, _countof(packet.wszOriginName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()));
if(pChangeCharacterName) _wcscpy(packet.wszCharacterName, _countof(packet.wszCharacterName), pChangeCharacterName, (int)wcslen(pChangeCharacterName));
AddSendData(MAINCMD_STATUS, QUERY_CHANGECHARACTERNAME, (char*)&packet, sizeof(TQChangeCharacterName));
}
void CDNDBConnection::QueryGetListEtcPoint(BYTE cThreadID, CDNUserSession *pSession)
{
TQGetListEtcPoint packet;
memset(&packet, 0, sizeof(TQGetListEtcPoint));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.nCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STATUS, QUERY_GETLIST_ETCPOINT, (char*)&packet, sizeof(TQGetListEtcPoint));
}
// 현재 포인트사용은 호감도에서만 사용하기 때문에 여기에서 처리한다
// 추후 공용으로 사용하게 되는 시점이 오면 타입을 재조정한다.
void CDNDBConnection::QueryAddEtcPoint( CDNUserSession *pSession, char cType, INT64 biPoint )
{
TQAddEtcPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cType = cType;
TxPacket.biAddPoint = biPoint;
TxPacket.nMapID = pSession->GetMapIndex();
_wcscpy( TxPacket.wszIP, _countof(TxPacket.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData( MAINCMD_STATUS, QUERY_ADD_ETCPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryUseEtcPoint( CDNUserSession *pSession, char cType, INT64 biPoint )
{
TQUseEtcPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cType = cType;
TxPacket.biUsePoint = biPoint;
TxPacket.nMapID = pSession->GetMapIndex();
_wcscpy( TxPacket.wszIP, _countof(TxPacket.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData( MAINCMD_STATUS, QUERY_USE_ETCPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#ifdef PRE_ADD_CHANGEJOB_CASHITEM
void CDNDBConnection::QueryChangeJobCode( CDNUserSession *pSession, int nFirstJobIDBefore, int nFirstJobIDAfter, int nSecondJobIDBefore, int nSecondJobIDAfter )
{
TQChangeJobCode Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nFirstJobIDBefore = nFirstJobIDBefore;
Update.nFirstJobIDAfter = nFirstJobIDAfter;
Update.nSecondJobIDBefore = nSecondJobIDBefore;
Update.nSecondJobIDAfter = nSecondJobIDAfter;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
AddSendData( MAINCMD_STATUS, QUERY_CHANGEJOBCODE, (char*)&Update, sizeof(TQChangeJobCode) );
}
#endif // #ifdef PRE_ADD_CHANGEJOB_CASHITEM
void CDNDBConnection::QueryGetListVariableReset( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetListVariableReset TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_STATUS, QUERY_GETLIST_VARIABLERESET, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModVariableReset( CDNUserSession *pSession, CommonVariable::Type::eCode Type, INT64 biValue, __time64_t ResetTime )
{
TQModVariableReset TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.Type = Type;
TxPacket.biValue = biValue;
TxPacket.tResetTime = ResetTime;
AddSendData( MAINCMD_STATUS, QUERY_MOD_VARIABLERESET, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryChagneSkillPage(CDNUserSession *pSession, char cSkillPage)
{
TQChangeSkillPage TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cSkillPage = cSkillPage;
AddSendData( MAINCMD_STATUS, QUERY_CHANGE_SKILLPAGE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_TOTAL_LEVEL_SKILL )
void CDNDBConnection::QueryGetTotalSkillLevel(BYTE cThreadID, CDNUserSession *pSession)
{
TQGetTotalLevelSkill TxPacket;
memset(&TxPacket, 0, sizeof(TQGetTotalLevelSkill));
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STATUS, QUERY_GET_TOTALSKILLLEVEL, (char*)&TxPacket, sizeof(TQGetTotalLevelSkill));
}
void CDNDBConnection::QueryAddTotalSkillLevel(CDNUserSession *pSession, int nSlotIndex, int nSkillID)
{
TQAddTotalLevelSkill TxPacket;
memset(&TxPacket, 0, sizeof(TQAddTotalLevelSkill));
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nSlotIndex = nSlotIndex;
TxPacket.nSkillID = nSkillID;
AddSendData(MAINCMD_STATUS, QUERY_ADD_TOTALSKILLLEVEL, (char*)&TxPacket, sizeof(TQAddTotalLevelSkill));
}
#endif
#ifdef PRE_ADD_PRESET_SKILLTREE
void CDNDBConnection::QueryGetSkillPresetList(CDNUserSession * pSession)
{
TQGetSKillPreSetList packet;
memset(&packet, 0, sizeof(TQGetSKillPreSetList));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STATUS, QUERY_GET_SKILLPRESET_LIST, (char*)&packet, sizeof(TQGetSKillPreSetList));
}
void CDNDBConnection::QueryAddSkillPreset(CDNUserSession * pSession, CSSaveSkillSet * pSkill)
{
TQAddSkillPreSet packet;
memset(&packet, 0, sizeof(TQAddSkillPreSet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.cIndex = pSkill->cIndex;
_wcscpy(packet.wszName, SKILLPRESETNAMEMAX, pSkill->wszSetName, (int)wcslen(pSkill->wszSetName));
packet.cCount = pSkill->cCount;
memcpy_s(packet.SKill, sizeof(packet.SKill), pSkill->SKills, sizeof(TSkillSetPartialData) * packet.cCount);
AddSendData(MAINCMD_STATUS, QUERY_ADD_SKILLPRESET, (char*)&packet, sizeof(TQAddSkillPreSet) - sizeof(packet.SKill) + (sizeof(TSkillSetPartialData) * packet.cCount));
}
void CDNDBConnection::QueryDelSkillPreset(CDNUserSession * pSession, BYTE cIndex)
{
TQDelSkillPreSet packet;
memset(&packet, 0, sizeof(TQDelSkillPreSet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.cIndex = cIndex;
AddSendData(MAINCMD_STATUS, QUERY_DEL_SKILLPRESET, (char*)&packet, sizeof(TQDelSkillPreSet));
}
#endif //#ifdef PRE_ADD_PRESET_SKILLTREE
//#########################################################################################################################################
// MAINCMD_ETC
//#########################################################################################################################################
// Query-Queue
void CDNDBConnection::QueryUpdateQueryQueue( const TDBQueryQueue *pDBQueryQueue)
{
DN_ASSERT(NULL != pDBQueryQueue, "Invalid!");
DN_ASSERT(pDBQueryQueue->CheckIntegrity(), "Invalid!");
AddSendData(MAINCMD_ETC, QUERY_UPDATEQUERYQUEUE, reinterpret_cast<char*>(const_cast<TDBQueryQueue*>(pDBQueryQueue)), pDBQueryQueue->GetSize());
}
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
void CDNDBConnection::QuerySimpleConfig(BYTE cThreadID)
{
TQSimpleConfig packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
AddSendData(MAINCMD_ETC, QUERY_GET_SIMPLECONFIG,(char*)&packet, sizeof(packet));
}
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
#ifdef PRE_ADD_SEETMAINTENANCEFLAG
void CDNDBConnection::QuerySetMaintenanceFlag(BYTE cThreadID, int nFlag)
{
TQMaintenanceInfo packet;
memset(&packet, 0, sizeof(TQMaintenanceInfo));
packet.cThreadID = cThreadID;
packet.nFlag = nFlag;
AddSendData(MAINCMD_ETC, QUERY_MAINTENANCEFLAG, reinterpret_cast<char*>(&packet), sizeof(packet));
}
#endif //#ifdef PRE_ADD_SEETMAINTENANCEFLAG
// Event
void CDNDBConnection::QueryEventList(BYTE cThreadID, int nWorldSetID)
{
TQEventList packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
AddSendData(MAINCMD_ETC, QUERY_EVENTLIST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryLogout(CDNUserSession *pSession, const BYTE * pMachineID)
{
TQLogout Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nSessionID = pSession->GetSessionID();
#if defined(_KR)
memcpy_s(Update.szMachineID, sizeof(Update.szMachineID), pMachineID, MACHINEIDMAX);
#endif
AddSendData(MAINCMD_ETC, QUERY_LOGOUT, (char*)&Update, sizeof(TQLogout));
}
void CDNDBConnection::QueryModLastConnectDate(CDNUserSession *pSession)
{
TQHeader Packet = {0,};
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
AddSendData(MAINCMD_ETC, QUERY_MODLASTCONNECTDATE, (char*)&Packet, sizeof(TQHeader));
}
void CDNDBConnection::QueryLoginCharacter( CDNUserSession *pSession )
{
TQLoginCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.uiSessionID = pSession->GetSessionID();
if(pSession->GetIpW()) _wcscpy( TxPacket.wszIP, IPLENMAX, pSession->GetIpW(), (int)wcslen(pSession->GetIpW()) );
AddSendData(MAINCMD_ETC, QUERY_LOGINCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryLogoutCharacter( CDNUserSession *pSession )
{
TQLogoutCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.uiSessionID = pSession->GetSessionID();
if(pSession->GetViewCashEquipBitmap())
memcpy(TxPacket.cViewCashEquipBitmap, pSession->GetViewCashEquipBitmap(), sizeof(TxPacket.cViewCashEquipBitmap));
AddSendData(MAINCMD_ETC, QUERY_LOGOUTCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
// GameOption
void CDNDBConnection::QueryGetGameOption(BYTE cThreadID, CDNUserSession *pSession)
{
TQGetGameOption packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.nAccountDBID = pSession->GetAccountDBID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_ETC, QUERY_GETGAMEOPTION, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QuerySetGameOption(CDNUserSession *pSession, TGameOptions * pOption)
{
TQSetGameOption packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
memcpy_s(&packet.Option, sizeof(TGameOptions), pOption, sizeof(TGameOptions));
AddSendData(MAINCMD_ETC, QUERY_SETGAMEOPTION, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryUpdateSecondAuthPassword( BYTE cThreadID, UINT uiAccountDBID, CSGameOptionUpdateSecondAuthPassword* pPacket )
{
TQUpdateSecondAuthPassword TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.nAccountDBID = uiAccountDBID;
memcpy( TxPacket.wszOldPW, MakeSecondPasswordString( szVersion, pPacket->nOldSeed, pPacket->nOldValue ).c_str(), sizeof(WCHAR)*SecondAuth::Common::PWMaxLength );
memcpy( TxPacket.wszNewPW, MakeSecondPasswordString( szVersion, pPacket->nNewSeed, pPacket->nNewValue ).c_str(), sizeof(WCHAR)*SecondAuth::Common::PWMaxLength );
AddSendData( MAINCMD_ETC, QUERY_UPDATE_SECONDAUTH_PASSWORD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryUpdateSecondAuthLock( BYTE cThreadID, UINT uiAccountDBID, CSGameOptionUpdateSecondAuthLock* pPacket )
{
TQUpdateSecondAuthLock TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.bIsLock = pPacket->bIsLock;
if( !pPacket->bIsLock ) // UnLock 인 경우 암호 확인
memcpy( TxPacket.wszPW, MakeSecondPasswordString( szVersion, pPacket->nSeed, pPacket->nValue ).c_str(), sizeof(WCHAR)*SecondAuth::Common::PWMaxLength );
AddSendData( MAINCMD_ETC, QUERY_UPDATE_SECONDAUTH_LOCK, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryInitSecondAuth( BYTE cThreadID, UINT uiAccountDBID )
{
TQInitSecondAuth TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.nAccountDBID = uiAccountDBID;
AddSendData( MAINCMD_ETC, QUERY_INIT_SECONDAUTH, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryValidateSecondAuth( BYTE cThreadID, UINT uiAccountDBID, const WCHAR* wszPW, int nAuthCheckType )
{
_ASSERT( wszPW );
TQValidateSecondAuth TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.nAuthCheckType = nAuthCheckType;
memcpy( TxPacket.wszPW, wszPW, sizeof(WCHAR)*SecondAuth::Common::PWMaxLength );
AddSendData( MAINCMD_ETC, QUERY_VALIDATE_SECONDAUTH, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetKeySetting( BYTE cThreadID, int nWorldSetID, UINT nAccountDBID )
{
TQGetKeySettingOption TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = nAccountDBID;
AddSendData( MAINCMD_ETC, QUERY_GET_KEYSETTING_OPTION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModKeySetting( BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, TKeySetting* pKeySetting )
{
TQModKeySettingOption TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = nAccountDBID;
TxPacket.bUseDefault = (pKeySetting == NULL) ? true : false;
if( pKeySetting )
memcpy( &TxPacket.sKeySetting, pKeySetting, sizeof(TKeySetting) );
AddSendData( MAINCMD_ETC, QUERY_MOD_KEYSETTING_OPTION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryUpdateKeySetting( BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, CSGameOptionUpdateKeySetting* pPacket )
{
TQModKeySettingOption TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = nAccountDBID;
TxPacket.bUseDefault = pPacket->bIsDefault;
if( !TxPacket.bUseDefault )
memcpy( &TxPacket.sKeySetting, &pPacket->sKeySetting, sizeof(TKeySetting) );
AddSendData( MAINCMD_ETC, QUERY_MOD_KEYSETTING_OPTION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPadSetting( BYTE cThreadID, int nWorldSetID, UINT nAccountDBID )
{
TQGetPadSettingOption TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = nAccountDBID;
AddSendData( MAINCMD_ETC, QUERY_GET_PADSETTING_OPTION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModPadSetting( BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, TPadSetting* pPadSetting )
{
TQModPadSettingOption TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = nAccountDBID;
TxPacket.bUseDefault = (pPadSetting == NULL) ? true : false;
if( pPadSetting )
memcpy( &TxPacket.sPadSetting, pPadSetting, sizeof(TPadSetting) );
AddSendData( MAINCMD_ETC, QUERY_MOD_PADSETTING_OPTION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryUpdatePadSetting( BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, CSGameOptionUpdatePadSetting* pPacket )
{
TQModPadSettingOption TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = nAccountDBID;
TxPacket.bUseDefault = pPacket->bIsDefault;
if( !TxPacket.bUseDefault )
memcpy( &TxPacket.sPadSetting, &pPacket->sPadSetting, sizeof(TPadSetting) );
AddSendData( MAINCMD_ETC, QUERY_MOD_PADSETTING_OPTION, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetProfile( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetProfile TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_ETC, QUERY_GET_PROFILE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QuerySetProfile( CDNUserSession *pSession, BYTE cGender, const WCHAR * pwzGreeting, bool bOpenPublic )
{
TQSetProfile TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.sProfile.cGender = cGender;
memcpy( TxPacket.sProfile.wszGreeting, pwzGreeting, sizeof(WCHAR) * PROFILEGREETINGLEN );
TxPacket.sProfile.bOpenPublic = bOpenPublic;
AddSendData( MAINCMD_ETC, QUERY_SET_PROFILE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetRestraint(CDNUserSession *pSession)
{
TQRestraint packet;
memset(&packet, 0, sizeof(TQRestraint));
packet.cThreadID = pSession->GetDBThreadID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.cWorldSetID = pSession->GetWorldSetID();
AddSendData(MAINCMD_ETC, QUERY_RESTRAINT, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddRestraint(CDNUserSession *pSession, int nTartgetCode, int nRestraintCode, const WCHAR * pwszRestraintReason, const WCHAR * pwszRestraintReasonForDolis, int nDurationDay, int nDolisReasonCode)
{
TQSetRestraint packet;
memset(&packet, 0, sizeof(TQSetRestraint));
packet.cThreadID = pSession->GetDBThreadID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.cTargetCode = (BYTE)nTartgetCode;
packet.cRestraintCode = (BYTE)nRestraintCode;
packet.biCharacterDBID = pSession->GetCharacterDBID();
if(pwszRestraintReason) _wcscpy(packet.wszRestraintreason, RESTRAINTREASONMAX, pwszRestraintReason, (int)wcslen(pwszRestraintReason));
if(pwszRestraintReasonForDolis) _wcscpy(packet.wszRestraintreasonForDolis, RESTRAINTREASONFORDOLISMAX, pwszRestraintReasonForDolis, (int)wcslen(pwszRestraintReasonForDolis));
packet.nDurationDays = (USHORT)nDurationDay;
packet.nDolisReasonCode = nDolisReasonCode;
AddSendData(MAINCMD_ETC, QUERY_SETRESTRAINT, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QuerySaveConnectDurationTime(CDNUserSession *pSession)
{
TQSaveConnectDurationTime Packet;
memset(&Packet, 0, sizeof(TQSaveConnectDurationTime));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
TTimeEventGroup *pTimeEvent = pSession->GetTimeEventData();
for (int i = 0; i < TIMEEVENTMAX; i++){
if(pTimeEvent->Event[i].nItemID <= 0) continue;
Packet.Event[i] = pTimeEvent->Event[i];
Packet.cCount++;
}
AddSendData(MAINCMD_ETC, QUERY_UPDATECONNECTINGTIME, (char*)&Packet, sizeof(TQSaveConnectDurationTime) - sizeof(Packet.Event) +(sizeof(TTimeEvent) * Packet.cCount));
}
void CDNDBConnection::QueryModTimeEventDate( CDNUserSession *pSession )
{
TQModTimeEventDate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STATUS, QUERY_MOD_TIMEEVENT_DATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddAbuseLog( CDNUserSession *pSession, eAbuseCode eType, wchar_t* buf )
{
TQAddAbuseLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cAbuseCode = static_cast<BYTE>(eType);
TxPacket.unLen = static_cast<USHORT>(wcslen(buf));
if( TxPacket.unLen >= _countof(TxPacket.wszBuf) )
return;
_wcscpy( TxPacket.wszBuf, _countof(TxPacket.wszBuf), buf, (int)wcslen(buf) );
int iLen = sizeof(TxPacket)-sizeof(TxPacket.wszBuf)+(sizeof(WCHAR)*(TxPacket.unLen+1));
AddSendData( MAINCMD_ETC, QUERY_ADD_ABUSELOG, reinterpret_cast<char*>(&TxPacket), iLen );
}
void CDNDBConnection::QueryAddAbuseMonitor( CDNUserSession *pSession, int iCount, int iCount2 )
{
TQAddAbuseMonitor TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iCount = iCount;
#if defined(PRE_ADD_ANTI_CHAT_SPAM)
TxPacket.iCount2 = iCount2;
#endif
AddSendData( MAINCMD_ETC, QUERY_ADD_ABUSEMONITOR, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDelAbuseMonitor( CDNUserSession *pSession, char cType )
{
TQDelAbuseMonitor TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
#if defined(PRE_ADD_ANTI_CHAT_SPAM)
TxPacket.cType = cType;
#endif
AddSendData( MAINCMD_ETC, QUERY_DEL_ABUSEMONITOR, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetAbuseMonitor( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetAbuseMonitor TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_ETC, QUERY_GET_ABUSEMONITOR, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined(PRE_ADD_MULTILANGUAGE)
void CDNDBConnection::QueryGetWholeAbuseMonitor(BYTE cThreadID, CDNUserSession *pSession, char cSelectedLang)
#else //#if defined(PRE_ADD_MULTILANGUAGE)
void CDNDBConnection::QueryGetWholeAbuseMonitor(BYTE cThreadID, CDNUserSession *pSession)
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
{
TQGetWholeAbuseMonitor packet;
memset(&packet, 0, sizeof(TQGetWholeAbuseMonitor));
packet.cThreadID = cThreadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
#if defined(PRE_ADD_MULTILANGUAGE)
packet.cSelectedLang = cSelectedLang;
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
AddSendData(MAINCMD_ETC, QUERY_GET_WHOLE_ABUSEMONITOR, reinterpret_cast<char*>(&packet), sizeof(TQGetWholeAbuseMonitor));
}
void CDNDBConnection::QueryModCharacterSlotCount(CDNUserSession *pSession)
{
TQModCharacterSlotCount Packet;
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_ETC, QUERY_MODCHARACTERSLOTCOUNT, reinterpret_cast<char*>(&Packet), sizeof(TQModCharacterSlotCount));
}
//#########################################################################################################################################
// MAINCMD_MISSION
//#########################################################################################################################################
void CDNDBConnection::QueryMissionGain(CDNUserSession *pSession)
{
TQMissionGain Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
memcpy(Update.MissionGain, pSession->GetMissionData()->MissionGain, sizeof(Update.MissionGain));
AddSendData(MAINCMD_MISSION, QUERY_MISSIONGAIN, (char*)&Update, sizeof(TQMissionGain));
}
void CDNDBConnection::QueryMissionAchieve(CDNUserSession *pSession, int nMissionID)
{
TQMissionAchieve Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nMissionID = nMissionID;
Update.cMissionType = g_pDataManager->GetMissionType(nMissionID);
memcpy(Update.MissionAchieve, pSession->GetMissionData()->MissionAchieve, sizeof(Update.MissionAchieve));
AddSendData(MAINCMD_MISSION, QUERY_MISSIONACHIEVE, (char*)&Update, sizeof(TQMissionAchieve));
}
void CDNDBConnection::QuerySetDailyMission(CDNUserSession *pSession)
{
TQSetDailyMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < DAILYMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->DailyMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETDAILYMISSION, (char*)&Update, sizeof(TQSetDailyMission));
}
void CDNDBConnection::QuerySetWeeklyMission(CDNUserSession *pSession)
{
TQSetWeeklyMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < WEEKLYMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->WeeklyMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETWEEKLYMISSION, (char*)&Update, sizeof(TQSetWeeklyMission));
}
#if defined(PRE_ADD_MONTHLY_MISSION)
void CDNDBConnection::QuerySetMonthlyMission(CDNUserSession *pSession)
{
TQSetMonthlyMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < MONTHLYMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->MonthlyMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETMONTHLYMISSION, (char*)&Update, sizeof(TQSetMonthlyMission));
}
#endif // #if defined(PRE_ADD_MONTHLY_MISSION)
void CDNDBConnection::QuerySetWeekendEventMission(CDNUserSession *pSession)
{
TQSetWeekendEventMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < WEEKENDEVENTMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->WeekendEventMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETWEEKENDEVENTMISSION, (char*)&Update, sizeof(TQSetWeekendEventMission));
}
void CDNDBConnection::QueryModDailyWeeklyMission(CDNUserSession *pSession, char cDailyMissionType, char cIndex, TDailyMission *pMission, bool bIsRepeatMission/*=false*/)
{
TQModDailyWeeklyMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cDailyMissionType = cDailyMissionType;
Update.cMissionIndex = cIndex;
Update.Mission = *pMission;
if(pMission->bAchieve)
{
if( bIsRepeatMission )
Update.nMissionScore = 1;
else
Update.nMissionScore = g_pDataManager->GetDailyMissionRewarePoint(pMission->nMissionID);
}
AddSendData(MAINCMD_MISSION, QUERY_MODDAILYWEEKLYMISSION, (char*)&Update, sizeof(TQModDailyWeeklyMission));
}
void CDNDBConnection::QuerySetGuildWarMission(CDNUserSession *pSession)
{
TQSetGuildWarMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < GUILDWARMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->GuildWarMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETGUILDWARMISSION, (char*)&Update, sizeof(TQSetGuildWarMission));
}
void CDNDBConnection::QueryModGuildWarMission(CDNUserSession *pSession, char cDailyMissionType, char cIndex, TDailyMission *pMission, bool bAchieve)
{
TQModDailyWeeklyMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cDailyMissionType = cDailyMissionType;
Update.cMissionIndex = cIndex;
Update.Mission = *pMission;
if(bAchieve) Update.nMissionScore = 1;
AddSendData(MAINCMD_MISSION, QUERY_MODDAILYWEEKLYMISSION, (char*)&Update, sizeof(TQModDailyWeeklyMission));
}
void CDNDBConnection::QuerySetGuildCommonMission(CDNUserSession *pSession)
{
TQSetGuildCommonMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < GUILDCOMMONMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->GuildCommonMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETGUILDCOMMONMISSION, (char*)&Update, sizeof(TQSetGuildCommonMission));
}
void CDNDBConnection::QuerySetWeekendRepeatMission(CDNUserSession *pSession)
{
TQSetWeekendRepeatMission Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < WEEKENDREPEATMISSIONMAX; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->WeekendRepeatMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETWEEKENDREPEATMISSION, (char*)&Update, sizeof(TQSetWeekendRepeatMission));
}
void CDNDBConnection::QuerySetPCBangMission(CDNUserSession *pSession)
{
TQSetPCBangMission Update;
memset(&Update, 0, sizeof(TQSetPCBangMission));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
for (int i = 0; i < PCBangMissionMax; i++){
Update.nMissionIDs[i] = pSession->GetMissionData()->PCBangMission[i].nMissionID;
}
AddSendData(MAINCMD_MISSION, QUERY_SETPCBANGMISSION, (char*)&Update, sizeof(TQSetPCBangMission));
}
void CDNDBConnection::QueryDelAllMissionsForCheat(CDNUserSession *pSession)
{
TQClearMission ClearMission;
memset(&ClearMission, 0, sizeof(TQClearMission));
ClearMission.cThreadID = pSession->GetDBThreadID();
ClearMission.cWorldSetID = pSession->GetWorldSetID();
ClearMission.nAccountDBID = pSession->GetAccountDBID();
ClearMission.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MISSION, QUERY_CLEARMISSION, (char*)&ClearMission, sizeof(TQClearMission));
}
//#########################################################################################################################################
// MAINCMD_APPELLATION
//#########################################################################################################################################
void CDNDBConnection::QueryAddAppellation(CDNUserSession *pSession, int nAppellationID)
{
TQAddAppellation Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nAppellationID = nAppellationID;
memcpy(Update.Appellation, pSession->GetAppellationData()->Appellation, sizeof(Update.Appellation));
AddSendData(MAINCMD_APPELLATION, QUERY_ADDAPPELLATION, (char*)&Update, sizeof(TQAddAppellation));
}
void CDNDBConnection::QuerySelectAppellation(CDNUserSession *pSession, int nSelect, char cKind)
{
TQSelectAppellation Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nSelectAppellation = nSelect;
Update.cAppellationKind = cKind;
AddSendData(MAINCMD_APPELLATION, QUERY_SELECTAPPELLATION, (char*)&Update, sizeof(TQSelectAppellation));
}
void CDNDBConnection::QueryDelAppellation(CDNUserSession *pSession, int ArrayIndex)
{
TQDelAppellation DelAppellation;
memset( &DelAppellation, 0, sizeof(DelAppellation) );
DelAppellation.cThreadID = pSession->GetDBThreadID();
DelAppellation.cWorldSetID = pSession->GetWorldSetID();
DelAppellation.nAccountDBID = pSession->GetAccountDBID();
DelAppellation.biCharacterDBID = pSession->GetCharacterDBID();
DelAppellation.nDelAppellation = ArrayIndex;
AddSendData(MAINCMD_APPELLATION, QUERY_DELETEAPPELLATION, (char*)&DelAppellation, sizeof(TQDelAppellation));
}
//#########################################################################################################################################
// MAINCMD_SKILL
//#########################################################################################################################################
void CDNDBConnection::QueryAddSkill(CDNUserSession *pSession, int nSkillID, char cSkillLevel, int nCoolTime, char cSkillChangeCode, INT64 biBuyPrice, INT64 biCurrentCoin/*=0*/, INT64 biPickUpCoin/*=0*/)
{
TQAddSkill Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nSkillID = nSkillID;
Update.cSkillLevel = cSkillLevel;
Update.nCoolTime = nCoolTime;
Update.cSkillChangeCode = cSkillChangeCode;
Update.biCoin = biBuyPrice;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.cSkillPage = pSession->GetSkillPage();
Update.biCurrentCoin = biCurrentCoin;
Update.biPickUpCoin = biPickUpCoin;
AddSendData(MAINCMD_SKILL, QUERY_ADDSKILL, (char*)&Update, sizeof(TQAddSkill));
}
void CDNDBConnection::QueryModSkillLevel(CDNUserSession *pSession, int nSkillID, BYTE cSkillLevel, int nCoolTime, USHORT wUsedSkillPoint, char cSkillChangeCode)
{
TQModSkillLevel Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nSkillID = nSkillID;
Update.cSkillLevel = cSkillLevel;
Update.nCoolTime = nCoolTime;
Update.wUsedSkillPoint = wUsedSkillPoint;
Update.cSkillChangeCode = cSkillChangeCode;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.cSkillPage = pSession->GetSkillPage();
AddSendData(MAINCMD_SKILL, QUERY_MODSKILLLEVEL, (char*)&Update, sizeof(TQModSkillLevel));
}
void CDNDBConnection::QueryIncreaseSkillPoint(CDNUserSession *pSession, USHORT wSkillPoint, int nChangeCode, int nSkillPage)
{
TQIncreaseSkillPoint Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.wSkillPoint = wSkillPoint;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.cSkillPointChangeCode = nChangeCode;
Update.cSkillPage = (char)nSkillPage;
AddSendData(MAINCMD_SKILL, QUERY_INCREASESKILLPOINT, (char*)&Update, sizeof(TQIncreaseSkillPoint));
}
void CDNDBConnection::QueryDecreaseSkillPoint(CDNUserSession *pSession, USHORT wSkillPoint, int nSkillPage)
{
TQDecreaseSkillPoint Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nDecreaseSkillPoint = wSkillPoint;
Update.iChannelID = pSession->GetChannelID();
Update.iMapID = pSession->GetMapIndex();
Update.cSkillPage = (char)nSkillPage;
AddSendData(MAINCMD_SKILL, QUERY_DECREASESKILLPOINT, (char*)&Update, sizeof(Update));
}
void CDNDBConnection::QueryDelSkill(CDNUserSession *pSession, int nSkillID, char cSkillChangeCode, bool bSkillPointBack, int nSkillPage)
{
TQDelSkill Update;
memset(&Update, 0, sizeof(TQDelSkill));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nSkillID = nSkillID;
Update.cSkillChangeCode = cSkillChangeCode;
Update.bSkillPointBack = bSkillPointBack;
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.cSkillPage = (char)nSkillPage;
AddSendData(MAINCMD_SKILL, QUERY_DELSKILL, (char*)&Update, sizeof(TQDelSkill));
}
void CDNDBConnection::QueryResetSkill(CDNUserSession *pSession, int nSkillPage)
{
TQResetSkill Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nChannelID = pSession->GetChannelID();
Update.nMapID = pSession->GetMapIndex();
Update.cSkillPage = (char)nSkillPage;
AddSendData(MAINCMD_SKILL, QUERY_RESETSKILL, (char*)&Update, sizeof(TQResetSkill));
}
void CDNDBConnection::QueryResetSkillBySkillIDs( CDNUserSession *pSession, std::vector<int>& vSkillIDs )
{
_ASSERT( vSkillIDs.size() < SKILLMAX );
TQResetSkillBySkillIDS TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iChannelID = pSession->GetChannelID();
TxPacket.iMapID = pSession->GetMapIndex();
TxPacket.cSkillPage = pSession->GetSkillPage();
for( UINT i=0 ; i<vSkillIDs.size() ; ++i )
TxPacket.iSkillIDs[i] = vSkillIDs[i];
AddSendData(MAINCMD_SKILL, QUERY_RESETSKILLBYSKILLIDS, (char*)&TxPacket, sizeof(TxPacket));
}
void CDNDBConnection::QueryUseExpandSkillPage( CDNUserSession *pSession, int *nSkillArray, short wSkillPoint)
{
TQUseExpandSkillPage TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.wSkillPoint = wSkillPoint;
memcpy(TxPacket.nSkillArray, nSkillArray, sizeof(int) * DEFAULTSKILLMAX);
AddSendData(MAINCMD_SKILL, QUERY_USEEXPANDSKILLPAGE, (char*)&TxPacket, sizeof(TxPacket));
}
void CDNDBConnection::QuerySetSkillPoint(CDNUserSession *pSession, USHORT wSkillPoint, int nSkillPage/*=0*/ )
{
TQSetSkillPoint Update;
memset( &Update, 0, sizeof(Update) );
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.nSkillPoint = wSkillPoint;
Update.cSkillPage = (char)nSkillPage;
AddSendData(MAINCMD_SKILL, QUERY_SETSKILLPOINT, (char*)&Update, sizeof(Update));
}
//#########################################################################################################################################
// MAINCMD_ITEM
//#########################################################################################################################################
void CDNDBConnection::QueryAddMaterializedItem(CDNUserSession *pSession, BYTE cItemSlotIndex, char cAddMaterializedItemCode, INT64 biFKey, const TItem &AddItem, INT64 biItemPrice,
INT64 biSenderCharacterDBID, BYTE cItemLocationCode, BYTE cPayMethodCode, bool bMerge, INT64 biMergeTargetItemSerial, TVehicle *pVehicleEquip/* = NULL*/)
{
TQAddMaterializedItem Item;
memset(&Item, 0, sizeof(TQAddMaterializedItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.cItemLocationIndex = cItemSlotIndex;
Item.Code = (DBDNWorldDef::AddMaterializedItem::eCode)cAddMaterializedItemCode;
Item.biFKey = biFKey;
Item.AddItem = AddItem;
Item.bStackableFlag = (g_pDataManager->GetItemOverlapCount(Item.AddItem.nItemID) == 1) ? false : true;
Item.biItemPrice = biItemPrice;
Item.biSenderCharacterDBID = biSenderCharacterDBID;
Item.cItemLocationCode = cItemLocationCode;
Item.cPayMethodCode = cPayMethodCode;
Item.iChannelID = pSession->GetChannelID();
Item.iMapIndex = pSession->GetMapIndex();
_wcscpy( Item.wszIP, _countof(Item.wszIP), pSession->GetIpW(), IPLENMAX );
Item.bMerge = bMerge;
Item.biMergeTargetItemSerial = biMergeTargetItemSerial;
if(pVehicleEquip){
Item.dwPetPartsColor1 = pVehicleEquip->dwPartsColor1;
Item.dwPetPartsColor2 = pVehicleEquip->dwPartsColor2;
Item.nPetSkillID1 = pVehicleEquip->nSkillID1;
Item.nPetSkillID2 = pVehicleEquip->nSkillID2;
for (int i = Vehicle::Slot::Saddle; i < Vehicle::Slot::Max; i++){
if(pVehicleEquip->Vehicle[i].nItemID <= 0) continue;
Item.PetList[Item.cPetCount].cSlotIndex = i;
Item.PetList[Item.cPetCount].nItemID = pVehicleEquip->Vehicle[i].nItemID;
Item.PetList[Item.cPetCount].biItemSerial = pVehicleEquip->Vehicle[i].nSerial;
Item.cPetCount++;
}
}
AddSendData(MAINCMD_ITEM, QUERY_ADDITEM, (char*)&Item, sizeof(TQAddMaterializedItem) - sizeof(Item.PetList) +(sizeof(DBPacket::TAddMaterializedPet) * Item.cPetCount));
}
void CDNDBConnection::QueryUseItem(CDNUserSession *pSession, char cUseItemCode, INT64 biItemSerial, short wUsedItemCount, bool bAllFlag, int iTargetLogItemID/*=0*/, char cTargetLogItemLevel/*=0*/ )
{
return QueryUseItemEx(pSession->GetDBThreadID(), pSession->GetWorldSetID(), pSession->GetAccountDBID(), cUseItemCode, biItemSerial, wUsedItemCount, pSession->GetChannelID(), pSession->GetMapIndex(),
pSession->GetIpW(), bAllFlag, iTargetLogItemID, cTargetLogItemLevel);
}
void CDNDBConnection::QueryUseItemEx(BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, char cUseItemCode, INT64 biItemSerial, short wUsedItemCount, int nChannelID, int nMapID, const WCHAR* pwszIP, bool bAllFlag, int iTargetLogItemID/*=0*/, char cTargetLogItemLevel/*=0*/)
{
TQUseItem Item;
memset(&Item, 0, sizeof(TQUseItem));
Item.cThreadID = cThreadID;
Item.cWorldSetID = nWorldSetID;
Item.nAccountDBID = nAccountDBID;
Item.Code = (DBDNWorldDef::UseItem::eUseItemCode)cUseItemCode;
Item.biItemSerial = biItemSerial;
Item.nUsedItemCount = wUsedItemCount;
Item.iChannelID = nChannelID;
Item.iMapID = nMapID;
_wcscpy( Item.wszIP, _countof(Item.wszIP), pwszIP, IPLENMAX );
Item.bAllFlag = bAllFlag;
Item.iTargetLogItemID = iTargetLogItemID;
Item.cTargetLogItemLevel = cTargetLogItemLevel;
AddSendData(MAINCMD_ITEM, QUERY_USEITEM, (char*)&Item, sizeof(TQUseItem));
}
void CDNDBConnection::QueryResellItem(CDNUserSession *pSession, INT64 biItemSerial, short wItemCount, INT64 biResellPrice, bool bAllFlag, bool bRebuyFlag, bool bBelongFlag)
{
TQResellItem Item;
memset(&Item, 0, sizeof(TQResellItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.biItemSerial = biItemSerial;
Item.nItemCount = wItemCount;
Item.biResellPrice = biResellPrice;
Item.iNpcID = pSession->m_nClickedNpcID;
Item.iChannelID = pSession->GetChannelID();
Item.iMapID = pSession->GetMapIndex();
_wcscpy( Item.wszIP, _countof(Item.wszIP), pSession->GetIpW(), IPLENMAX );
Item.bAllFlag = bAllFlag;
Item.bRebuyFlag = bRebuyFlag;
#ifdef PRE_MOD_SELL_SEALEDITEM
Item.bBelongFlag = bBelongFlag;
#endif //#ifdef PRE_MOD_SELL_SEALEDITEM
AddSendData(MAINCMD_ITEM, QUERY_RESELLITEM, (char*)&Item, sizeof(TQResellItem));
}
void CDNDBConnection::QueryEnchantItem(CDNUserSession *pSession, INT64 biItemSerial, INT64 biCoin, bool bEnchantSuccessFlag, bool bItemDestroyFlag, BYTE cCurrentItemLevel, int nCurrentItemPotential,
TItem *pNewItem, int nSupportItemID, std::vector<TItemInfo> &VecItemList, INT64 biExtractItemSN)
{
TQEnchantItem Item;
memset(&Item, 0, sizeof(TQEnchantItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biItemSerial = biItemSerial;
Item.biCoin = biCoin;
Item.bEnchantSuccessFlag = bEnchantSuccessFlag;
Item.bItemDestroyFlag = bItemDestroyFlag;
Item.cCurrentItemLevel = cCurrentItemLevel;
Item.cCurrentItemPotential = nCurrentItemPotential;
Item.iChannelID = pSession->GetChannelID();
Item.iMapID = pSession->GetMapIndex();
Item.iNpcID = pSession->m_nClickedNpcID;
//Optional
if(pNewItem) Item.NewItem = *pNewItem;
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.nSupportItemID = nSupportItemID;
#if defined(PRE_ADD_EXCHANGE_ENCHANT)
Item.biExtractItemSerial = biExtractItemSN;
#endif
if(!VecItemList.empty()){
Item.cMaterialCount = (BYTE)VecItemList.size();
for (int i = 0; i <(int)VecItemList.size(); i++){
Item.MaterialArray[i].wCount = VecItemList[i].Item.wCount;
Item.MaterialArray[i].biSerial = VecItemList[i].Item.nSerial;
}
}
int nLen = sizeof(TQEnchantItem) - sizeof(Item.MaterialArray) +(sizeof(DBPacket::TItemCountInfo) * Item.cMaterialCount);
AddSendData(MAINCMD_ITEM, QUERY_ENCHANTITEM, (char*)&Item, nLen);
}
void CDNDBConnection::QueryChangeItemLocation(CDNUserSession *pSession, INT64 biBeforeItemSerial, INT64 biBeforeNewItemSerial, int nBeforeItemID, char cAfterItemLocationCode, BYTE cAfterItemSlotIndex, short wBeforeItemCount,
bool bMerge, INT64 biMergeTargetItemSerial, bool bMergeAll, bool bVehicleParts/* = false*/, INT64 biVehicleItemSerial/* = 0*/, char cVehicleSlotIndex/* = 0*/, int nGoldFee)
{
TQChangeItemLocation Item;
memset(&Item, 0, sizeof(TQChangeItemLocation));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.biItemSerial = biBeforeItemSerial;
Item.biNewItemSerial = (biBeforeItemSerial == biBeforeNewItemSerial) ? 0 : biBeforeNewItemSerial;
Item.iItemID = nBeforeItemID;
Item.Code = (DBDNWorldDef::ItemLocation::eCode)cAfterItemLocationCode;
Item.cItemLocationIndex = cAfterItemSlotIndex;
Item.nItemCount = wBeforeItemCount;
Item.iChannelID = pSession->GetChannelID();
Item.iMapID = pSession->GetMapIndex();
Item.bMerge = bMerge;
Item.biMergeTargetItemSerial = biMergeTargetItemSerial;
Item.bMergeAll = bMergeAll;
Item.bVehicleParts = bVehicleParts;
Item.biVehicleSerial = biVehicleItemSerial;
Item.cVehicleSlotIndex = cVehicleSlotIndex;
#if defined(PRE_ADD_SERVER_WAREHOUSE)
Item.nGoldFee = nGoldFee;
#endif
AddSendData(MAINCMD_ITEM, QUERY_CHANGEITEMLOCATION, (char*)&Item, sizeof(TQChangeItemLocation));
}
void CDNDBConnection::QuerySwitchItemLocation(CDNUserSession *pSession, char cSrcCode, BYTE cSrcSlotIndex, INT64 biDestSerial, char cDestCode, BYTE cDestSlotIndex, INT64 biSrcSerial)
{
TQSwitchItemLocation Item;
memset(&Item, 0, sizeof(TQSwitchItemLocation));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.SrcCode = (DBDNWorldDef::ItemLocation::eCode)cSrcCode;
Item.cSrcSlotIndex = cSrcSlotIndex;
Item.biDestItemSerial = biDestSerial;
Item.DestCode = (DBDNWorldDef::ItemLocation::eCode)cDestCode;
Item.cDestSlotIndex = cDestSlotIndex;
Item.biSrcItemSerial = biSrcSerial;
AddSendData(MAINCMD_ITEM, QUERY_SWITCHITEMLOCATION, (char*)&Item, sizeof(TQSwitchItemLocation));
}
void CDNDBConnection::QueryModItemDurability(CDNUserSession *pSession, INT64 biTax, std::vector<INT64> &VecSerialList, std::vector<USHORT> &VecDurList, INT64 biCurrentCoin/*=0*/, INT64 biPickUpCoin/*=0*/)
{
TQModItemDurability Item;
memset(&Item, 0, sizeof(TQModItemDurability));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.biTax = biTax;
Item.iChannelID = pSession->GetChannelID();
Item.iMapID = pSession->GetMapIndex();
Item.biCurrentCoin = biCurrentCoin;
Item.biPickUpCoin = biPickUpCoin;
int nCount = 0;
if(!VecSerialList.empty()){
for (int i = 0; i <(int)VecSerialList.size(); i++){
Item.ItemDurArr[i].biSerial = VecSerialList[i];
nCount++;
}
}
if(!VecDurList.empty()){
for (int i = 0; i <(int)VecDurList.size(); i++){
Item.ItemDurArr[i].wDur = VecDurList[i];
}
}
Item.nCount = nCount;
int nLen = sizeof(TQModItemDurability) - sizeof(Item.ItemDurArr) +(sizeof(DBPacket::TDurabilityInfo) * nCount);
AddSendData(MAINCMD_ITEM, QUERY_MODITEMDURABILITY, (char*)&Item, nLen);
}
void CDNDBConnection::QueryModMaterializedItem(CDNUserSession *pSession, TItem &ModItem, int nModFieldBitmap/* = ModItemAll*/, int nEnchantJewelID/*=0*/)
{
TQModMaterializedItem Item;
memset(&Item, 0, sizeof(TQModMaterializedItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biItemSerial = ModItem.nSerial;
Item.iChannelID = pSession->GetChannelID();
Item.iMapID = pSession->GetMapIndex();
Item.iModFieldBitmap = nModFieldBitmap;
Item.nItemDurability = ModItem.wDur;
Item.cItemLevel = ModItem.cLevel;
Item.cItemPotential = ModItem.cPotential;
#if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL)
Item.cItemPotentialMoveCount = ModItem.cPotentialMoveCount;
#endif // #if defined(PRE_MOD_POTENTIAL_JEWEL_RENEWAL)
Item.bSoudBoundFlag = ModItem.bSoulbound;
Item.cSealCount = ModItem.cSealCount;
Item.cItemOption = ModItem.cOption;
_wcscpy( Item.wszIP, _countof(Item.wszIP), pSession->GetIpW(), IPLENMAX );
Item.nEnchantJewelID = nEnchantJewelID;
//Item.cDragonJewelType = ModItem.cDragonJewelType;
AddSendData(MAINCMD_ITEM, QUERY_MODITEM, (char*)&Item, sizeof(TQModMaterializedItem));
}
void CDNDBConnection::QueryExchangeProperty(CDNUserSession *pSession, DBPacket::TExchangeItem *ExchangeItemArray, INT64 biExchangeCoin, int nTax, INT64 biTargetCharacterDBID,
DBPacket::TExchangeItem *TargetExchangeItemArray, INT64 biTargetExchangeCoin, int nTargetTax, UINT uiTargetAccountDBID )
{
TQExchangeProperty Item;
memset(&Item, 0, sizeof(TQExchangeProperty));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
memcpy(Item.ExchangeItem, ExchangeItemArray, sizeof(Item.ExchangeItem));
Item.biExchangeCoin = biExchangeCoin;
Item.nExchangeTax = nTax;
Item.biTargetCharacterDBID = biTargetCharacterDBID;
memcpy(Item.TargetExchangeItem, TargetExchangeItemArray, sizeof(Item.TargetExchangeItem));
Item.biTargetExchangeCoin = biTargetExchangeCoin;
Item.nTargetExchangeTax = nTargetTax;
Item.nChannelID = pSession->GetChannelID();
Item.nMapID = pSession->GetMapIndex();
Item.uiTargetAccountDBID = uiTargetAccountDBID;
AddSendData(MAINCMD_ITEM, QUERY_EXCHANGEPROPERTY, (char*)&Item, sizeof(TQExchangeProperty));
}
void CDNDBConnection::QueryUpsEquip(CDNUserSession *pSession, int nItemLocation, int nSlotIndex, INT64 biSerial)
{
TQUpsEquip Update;
memset(&Update, 0, sizeof(TQUpsEquip));
Update.cThreadID = pSession->GetDBThreadID();
Update.cWorldSetID = pSession->GetWorldSetID();
Update.nAccountDBID = pSession->GetAccountDBID();
Update.biCharacterDBID = pSession->GetCharacterDBID();
Update.cItemLocation = nItemLocation;
Update.cEquipSlotIndex = nSlotIndex;
Update.biSerial = biSerial;
AddSendData(MAINCMD_ITEM, QUERY_UPSEQUIP, (char*)&Update, sizeof(TQUpsEquip));
}
void CDNDBConnection::QueryTakeCashEquipmentOff(CDNUserSession *pSession, int nTotalCount, int *nCashEquipIndexList)
{
TQTakeCashEquipmentOff Item;
memset(&Item, 0, sizeof(TQTakeCashEquipmentOff));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
if(nCashEquipIndexList){
Item.cCashEquipTotalCount = nTotalCount;
if(Item.cCashEquipTotalCount > CASHEQUIPMAX)
Item.cCashEquipTotalCount = CASHEQUIPMAX;
for (int i = 0; i < Item.cCashEquipTotalCount; i++){
Item.cCashEquipIndexArray[i] = nCashEquipIndexList[i];
}
}
int nLen = sizeof(TQTakeCashEquipmentOff) - sizeof(Item.cCashEquipIndexArray) +(sizeof(char) * Item.cCashEquipTotalCount);
AddSendData(MAINCMD_ITEM, QUERY_TAKECASHEQUIPMENTOFF, (char*)&Item, nLen);
}
void CDNDBConnection::QueryPutOnepieceOn(CDNUserSession *pSession, INT64 biOnepieceItemSerial, char cOnepieceEquipIndex, int nTotalCount, int *nSubCashEquipIndexList)
{
TQPutOnepieceOn Item;
memset(&Item, 0, sizeof(TQPutOnepieceOn));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.biOnepieceItemSerial = biOnepieceItemSerial;
Item.cOnepieceCashEquipIndex = cOnepieceEquipIndex;
if(nSubCashEquipIndexList){
Item.cCashEquipTotalCount = nTotalCount;
if(Item.cCashEquipTotalCount > CASHEQUIPMAX)
Item.cCashEquipTotalCount = CASHEQUIPMAX;
for (int i = 0; i < Item.cCashEquipTotalCount; i++){
Item.cSubCashEquipIndexArray[i] = nSubCashEquipIndexList[i];
}
}
int nLen = sizeof(TQPutOnepieceOn) - sizeof(Item.cSubCashEquipIndexArray) +(sizeof(char) * Item.cCashEquipTotalCount);
AddSendData(MAINCMD_ITEM, QUERY_PUTONEPIECEON, (char*)&Item, nLen);
}
void CDNDBConnection::QueryGetPageMaterializedItem(BYTE cThreadID, CDNUserSession *pSession, int nPageNumber, int nPageSize)
{
TQGetPageMaterializedItem Item;
memset(&Item, 0, sizeof(TQGetPageMaterializedItem));
Item.cThreadID = cThreadID;
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.nPageNumber = nPageNumber;
Item.nPageSize = nPageSize;
AddSendData(MAINCMD_ITEM, QUERY_GETPAGEMATERIALIZEDITEM, (char*)&Item, sizeof(TQGetPageMaterializedItem));
}
void CDNDBConnection::QueryGetPageVehicle(CDNUserSession *pSession, int nPageNumber, int nPageSize)
{
TQGetPageVehicle Item;
memset(&Item, 0, sizeof(TQGetPageVehicle));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.nPageNumber = nPageNumber;
Item.nPageSize = nPageSize;
AddSendData(MAINCMD_ITEM, QUERY_GETPAGEVEHICLE, (char*)&Item, sizeof(TQGetPageVehicle));
}
void CDNDBConnection::QueryModPetSkinColor(CDNUserSession *pSession, INT64 biBodySerial, DWORD dwColor, DWORD dwColor2)
{
TQModPetSkinColor Item;
memset(&Item, 0, sizeof(TQModPetSkinColor));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biBodySerial = biBodySerial;
Item.dwSkinColor = dwColor;
Item.dwSkinColor2 = dwColor2;
AddSendData(MAINCMD_ITEM, QUERY_MODPETSKINCOLOR, (char*)&Item, sizeof(TQModPetSkinColor));
}
void CDNDBConnection::QueryDelPetEquipment(CDNUserSession *pSession, INT64 biBodySerial, INT64 biPartsSerial)
{
TQDelPetEquipment Item;
memset(&Item, 0, sizeof(TQDelPetEquipment));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biBodySerial = biBodySerial;
Item.biPartsSerial = biPartsSerial;
_wcscpy(Item.wszIp, _countof(Item.wszIp), pSession->GetIpW(), IPLENMAX);
AddSendData(MAINCMD_ITEM, QUERY_DELPETEQUIPMENT, (char*)&Item, sizeof(TQDelPetEquipment));
}
void CDNDBConnection::QueryRecoverMissingItem(CDNUserSession *pSession, char cItemLocationCode, BYTE cSlotIndex, TItem &RecoverItem)
{
TQRecoverMissingItem Item;
memset(&Item, 0, sizeof(TQRecoverMissingItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.cItemLocationCode = cItemLocationCode;
Item.cSlotIndex = cSlotIndex;
Item.RecoverItem = RecoverItem;
AddSendData(MAINCMD_ITEM, QUERY_RECOVERMISSINGITEM, (char*)&Item, sizeof(TQRecoverMissingItem));
}
void CDNDBConnection::QueryAddEffectItems(CDNUserSession *pSession, int iItemID, char cLifeSpanRenewal, DBDNWorldDef::EffectItemGetCode::eCode Code, INT64 biFkey,
int iPrice, bool bEnternityFlag, int iLifeSpan, INT64 biItemSerial, int iRemoveItemID)
{
TQAddEffectItems Item;
memset(&Item, 0, sizeof(TQAddEffectItems));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.iItemID = iItemID;
Item.cItemLifeSpanRenewal = cLifeSpanRenewal;
Item.Code = Code;
Item.biFKey = biFkey;
Item.iPrice;
Item.bEternityFlag = bEnternityFlag;
Item.iItemLifeSpan = iLifeSpan;
Item.biItemSerial = biItemSerial;
Item.iRemoveItemID = iRemoveItemID;
AddSendData(MAINCMD_ITEM, QUERY_ADDEFFECTITEMS, (char*)&Item, sizeof(TQAddEffectItems));
}
void CDNDBConnection::QueryModAdditiveItem(CDNUserSession *pSession, INT64 biItemSerial, int iAdditiveItemID, INT64 biAdditiveSerial, INT64 biMixItemSerial)
{
TQModAdditiveItem Item;
memset(&Item, 0, sizeof(TQModAdditiveItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.nAdditiveItemID = iAdditiveItemID;
Item.biItemSerial = biItemSerial;
Item.biAdditiveSerial = biAdditiveSerial;
Item.biMixItemSerial = biMixItemSerial;
Item.nMapID = pSession->GetMapIndex();
_wcscpy(Item.wszIP, _countof(Item.wszIP), pSession->GetIpW(), (int)wcslen(pSession->GetIpW()));
AddSendData(MAINCMD_ITEM, QUERY_MODADDITIVEITEM, (char*)&Item, sizeof(TQModAdditiveItem));
}
#if defined (PRE_ADD_COSRANDMIX)
void CDNDBConnection::QueryModRandomItem(CDNUserSession *pSession, INT64 biStuffSerialA, INT64 biStuffSerialB, INT64 biMixItemSerial, short wMixItemCount, TItem &RandomItem, INT64 biFee)
{
TQModRandomItem Item;
memset(&Item, 0, sizeof(TQModRandomItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
Item.biStuffSerialA = biStuffSerialA;
Item.biStuffSerialB = biStuffSerialB;
Item.biMixItemSerial = biMixItemSerial;
Item.wMixItemCount = wMixItemCount;
Item.biFee = biFee;
Item.Code = DBDNWorldDef::AddMaterializedItem::CostumeRandomMixItem;
Item.RandomItem = RandomItem;
Item.cItemLocationCode = DBDNWorldDef::ItemLocation::CashInventory;
Item.nChannelID = pSession->GetChannelID();
Item.nMapIndex = pSession->GetMapIndex();
_wcscpy( Item.wszIP, _countof(Item.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData(MAINCMD_ITEM, QUERY_MODRANDOMITEM, (char*)&Item, sizeof(TQModRandomItem));
}
#endif
void CDNDBConnection::QuerySaveItemLocationIndex(CDNUserSession *pSession)
{
TQSaveItemLocationIndex Item;
memset(&Item, 0, sizeof(TQSaveItemLocationIndex));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
Item.biCharacterDBID = pSession->GetCharacterDBID();
pSession->GetItem()->GetIndexSerialList(Item.nTotalInvenWareCount, Item.SaveList);
AddSendData(MAINCMD_ITEM, QUERY_SAVEITEMLOCATIONINDEX, (char*)&Item, sizeof(TQSaveItemLocationIndex) - sizeof(Item.SaveList) +(sizeof(DBPacket::TItemIndexSerial) * Item.nTotalInvenWareCount));
}
void CDNDBConnection::QueryGetListRepurchaseItem( CDNUserSession *pSession )
{
TQGetListRepurchaseItem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_ITEM, QUERY_GETLIST_REPURCHASEITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDelExpireitem( BYTE cThreadID, int nWorldSetID, UINT uiAccountDBID, INT64 biCharacterDBID )
{
TQDelExpiritem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
AddSendData( MAINCMD_ITEM, QUERY_DELEXPIREITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDelCashItem(CDNUserSession *pSession, const TItem *pDelItem)
{
TQDelCashItem Item;
memset(&Item, 0, sizeof(TQDelCashItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
if (pDelItem){
Item.biItemSerial = pDelItem->nSerial;
Item.wCount = pDelItem->wCount;
//if (pDelItem->nLifespan > REMOVECASHWAITINGTIME)
if (pDelItem->nLifespan > REMOVECASHWAITINGTIME || pDelItem->bEternity == true ) // #55004 [캐시삭제] 특정 아이템 삭제 시도시 삭제 대기일 0일로 표시됨
Item.nWatingTime = REMOVECASHWAITINGTIME;
else
Item.nWatingTime = pDelItem->nLifespan;
}
AddSendData(MAINCMD_ITEM, QUERY_DELCASHITEM, reinterpret_cast<char*>(&Item), sizeof(TQDelCashItem) );
}
void CDNDBConnection::QueryRecoverCashItem(CDNUserSession *pSession, const TItem *pRecoverItem)
{
TQRecoverCashItem Item;
memset(&Item, 0, sizeof(TQRecoverCashItem));
Item.cThreadID = pSession->GetDBThreadID();
Item.cWorldSetID = pSession->GetWorldSetID();
Item.nAccountDBID = pSession->GetAccountDBID();
if (pRecoverItem){
Item.biItemSerial = pRecoverItem->nSerial;
Item.wCount = pRecoverItem->wCount;
}
AddSendData(MAINCMD_ITEM, QUERY_RECOVERCASHITEM, reinterpret_cast<char*>(&Item), sizeof(TQRecoverCashItem) );
}
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
void CDNDBConnection::QueryCheckNamedItemCount(CDNUserSession *pSession, int nItemID, BYTE cIndex)
{
TQCheckNamedItemCount NamedItemCount;
memset(&NamedItemCount, 0, sizeof(TQCheckNamedItemCount));
NamedItemCount.cThreadID = pSession->GetDBThreadID();
NamedItemCount.cWorldSetID = pSession->GetWorldSetID();
NamedItemCount.nAccountDBID = pSession->GetAccountDBID();
NamedItemCount.nItemID = nItemID;
NamedItemCount.cIndex = cIndex;
AddSendData(MAINCMD_ITEM, QUERY_CHECK_NAMEDITEMCOUNT, reinterpret_cast<char*>(&NamedItemCount), sizeof(TQCheckNamedItemCount) );
}
void CDNDBConnection::QueryCheatCheckNamedItemCount(CDNUserSession *pSession, int nItemID, BYTE cIndex)
{
TQCheckNamedItemCount NamedItemCount;
memset(&NamedItemCount, 0, sizeof(TQCheckNamedItemCount));
NamedItemCount.cThreadID = pSession->GetDBThreadID();
NamedItemCount.cWorldSetID = pSession->GetWorldSetID();
NamedItemCount.nAccountDBID = pSession->GetAccountDBID();
NamedItemCount.nItemID = nItemID;
NamedItemCount.cIndex = cIndex;
AddSendData(MAINCMD_ITEM, QUERY_CHEATCHECK_NAMEDITEMCOUNT, reinterpret_cast<char*>(&NamedItemCount), sizeof(TQCheckNamedItemCount) );
}
#endif
#if defined (PRE_ADD_EXCHANGE_POTENTIAL)
void CDNDBConnection::QueryMovePotential(CDNUserSession * pSession, INT64 biExtractSerial, char cExtractPotential, INT64 biInjectSerial, char cInjectPotential, char cMoveableLimitCount, int nMapID)
{
if (pSession == NULL) return;
TQMovePotential packet;
memset(&packet, 0, sizeof(TQMovePotential));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.biExtractSerial = biExtractSerial;
packet.cExtractPotential = cExtractPotential;
packet.biInjectSerial = biInjectSerial;
packet.cInjectPotential = cInjectPotential;
packet.cMoveableLimitCount = cMoveableLimitCount;
packet.nMapID = nMapID;
AddSendData(MAINCMD_ITEM, QUERY_MOVEPOTENTIAL, reinterpret_cast<char*>(&packet), sizeof(TQMovePotential));
}
#endif //#if defined (PRE_ADD_EXCHANGE_POTENTIAL)
#if defined( PRE_ADD_LIMITED_SHOP )
void CDNDBConnection::QueryGetLimitedShopItem(BYTE cThreadID, CDNUserSession *pSession)
{
TQGetLimitedShopItem packet;
memset(&packet, 0, sizeof(TQGetLimitedShopItem));
packet.cThreadID = cThreadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_ITEM, QUERY_GETLIMITEDSHOPITEM, reinterpret_cast<char*>(&packet), sizeof(TQGetLimitedShopItem));
}
void CDNDBConnection::QueryAddLimitedShopItem(CDNUserSession * pSession, LimitedShop::LimitedItemData ItemData, int nBuyCount)
{
TQAddLimitedShopItem packet;
memset(&packet, 0, sizeof(TQAddLimitedShopItem));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.ItemData = ItemData;
packet.nBuyCount = nBuyCount;
AddSendData(MAINCMD_ITEM, QUERY_ADDLIMITEDSHOPITEM, reinterpret_cast<char*>(&packet), sizeof(TQAddLimitedShopItem));
}
void CDNDBConnection::QueryResetLimitedShopItem(CDNUserSession * pSession, int nResetCycle)
{
TQResetLimitedShopItem packet;
memset(&packet, 0, sizeof(TQResetLimitedShopItem));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nResetCycle = nResetCycle;
AddSendData(MAINCMD_ITEM, QUERY_RESETLIMITEDSHOPITEM, reinterpret_cast<char*>(&packet), sizeof(TQResetLimitedShopItem));
}
#endif //#if defined( PRE_ADD_LIMITED_SHOP )
void CDNDBConnection::QueryDelEffectItem( CDNUserSession * pSession, INT64 nItemSerial )
{
TQDelEffectItem packet;
memset(&packet, 0, sizeof(TQDelEffectItem));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nItemSerial = nItemSerial;
AddSendData(MAINCMD_ITEM, QUERY_DEL_EFFECTITEM, reinterpret_cast<char*>(&packet), sizeof(TQDelEffectItem));
}
#if defined(PRE_ADD_TALISMAN_SYSTEM)
void CDNDBConnection::QueryModTalismanSlotOpenFlag( CDNUserSession * pSession, int nTalismanOpenFlag )
{
TQModTalismanSlotOpenFlag packet;
memset(&packet, 0, sizeof(TQModTalismanSlotOpenFlag));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nTalismanOpenflag = nTalismanOpenFlag;
AddSendData(MAINCMD_ITEM, QUERY_MOD_TALISMANSLOTOPENFLAG, reinterpret_cast<char*>(&packet), sizeof(TQModTalismanSlotOpenFlag));
}
#endif
//#########################################################################################################################################
// MAINCMD_QUEST
//#########################################################################################################################################
void CDNDBConnection::QueryAddQuest(CDNUserSession *pSession, char cIdx, TQuest &Quest)
{
TQAddQuest packet;
memset(&packet, 0, sizeof(TQAddQuest));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.cIdx = cIdx;
packet.Quest = Quest;
AddSendData(MAINCMD_QUEST, QUERY_ADDQUEST, (char*)&packet, sizeof(TQAddQuest));
}
void CDNDBConnection::QueryDelQuest(CDNUserSession *pSession, char cIdx, int nQuestID, bool bComplete, bool bRepeat, char *CompleteQuestArray)
{
TQDelQuest packet;
memset(&packet, 0, sizeof(TQDelQuest));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.cIdx = cIdx;
packet.nQuestID = nQuestID;
packet.bComplete = bComplete;
packet.bRepeat = bRepeat;
memcpy(packet.CompleteQuest, CompleteQuestArray, COMPLETEQUEST_BITSIZE);
AddSendData(MAINCMD_QUEST, QUERY_DELQUEST, (char*)&packet, sizeof(TQDelQuest));
}
void CDNDBConnection::QueryModQuest(CDNUserSession *pSession, char cIdx, TQuest &Quest, char cQuestStatusCode)
{
TQModQuest packet;
memset( &packet, 0, sizeof(packet) );
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.cIndex = cIdx;
packet.Quest = Quest;
packet.cQuestStatusCode = cQuestStatusCode;
AddSendData(MAINCMD_QUEST, QUERY_MODQUEST, (char*)&packet, sizeof(TQModQuest));
}
void CDNDBConnection::QueryClearQuest(CDNUserSession *pSession)
{
TQClearQuest packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_QUEST, QUERY_CLEARQUEST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryForceCompleteQuest(CDNUserSession *pSession, int nQuestID, int nQuestCode, char *pCompleteQuestArray)
{
TQForceCompleteQuest packet;
memset(&packet, 0, sizeof(packet));
packet.Set(pSession->GetDBThreadID(), pSession->GetWorldSetID(), pSession->GetAccountDBID(), pSession->GetCharacterDBID(), nQuestID, nQuestCode, pCompleteQuestArray);
AddSendData(MAINCMD_QUEST, QUERY_FORCECOMPLETEQUEST, (char*)&packet, packet.GetSize());
}
void CDNDBConnection::QueryGetListCompleteEventQuest(CDNUserSession *pSession)
{
TQGetListCompleteEventQuest packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_QUEST, QUERY_GET_LISTCOMPLETE_EVENTQUEST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryCompleteEventQuest(CDNUserSession *pSession, int nScheduleID, __time64_t tExpireDate)
{
TQCompleteEventQuest packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nScheduleID = nScheduleID;
packet.tExpireDate = tExpireDate;
AddSendData(MAINCMD_QUEST, QUERY_COMPLETE_EVENTQUEST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetWorldEventQuestCounter(BYTE cThreadID, int nWorldSetID, int nScheduleID)
{
TQGetWorldEventQuestCounter packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.nScheduleID = nScheduleID;
AddSendData(MAINCMD_QUEST, QUERY_GET_WORLDEVENTQUESTCOUNTER, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryModWorldEventQuestCounter(CDNUserSession *pSession, int nScheduleID, int nCounterDelta)
{
TQModWorldEventQuestCounter packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nScheduleID = nScheduleID;
packet.nCounterDelta = nCounterDelta;
AddSendData(MAINCMD_QUEST, QUERY_MOD_WORLDEVENTQUESTCOUNTER, (char*)&packet, sizeof(packet));
}
//#########################################################################################################################################
// MAINCMD_FRIEND
//#########################################################################################################################################
void CDNDBConnection::QueryFriendList(BYTE cThreadID, CDNUserSession *pSession)
{
TQFriendList packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_FRIEND, QUERY_FRIENDLIST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGroup(CDNUserSession *pSession, WCHAR *pGroupName)
{
TQAddGroup Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
if(pGroupName) _wcscpy(Friend.wszGroupName, FRIEND_GROUP_NAMELENMAX, pGroupName, (int)wcslen(pGroupName));
Friend.nGroupCountLimit = FRIEND_GROUP_MAX;
AddSendData(MAINCMD_FRIEND, QUERY_ADDGROUP, (char*)&Friend, sizeof(Friend));
}
void CDNDBConnection::QueryModGroupName(CDNUserSession *pSession, int nGroupDBID, WCHAR *pGroupName)
{
TQModGroupName Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
Friend.nGroupDBID = nGroupDBID;
if(pGroupName) _wcscpy(Friend.wszGroupName, FRIEND_GROUP_NAMELENMAX, pGroupName, (int)wcslen(pGroupName));
AddSendData(MAINCMD_FRIEND, QUERY_MODGROUPNAME, (char*)&Friend, sizeof(Friend));
}
void CDNDBConnection::QueryDelGroup(CDNUserSession *pSession, int nGroupDBID)
{
TQDelGroup Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
Friend.nGroupDBID = nGroupDBID;
AddSendData(MAINCMD_FRIEND, QUERY_DELGROUP, (char*)&Friend, sizeof(Friend));
}
void CDNDBConnection::QueryModFriendAndGroupMapping(CDNUserSession *pSession, int nGroupDBID, char cCount, INT64 *biFriendCharacterDBIDs)
{
TQModFriendAndGroupMapping Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
Friend.nGroupDBID = nGroupDBID;
/*int nCount = 0;
for (int i = 0; i < FRIEND_MAXCOUNT; i++){
if(biFriendCharacterDBIDs[i] <= 0) continue;
Friend.biFriendCharacterDBIDs[i] = biFriendCharacterDBIDs[i];
nCount++;
}
Friend.cCount = nCount;*/
//상위는 필요해지면 살립니다.
Friend.biFriendCharacterDBIDs[0] = *biFriendCharacterDBIDs;
Friend.cCount = 1;
AddSendData(MAINCMD_FRIEND, QUERY_MODFRIENDANDGROUPMAPPING, (char*)&Friend, sizeof(Friend) - sizeof(Friend.biFriendCharacterDBIDs) +(sizeof(INT64) * Friend.cCount));
}
void CDNDBConnection::QueryAddFriend(CDNUserSession *pSession, WCHAR *pFriendName, int nGroupDBID)
{
TQAddFriend Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
if(pFriendName) _wcscpy(Friend.wszFriendName, NAMELENMAX, pFriendName, (int)wcslen(pFriendName));
Friend.nFriendCountLimit = FRIEND_MAXCOUNT;
Friend.nGroupDBID = nGroupDBID;
AddSendData(MAINCMD_FRIEND, QUERY_ADDFRIEND, (char*)&Friend, sizeof(Friend));
}
void CDNDBConnection::QueryModFriendMemo(CDNUserSession *pSession, INT64 biFriendCharacterDBID, WCHAR *pMemo)
{
TQModFriendMemo Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
Friend.biFriendCharacterDBID = biFriendCharacterDBID;
if(pMemo) _wcscpy(Friend.wszMemo, FRIEND_MEMO_LEN_MAX, pMemo, (int)wcslen(pMemo));
AddSendData(MAINCMD_FRIEND, QUERY_MODFRIENDMEMO, (char*)&Friend, sizeof(Friend));
}
void CDNDBConnection::QueryDelFriend(CDNUserSession *pSession, char cCount, INT64 *biFriendCharacterDBIDs)
{
TQDelFriend Friend;
memset( &Friend, 0, sizeof(Friend) );
Friend.cThreadID = pSession->GetDBThreadID();
Friend.cWorldSetID = pSession->GetWorldSetID();
Friend.nAccountDBID = pSession->GetAccountDBID();
Friend.biCharacterDBID = pSession->GetCharacterDBID();
/*int nCount = 0;
for (int i = 0; i < cCount; i++){
if(biFriendCharacterDBIDs[i] <= 0) continue;
Friend.biFriendCharacterDBIDs[i] = biFriendCharacterDBIDs[i];
nCount++;
}
Friend.cCount = nCount;*/
//복수개로 지우는 ui가 생기면 위에 주석 풀자
Friend.biFriendCharacterDBIDs[0] = *biFriendCharacterDBIDs;
Friend.cCount = 1;
AddSendData(MAINCMD_FRIEND, QUERY_DELFRIEND, (char*)&Friend, sizeof(Friend) - sizeof(Friend.biFriendCharacterDBIDs) +(sizeof(INT64) * Friend.cCount));
}
//#########################################################################################################################################
// MAINCMD_GUILD
//#########################################################################################################################################
void CDNDBConnection::QueryDismissGuild(CDNUserSession *pSession)
{
TQDismissGuild Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nCharacterDBID = pSession->GetCharacterDBID();
Packet.nGuildDBID = pSession->GetGuildUID().nDBID;
AddSendData(MAINCMD_GUILD, QUERY_DISMISSGUILD, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetGuildHistoryList(CDNUserSession *pSession, INT64 biIndex, bool bDirection)
{
TQGetGuildHistoryList Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nCharacterDBID = pSession->GetCharacterDBID();
Packet.nGuildDBID = pSession->GetGuildUID().nDBID;
Packet.biIndex = biIndex;
Packet.bDirection = bDirection;
AddSendData(MAINCMD_GUILD, QUERY_GETGUILDHISTORYLIST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryCreateGuild(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, LPCWSTR wszGuildName, int nMapIndex, char cLevel, int nEstablishExpense, char cWorldSetID, int wGuildRoleAuth[GUILDROLE_TYPE_CNT])
{
TQCreateGuild Packet;
memset(&Packet, 0, sizeof(TQCreateGuild));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nReqAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.nCharacterDBID = nReqCharacterDBID;
_wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), wszGuildName, (int)wcslen(wszGuildName));
memcpy(Packet.wGuildRoleAuth, wGuildRoleAuth, sizeof(Packet.wGuildRoleAuth));
Packet.nMapID = nMapIndex;
Packet.nEstablishExpense = nEstablishExpense;
Packet.cLevel = cLevel;
AddSendData(MAINCMD_GUILD, QUERY_CREATEGUILD, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryDelGuildMember(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nDelAccountDBID, INT64 nDelCharacterDBID, UINT nGuildDBID, char cLevel, char cWorldSetID, bool bIsExiled, bool bGraduateBeginnerGuild)
{
TQDelGuildMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nReqAccountDBID = nReqAccountDBID;
Packet.nReqCharacterDBID = nReqCharacterDBID;
Packet.nDelAccountDBID = nDelAccountDBID;
Packet.nDelCharacterDBID = nDelCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.bIsExiled = bIsExiled;
Packet.cLevel = cLevel;
#ifdef PRE_ADD_BEGINNERGUILD
Packet.bIsGraduateBeginnerGuild = bGraduateBeginnerGuild;
#endif //#ifdef PRE_ADD_BEGINNERGUILD
AddSendData(MAINCMD_GUILD, QUERY_DELGUILDMEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddGuildMember(BYTE cThreadID, UINT nAccountDBID, INT64 nCharacterDBID, UINT nGuildDBID, char cLevel, char cWorldSetID, short wGuildSize)
{
TQAddGuildMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cLevel = cLevel;
Packet.wGuildSize = wGuildSize;
AddSendData(MAINCMD_GUILD, QUERY_ADDGUILDMEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGuildInviteMember(BYTE cThreadID, UINT nAccountDBID, UINT nGuildDBID, char cWorldSetID, UINT nToSessionID, bool bNeedMembList)
{
TQInviteGuildMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.GuildInfo.cThreadID = cThreadID;
Packet.GuildInfo.cWorldSetID = cWorldSetID;
Packet.GuildInfo.nAccountDBID = nAccountDBID;
Packet.GuildInfo.bNeedMembList = bNeedMembList;
Packet.GuildInfo.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_INVITEGUILDMEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryMoveItemInGuildWare(BYTE cThreadID, UINT nAccountDBID, char cWorldSetID, TQMoveItemInGuildWare* pMove)
{
pMove->nAccountDBID = nAccountDBID;
pMove->cWorldSetID = cWorldSetID;
pMove->cThreadID = cThreadID;
AddSendData(MAINCMD_GUILD, QUERY_MOVE_ITEM_IN_GUILDWARE, (char*)pMove, sizeof(TQMoveItemInGuildWare));
}
void CDNDBConnection::QueryMoveInvenToGuildWare(BYTE cThreadID, UINT nAccountDBID, char cWorldSetID, TQMoveInvenToGuildWare* pMove)
{
pMove->nAccountDBID = nAccountDBID;
pMove->cWorldSetID = cWorldSetID;
pMove->cThreadID = cThreadID;
AddSendData(MAINCMD_GUILD, QUERY_MOVE_INVEN_TO_GUILDWARE, (char*)pMove, sizeof(TQMoveInvenToGuildWare));
}
void CDNDBConnection::QueryMoveGuildWareToInven(BYTE cThreadID, UINT nAccountDBID, char cWorldSetID, TQMoveGuildWareToInven* pMove)
{
pMove->nAccountDBID = nAccountDBID;
pMove->cWorldSetID = cWorldSetID;
pMove->cThreadID = cThreadID;
AddSendData(MAINCMD_GUILD, QUERY_MOVE_GUILDWARE_TO_INVEN, (char*)pMove, sizeof(TQMoveGuildWareToInven));
}
void CDNDBConnection::QueryGuildWarehouseCoin(BYTE cThreadID, UINT nAccountDBID, char cWorldSetID, TQGuildWareHouseCoin* pPacket)
{
pPacket->nAccountDBID = nAccountDBID;
pPacket->cWorldSetID = cWorldSetID;
pPacket->cThreadID = cThreadID;
AddSendData(MAINCMD_GUILD, QUERY_GUILDWARE_COIN, (char*)pPacket, sizeof(TQMoveGuildWareToInven));
}
void CDNDBConnection::QueryGetGuildWareInfo(BYTE cThreadID, UINT nGuildDBID, char cWorldSetID, short wMaxCount)
{
DN_ASSERT(GUILDDBID_DEF != nGuildDBID, "Invalid!");
DN_ASSERT(0 != cWorldSetID, "Invalid!");
TQGetGuildWareInfo Packet;
Packet.cThreadID = cThreadID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.wMaxCount = wMaxCount;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWAREINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QuerySetGuildWareInfo(BYTE cTheadID, UINT nGuildDBID, char cWorldSetID, BYTE cSlotCount, TGuildWareSlot* pWareSlot)
{
TQSetGuildWareInfo Packet;
Packet.cThreadID = cTheadID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.cSlotListCount = cSlotCount;
memcpy(Packet.WareSlotList, pWareSlot, sizeof(TGuildWareSlot)*cSlotCount);
AddSendData(MAINCMD_GUILD, QUERY_SET_GUILDWAREINFO, (char*)&Packet, sizeof(Packet)-sizeof(Packet.WareSlotList) +(sizeof(TGuildWareSlot)*cSlotCount));
}
void CDNDBConnection::QueryGetGuildWareHistory(BYTE cThreadID, UINT nAccountDBID, INT64 nCharacterDBID, UINT nGuildDBID, char cWorldSetID, int nIndex)
{
DN_ASSERT(GUILDDBID_DEF != nGuildDBID, "Invalid!");
DN_ASSERT(0 != cWorldSetID, "Invalid!");
TQGetGuildWareHistory Packet;
Packet.nAccountDBID = nAccountDBID;
Packet.cThreadID = cThreadID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.nIndex = nIndex;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWAREHISTORY, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryChangeGuildInfo(BYTE cThreadID, UINT nAccountDBID, INT64 nCharacterDBID, UINT nGuildDBID, char cWorldSetID, BYTE btGuildUpdate,
int iInt1, int iInt2, int iInt3, int iInt4, INT64 biInt64, LPCWSTR pText, long nAddCommonPoint)
{
TQChangeGuildInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.btGuildUpdate = btGuildUpdate;
Packet.nAddCommonPoint = nAddCommonPoint;
Packet.nInt1 = iInt1;
Packet.nInt2 = iInt2;
Packet.nInt3 = iInt3;
Packet.nInt4 = iInt4;
Packet.biInt64 = biInt64;
if(pText) {
_wcscpy(Packet.Text, _countof(Packet.Text), pText, (int)wcslen(pText));
}
AddSendData(MAINCMD_GUILD, QUERY_CHANGEGUILDINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryChangeGuildMemberInfo(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nChgAccountDBID, INT64 nChgCharacterDBID, UINT nGuildDBID, char cWorldSetID, BYTE btGuildMemberUpdate, int iInt1, int iInt2, INT64 biInt64, LPCWSTR pText, char cLevel)
{
TQChangeGuildMemberInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.nReqAccountDBID = nReqAccountDBID;
Packet.nReqCharacterDBID = nReqCharacterDBID;
Packet.nChgAccountDBID = nChgAccountDBID;
Packet.nChgCharacterDBID = nChgCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.btGuildMemberUpdate = btGuildMemberUpdate;
Packet.nInt1 = iInt1;
Packet.nInt2 = iInt2;
Packet.biInt64 = biInt64;
if(pText)
_wcscpy(Packet.Text, _countof(Packet.Text), pText, (int)wcslen(pText));
Packet.cLevel = cLevel;
AddSendData(MAINCMD_GUILD, QUERY_CHANGEGUILDMEMBERINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryChangeGuildWareSize(BYTE cThreadID, UINT nAccountDBID, INT64 nCharacterDBID, UINT nGuildDBID, char cWorldSetID, short wSize)
{
TQChangeGuildWareSize Packet;
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.wStorageSize = wSize;
AddSendData(MAINCMD_GUILD, QUERY_CHANGEGUILDWARESIZE, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryChangeGuildMark(BYTE cThreadID, UINT nAccountDBID, INT64 nCharacterDBID, UINT nGuildDBID, char cWorldSetID, short wGuildMark, short wGuildMarkBG, short wGuildMarkBorder)
{
TQChangeGuildMark Packet;
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nAccountDBID;
Packet.nCharacterDBID = nCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.wGuildMark = wGuildMark;
Packet.wGuildMarkBG = wGuildMarkBG;
Packet.wGuildMarkBorder = wGuildMarkBorder;
AddSendData(MAINCMD_GUILD, QUERY_CHANGEGUILDMARK, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddGuildHistory(BYTE cThreadID, UINT nGuildDBID, char cWorldSetID, BYTE btHistoryType, int iInt1, int iInt2, INT64 biInt64, LPCWSTR pText)
{
TQAddGuildHistory Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.History.biIndex = 0;
Packet.History.RegDate = 0;
Packet.History.btHistoryType = btHistoryType;
Packet.History.nInt1 = iInt1;
Packet.History.nInt2 = iInt2;
Packet.History.biInt64 = biInt64;
if(pText) {
_wcscpy(Packet.History.Text, _countof(Packet.History.Text), pText, (int)wcslen(pText));
}
AddSendData(MAINCMD_GUILD, QUERY_ADDGUILDHISTORY, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetGuildInfo(CDNUserSession *pSession, UINT nGuildDBID, bool bNeedMembList)
{
TQGetGuildInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nGuildDBID = nGuildDBID;
Packet.bNeedMembList = bNeedMembList;
AddSendData(MAINCMD_GUILD, QUERY_GETGUILDINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryChangeGuildName(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, UINT nGuildDBID, LPCWSTR pGuildName, INT64 biItemSerial)
{
TQChangeGuildName Packet;
memset(&Packet, 0, sizeof(TQChangeGuildName));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nAccountDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.biItemSerial = biItemSerial;
if(pGuildName) _wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), pGuildName, (int)wcslen(pGuildName));
AddSendData(MAINCMD_GUILD, QUERY_CHANGEGUILDNAME, (char*)&Packet, sizeof(TQChangeGuildName));
}
void CDNDBConnection::QueryGetGuildRewardItem(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, UINT nGuildDBID)
{
TQGetGuildRewardItem Packet;
memset(&Packet, 0, sizeof(TQGetGuildRewardItem));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nAccountDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDREWARDITEM, (char*)&Packet, sizeof(TQGetGuildRewardItem));
}
void CDNDBConnection::QueryAddGuildRewardItem(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID, UINT nGuildDBID, int nItemID, bool bEnternityFlag, int nLifeSpan, BYTE cItemBuyType, int nNeedGold, int nMapID, int nRemoveItemID)
{
TQAddGuildRewardItem Packet;
memset(&Packet, 0, sizeof(TQAddGuildRewardItem));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.biCharacterDBID = biCharacterDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.nItemID = nItemID;
Packet.bEnternityFlag = bEnternityFlag;
Packet.nLifeSpan = nLifeSpan;
Packet.cItemBuyType = cItemBuyType;
Packet.nNeedGold = nNeedGold;
Packet.nMpaID = nMapID;
Packet.nRemoveItemID = nRemoveItemID;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDREWARDITEM, (char*)&Packet, sizeof(TQAddGuildRewardItem));
}
void CDNDBConnection::QueryChangeGuildSize(BYTE cThreadID, UINT nAccountDBID, UINT nGuildDBID, char cWorldSetID, int nGuildSize)
{
TQChangeGuildSize Packet;
memset(&Packet, 0, sizeof(TQChangeGuildSize));
Packet.cThreadID = cThreadID;
Packet.nGuildDBID = nGuildDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.nAccountDBID = nAccountDBID;
Packet.nGuildDBID = nGuildDBID;
Packet.nGuildSize = nGuildSize;
AddSendData(MAINCMD_GUILD, QUERY_CHANGE_GUILDSIZE, (char*)&Packet, sizeof(TQChangeGuildSize));
}
void CDNDBConnection::QueryCheatDelGuildEffectItem( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, UINT nGuildDBID, int nItemID )
{
TQDelGuildEffectItem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.nGuildDBID = nGuildDBID;
TxPacket.nItemID = nItemID;
AddSendData( MAINCMD_GUILD, QUERY_DEL_GUILDREWARDITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryItemExpireByCheat(BYTE cTheadID, int nWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID, INT64 biSerial)
{
TQItemExpire packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cTheadID;
packet.cWorldSetID = nWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.biCharacterDBID = biCharacterDBID;
packet.biSerial = biSerial;
AddSendData(MAINCMD_ITEM, QUERY_ITEMEXPIREBYCHEAT, (char*)&packet, sizeof(TQItemExpire));
}
void CDNDBConnection::QueryChangePetName(BYTE threadID, char worldSetID, UINT accountDBID, INT64 itemSerial, INT64 petSerial, LPCWSTR pName)
{
if (!pName)
{
_ASSERT(0);
return;
}
ALLOC_PACKET(TQChangePetName);
packet.cThreadID = threadID;
packet.cWorldSetID = worldSetID;
packet.nAccountDBID = accountDBID;
packet.itemSerial = itemSerial;
packet.petSerial = petSerial;
_wcscpy(packet.name, _countof(packet.name), pName, (int)wcslen(pName));
AddSendData(MAINCMD_ITEM, QUERY_CHANGEPETNAME, (char*)&packet, sizeof(TQChangePetName));
}
void CDNDBConnection::QueryModItemExpireDate(BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID, INT64 biExpireDateItemSerial, INT64 biItemSerial, int nMin, int nMapID, const WCHAR* pwszIP)
{
TQModItemExpireDate Item;
memset(&Item, 0, sizeof(TQModItemExpireDate));
Item.cThreadID = cThreadID;
Item.cWorldSetID = nWorldSetID;
Item.nAccountDBID = nAccountDBID;
Item.biItemSerial = biItemSerial;
Item.biExpireDateItemSerial = biExpireDateItemSerial;
Item.biCharacterDBID = biCharacterDBID;
Item.nMin = nMin;
Item.iMapID = nMapID;
_wcscpy(Item.wszIP, IPLENMAX, pwszIP, IPLENMAX);
AddSendData(MAINCMD_ITEM, QUERY_MODITEMEXPIREDATE, (char*)&Item, sizeof(TQModItemExpireDate));
}
void CDNDBConnection::QueryModPetExp(BYTE cTheadID, int nWorldSetID, UINT nAccountDBID, INT64 biPetSerialID, int nExp)
{
TQModPetExp packet;
packet.cThreadID = cTheadID;
packet.cWorldSetID = nWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.biPetSerial = biPetSerialID;
packet.nExp = nExp;
AddSendData(MAINCMD_ITEM, QUERY_MODPETEXP, (char*)&packet, sizeof(TQModPetExp));
}
void CDNDBConnection::QueryModPetSkill(BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, INT64 biPetItemSerial, char cSlotNum, int nSkillID )
{
TQModPetSkill packet;
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.biItemSerial = biPetItemSerial;
packet.cSkillSlot = cSlotNum;
packet.nSkillID = nSkillID;
AddSendData(MAINCMD_ITEM, QUERY_MODPETSKILL, (char*)&packet, sizeof(TQModPetSkill));
}
void CDNDBConnection::QueryModPetSkillExpand(BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, INT64 biPetItemSerial)
{
TQModPetSkillExpand packet;
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.biItemSerial = biPetItemSerial;
AddSendData(MAINCMD_ITEM, QUERY_MODPETSKILLEXPAND, (char*)&packet, sizeof(TQModPetSkillExpand));
}
void CDNDBConnection::QueryModDegreeOfHunger(BYTE cThreadID, int nWorldSetID, UINT nAccoutDBID, INT64 biPetItemSerial, DWORD nDegreeOfHunger)
{
TQModDegreeOfHunger packet;
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.nAccountDBID = nAccoutDBID;
packet.biBodySerial = biPetItemSerial;
packet.nDegreeOfHunger = nDegreeOfHunger;
AddSendData(MAINCMD_ITEM, QUERY_MODDEGREEOFHUNGER, (char*)&packet, sizeof(TQModDegreeOfHunger));
}
void CDNDBConnection::QueryEnrollGuildWar(BYTE cThreadID, UINT nGuildDBID, char cWorldSetID, UINT nAccountDBID)
{
TQEnrollGuildWar packet;
memset(&packet, 0, sizeof(packet));
packet.nAccountDBID = nAccountDBID;
#if defined(_VILLAGESERVER)
packet.wScheduleID = g_pGuildWarManager->GetScheduleID();
#elif defined(_GAMESERVER)
packet.wScheduleID = g_pMasterConnectionManager->GetGuildWarScheduleID(cWorldSetID);
#endif
packet.nGuildDBID = nGuildDBID;
packet.cWorldSetID = cWorldSetID;
AddSendData(MAINCMD_GUILD, QUERY_ENROLL_GUILDWAR, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarSchedule(BYTE cThreadID, char cWorldSetID)
{
TQGetGuildWarSchedule packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARSCHEDULE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarFinalSchedule(BYTE cThreadID, char cWorldSetID, short wScheduleID)
{
TQGetGuildWarFinalSchedule packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.wScheduleID = wScheduleID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARFINALSCHEDULE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarPoint(CDNUserSession *pSession, int nMissionID, int nOpeningPoint)
{
TQAddGuildWarPointRecodrd packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nMissionID = nMissionID;
packet.nOpeningPoint = nOpeningPoint;
packet.nGuildDBID = pSession->GetGuildUID().nDBID;
packet.cTeamColorCode = pSession->GetGuildSelfView().cTeamColorCode;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWARPOINT, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPoint(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, char cQueryType, INT64 biDBID)
{
TQGetGuildWarPoint packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.cQueryType = cQueryType;
packet.biDBID = biDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPointPartTotal(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, char cQueryType, INT64 biCharacterDBID)
{
TQGetGuildWarPointPartTotal packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.cQueryType = cQueryType;
packet.biCharacterDBID = biCharacterDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT_PARTTOTAL, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPointGuildPartTotal(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, char cQueryType, UINT nGuildDBID)
{
TQGetGuildWarPointGuildPartTotal packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.cQueryType = cQueryType;
packet.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT_GUILD_PARTTOTAL, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPointDaily(BYTE cThreadID, char cWorldSetID )
{
TQGetGuildWarPointDaily packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT_DAILY, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPointGuildTotal(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, bool bMasterServer, char cQueryType, short wScheduleID, UINT nGuildDBID)
{
TQGetGuildWarPointGuildTotal packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.bMasterServer = bMasterServer;
packet.cQueryType = cQueryType;
packet.wScheduleID = wScheduleID;
packet.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT_GUILD_TOTAL, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPointRunningTotal(BYTE cThreadID, char cWorldSetID )
{
TQGetGuildWarPointRunningTotal packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT_RUNNING_TOTAL, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPointFinalRewards(BYTE cThreadID, char cWorldSetID )
{
TQHeader packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOINT_FINAL_REWARDS, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarFinalMatchList(BYTE cThreadID, char cWorldSetID, short wScheduleID, UINT* pGuildDBID)
{
TQAddGuildWarFinalMatchList packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.wScheduleID = wScheduleID;
memcpy(packet.nGuildDBID, pGuildDBID, sizeof(packet.nGuildDBID));
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_FINAL_MATCHLIST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarPopularityVote(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID, UINT nGuildDBID)
{
TQAddGuildWarPopularityVote packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.biCharacterDBID = biCharacterDBID;
packet.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWARPOPULARITYVOTE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPopularityVote(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, char cQueryType, INT64 biCharacterDBID)
{
TQGetGuildWarPopularityVote packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nAccountDBID = nAccountDBID;
packet.cQueryType = cQueryType;
packet.biCharacterDBID = biCharacterDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARPOPULARITYVOTE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarFinalResults(BYTE cThreadID, char cWorldSetID, UINT nGuildDBID, short wScheduleID, char cMatchSequence, char cMatchTypeCode, char cMatchResultCode)
{
TQAddGuildWarFinalResults packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nGuildDBID = nGuildDBID;
packet.wScheduleID = wScheduleID;
packet.cMatchSequence = cMatchSequence;
packet.cMatchTypeCode = cMatchTypeCode;
packet.cMatchResultCode = cMatchResultCode;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWARFINALRESULTS, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarFinalResults(BYTE cThreadID, char cWorldSetID, short wScheduleID)
{
TQGetGuildWarFinalResults packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.wScheduleID = wScheduleID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWARFINALRESULTS, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarPreWinGuild(BYTE cThreadID, char cWorldSetID)
{
TQGetGuildWarPreWinGuild packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWAR_PRE_WIN_GUILD, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarRewarForCharacter(BYTE cThreadID, CDNUserSession *pSession)
{
#if defined(_VILLAGESERVER)
TQAddGuildWarRewardCharacter packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.wScheduleID = g_pGuildWarManager->GetScheduleID();
packet.cRewardType = pSession->GetGuildWarRewardEnable();
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_REWARD_CHARACTER, (char*)&packet, sizeof(packet));
#endif // #if defined(_VILLAGESERVER)
}
void CDNDBConnection::QueryGetGuildWarRewarForCharacter(BYTE cThreadID, CDNUserSession *pSession)
{
TQGetGuildWarRewardCharacter packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
#if defined(_VILLAGESERVER)
packet.wScheduleID = g_pGuildWarManager->GetScheduleID();
#endif // #if defined(_VILLAGESERVER)
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWAR_REWARD_CHARACTER, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarRewarForGuild(BYTE cThreadID, char cWorldSetID, short wScheduleID, UINT nGuildDBID, char cRewardType)
{
TQAddGuildWarRewardGuild packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.wScheduleID = wScheduleID;
packet.nGuildDBID = nGuildDBID;
packet.cRewardType = cRewardType;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_REWARD_GUILD, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetGuildWarRewarForGuild(BYTE cThreadID, char cWorldSetID, short wScheduleID, UINT nGuildDBID, char cQueryType)
{
TQGetGuildWarRewardGuild packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nGuildDBID = nGuildDBID;
packet.wScheduleID = wScheduleID;
packet.cQueryType = cQueryType;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDWAR_REWARD_GUILD, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarPointQueue(BYTE cThreadID, char cWorldSetID, UINT nGUildDBID, INT64 biAddPoint, const WCHAR* pwszIP)
{
TQAddGuildWarPointQueue packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nGuildDBID = nGUildDBID;
packet.biAddPoint = biAddPoint;
memcpy(packet.wszIP, pwszIP, sizeof(packet.wszIP));
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_POINT_QUEUE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarSystemMailQueue(BYTE cThreadID, int nWorldSetID, WCHAR *pSenderName, UINT nGuildDBID, DBDNWorldDef::MailTypeCode::eCode MailCode, INT64 biFKey, WCHAR *pSubject, WCHAR *pContent, INT64 biAttachCoin,
TItem *AttachItemArray, int nChannelID, int nMapID, bool bNewFlag )
{
TQSendSystemMail Mail;
memset(&Mail, 0, sizeof(TQSendSystemMail));
Mail.cThreadID = cThreadID;
Mail.cWorldSetID = nWorldSetID;
if(pSenderName) _wcscpy(Mail.wszSenderName, MAILNAMELENMAX, pSenderName, (int)wcslen(pSenderName));
Mail.biReceiverCharacterDBID = nGuildDBID;
Mail.Code = MailCode;
Mail.biFKey = biFKey;
if(pSubject) _wcscpy(Mail.wszSubject, MAILTITLELENMAX, pSubject, (int)wcslen(pSubject) );
if(pContent) _wcscpy(Mail.wszContent, MAILTEXTLENMAX, pContent, (int)wcslen(pContent) );
Mail.biAttachCoin = biAttachCoin;
Mail.iChannelID = nChannelID;
Mail.iMapID = nMapID;
Mail.bNewFlag = bNewFlag;
int nCount = 0;
if(AttachItemArray){
for (int i = 0; i < MAILATTACHITEMMAX; i++){
if(AttachItemArray[i].nItemID <= 0) continue;
Mail.sAttachItem[nCount] = AttachItemArray[i];
nCount++;
}
}
Mail.cAttachItemCount = nCount;
int nLen = sizeof(TQSendSystemMail) - sizeof(Mail.sAttachItem) +(sizeof(TItem) * nCount);
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_SYSTEM_MAIL_QUEUE, (char*)&Mail, nLen);
}
void CDNDBConnection::QueryAddGuildWarMakeGiftQueue(BYTE cThreadID, int nWorldSetID, char cRewardType, char* cClassID, INT64* biCharacterDBID)
{
TQAddGuilWarMakeGiftQueue Cash;
memset(&Cash, 0, sizeof(TQAddGuilWarMakeGiftQueue));
Cash.cThreadID = cThreadID;
Cash.cWorldSetID = nWorldSetID;
Cash.cRewardType = cRewardType;
memcpy(Cash.cClass, cClassID, sizeof(Cash.cClass));
memcpy(Cash.biCharacterDBIDs, biCharacterDBID, sizeof(Cash.biCharacterDBIDs));
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_MAKE_GIFT_QUEUE, (char*)&Cash, sizeof(TQAddGuilWarMakeGiftQueue));
}
void CDNDBConnection::QueryAddGuildWarMakeGiftNotGuildInfo(BYTE cThreadID, int nWorldSetID, char cRewardType, UINT nGuildDBID)
{
TQAddGuildWarMakeGiftNotGuildInfo packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.cRewardType = cRewardType;
packet.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_MAKE_GIFT_NOTGUILDINFO, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddDBJobSystemReserve(BYTE cThreadID, int nWorldSetID, char cJobType)
{
TQAddJobReserve packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.cJobType = cJobType;
AddSendData(MAINCMD_JOBSYSTEM, QUERY_ADD_JOB_RESERVE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetDBJobSystemReserve(BYTE cThreadID, int nWorldSetID, int nJobSeq)
{
TQGetJobReserve packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = nWorldSetID;
packet.nJobSeq = nJobSeq;
AddSendData(MAINCMD_JOBSYSTEM, QUERY_GET_JOB_RESERVE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetListGuildWarItemTradeRecord(BYTE threadID, CDNUserSession *pSession)
{
ALLOC_PACKET(TQGetListGuildWarItemTradeRecord);
packet.cThreadID = threadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.characterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_GUILD, QUERY_GETLIST_GUILDWAR_ITEM_TRADE_RECORD, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddGuildWarItemTradeRecord(CDNUserSession *pSession, int itemID, int count)
{
ALLOC_PACKET(TQAddGuildWarItemTradeRecord);
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.characterDBID = pSession->GetCharacterDBID();
packet.itemCount.id = itemID;
packet.itemCount.count = count;
AddSendData(MAINCMD_GUILD, QUERY_ADD_GUILDWAR_ITEM_TRADE_RECORD, (char*)&packet, sizeof(packet));
}
#if defined(PRE_ADD_GUILD_CONTRIBUTION)
void CDNDBConnection::QueryModGuildExp(BYTE cThreadID, char cWorldSetID, UINT nGuildDBID, char cPointType, int nPointValue, int nMaxPoint, int nLevel, INT64 biCharacterDBID, int nMissionID, bool IsGuildLevelMax/* = false */)
#else // #if defined(PRE_ADD_GUILD_CONTRIBUTION)
void CDNDBConnection::QueryModGuildExp(BYTE cThreadID, char cWorldSetID, UINT nGuildDBID, char cPointType, int nPointValue, int nMaxPoint, int nLevel, INT64 biCharacterDBID, int nMissionID)
#endif // #if defined(PRE_ADD_GUILD_CONTRIBUTION)
{
TQModGuildExp packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nGuildDBID = nGuildDBID;
packet.cPointType = cPointType;
packet.nPointValue = nPointValue;
packet.nMaxPoint = nMaxPoint;
packet.nLevel = nLevel;
packet.biCharacterDBID = biCharacterDBID;
packet.nMissionID = nMissionID;
#if defined(PRE_ADD_GUILD_CONTRIBUTION)
packet.IsGuildLevelMax = IsGuildLevelMax;
#endif // #if defined(PRE_ADD_GUILD_CONTRIBUTION)
AddSendData(MAINCMD_GUILD, QUERY_MOD_GUILDEXP, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryModGuildCheat(BYTE cThreadID, char cWorldSetID, UINT nGuildDBID, char cCheatType, int nPoint, char cLevel)
{
TQModGuildCheat packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldSetID;
packet.nGuildDBID = nGuildDBID;
packet.cCheatType = cCheatType;
packet.nPoint = nPoint;
packet.cLevel = cLevel;
AddSendData(MAINCMD_GUILD, QUERY_MOD_GUILDCHEAT, (char*)&packet, sizeof(packet));
}
//#########################################################################################################################################
// MAINCMD_MAIL
//#########################################################################################################################################
void CDNDBConnection::GetCountReceiveMail(CDNUserSession *pSession)
{
TQGetCountReceiveMail Mail;
memset(&Mail, 0, sizeof(TQGetCountReceiveMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.biReceiverCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MAIL, QUERY_GETCOUNTRECEIVEMAIL, (char*)&Mail, sizeof(TQGetCountReceiveMail));
}
void CDNDBConnection::QueryGetPageReceiveMail(CDNUserSession *pSession, int nPageNo)
{
TQGetPageReceiveMail Mail;
memset(&Mail, 0, sizeof(TQGetPageReceiveMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.iPageNumber = nPageNo;
Mail.biReceiverCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MAIL, QUERY_GETPAGERECEIVEMAIL, (char*)&Mail, sizeof(TQGetPageReceiveMail));
}
void CDNDBConnection::QuerySendMail(CDNUserSession *pSession, const CSSendMail *pPacket, DBPacket::TSendMailItem *SendItemArray, int nTax)
{
TQSendMail Mail;
memset(&Mail, 0, sizeof(TQSendMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.biSenderCharacterDBID = pSession->GetCharacterDBID();
if(pPacket->wszToCharacterName[0] != '\0')
_wcscpy(Mail.wszReceiverCharacterName, NAMELENMAX, pPacket->wszToCharacterName, (int)wcslen(pPacket->wszToCharacterName));
Mail.Code = (MailType::Delivery)pPacket->cDeliveryType;
if(pPacket->wszTitle[0] != '\0')
_wcscpy(Mail.wszSubject, MAILTITLELENMAX, pPacket->wszTitle, (int)wcslen(pPacket->wszTitle));
if(pPacket->wszText[0] != '\0')
_wcscpy(Mail.wszContent, MAILTEXTLENMAX, pPacket->wszText, (int)wcslen(pPacket->wszText));
Mail.biAttachCoin = pPacket->nAttachCoin;
Mail.cAttachItemCount = pPacket->cAttachItemTotalCount;
if(SendItemArray)
memcpy(Mail.AttachItemArr, SendItemArray, sizeof(Mail.AttachItemArr));
Mail.iChannelID = pSession->GetChannelID();
Mail.iMapID = pSession->GetMapIndex();
Mail.nTax = nTax;
int nLen = sizeof(TQSendMail) - sizeof(Mail.AttachItemArr) +(sizeof(DBPacket::TSendMailItem) * Mail.cAttachItemCount);
AddSendData(MAINCMD_MAIL, QUERY_SENDMAIL, (char*)&Mail, sizeof(TQSendMail));
}
void CDNDBConnection::QuerySendSystemMail(BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, WCHAR *pSenderName, INT64 biReceiverCharDBID, DBDNWorldDef::MailTypeCode::eCode MailCode, INT64 biFKey, WCHAR *pSubject, WCHAR *pContent, INT64 biAttachCoin,
TItem *AttachItemArray, int nChannelID, int nMapID, bool bNewFlag/* = true*/)
{
TQSendSystemMail Mail;
memset(&Mail, 0, sizeof(TQSendSystemMail));
Mail.cThreadID = cThreadID;
Mail.cWorldSetID = nWorldSetID;
Mail.nAccountDBID = nAccountDBID;
if(pSenderName) _wcscpy(Mail.wszSenderName, MAILNAMELENMAX, pSenderName, (int)wcslen(pSenderName));
Mail.biReceiverCharacterDBID = biReceiverCharDBID;
Mail.Code = MailCode;
Mail.biFKey = biFKey;
if(pSubject) _wcscpy(Mail.wszSubject, MAILTITLELENMAX, pSubject, (int)wcslen(pSubject) );
if(pContent) _wcscpy(Mail.wszContent, MAILTEXTLENMAX, pContent, (int)wcslen(pContent) );
Mail.biAttachCoin = biAttachCoin;
Mail.iChannelID = nChannelID;
Mail.iMapID = nMapID;
Mail.bNewFlag = bNewFlag;
if(AttachItemArray){
for (int i = 0; i < MAILATTACHITEMMAX; i++){
if(AttachItemArray[i].nItemID <= 0) continue;
Mail.sAttachItem[Mail.cAttachItemCount++] = AttachItemArray[i];
}
}
int nLen = sizeof(TQSendSystemMail) - sizeof(Mail.sAttachItem) +(sizeof(TItem) * Mail.cAttachItemCount);
AddSendData(MAINCMD_MAIL, QUERY_SENDSYSTEMMAIL, (char*)&Mail, nLen);
}
void CDNDBConnection::QueryReadMail(CDNUserSession *pSession, int nMailDBID)
{
TQReadMail Mail;
memset(&Mail, 0, sizeof(TQReadMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.iMailID = nMailDBID;
AddSendData(MAINCMD_MAIL, QUERY_READMAIL, (char*)&Mail, sizeof(TQReadMail));
}
void CDNDBConnection::QueryDelMail(CDNUserSession *pSession, int *nMailDBIDArray)
{
TQDelMail Mail;
memset(&Mail, 0, sizeof(TQDelMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.biReceiverCharacterDBID = pSession->GetCharacterDBID();
memcpy(Mail.iMailIDArray, nMailDBIDArray, sizeof(Mail.iMailIDArray));
AddSendData(MAINCMD_MAIL, QUERY_DELMAIL, (char*)&Mail, sizeof(TQDelMail));
}
void CDNDBConnection::QueryGetListMailAttachment(CDNUserSession *pSession, int *nMailDBIDArray)
{
TQGetListMailAttachment Mail;
memset(&Mail, 0, sizeof(TQGetListMailAttachment));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.biCharacterDBID = pSession->GetCharacterDBID();
memcpy(Mail.nMailDBIDArray, nMailDBIDArray, sizeof(Mail.nMailDBIDArray));
AddSendData(MAINCMD_MAIL, QUERY_GETLISTMAILATTACHMENT, (char*)&Mail, sizeof(TQGetListMailAttachment));
}
void CDNDBConnection::QueryTakeMailAttachList(CDNUserSession *pSession, char cCount, DBPacket::TRequestTakeAttachInfo *InfoList)
{
TQTakeAttachMailList Mail;
memset(&Mail, 0, sizeof(TQTakeAttachMailList));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.nChannelID = pSession->GetChannelID();
Mail.nMapID = pSession->GetMapIndex();
_wcscpy( Mail.wszIP, _countof(Mail.wszIP), pSession->GetIpW(), IPLENMAX );
#ifdef PRE_ADD_JOINGUILD_SUPPORT
if (pSession->GetGuildUID().IsSet())
Mail.nGuildDBID = pSession->GetGuildUID().nDBID;
#endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
Mail.cPageCount = cCount;
if(InfoList){
for (int i = 0; i < cCount; i++){
Mail.Info[i] = InfoList[i];
}
}
int nLen = sizeof(TQTakeAttachMailList) - sizeof(Mail.Info) +(sizeof(DBPacket::TRequestTakeAttachInfo) * cCount);
AddSendData(MAINCMD_MAIL, QUERY_TAKEATTACHMAILLIST, (char*)&Mail, nLen);
}
void CDNDBConnection::QueryTakeMailAttach(CDNUserSession *pSession, DBPacket::TRequestTakeAttachInfo &Info)
{
TQTakeAttachMail Mail;
memset(&Mail, 0, sizeof(TQTakeAttachMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.nChannelID = pSession->GetChannelID();
Mail.nMapID = pSession->GetMapIndex();
Mail.Info = Info;
_wcscpy( Mail.wszIP, _countof(Mail.wszIP), pSession->GetIpW(), IPLENMAX );
#ifdef PRE_ADD_JOINGUILD_SUPPORT
if (pSession->GetGuildUID().IsSet())
Mail.nGuildDBID = pSession->GetGuildUID().nDBID;
#endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
AddSendData(MAINCMD_MAIL, QUERY_TAKEATTACHMAIL, (char*)&Mail, sizeof(TQTakeAttachMail));
}
#ifdef PRE_ADD_BEGINNERGUILD
void CDNDBConnection::QueryGetWillSendMails(CDNUserSession * pSession)
{
TQGetWillMails packet;
memset(&packet, 0, sizeof(TQGetWillMails));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MAIL, QUERY_GETWILLSENDMAIL, (char*)&packet, sizeof(TQGetWillMails));
}
void CDNDBConnection::QueryDelWillSendMails(CDNUserSession * pSession, int nWillSendMailID)
{
TQDelWillMail packet;
memset(&packet, 0, sizeof(TQDelWillMail));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nMailID = nWillSendMailID;
AddSendData(MAINCMD_MAIL, QUERY_DELWILLSENDMAIL, (char*)&packet, sizeof(TQDelWillMail));
}
#endif //#ifdef PRE_ADD_BEGINNERGUILD
#if defined(PRE_ADD_CADGE_CASH)
void CDNDBConnection::QuerySendWishMail(CDNUserSession *pSession, const CSCashShopCadge *pPacket)
{
TQSendWishMail Mail;
memset(&Mail, 0, sizeof(TQSendWishMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.biSenderCharacterDBID = pSession->GetCharacterDBID();
if(pPacket->wszToCharacterName[0] != '\0')
_wcscpy(Mail.wszReceiverCharacterName, NAMELENMAX, pPacket->wszToCharacterName, (int)wcslen(pPacket->wszToCharacterName));
if(pPacket->wszMessage[0] != '\0')
_wcscpy(Mail.wszContent, MAILTEXTLENMAX, pPacket->wszMessage, (int)wcslen(pPacket->wszMessage));
Mail.nWishLimitCount = (int)CGlobalWeightIntTable::GetInstance().GetValue(CGlobalWeightIntTable::CadgeMaxCountOneDay);
Mail.cWishListCount = pPacket->cCount;
if (Mail.cWishListCount > PACKAGEITEMMAX)
Mail.cWishListCount = PACKAGEITEMMAX;
Mail.nPackageSN = pPacket->nPackageSN;
for (int i = 0; i < Mail.cWishListCount; i++){
Mail.WishList[i].nItemSN = pPacket->PackageGiftList[i].nItemSN;
Mail.WishList[i].nItemID = pPacket->PackageGiftList[i].nItemID;
Mail.WishList[i].cOption = pPacket->PackageGiftList[i].nOptionIndex;
}
AddSendData(MAINCMD_MAIL, QUERY_SENDWISHMAIL, (char*)&Mail, sizeof(TQSendWishMail));
}
void CDNDBConnection::QueryReadWishMail(CDNUserSession *pSession, int nMailDBID)
{
TQReadWishMail Mail;
memset(&Mail, 0, sizeof(TQReadWishMail));
Mail.cThreadID = pSession->GetDBThreadID();
Mail.cWorldSetID = pSession->GetWorldSetID();
Mail.nAccountDBID = pSession->GetAccountDBID();
Mail.nMailID = nMailDBID;
AddSendData(MAINCMD_MAIL, QUERY_READWISHMAIL, (char*)&Mail, sizeof(TQReadWishMail));
}
#endif // #if defined(PRE_ADD_CADGE_CASH)
// MAINCMD_SPECIALBOX
#if defined(PRE_SPECIALBOX)
void CDNDBConnection::QueryAddEventReward(CDNUserSession *pSession, BYTE cReceiveTypeCode, BYTE cTargetTypeCode, BYTE cTargetClassCode, BYTE cTargetMinLevel, BYTE cTargetMaxLevel,
int nEventNameUIString, int nSenderNameUIString, int nContentUIString, int nRewardCoin, char cEventRewardTypeCode, std::vector<TSpecialBoxItemInfo> &VecItemList)
{
TQAddEventReward Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cReceiveTypeCode = cReceiveTypeCode;
Packet.cTargetTypeCode = cTargetTypeCode;
if (pSession->GetAccountName())
_wcscpy(Packet.wszAccountName, IDLENMAX, pSession->GetAccountName(), (int)wcslen(pSession->GetAccountName()));
if (pSession->GetCharacterName())
_wcscpy(Packet.wszCharacterName, NAMELENMAX, pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()));
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.cTargetClassCode = cTargetClassCode;
Packet.cTargetMinLevel = cTargetMinLevel;
Packet.cTargetMaxLevel = cTargetMaxLevel;
Packet.nEventNameUIString = nEventNameUIString;
Packet.nSenderNameUIString = nSenderNameUIString;
Packet.nContentUIString = nContentUIString;
Packet.nRewardCoin = nRewardCoin;
Packet.cEventRewardTypeCode = cEventRewardTypeCode;
if (!VecItemList.empty()){
for (int i = 0; i < (int)VecItemList.size(); i++){
Packet.EventRewardItems[i] = VecItemList[i];
}
Packet.cCount = (BYTE)VecItemList.size();
}
int nLen = sizeof(TQAddEventReward) - sizeof(Packet.EventRewardItems) + (sizeof(TItem) * Packet.cCount);
AddSendData(MAINCMD_MAIL, QUERY_ADDEVENTREWARD, reinterpret_cast<char*>(&Packet), nLen);
}
void CDNDBConnection::QueryGetCountEventReward(CDNUserSession *pSession)
{
TQGetCountEventReward Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MAIL, QUERY_GETCOUNTEVENTREWARD, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryGetListEventReward(CDNUserSession *pSession)
{
TQGetListEventReward Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.cClassCode = pSession->GetClassID();
Packet.nLevel = pSession->GetLevel();
AddSendData(MAINCMD_MAIL, QUERY_GETLISTEVENTREWARD, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryGetListEventRewardItem(CDNUserSession *pSession, int nEventRewardID)
{
TQGetListEventRewardItem Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nEventRewardID = nEventRewardID;
AddSendData(MAINCMD_MAIL, QUERY_GETLISTEVENTREWARDITEM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryAddEventRewardReceiver(CDNUserSession *pSession, int nEventRewardID, int nItemID)
{
TQAddEventRewardReceiver Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nEventRewardID = nEventRewardID;
Packet.nItemID = nItemID;
AddSendData(MAINCMD_MAIL, QUERY_ADDEVENTREWARDRECEIVER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif // #if defined(PRE_SPECIALBOX)
#ifdef PRE_ADD_JOINGUILD_SUPPORT
void CDNDBConnection::QueryGuildSupportRewardInfo(CDNUserSession * pSession)
{
TQGuildSupportRewardInfo packet;
memset(&packet, 0, sizeof(TQGuildSupportRewardInfo));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MAIL, QUERY_GUILDSUPPORT_REWARDINFO, reinterpret_cast<char*>(&packet), sizeof(TQGuildSupportRewardInfo));
}
void CDNDBConnection::QuerySendGuildMail(BYTE cThreadID, int nWorldSetID, WCHAR *pSenderName, UINT nReceiverAccountDBID, INT64 biReceiverCharDBID, UINT nAchivementAccountDBID, INT64 biAchivementCharacterDBID, DBDNWorldDef::MailTypeCode::eCode MailCode, INT64 biFKey, WCHAR *pSubject, WCHAR *pContent, INT64 biAttachCoin,
TItem *AttachItemArray, int nChannelID, int nMapID, bool bNewFlag)
{
TQSendGuildMail Mail;
memset(&Mail, 0, sizeof(TQSendGuildMail));
Mail.cThreadID = cThreadID;
Mail.cWorldSetID = nWorldSetID;
if(pSenderName) _wcscpy(Mail.wszSenderName, MAILNAMELENMAX, pSenderName, (int)wcslen(pSenderName));
Mail.nAccountDBID = nAchivementAccountDBID;
Mail.nReceiverAccountDBID = nReceiverAccountDBID;
Mail.biReceiverCharacterDBID = biReceiverCharDBID;
Mail.biAchivementCharacterDBID = biAchivementCharacterDBID;
Mail.Code = MailCode;
Mail.biFKey = biFKey;
if(pSubject) _wcscpy(Mail.wszSubject, MAILTITLELENMAX, pSubject, (int)wcslen(pSubject) );
if(pContent) _wcscpy(Mail.wszContent, MAILTEXTLENMAX, pContent, (int)wcslen(pContent) );
Mail.biAttachCoin = biAttachCoin;
Mail.iChannelID = nChannelID;
Mail.iMapID = nMapID;
Mail.bNewFlag = bNewFlag;
if(AttachItemArray){
for (int i = 0; i < MAILATTACHITEMMAX; i++){
if(AttachItemArray[i].nItemID <= 0) continue;
Mail.sAttachItem[Mail.cAttachItemCount++] = AttachItemArray[i];
}
}
int nLen = sizeof(TQSendGuildMail) - sizeof(Mail.sAttachItem) +(sizeof(TItem) * Mail.cAttachItemCount);
AddSendData(MAINCMD_MAIL, QUERY_SENDGUILDMAIL, (char*)&Mail, nLen);
}
#endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
//#########################################################################################################################################
// MAINCMD_MARKET
//#########################################################################################################################################
void CDNDBConnection::QueryGetListMyTrade(CDNUserSession *pSession)
{
TQGetListMyTrade Market;
memset(&Market, 0, sizeof(TQGetListMyTrade));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MARKET, QUERY_GETLISTMYTRADE, (char*)&Market, sizeof(TQGetListMyTrade));
}
void CDNDBConnection::QueryAddTrade(CDNUserSession *pSession, const TItem &RegisterItem, INT64 biItemNewSerial, BYTE cInvenIndex, int nPrice, int nRegisterTax, int nSellTax, int nSellPeriod, bool bDisplayFlag1, bool bDisplayFlag2,
WCHAR *pItemName, char cItemGrade, char cLimitLevel, char cJob, int nInvenType, bool bPremiumTrade, int nMaxRegisterItemCount, bool bCash, char cMethodCode, int nExchangeCode)
{
TQAddTrade Market;
memset(&Market, 0, sizeof(TQAddTrade));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
Market.wRegisterMaxCount = (int)CGlobalWeightTable::GetInstance().GetValue( CGlobalWeightTable::MarketRegisterCount_Basic );
Market.wItemRegisterMaxCount = nMaxRegisterItemCount;
Market.nItemID = RegisterItem.nItemID;
Market.nSerial = RegisterItem.nSerial;
Market.wCount = RegisterItem.wCount;
Market.cLevel = RegisterItem.cLevel;
Market.biNewSerial = biItemNewSerial;
Market.cInvenType = nInvenType;
Market.cInvenIndex = cInvenIndex;
Market.nPrice = nPrice;
Market.nSellTax = nSellTax;
Market.cSellPeriod = nSellPeriod;
if(pItemName){
_wcscpy(Market.wszItemName, EXTDATANAMELENMAX, pItemName, (int)wcslen(pItemName));
Market.cItemGrade = cItemGrade;
Market.cLimitLevel = cLimitLevel;
}
if(nInvenType == ITEMPOSITION_INVEN)
Market.nMainType = g_pDataManager->GetItemMainType(Market.nItemID);
else if(nInvenType == ITEMPOSITION_CASHINVEN)
Market.nMainType = g_pDataManager->GetItemMainType(Market.nItemID) + 100;
Market.cDetailType = g_pDataManager->GetItemDetailType(Market.nItemID);
// 문장 아이템
if( Market.nMainType == 38 && Market.cDetailType == 3 )
{
Market.cDetailType = 1;
}
Market.cSkillUsingType = g_pDataManager->GetItemSkillUsingType(Market.nItemID);
Market.cJob = cJob;
Market.nUnitPrice = (int)(nPrice / RegisterItem.wCount);
Market.nRegisterTax = nRegisterTax;
Market.bDisplayFlag1 = bDisplayFlag1;
Market.bDisplayFlag2 = bDisplayFlag2;
Market.nChannelID = pSession->GetChannelID();
Market.nMapID = pSession->GetMapIndex();
Market.bPremiumTrade = bPremiumTrade;
Market.cMethodCode = cMethodCode;
Market.nExchangeCode = nExchangeCode;
Market.bCash = bCash;
AddSendData(MAINCMD_MARKET, QUERY_ADDTRADE, (char*)&Market, sizeof(TQAddTrade));
}
void CDNDBConnection::QueryGetPageTrade(CDNUserSession *pSession, const CSMarketList *pMarketList, char *cJobCodeArray, char *cItemExchangeArray, WCHAR *pSearchItemName)
{
TQGetPageTrade Market;
memset(&Market, 0, sizeof(TQGetPageTrade));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.wPageNum = pMarketList->wPageNum;
Market.cMinLevel = pMarketList->cMinLevel;
Market.cMaxLevel = pMarketList->cMaxLevel;
Market.cMethodCode = pMarketList->cPayMethodCode;
if(pMarketList->cItemGrade) memcpy(Market.cItemGrade, pMarketList->cItemGrade, sizeof(Market.cItemGrade));
if(cJobCodeArray) memcpy(Market.cJobCode, cJobCodeArray, sizeof(Market.cJobCode));
if(cItemExchangeArray) memcpy(Market.cItemExchange, cItemExchangeArray, sizeof(Market.cItemExchange));
if(pSearchItemName) _wcscpy(Market.wszSearchItemName, SEARCHLENMAX, pSearchItemName, (int)wcslen(pSearchItemName));
Market.cSortType = pMarketList->cSortType;
AddSendData(MAINCMD_MARKET, QUERY_GETPAGETRADE, (char*)&Market, sizeof(TQGetPageTrade));
}
void CDNDBConnection::QueryCancelTrade(CDNUserSession *pSession, int nMarketDBID, int nItemSlotIndex, bool bCashItem)
{
TQCancelTrade Market;
memset(&Market, 0, sizeof(TQCancelTrade));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
Market.nMarketDBID = nMarketDBID;
Market.cInvenSlotIndex = nItemSlotIndex;
Market.nChannelID = pSession->GetChannelID();
Market.nMapID = pSession->GetMapIndex();
Market.bCashItem = bCashItem;
AddSendData(MAINCMD_MARKET, QUERY_CANCELTRADE, (char*)&Market, sizeof(TQCancelTrade));
}
#if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
void CDNDBConnection::QueryBuyTrade(CDNUserSession *pSession, int nMarketDBID, int nItemSlotIndex, bool bMini)
#else // #if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
void CDNDBConnection::QueryBuyTrade(CDNUserSession *pSession, int nMarketDBID, int nItemSlotIndex, bool bCashItem, int nPetalPrice)
#endif // #if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
{
TQBuyTradeItem Market;
memset(&Market, 0, sizeof(TQBuyTradeItem));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
Market.nMarketDBID = nMarketDBID;
Market.cInvenSlotIndex = nItemSlotIndex;
Market.nChannelID = pSession->GetChannelID();
Market.nMapID = pSession->GetMapIndex();
#if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
Market.bMini = bMini;
#else // #if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
Market.bCashItem = bCashItem;
#if defined(PRE_ADD_PETALTRADE)
Market.nPetalPrice = nPetalPrice;
#endif
#endif // #if defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
_wcscpy( Market.wszIP, _countof(Market.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData(MAINCMD_MARKET, QUERY_BUYTRADEITEM, (char*)&Market, sizeof(TQBuyTradeItem));
}
void CDNDBConnection::QueryGetListTradeforCalculation(CDNUserSession *pSession)
{
TQGetListTradeForCalculation Market;
memset(&Market, 0, sizeof(TQGetListTradeForCalculation));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_MARKET, QUERY_GETLISTTRADEFORCALCULATION, (char*)&Market, sizeof(TQGetListTradeForCalculation));
}
void CDNDBConnection::QueryTradeCalculation(CDNUserSession *pSession, int nMarketDBID)
{
TQTradeCalculate Market;
memset(&Market, 0, sizeof(TQTradeCalculate));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
Market.nMarketDBID = nMarketDBID;
Market.nChannelID = pSession->GetChannelID();
Market.nMapID = pSession->GetMapIndex();
AddSendData(MAINCMD_MARKET, QUERY_TRADECALCULATE, (char*)&Market, sizeof(TQTradeCalculate));
}
void CDNDBConnection::QueryTradeCalculationAll(CDNUserSession *pSession)
{
TQTradeCalculateAll Market;
memset(&Market, 0, sizeof(TQTradeCalculateAll));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
Market.nChannelID = pSession->GetChannelID();
Market.nMapID = pSession->GetMapIndex();
AddSendData(MAINCMD_MARKET, QUERY_TRADECALCULATEALL, (char*)&Market, sizeof(TQTradeCalculateAll));
}
#if !defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
void CDNDBConnection::QueryGetTradeItemID(CDNUserSession *pSession, int nMarketDBID)
{
TQGetTradeItemID Market;
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.nMarketDBID = nMarketDBID;
AddSendData(MAINCMD_MARKET, QUERY_GETTRADEITEMID, (char*)&Market, sizeof(TQGetTradeItemID));
}
#endif // #if !defined(PRE_ADD_DIRECT_BUY_UPGRADEITEM)
void CDNDBConnection::QueryGetPetalBalance(CDNUserSession *pSession)
{
TQHeader Market;
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
AddSendData(MAINCMD_MARKET, QUERY_GETPETALBALANCE, (char*)&Market, sizeof(TQHeader));
}
void CDNDBConnection::QueryGetTradePrice(CDNUserSession *pSession, const CSMarketPrice *pMarket)
{
TQGetTradePrice Market;
memset(&Market, 0, sizeof(TQGetTradePrice));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.nMarketDBID = pMarket->nMarketDBID;
Market.nItemID = pMarket->nItemID;
Market.cLevel = pMarket->cLevel;
Market.cOption = pMarket->cOption;
AddSendData(MAINCMD_MARKET, QUERY_GETTRADEPRICE, (char*)&Market, sizeof(TQGetTradePrice));
}
void CDNDBConnection::QueryGetListMiniTrade(CDNUserSession *pSession, int nItemID, char cPayMethodCode)
{
TQGetListMiniTrade Market;
memset(&Market, 0, sizeof(TQGetListMiniTrade));
Market.cThreadID = pSession->GetDBThreadID();
Market.cWorldSetID = pSession->GetWorldSetID();
Market.nAccountDBID = pSession->GetAccountDBID();
Market.biCharacterDBID = pSession->GetCharacterDBID();
Market.nItemID = nItemID;
Market.cPayMethodCode = cPayMethodCode;
AddSendData(MAINCMD_MARKET, QUERY_GETLISTMINITRADE, (char*)&Market, sizeof(TQGetListMiniTrade));
}
//#########################################################################################################################################
// MAINCMD_ISOLATE
//#########################################################################################################################################
void CDNDBConnection::QueryGetIsolateList(BYTE cThreadID, CDNUserSession *pSession)
{
TQGetIsolateList packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_ISOLATE, QUERY_GETISOLATELIST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddIsolate(CDNUserSession *pSession, const WCHAR * pIsolateName)
{
TQAddIsolate packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
if(pIsolateName) _wcscpy(packet.wszIsolateName, NAMELENMAX, pIsolateName, (int)wcslen(pIsolateName));
AddSendData(MAINCMD_ISOLATE, QUERY_ADDISOLATE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryAddIsolateAfterDelFriend(CDNUserSession *pSession, const WCHAR * pIsolateName, INT64 biDelFriendCharacterDBID)
{
TQAddIsolate packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
if(pIsolateName) _wcscpy(packet.wszIsolateName, NAMELENMAX, pIsolateName, (int)wcslen(pIsolateName));
packet.biFriendCharacterDBID = biDelFriendCharacterDBID;
AddSendData(MAINCMD_ISOLATE, QUERY_ADDISOLATE, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryDelIsolate(CDNUserSession *pSession, INT64 biIsolateCharacterDBID)
{
TQDelIsolate packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.cCount = 1;
packet.biIsolateCharacterDBIDs[0] = biIsolateCharacterDBID;
AddSendData(MAINCMD_ISOLATE, QUERY_DELISOLATE, (char*)&packet, sizeof(packet) - sizeof(packet.biIsolateCharacterDBIDs) +(sizeof(INT64) * packet.cCount));
}
//#########################################################################################################################################
// PvP
//#########################################################################################################################################
bool CDNDBConnection::QueryUpdatePvPData( BYTE cThreadID, CDNUserSession* pGameSession, PvPCommon::QueryUpdatePvPDataType::eCode Type )
{
if( !pGameSession || !pGameSession->GetPvPData() )
{
_DANGER_POINT();
return false;
}
// PvP정보가 초기화 되기 전 유저는 저장하지 않는다.
if( pGameSession->GetPvPData()->cLevel == 0 || pGameSession->GetPvPData()->cLevel > PvPCommon::Common::MaxRank )
{
_DANGER_POINT();
return false;
}
TQUpdatePvPData TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.nAccountDBID = pGameSession->GetAccountDBID();
TxPacket.cWorldSetID = pGameSession->GetWorldSetID();
TxPacket.biCharacterDBID = pGameSession->GetCharacterDBID();
TxPacket.Type = Type;
memcpy( &TxPacket.PvP, pGameSession->GetPvPData(), sizeof(TPvPGroup) );
AddSendData( MAINCMD_PVP, QUERY_UPDATEPVPDATA, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
return true;
}
#ifdef PRE_MOD_PVPRANK
void CDNDBConnection::QuerySetPvPRankCriteria(BYTE cThreadID, UINT nThreshold)
{
TQUpdatePvPRankCriteria packet;
memset(&packet, 0, sizeof(TQUpdatePvPRankCriteria));
#ifdef _VILLAGESERVER
packet.cWorldSetID = g_Config.nWorldSetID;
#endif //#ifdef _VILLAGESERVER
packet.cThreadID = cThreadID;
packet.nThresholdPvPExp = nThreshold;
AddSendData( MAINCMD_PVP, QUERY_UPDATE_PVPRANKCRITERIA, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
void CDNDBConnection::QueryCalcPvPRank(BYTE cThreadID)
{
TQForceCalcPvPRank packet;
memset(&packet, 0, sizeof(TQForceCalcPvPRank));
packet.cThreadID = cThreadID;
AddSendData( MAINCMD_PVP, QUERY_FORCE_CALCPVPRANK, reinterpret_cast<char*>(&packet), sizeof(packet) );
}
#endif //#ifdef PRE_MOD_PVPRANK
#if defined( PRE_PVP_GAMBLEROOM )
void CDNDBConnection::QueryAddGambleRoom(BYTE cThreadID, char cWorldSetID, int nRoomID, BYTE cGambleType, int nGamblePrice)
{
TQAddGambleRoom Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nRoomID = nRoomID;
Packet.cGambleType = cGambleType;
Packet.nGamblePrice = nGamblePrice;
AddSendData(MAINCMD_PVP, QUERY_ADD_GAMBLEROOM, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddGambleRoomMember(BYTE cThreadID, char cWorldSetID, INT64 nGambleDBID, INT64 biCharacterDBID)
{
TQAddGambleRoomMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nGambleDBID = nGambleDBID;
Packet.biCharacterDBID = biCharacterDBID;
AddSendData(MAINCMD_PVP, QUERY_ADD_GAMBLEROOMMEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryEndGambleRoom(BYTE cThreadID, char cWorldSetID, INT64 nGambleDBID, TPvPGambleRoomWinData* Member)
{
TQEndGambleRoom Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nGambleDBID = nGambleDBID;
memcpy( &Packet.Member, Member, sizeof(Packet.Member)*PvPGambleRoom::Max);
AddSendData(MAINCMD_PVP, QUERY_END_GAMBLEROOM, (char*)&Packet, sizeof(Packet));
}
#endif
//#########################################################################################################################################
// DarkLair
//#########################################################################################################################################
bool CDNDBConnection::QueryUpdateDarkLairResult( BYTE cThreadID, TQUpdateDarkLairResult* pPacket, const int iPacketSize )
{
pPacket->cThreadID = cThreadID;
AddSendData( MAINCMD_DARKLAIR, QUERY_UPDATE_DARKLAIR_RESULT, reinterpret_cast<char*>(pPacket), iPacketSize );
return true;
}
void CDNDBConnection::QueryGetDarkLairRankBoard( CDNUserSession* pSession, int iMapIndex, BYTE cPartyUserCount )
{
TQGetDarkLairRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iMapIndex = iMapIndex;
TxPacket.cPartyUserCount = cPartyUserCount;
AddSendData( MAINCMD_DARKLAIR, QUERY_GET_DARKLAIR_RANK_BOARD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
// CashShop
void CDNDBConnection::SendModGiveFail(CDNUserSession* pSession, int nCount, DBPacket::TModCashFailItemEx *CashItemArray)
{
TQModGiveFailFlag Cash;
memset(&Cash, 0, sizeof(TQModGiveFailFlag));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.nCount = nCount;
if(CashItemArray) memcpy(Cash.CashItem, CashItemArray, sizeof(DBPacket::TModCashFailItemEx) * nCount);
_wcscpy( Cash.wszIP, _countof(Cash.wszIP), pSession->GetIpW(), IPLENMAX );
int nLen = sizeof(TQModGiveFailFlag) - sizeof(Cash.CashItem) + (sizeof(DBPacket::TModCashFailItemEx) * nCount);
AddSendData(MAINCMD_CASH, QUERY_MODGIVEFAILFLAG, (char*)&Cash, nLen);
}
void CDNDBConnection::QueryCheckGiftReceiver(CDNUserSession* pSession, WCHAR *pCharName)
{
TQCheckGiftReceiver Cash;
memset( &Cash, 0, sizeof(Cash) );
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
if(pCharName) _wcscpy(Cash.wszCharacterName, NAMELENMAX, pCharName, (int)wcslen(pCharName));
AddSendData(MAINCMD_CASH, QUERY_CHECKGIFTRECEIVER, (char*)&Cash, sizeof(TQCheckGiftReceiver));
}
void CDNDBConnection::QueryGetListGiftBox(CDNUserSession* pSession)
{
TQGetListGiftBox Cash;
memset(&Cash, 0, sizeof(TQGetListGiftBox));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
#if defined(PRE_ADD_MULTILANGUAGE)
Cash.cSelectedLang = pSession->m_eSelectedLanguage;
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
AddSendData(MAINCMD_CASH, QUERY_GETLISTGIFTBOX, (char*)&Cash, sizeof(TQGetListGiftBox));
}
void CDNDBConnection::QueryModGiftReceive(CDNUserSession* pSession, bool bReceiveAll, TReceiveGiftData *GiftData)
{
TQModGiftReceiveFlag Cash;
memset(&Cash, 0, sizeof(TQModGiftReceiveFlag));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
#if defined(PRE_RECEIVEGIFTALL)
Cash.bReceiveAll = bReceiveAll;
#endif // #if defined(PRE_RECEIVEGIFTALL)
if (GiftData){
if (bReceiveAll){
Cash.cCount = 0;
for (int i = 0; i < GIFTPAGEMAX; i++){
if (GiftData[i].nGiftDBID <= 0) continue;
Cash.GiftData[Cash.cCount] = GiftData[i];
Cash.cCount++;
}
}
else{
Cash.cCount = 1;
Cash.GiftData[0] = GiftData[0];
}
}
int nLen = sizeof(TQModGiftReceiveFlag) - sizeof(Cash.GiftData) + (sizeof(TReceiveGiftData) * Cash.cCount);
AddSendData(MAINCMD_CASH, QUERY_MODGIFTRECEIVEFLAG, (char*)&Cash, nLen);
}
void CDNDBConnection::QueryReceiveGift(CDNUserSession* pSession, bool bReceiveAll, char cTotalCount, const TReceiveGiftData &GiftData, char cItemCount, TGiftItem *AddItemList, int nItemSN)
{
TQReceiveGift Cash;
memset(&Cash, 0, sizeof(TQReceiveGift));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
#if defined(PRE_RECEIVEGIFTALL)
Cash.bReceiveAll = bReceiveAll;
Cash.cTotalCount = cTotalCount;
#endif // #if defined(PRE_RECEIVEGIFTALL)
Cash.GiftData = GiftData;
Cash.nChannelID = pSession->GetChannelID();
Cash.nMapID = pSession->GetMapIndex();
Cash.nItemSN = nItemSN;
Cash.cCount = cItemCount;
memcpy(Cash.GiftItem, AddItemList, (sizeof(TGiftItem) * cItemCount));
_wcscpy( Cash.wszIP, _countof(Cash.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData(MAINCMD_CASH, QUERY_RECEIVEGIFT, (char*)&Cash, sizeof(TQReceiveGift));
}
void CDNDBConnection::QueryNotifyGift(CDNUserSession* pSession, bool bNew)
{
TQNotifyGift Cash;
memset(&Cash, 0, sizeof(TQNotifyGift));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.bNew = bNew;
AddSendData(MAINCMD_CASH, QUERY_NOTIFYGIFT, (char*)&Cash, sizeof(TQNotifyGift));
}
void CDNDBConnection::QueryMakeGiftByQuest(CDNUserSession* pSession, int nQuestID, WCHAR *pMemo, int *nRewardItemList, bool bNewFlag)
{
TQMakeGiftByQuest Cash;
memset(&Cash, 0, sizeof(TQMakeGiftByQuest));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.bPCBang = pSession->IsPCBang();
Cash.nQuestID = nQuestID;
if(pMemo) _wcscpy(Cash.wszMemo, GIFTMESSAGEMAX, pMemo, (int)wcslen(pMemo) );
Cash.nLifeSpan = 7 * 24 * 60; // 일단 7일이라고 기획서에 써있다
if( pSession->GetIp() )
_strcpy(Cash.szIp, _countof(Cash.szIp), pSession->GetIp(), (int)strlen(pSession->GetIp()));
Cash.bNewFlag = bNewFlag;
int nCount = 0;
for (int i = 0; i < MAILATTACHITEMMAX; i++){
if(nRewardItemList[i] <= 0) continue;
Cash.nRewardItemSN[nCount] = nRewardItemList[i];
nCount++;
}
Cash.cRewardCount = nCount;
int nLen = sizeof(TQMakeGiftByQuest) - sizeof(Cash.nRewardItemSN) +(sizeof(int) * Cash.cRewardCount);
AddSendData(MAINCMD_CASH, QUERY_MAKEGIFTBYQUEST, (char*)&Cash, sizeof(TQMakeGiftByQuest));
}
void CDNDBConnection::QueryMakeGift(BYTE cThreadID, int nWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID, bool bPCBang, WCHAR *pMemo, char cPayMethod, int iOrderKey, char *pIp, int *nRewardItemList, bool bNewFlag)
{
TQMakeGift Cash;
memset(&Cash, 0, sizeof(TQMakeGift));
Cash.cThreadID = cThreadID;
Cash.cWorldSetID = nWorldSetID;
Cash.nAccountDBID = nAccountDBID;
Cash.biCharacterDBID = biCharacterDBID;
Cash.bPCBang = bPCBang;
if(pMemo) _wcscpy(Cash.wszMemo, GIFTMESSAGEMAX, pMemo, (int)wcslen(pMemo) );
Cash.cPayMethodCode = cPayMethod;
Cash.iOrderKey = iOrderKey;
Cash.nLifeSpan = 7 * 24 * 60; // 일단 7일이라고 기획서에 써있다
if(pIp)
_strcpy(Cash.szIp, _countof(Cash.szIp), pIp, (int)strlen(pIp));
Cash.bNewFlag = bNewFlag;
int nCount = 0;
for (int i = 0; i < 5; i++){
if(nRewardItemList[i] <= 0) continue;
Cash.nRewardItemSN[nCount] = nRewardItemList[i];
nCount++;
}
Cash.cRewardCount = nCount;
int nLen = sizeof(TQMakeGift) - sizeof(Cash.nRewardItemSN) +(sizeof(int) * Cash.cRewardCount);
AddSendData(MAINCMD_CASH, QUERY_MAKEGIFT, (char*)&Cash, sizeof(TQMakeGift));
}
void CDNDBConnection::QueryIncreaseVIPPoint(CDNUserSession* pSession, int nBasicPoint, INT64 biPurchaseOrderID, short wVIPPeriod, bool bAutoPay)
{
TQIncreaseVIPPoint Cash;
memset(&Cash, 0, sizeof(TQIncreaseVIPPoint));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.nBasicPoint = nBasicPoint;
Cash.biPurchaseOrderID = biPurchaseOrderID;
Cash.wVIPPeriod = wVIPPeriod;
Cash.bAutoPay = bAutoPay;
AddSendData(MAINCMD_CASH, QUERY_INCREASEVIPPOINT, (char*)&Cash, sizeof(TQIncreaseVIPPoint));
}
void CDNDBConnection::QueryGetVIPPoint(CDNUserSession* pSession)
{
TQGetVIPPoint Cash;
memset(&Cash, 0, sizeof(TQGetVIPPoint));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_CASH, QUERY_GETVIPPOINT, (char*)&Cash, sizeof(TQGetVIPPoint));
}
void CDNDBConnection::QueryModVIPAutoPayFlag(CDNUserSession* pSession, bool bAutoPay)
{
TQModVIPAutoPayFlag Cash;
memset(&Cash, 0, sizeof(TQModVIPAutoPayFlag));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.bAutoPay = bAutoPay;
AddSendData(MAINCMD_CASH, QUERY_MODVIPAUTOPAYFLAG, (char*)&Cash, sizeof(TQModVIPAutoPayFlag));
}
void CDNDBConnection::QueryGiftByCheat(CDNUserSession* pSession, int nItemSN)
{
TQGiftByCheat Cash;
memset(&Cash, 0, sizeof(TQGiftByCheat));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
if(pSession->GetCharacterName()) _wcscpy(Cash.wszCharacterName, _countof(Cash.wszCharacterName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()));
if(pSession->GetIp()) _strcpy(Cash.szIp, _countof(Cash.szIp), pSession->GetIp(), (int)strlen(pSession->GetIp()));
Cash.nItemSN = nItemSN;
AddSendData(MAINCMD_CASH, QUERY_GIFTBYCHEAT, (char*)&Cash, sizeof(TQGiftByCheat));
}
void CDNDBConnection::QueryPetal(CDNUserSession* pSession, int nPetal, int nUseItemID, char cInvenType, BYTE cInvenIndex, INT64 biInvenSerial)
{
TQPetal Cash;
memset(&Cash, 0, sizeof(TQPetal));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.nUseItemID = nUseItemID;
Cash.nAddPetal = nPetal;
Cash.cInvenType = cInvenType;
Cash.cInvenIndex = cInvenIndex;
Cash.biInvenSerial = biInvenSerial;
Cash.iMapID = pSession->GetMapIndex();
_wcscpy( Cash.wszIP, _countof(Cash.wszIP), pSession->GetIpW(), IPLENMAX );
AddSendData(MAINCMD_CASH, QUERY_PETAL, (char*)&Cash, sizeof(TQPetal));
}
#if defined( PRE_PVP_GAMBLEROOM )
void CDNDBConnection::QueryPetalLog(CDNUserSession* pSession, int nPetal, int nUseItemID, BYTE cLogCode, INT64 nGambleDBID)
{
TQAddPetalLogCode Cash;
memset(&Cash, 0, sizeof(TQAddPetalLogCode));
Cash.cThreadID = pSession->GetDBThreadID();
Cash.cWorldSetID = pSession->GetWorldSetID();
Cash.nAccountDBID = pSession->GetAccountDBID();
Cash.biCharacterDBID = pSession->GetCharacterDBID();
Cash.nUseItemID = nUseItemID;
Cash.nAddPetal = nPetal;
Cash.cLogCode = cLogCode;
Cash.nGambleDBID = nGambleDBID;
AddSendData(MAINCMD_CASH, QUERY_LOGCODE_PETAL, (char*)&Cash, sizeof(TQAddPetalLogCode));
}
void CDNDBConnection::QueryUsePetal(BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID, int nPetal, BYTE cLogCode, INT64 nGambleDBID)
{
TQUsePetal Cash;
memset(&Cash, 0, sizeof(TQUsePetal));
Cash.cThreadID = cThreadID;
Cash.cWorldSetID = cWorldSetID;
Cash.nAccountDBID = nAccountDBID;
Cash.biCharacterDBID = biCharacterDBID;
Cash.nDelPetal = nPetal;
Cash.cLogCode = cLogCode;
Cash.nGambleDBID = nGambleDBID;
AddSendData(MAINCMD_CASH, QUERY_USE_PETAL, (char*)&Cash, sizeof(TQUsePetal));
}
#endif
#if defined(PRE_ADD_GIFT_RETURN)
void CDNDBConnection::QueryModGiftRejectFlag(CDNUserSession* pSession, INT64 biPurchaseOrderID)
{
TQGiftReturn GiftReturn;
memset(&GiftReturn, 0, sizeof(TQGiftReturn));
GiftReturn.cThreadID = pSession->GetDBThreadID();
GiftReturn.cWorldSetID = pSession->GetWorldSetID();
GiftReturn.nAccountDBID = pSession->GetAccountDBID();
GiftReturn.biPurchaseOrderID = biPurchaseOrderID;
AddSendData(MAINCMD_CASH, QUERY_GIFTRETURN, (char*)&GiftReturn, sizeof(TQGiftReturn));
}
#endif // #if defined(PRE_ADD_GIFT_RETURN)
#if defined(PRE_ADD_CASH_REFUND)
void CDNDBConnection::QueryGetListRefundableProducts(CDNUserSession* pSession)
{
TQPaymentItemList PaymentItemList;
memset(&PaymentItemList, 0, sizeof(TQPaymentItemList));
PaymentItemList.cThreadID = pSession->GetDBThreadID();
PaymentItemList.cWorldSetID = pSession->GetWorldSetID();
PaymentItemList.nAccountDBID = pSession->GetAccountDBID();
PaymentItemList.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_CASH, QUERY_PAYMENTINVEN_LIST, (char*)&PaymentItemList, sizeof(TQPaymentItemList));
}
#endif
void CDNDBConnection::QueryCheatGiftClear(CDNUserSession* pSession)
{
TQCheatGiftClear CheatGiftClear;
memset(&CheatGiftClear, 0, sizeof(TQCheatGiftClear));
CheatGiftClear.cThreadID = pSession->GetDBThreadID();
CheatGiftClear.cWorldSetID = pSession->GetWorldSetID();
CheatGiftClear.nAccountDBID = pSession->GetAccountDBID();
CheatGiftClear.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_CASH, QUERY_CHEAT_GIFTCLEAR, (char*)&CheatGiftClear, sizeof(TQCheatGiftClear));
}
void CDNDBConnection::QueryMsgAdj(CDNUserSession* pSession, int nChannelID, int nVerifyMapIndex, char cGateNo)
{
TQMsgAdjust packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.nChannelID = nChannelID;
packet.nVerifyMapIndex = nVerifyMapIndex;
packet.cGateNo = cGateNo;
AddSendData(MAINCMD_MSGADJUST, QUERY_MSGADJUST, (char*)&packet, sizeof(packet));
}
#ifdef PRE_FIX_63822
void CDNDBConnection::QueryMsgAdjSeq(CDNUserSession * pSession, int nSubCmd)
{
TQMsgAdjustSeq packet;
memset(&packet, 0, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
AddSendData(MAINCMD_MSGADJUST, nSubCmd, (char*)&packet, sizeof(packet));
}
#endif //#ifdef PRE_FIX_63822
void CDNDBConnection::QueryAddPartyStartLog( CDNUserSession* pSession, INT64 biPartyLogID )
{
TQAddPartyStartLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biPartyLogID = biPartyLogID;
AddSendData( MAINCMD_LOG, QUERY_ADDPARTY_STARTLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddPartyEndLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biPartyLogID )
{
TQAddPartyEndLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biPartyLogID = biPartyLogID;
AddSendData( MAINCMD_LOG, QUERY_ADDPARTY_ENDLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddStageStartLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomLogID, INT64 biPartyLogID, BYTE cPartySize, int iMapID, DBDNWorldDef::DifficultyCode::eCode Code )
{
TQAddStageStartLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomLogID = biRoomLogID;
TxPacket.biPartyLogID = biPartyLogID;
TxPacket.cPartySize = cPartySize;
TxPacket.iMapID = iMapID;
TxPacket.Code = Code;
AddSendData( MAINCMD_LOG, QUERY_ADDSTAGE_STARTLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_36870 )
void CDNDBConnection::QueryAddStageClearLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomLogID, INT64 biCharacterDBID, int iJobID, BYTE cLevel, bool bClearFlag, DBDNWorldDef::ClearGradeCode::eCode ClearCode,
int iMaxComboCount, BYTE cBossKillCount, int iRewardCharacterExp, int iBonusCharacterExp, int iClearPoint, int iBonusClearPoint, int iClearTimeSec, int iClearRound )
#else
void CDNDBConnection::QueryAddStageClearLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomLogID, INT64 biCharacterDBID, int iJobID, BYTE cLevel, bool bClearFlag, DBDNWorldDef::ClearGradeCode::eCode ClearCode,
int iMaxComboCount, BYTE cBossKillCount, int iRewardCharacterExp, int iBonusCharacterExp, int iClearPoint, int iBonusClearPoint, int iClearTimeSec )
#endif // #if defined( PRE_ADD_36870 )
{
TQAddStageClearLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomLogID = biRoomLogID;
TxPacket.biCharacterDBID = biCharacterDBID;;
TxPacket.iJobID = iJobID;
TxPacket.cCharacterLevel = cLevel;
TxPacket.bClearFlag = bClearFlag;
TxPacket.Code = ClearCode;
TxPacket.iMaxComboCount = iMaxComboCount;
TxPacket.cBossKillCount = cBossKillCount;
TxPacket.iRewardCharacterExp = iRewardCharacterExp;
TxPacket.iBonusCharacterExp = iBonusCharacterExp;
TxPacket.iClearPoint = iClearPoint;
TxPacket.iBonusClearPoint = iBonusClearPoint;
TxPacket.iClearTimeSec = iClearTimeSec;
#if defined( PRE_ADD_36870 )
TxPacket.iClearRound = iClearRound;
#endif // #if defined( PRE_ADD_36870 )
AddSendData( MAINCMD_LOG, QUERY_ADDSTAGE_CLEARLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddStageRewardLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomLogID, INT64 biCharacterDBID, DBDNWorldDef::RewardBoxCode::eCode Code, INT64 biRewardItemSerial, int iRewardItemID, int iRewardRet )
{
TQAddStageRewardLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomLogID = biRoomLogID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.Code = Code;
TxPacket.biRewardItemSerial = biRewardItemSerial;
TxPacket.iRewardItemID = iRewardItemID;
TxPacket.iRewardRet = iRewardRet;
AddSendData( MAINCMD_LOG, QUERY_ADDSTAGE_REWARDLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddStageEndLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomLogID, DBDNWorldDef::WhereToGoCode::eCode Code )
{
TQAddStageEndLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomLogID = biRoomLogID;
TxPacket.Code = Code;
AddSendData( MAINCMD_LOG, QUERY_ADDSTAGE_ENDLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddPvPStartLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomID1, int iRoomID2, BYTE cMaxPlayerCount, DBDNWorldDef::PvPModeCode::eCode Code, int iPvPModeDetailValue,
bool bBreakIntoFlag, bool bItemUseFlag, bool bSecretFlag, int iMapID, INT64 biRoomMasterCharacterDBID, INT64 biCreateRoomCharacterDBID )
{
TQAddPvPStartLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomID1 = biRoomID1;
TxPacket.iRoomID2 = iRoomID2;
TxPacket.cMaxPlayerCount = cMaxPlayerCount;
TxPacket.Code = Code;
TxPacket.iPvPModeDetailValue = iPvPModeDetailValue;
TxPacket.bBreakIntoFlag = bBreakIntoFlag;
TxPacket.bItemUseFlag = bItemUseFlag;
TxPacket.bSecretFlag = bSecretFlag;
TxPacket.iMapID = iMapID;
TxPacket.biRoomMasterCharacterDBID = biRoomMasterCharacterDBID;
TxPacket.biCreateRoomCharacterDBID = biCreateRoomCharacterDBID;
AddSendData( MAINCMD_LOG, QUERY_ADDPVP_STARTLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddPvPResultLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomID1, int iRoomID2, INT64 biCharacterDBID, DBDNWorldDef::PvPTeamCode::eCode TeamCode,
bool bBreakIntoFlag, DBDNWorldDef::PvPResultCode::eCode ResultCode, int iPlayTimeSec, int iPvPKillPoint, int iPvPAssistPoint, int iPvPSupportPoint,
UINT* uiKillScore, UINT* uiKilledScore, int nOccupationCount, BYTE cOccupationWinType )
{
TQAddPvPResultLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomID1 = biRoomID1;
TxPacket.iRoomID2 = iRoomID2;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.TeamCode = TeamCode;
TxPacket.bBreakIntoFlag = bBreakIntoFlag;
TxPacket.ResultCode = ResultCode;
TxPacket.iPlayTimeSec = iPlayTimeSec;
TxPacket.iPvPKillPoint = iPvPKillPoint;
TxPacket.iPvPAssistPoint = iPvPAssistPoint;
TxPacket.iPvPSupportPoint = iPvPSupportPoint;
TxPacket.nOccupationCount = nOccupationCount;
TxPacket.cOccupationWinType = cOccupationWinType;
for (int i=CLASS_WARRIER; i<CLASS_MAX; i++)
{
if (uiKillScore)
TxPacket.iVsKOWin[i-1] = uiKillScore[i-1];
if (uiKilledScore)
TxPacket.iVsKOLose[i-1] = uiKilledScore[i-1];
}
AddSendData( MAINCMD_LOG, QUERY_ADDPVP_RESULTLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddPvPEndLog( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomID1, int iRoomID2 )
{
TQAddPvPEndLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomID1 = biRoomID1;
TxPacket.iRoomID2 = iRoomID2;
AddSendData( MAINCMD_LOG, QUERY_ADDPVP_ENDLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_58761 )
void CDNDBConnection::QueryAddNestGateStartLog(BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomID, BYTE cPartySize, int nGateID)
{
TQAddNestGateStartLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomID = biRoomID;
TxPacket.cPartySize = cPartySize;
TxPacket.nGateID = nGateID;
AddSendData( MAINCMD_LOG, QUERY_ADDNESTGATE_STARTLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddNestGateEndLog(BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomID, BYTE cPartySize)
{
TQAddNestGateEndLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomID = biRoomID;
TxPacket.cPartySize = cPartySize;
AddSendData( MAINCMD_LOG, QUERY_ADDNESTGATE_ENDLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddNestGateClearLog(BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biRoomID, bool bClearFlag, INT64 biChracterDBID, BYTE cCharacterJob, BYTE cCharacterLevel)
{
TQAddNestGateClearLog TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biRoomID = biRoomID;
TxPacket.bClearFlag = bClearFlag;
TxPacket.biChracterDBID = biChracterDBID;
TxPacket.cCharacterJob = cCharacterJob;
TxPacket.cCharacterLevel = cCharacterLevel;
AddSendData( MAINCMD_LOG, QUERY_ADDNESTGATE_CLEARLOG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryNestDeathLog(CDNUserSession *pSession, INT64 biRoomID, int nMonsterID, int nSkillID, BYTE cCharacterJob, BYTE cCharacterLevel)
{
TQNestDeathLog Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.biRoomID = biRoomID;
Packet.nMonterID = nMonsterID;
Packet.nSkillID = nSkillID;
Packet.cCharacterJob = cCharacterJob;
Packet.cCharacterLevel = cCharacterLevel;
AddSendData(MAINCMD_LOG, QUERY_ADDNESTDEATHLOG, (char*)&Packet, sizeof(Packet));
}
#endif
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
//#########################################################################################################################################
// MAINCMD_REPUTATION
//#########################################################################################################################################
void CDNDBConnection::QueryGetListNpcReputation( BYTE cThreadID, CDNUserSession *pSession, int iMapID/*=0*/ )
{
TQGetListNpcFavor TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iMapID = iMapID;
AddSendData( MAINCMD_REPUTATION, QUERT_GET_LISTNPCFAVOR, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModNpcReputation( CDNUserSession *pSession, std::vector<TNpcReputation>& Data )
{
TQModNPCFavor TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
_ASSERT( Data.size() > 0 && Data.size() < _countof(TxPacket.UpdateArr) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cCount = static_cast<BYTE>(Data.size());
if( TxPacket.cCount > _countof(TxPacket.UpdateArr) )
{
_DANGER_POINT();
TxPacket.cCount = static_cast<BYTE>(_countof(TxPacket.UpdateArr));
}
for( UINT i=0 ; i<TxPacket.cCount ; ++i )
TxPacket.UpdateArr[i] = Data[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.UpdateArr)+(sizeof(TxPacket.UpdateArr[0])*TxPacket.cCount);
AddSendData( MAINCMD_REPUTATION, QUERY_MOD_NPCFAVOR, reinterpret_cast<char*>(&TxPacket), iSize );
}
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
//#########################################################################################################################################
// MAINCMD_MASTERSYSTEM
//#########################################################################################################################################
void CDNDBConnection::QueryGetMasterSystemSimpleInfo( BYTE cThreadID, CDNUserSession *pSession, bool bClientSend, MasterSystem::EventType::eCode EventCode )
{
TQGetMasterPupilInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.bClientSend = bClientSend;
TxPacket.EventCode = EventCode;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_SIMPLEINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetMasterSystemCountInfo( BYTE cThreadID, CDNUserSession *pSession, bool bClientSend, std::vector<INT64>& biPartyUserList )
{
TQGetMasterSystemCountInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.bClientSend = bClientSend;
TxPacket.cCount = static_cast<BYTE>(biPartyUserList.size());
if( TxPacket.cCount > _countof(TxPacket.biPartyCharacterDBID) )
{
_DANGER_POINT();
return;
}
for( UINT i=0 ; i<biPartyUserList.size() ; ++i )
TxPacket.biPartyCharacterDBID[i] = biPartyUserList[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.biPartyCharacterDBID)+TxPacket.cCount+sizeof(TxPacket.biPartyCharacterDBID[0]);
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_COUNTINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPageMasterCharacter( CDNUserSession *pSession, UINT uiPage, BYTE cJob, BYTE cGender )
{
TQGetPageMasterCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.uiPage = uiPage;
TxPacket.cJobCode = cJob;
TxPacket.cGenderCode = cGender;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_PAGEMASTERCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetMasterCharacterType1( CDNUserSession *pSession, INT64 biMasterCharacterDBID )
{
TQGetMasterCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.Code = DBDNWorldDef::GetMasterCharacterCode::MyInfo;
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_MASTERCHARACTER_TYPE1, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetMasterCharacterType2( CDNUserSession *pSession, INT64 biMasterCharacterDBID, INT64 biPupilCharacterDBID )
{
TQGetMasterCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.Code = DBDNWorldDef::GetMasterCharacterCode::MyMasterInfo;
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
TxPacket.biPupilCharacterDBID = biPupilCharacterDBID;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_MASTERCHARACTER_TYPE2, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPupilList( CDNUserSession *pSession, INT64 biMasterCharacterDBID )
{
TQGetListPupil TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = biMasterCharacterDBID;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_PUPILLIST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRegisterMasterCharacter( CDNUserSession *pSession, WCHAR* pwszText )
{
TQAddMasterCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
_wcscpy( TxPacket.wszSelfIntroduction, _countof(TxPacket.wszSelfIntroduction), pwszText, (int)wcslen(pwszText) );
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_REGISTER_MASTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRegisterCancelMasterCharacter( CDNUserSession *pSession )
{
TQDelMasterCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_REGISTERCANCEL_MASTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryJoinMasterSystem( CDNUserSession *pSession, INT64 biMasterCharacterDBID, INT64 biPupilCharacterDBID, bool bIsDirectMenu, DBDNWorldDef::TransactorCode::eCode Code, bool bIsSkip/*=false*/ )
{
TQAddMasterAndPupil TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
TxPacket.biPupilCharacterDBID = biPupilCharacterDBID;
TxPacket.bCheckRegisterFlag = (bIsDirectMenu ? false : true);
TxPacket.bIsDirectMenu = bIsDirectMenu;
TxPacket.Code = Code;
#if defined( _FINAL_BUILD )
TxPacket.bIsSkip = false;
#else
TxPacket.bIsSkip = bIsSkip;
#endif // #if defined( _FINAL_BUILD )
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_JOIN_MASTERSYSTEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetMasterAndClassmate( CDNUserSession *pSession, INT64 biCharacterDBID )
{
TQGetListMyMasterAndClassmate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = biCharacterDBID;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_MASTERANDCLASSMATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetClassmateInfo( CDNUserSession *pSession, INT64 biClassmateCharacterDBID )
{
TQGetMyClassmate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.biClassmateCharacterDBID = biClassmateCharacterDBID;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GET_CLASSMATEINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryLeaveMasterSystem( CDNUserSession *pSession, INT64 biMasterCharacterDBID, INT64 biPupilCharacterDBID, DBDNWorldDef::TransactorCode::eCode Code, int iPenaltyDay, int iPenaltyRespectPoint, bool bIsSkip/*=false*/ )
{
TQDelMasterAndPupil TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
TxPacket.biPupilCharacterDBID = biPupilCharacterDBID;
TxPacket.Code = Code;
TxPacket.iPenaltyDay = iPenaltyDay;
TxPacket.iPenaltyRespectPoint = iPenaltyRespectPoint;
#if defined( _FINAL_BUILD )
TxPacket.bIsSkip = false;
#else
TxPacket.bIsSkip = bIsSkip;
#endif // #if defined( _FINAL_BUILD )
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_LEAVE_MASTERSYSTEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryMasterSystemGraduate( CDNUserSession *pSession )
{
TQGraduate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()) );
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_GRADUATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModMasterSystemRespectPoint( CDNUserSession *pSession, int iRespectPoint )
{
TQModRespectPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iRespectPoint = iRespectPoint;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_MOD_RESPECTPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModMasterSystemFavorPoint( CDNUserSession *pSession, INT64 biMasterCharacterDBID, INT64 biPupilCharacterDBID, int iFavorPoint )
{
TQModMasterFavorPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
TxPacket.biPupilCharacterDBID = biPupilCharacterDBID;
TxPacket.iFavorPoint = iFavorPoint;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_MOD_FAVORPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModMasterSystemGraduateCount( CDNUserSession *pSession, int iGraduateCount )
{
TQModMasterSystemGraduateCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iGraduateCount = iGraduateCount;
AddSendData( MAINCMD_MASTERSYSTEM, QUERY_MOD_GRADUATECOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_SECONDARY_SKILL )
void CDNDBConnection::QueryAddSecondarySkill( CDNUserSession *pSession, int iSkillID, SecondarySkill::Type::eType Type )
{
TQAddSecondarySkill TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iSecondarySkillID = iSkillID;
TxPacket.Type = Type;
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_ADD_SECONDARYSKILL, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDeleteSecondarySkill( CDNUserSession *pSession, int iSkillID )
{
TQDelSecondarySkill TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iSecondarySkillID = iSkillID;
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_DELETE_SECONDARYSKILL, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetListSecondarySkill( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetListSecondarySkill TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_GETLIST_SECONDARYSKILL, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModSecondarySkillExp( CDNUserSession *pSession, int iSkillID, int iExp, int iExpAfter )
{
TQModSecondarySkillExp TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iSecondarySkillID = iSkillID;
TxPacket.iSecondarySkillExp = iExp;
TxPacket.iSecondarySkillExpAfter = iExpAfter;
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_MOD_SECONDARYSKILL_EXP, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddSecondarySkillRecipe( CDNUserSession *pSession, bool bIsCash, INT64 biItemSerial, int iSkillID )
{
TQSetManufactureSkillRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.LocationCode = bIsCash ? DBDNWorldDef::ItemLocation::CashInventory : DBDNWorldDef::ItemLocation::Inventory;
TxPacket.biItemSerial = biItemSerial;
TxPacket.iSecondarySkillID = iSkillID;
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_ADD_SECONDARYSKILL_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDeleteSecondarySkillRecipe( CDNUserSession *pSession, INT64 biItemSerial )
{
TQDelManufactureSkillRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.biItemSerial = biItemSerial;
if( pSession->GetIp() )
_strcpy( TxPacket.szIP, _countof(TxPacket.szIP), pSession->GetIp(), static_cast<int>(strlen(pSession->GetIp())) );
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_DELETE_SECONDARYSKILL_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryExtractSecondarySkillRecipe( CDNUserSession *pSession, INT64 biItemSerial, DBDNWorldDef::ItemLocation::eCode Code )
{
TQExtractManufactureSkillRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.biItemSerial = biItemSerial;
TxPacket.LocationCode = Code;
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_EXTRACT_SECONDARYSKILL_RECIPE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModSecondarySkillRecipeExp( CDNUserSession *pSession, INT64 biItemSerial, short nAddExp, short nExpAfter )
{
TQModManufactureSkillRecipe TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.biItemSerial = biItemSerial;
TxPacket.nDurability = nAddExp;
TxPacket.nDurabilityAfter = nExpAfter;
AddSendData( MAINCMD_SECONDARYSKILL, QUERY_MOD_SECONDARYSKILL_RECIPE_EXP, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
void CDNDBConnection::QueryFarmList(BYTE cThreadID, int iWorldID)
{
TQGetListFarm TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.cEnableFlag = 1; //켜진것? 만 얻어오자
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
AddSendData(MAINCMD_FARM, QUERY_GETLIST_FARM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryGetListField( BYTE cThreadID, int iWorldID, int iRoomID, int iFarmDBID )
{
TQGetListField TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.iRoomID = iRoomID;
TxPacket.iFarmDBID = iFarmDBID;
AddSendData( MAINCMD_FARM, QUERY_GETLIST_FIELD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetListFieldByCharacter(CDNUserSession *pSession, bool bRefreshGate)
{
TQGetListFieldByCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.bRefreshGate = bRefreshGate;
AddSendData( MAINCMD_FARM, QUERY_GETLIST_FIELD_BYCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetCountHarvestDepotItem( CDNUserSession *pSession )
{
TQGetCountHarvestDepotItem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_FARM, QUERY_GETCOUNT_HARVESTDEPOTITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( _GAMESERVER )
void CDNDBConnection::QueryAddField( BYTE cThreadID, CDNUserSession *pSession, CGrowingArea* pArea, int iMaxFieldCount, BYTE cInvenIndex, INT64 biItemSerial, const CSFarmPlant* pPacket )
{
if( pArea == NULL || pArea->GetPlantSeed() == NULL )
{
_ASSERT( 0 );
return;
}
CPlantSeed* pSeed = pArea->GetPlantSeed();
TQAddField TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pArea->GetFarmGameRoom()->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.iRoomID = pArea->GetFarmGameRoom()->GetRoomID();
TxPacket.iFarmDBID = pArea->GetFarmGameRoom()->GetFarmIndex();
TxPacket.nFieldIndex = pArea->GetIndex();
TxPacket.biCharacterDBID = pSeed->GetOwnerCharacterDBID();
TxPacket.iItemID = pSeed->GetSeedItemID();
TxPacket.iAttachItemID = pSeed->GetFirstAttachItemID();
TxPacket.iMaxFieldCount = iMaxFieldCount;
// 씨앗 제거용 정보
TxPacket.cInvenIndex = cInvenIndex;
TxPacket.biSeedItemSerial = biItemSerial;
TxPacket.cAttachCount = pPacket->cCount;
TxPacket.iMapID = pSession->GetMapIndex();
for( int i=0 ; i<pPacket->cCount ; ++i )
TxPacket.AttachItems[i] = pPacket->AttachItems[i];
_wcscpy( TxPacket.wszIP, _countof(TxPacket.wszIP), pSession->GetIpW(), (int)wcslen(pSession->GetIpW()) );
AddSendData( MAINCMD_FARM, QUERY_ADD_FIELD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDelField( BYTE cThreadID, int iWorldID, int iFarmDBID, int iRoomID, int iAreaIndex )
{
TQDelField TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.iFarmDBID = iFarmDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.nFieldIndex = iAreaIndex;
AddSendData( MAINCMD_FARM, QUERY_DEL_FIELD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddFieldAttachment( BYTE cThreadID, CDNUserSession *pSession, int iFarmDBID, int iRoomID, int iAreaIndex, int iAttachItemID, BYTE cInvenType, BYTE cInvenIndex, INT64 biItemSerial, bool bVirtualAttach/*=false*/ )
{
TQAddFieldAttachment TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iRoomID = iRoomID;
TxPacket.iFarmDBID = iFarmDBID;
TxPacket.nFieldIndex = iAreaIndex;
TxPacket.iAttachItemID = iAttachItemID;
// AttachItem 제거용 정보
#if defined( PRE_ADD_VIP_FARM )
TxPacket.bVirtualAttach = bVirtualAttach;
#endif // #if defined( PRE_ADD_VIP_FARM )
TxPacket.cInvenType = cInvenType;
TxPacket.cInvenIndex = cInvenIndex;
TxPacket.biAttachItemSerial = biItemSerial;
TxPacket.iMapID = pSession->GetMapIndex();
_wcscpy( TxPacket.wszIP, _countof(TxPacket.wszIP), pSession->GetIpW(), (int)wcslen(pSession->GetIpW()) );
AddSendData( MAINCMD_FARM, QUERY_ADD_FIELD_ATTACHMENT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModFieldElapsedTime( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, int iFarmDBID, std::vector<int>& vAreaIndex, std::vector<int>& vElapsedTimeSec )
{
_ASSERT( vAreaIndex.size() > 0 );
_ASSERT( vAreaIndex.size() < Farm::Max::FIELDCOUNT );
_ASSERT( vAreaIndex.size() == vElapsedTimeSec.size() );
TQModFieldElapsedTime TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.iFarmDBID = iFarmDBID;
TxPacket.cCount = static_cast<BYTE>(vAreaIndex.size());
for( UINT i=0 ; i<vAreaIndex.size() ; ++i )
{
TxPacket.Updates[i].nFieldIndex = vAreaIndex[i];
TxPacket.Updates[i].iElapsedTimeSec = vElapsedTimeSec[i];
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.Updates)+TxPacket.cCount*sizeof(TxPacket.Updates[0]);
AddSendData( MAINCMD_FARM, QUERY_MOD_FIELD_ELAPSEDTIME, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNDBConnection::QueryHarvest( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, int iFarmDBID, int iRoomID, int iAreaIndex, INT64 biOwnerCharacterDBID, INT64 biCharacterDBID, std::vector<TItem>& vItem, int iMapID, const char* pszIP )
{
_ASSERT( vItem.size() > 0 && vItem.size() <= Farm::Max::HARVESTITEM_COUNT );
if( vItem.size() == 0 || vItem.size() > Farm::Max::HARVESTITEM_COUNT )
return;
TQHarvest TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.iFarmDBID = iFarmDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.nFieldIndex = iAreaIndex;
TxPacket.biCharacterDBID = biOwnerCharacterDBID;
TxPacket.biHarvestCharacterDBID = biCharacterDBID;
TxPacket.iMapID = iMapID;
_strcpy( TxPacket.szIP, _countof(TxPacket.szIP), pszIP, (int)strlen(pszIP) );
for( UINT i=0 ; i<vItem.size() ; ++i )
{
TxPacket.HarvestItems[i].biItemSerial = vItem[i].nSerial;
TxPacket.HarvestItems[i].iItemID = vItem[i].nItemID;
TxPacket.HarvestItems[i].nItemCount = vItem[i].wCount;
TxPacket.HarvestItems[i].bSoulBoundFlag = vItem[i].bSoulbound;
TxPacket.HarvestItems[i].cSealCount = vItem[i].cSealCount;
TxPacket.HarvestItems[i].cItemOption = vItem[i].cOption;
TxPacket.HarvestItems[i].bEternityFlag = vItem[i].bEternity;
TxPacket.HarvestItems[i].iLifeSpan = 0;
}
AddSendData( MAINCMD_FARM, QUERY_HARVEST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetListHarvestDepotItem( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, INT64 biLastUniqueID )
{
TQGetListHarvestDepotItem TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.biLastUniqueID = biLastUniqueID;
AddSendData( MAINCMD_FARM, QUERY_GETLIST_HARVESTDEPOTITEM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetFieldCountByCharacter( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, bool bIsSend )
{
TQGetFieldCountByCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.bIsSend = bIsSend;
AddSendData( MAINCMD_FARM, QUERY_GETFIELDCOUNT_BYCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetFieldItemCount( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, int iItemID, int iRoomID, int iAreaIndex, UINT nSessionID )
{
TQGetFieldItemCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.nSessionID = nSessionID;
TxPacket.iItemID = iItemID;
TxPacket.iRoomID = iRoomID;
TxPacket.iAreaIndex = iAreaIndex;
AddSendData( MAINCMD_FARM, QUERY_GET_FIELDITEMCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetListFieldForCharacter( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, int iRoomID )
{
TQGetListFieldForCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.biCharacterDBID = biCharacterDBID;
AddSendData( MAINCMD_FARM, QUERY_GETLIST_FIELD_FORCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddFieldForCharacter( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, int iRoomID, CGrowingArea* pArea, int iMaxFieldCount, BYTE cInvenIndex, INT64 biSeedItemSerial, const CSFarmPlant* pPacket, int iMapID, const WCHAR* pwszIP )
{
if( pArea == NULL || pArea->GetPlantSeed() == NULL )
{
_ASSERT( 0 );
return;
}
CPlantSeed* pSeed = pArea->GetPlantSeed();
TQAddField TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.nFieldIndex = pArea->GetIndex();
TxPacket.biCharacterDBID = pSeed->GetOwnerCharacterDBID();
TxPacket.iItemID = pSeed->GetSeedItemID();
TxPacket.iAttachItemID = pSeed->GetFirstAttachItemID();
TxPacket.iMaxFieldCount = iMaxFieldCount;
// 씨앗 제거용 정보
TxPacket.cInvenIndex = cInvenIndex;
TxPacket.biSeedItemSerial = biSeedItemSerial;
TxPacket.cAttachCount = pPacket->cCount;
TxPacket.iMapID = iMapID;
for( int i=0 ; i<pPacket->cCount ; ++i )
TxPacket.AttachItems[i] = pPacket->AttachItems[i];
_wcscpy( TxPacket.wszIP, _countof(TxPacket.wszIP), pwszIP, (int)wcslen(pwszIP) );
AddSendData( MAINCMD_FARM, QUERY_ADD_FIELD_FORCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryDelFieldForCharacter( BYTE cThreadID, int iWorldID, INT64 biCharacterDBID, int iRoomID, int iAreaIndex )
{
TQDelFieldForCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.nFieldIndex = iAreaIndex;
AddSendData( MAINCMD_FARM, QUERY_DEL_FIELD_FORCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined( PRE_ADD_VIP_FARM )
void CDNDBConnection::QueryAddFieldForCharacterAttachment( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, int iRoomID, int iAreaIndex, int iAttachItemID,
BYTE cInvenType, BYTE cInvenIndex, INT64 biItemSerial, int iMapID, const WCHAR* pwszIP, bool bVirtualAttach/*=false*/ )
#else
void CDNDBConnection::QueryAddFieldForCharacterAttachment( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, int iRoomID, int iAreaIndex, int iAttachItemID,
BYTE cInvenType, BYTE cInvenIndex, INT64 biItemSerial, int iMapID, const WCHAR* pwszIP )
#endif // #if defined( PRE_ADD_VIP_FARM )
{
TQAddFieldAttachment TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.nFieldIndex = iAreaIndex;
TxPacket.iAttachItemID = iAttachItemID;
// AttachItem 제거용 정보
#if defined( PRE_ADD_VIP_FARM )
TxPacket.bVirtualAttach = bVirtualAttach;
#endif // #if defined( PRE_ADD_VIP_FARM )
TxPacket.cInvenType = cInvenType;
TxPacket.cInvenIndex = cInvenIndex;
TxPacket.biAttachItemSerial = biItemSerial;
TxPacket.iMapID = iMapID;
_wcscpy( TxPacket.wszIP, _countof(TxPacket.wszIP), pwszIP, (int)wcslen(pwszIP) );
AddSendData( MAINCMD_FARM, QUERY_ADD_FIELD_FORCHARACTER_ATTACHMENT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModFieldForCharacterElapsedTime( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, std::vector<int>& vAreaIndex, std::vector<int>& vElapsedTimeSec )
{
_ASSERT( vAreaIndex.size() > 0 );
_ASSERT( vAreaIndex.size() < Farm::Max::PRIVATEFIELDCOUNT );
_ASSERT( vAreaIndex.size() == vElapsedTimeSec.size() );
TQModFieldForCharacterElapsedTime TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.cCount = static_cast<BYTE>(vAreaIndex.size());
for( UINT i=0 ; i<vAreaIndex.size() ; ++i )
{
TxPacket.Updates[i].nFieldIndex = vAreaIndex[i];
TxPacket.Updates[i].iElapsedTimeSec = vElapsedTimeSec[i];
}
int iSize = sizeof(TxPacket)-sizeof(TxPacket.Updates)+TxPacket.cCount*sizeof(TxPacket.Updates[0]);
AddSendData( MAINCMD_FARM, QUERY_MOD_FIELD_FORCHARACTER_ELAPSEDTIME, reinterpret_cast<char*>(&TxPacket), iSize );
}
void CDNDBConnection::QueryHarvestForCharacter( BYTE cThreadID, int iWorldID, UINT uiAccountDBID, int iRoomID, int iAreaIndex, INT64 biOwnerCharacterDBID, INT64 biCharacterDBID, std::vector<TItem>& vItem, int iMapID, const char* pszIP )
{
_ASSERT( vItem.size() > 0 && vItem.size() <= Farm::Max::HARVESTITEM_COUNT );
if( vItem.size() == 0 || vItem.size() > Farm::Max::HARVESTITEM_COUNT )
return;
TQHarvest TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.iRoomID = iRoomID;
TxPacket.nFieldIndex = iAreaIndex;
TxPacket.biCharacterDBID = biOwnerCharacterDBID;
TxPacket.biHarvestCharacterDBID = biCharacterDBID;
TxPacket.iMapID = iMapID;
_strcpy( TxPacket.szIP, _countof(TxPacket.szIP), pszIP, (int)strlen(pszIP) );
for( UINT i=0 ; i<vItem.size() ; ++i )
{
TxPacket.HarvestItems[i].biItemSerial = vItem[i].nSerial;
TxPacket.HarvestItems[i].iItemID = vItem[i].nItemID;
TxPacket.HarvestItems[i].nItemCount = vItem[i].wCount;
TxPacket.HarvestItems[i].bSoulBoundFlag = vItem[i].bSoulbound;
TxPacket.HarvestItems[i].cSealCount = vItem[i].cSealCount;
TxPacket.HarvestItems[i].cItemOption = vItem[i].cOption;
TxPacket.HarvestItems[i].bEternityFlag = vItem[i].bEternity;
TxPacket.HarvestItems[i].iLifeSpan = 0;
}
AddSendData( MAINCMD_FARM, QUERY_HARVEST_FORCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif // #if defined( _GAMESERVER )
void CDNDBConnection::QueryDeletePeriodQuest( CDNUserSession *pSession, int nPeriodQuestType, std::vector<int>& vRemoveQuestIDs )
{
TQDeletePeriodQuest TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nPeriodQuestType = nPeriodQuestType;
TxPacket.nQuestCount = (int)vRemoveQuestIDs.size();
int idx = 0;
for( std::vector<int>::iterator i=vRemoveQuestIDs.begin(); i != vRemoveQuestIDs.end(); i++ )
{
if (idx >= MAX_PERIODQUEST_LIST )
break;
TxPacket.nQuestIDs[idx++] = (*i);
}
int nLen = sizeof(TQDeletePeriodQuest) - sizeof(TxPacket.nQuestIDs) +(sizeof(int) * TxPacket.nQuestCount);
AddSendData( MAINCMD_QUEST, QUERY_DELETE_CHARACTER_PERIODQUEST, reinterpret_cast<char*>(&TxPacket), nLen );
}
void CDNDBConnection::QueryGetPeriodQuestDate( CDNUserSession *pSession )
{
TQGetPeriodQuestDate TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_QUEST, QUERY_GET_CHARACTER_PERIODQUESTDATE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
bool CDNDBConnection::QueryAddPvPLadderResult( CDNUserSession *pSession, PvPCommon::QueryUpdatePvPDataType::eCode Type, LadderSystem::MatchType::eCode MatchType, int iGradePoint, int iHiddenGradePoint, LadderSystem::MatchResult::eCode Result, BYTE cVSJobCode, const std::vector<LadderKillResult>& vData )
{
TQAddPvPLadderResult TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
if( vData.size() > _countof(TxPacket.KillDeathCounts) )
{
_ASSERT(0);
return false;
}
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.Type = Type;
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
TxPacket.iPvPLadderGradePoint = iGradePoint;
TxPacket.iHiddenPvPLadderGradePoint = iHiddenGradePoint;
TxPacket.cResult = static_cast<BYTE>(Result);
TxPacket.cVersusCharacterJobCode = cVSJobCode;
TxPacket.cKillDeathCount = static_cast<BYTE>(vData.size());
for( int i=0 ; i<TxPacket.cKillDeathCount ; ++i )
TxPacket.KillDeathCounts[i] = vData[i];
int iSize = sizeof(TxPacket)-sizeof(TxPacket.KillDeathCounts)+TxPacket.cKillDeathCount*sizeof(TxPacket.KillDeathCounts[0]);
return(AddSendData( MAINCMD_PVP, QUERY_ADD_PVP_LADDERRESULT, reinterpret_cast<char*>(&TxPacket), iSize ) == 0);
}
void CDNDBConnection::QueryGetListPvPLadderScore( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetListPvPLadderScore TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_PVP, QUERY_GETLIST_PVP_LADDERSCORE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetListPvPLadderScoreByJob( CDNUserSession *pSession )
{
TQGetListPvPLadderScoreByJob TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_PVP, QUERY_GETLIST_PVP_LADDERSCORE_BYJOB, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryInitPvPLadderGradePoint( CDNUserSession *pSession, LadderSystem::MatchType::eCode MatchType, int iAddLadderPoint, int iLadderGradePoint )
{
TQInitPvPLadderGradePoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
TxPacket.iPvPLadderPoint = iAddLadderPoint;
TxPacket.iPvPLadderGradePoint = iLadderGradePoint;
if( pSession->GetIp() )
_strcpy( TxPacket.szIP, _countof(TxPacket.szIP), pSession->GetIp(), (int)strlen(pSession->GetIp()) );
AddSendData( MAINCMD_PVP, QUERY_INIT_PVP_LADDERGRADEPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryUsePvPLadderPoint( CDNUserSession *pSession, int iUseLadderPoint )
{
TQUsePvPLadderPoint TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.iPvPLadderPoint = iUseLadderPoint;
TxPacket.iAfterLadderPoint = pSession->GetPvPLadderScoreInfoPtr()->iPvPLadderPoint;
TxPacket.iMapID = pSession->GetMapIndex();
if( pSession->GetIp() )
_strcpy( TxPacket.szIP, _countof(TxPacket.szIP), pSession->GetIp(), (int)strlen(pSession->GetIp()) );
AddSendData( MAINCMD_PVP, QUERY_USE_PVP_LADDERPOINT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddPvPLadderCUCount( BYTE cThreadID, int iWorldID, LadderSystem::MatchType::eCode MatchType, int iCUCount )
{
TQAddPvPLadderCUCount TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
TxPacket.iCUCount = iCUCount;
AddSendData( MAINCMD_PVP, QUERY_ADD_PVP_LADDERCUCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryModPvPLadderScoresForCheat( CDNUserSession *pSession, LadderSystem::MatchType::eCode MatchType, int iPvPLadderPoint, int iPvPLadderGradePoint, int iHiddenPvPLadderGradePoint )
{
TQModPvPLadderScoresForCheat TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
TxPacket.iPvPLadderPoint = iPvPLadderPoint;
TxPacket.iPvPLadderGradePoint = iPvPLadderGradePoint;
TxPacket.iHiddenPvPLadderGradePoint = iHiddenPvPLadderGradePoint;
AddSendData( MAINCMD_PVP, QUERY_MOD_PVP_LADDERSCORE_FORCHEAT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPvPLadderRankBoard( CDNUserSession *pSession, LadderSystem::MatchType::eCode MatchType )
{
TQGetListPvPLadderRanking TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
AddSendData( MAINCMD_PVP, QUERY_GETLIST_PVPLADDERRANKING, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined(PRE_ADD_PVP_RANKING)
void CDNDBConnection::QueryGetPvPRankBoard( CDNUserSession *pSession )
{
TQGetPvPRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_RANKBOARD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPvPRankList( CDNUserSession *pSession, int nPage, BYTE cClassCode, BYTE cSubClassCode, const WCHAR* wszGuildName )
{
TQGetPvPRankList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.iPage = nPage;
TxPacket.cClassCode = cClassCode;
TxPacket.cSubClassCode = cSubClassCode;
if(wszGuildName != NULL)
_wcscpy( TxPacket.wszGuildName, _countof(TxPacket.wszGuildName), wszGuildName, static_cast<int>(wcslen(wszGuildName)) );
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_RANKLIST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPvPRankInfo( CDNUserSession *pSession, const WCHAR* wszCharName )
{
TQGetPvPRankInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
if(wszCharName != NULL)
_wcscpy(TxPacket.wszCharName, _countof(TxPacket.wszCharName), wszCharName, static_cast<int>(wcslen(wszCharName)) );
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_RANKINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPvPLadderRankBoard2( CDNUserSession *pSession, LadderSystem::MatchType::eCode MatchType )
{
TQGetPvPLadderRankBoard TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_LADDER_RANKBOARD, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPvPLadderRankList( CDNUserSession *pSession, LadderSystem::MatchType::eCode MatchType, int nPage, BYTE cClassCode, BYTE cSubClassCode, const WCHAR* wszGuildName )
{
TQGetPvPLadderRankList TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
TxPacket.iPage = nPage;
TxPacket.cClassCode = cClassCode;
TxPacket.cSubClassCode = cSubClassCode;
if(wszGuildName != NULL)
_wcscpy( TxPacket.wszGuildName, _countof(TxPacket.wszGuildName), wszGuildName, static_cast<int>(wcslen(wszGuildName)) );
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_LADDER_RANKLIST, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetPvPLadderRankInfo( CDNUserSession *pSession, LadderSystem::MatchType::eCode MatchType, const WCHAR* wszCharName )
{
TQGetPvPLadderRankInfo TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.cPvPLadderCode = static_cast<BYTE>(MatchType);
if(wszCharName != NULL)
_wcscpy(TxPacket.wszCharName, _countof(TxPacket.wszCharName), wszCharName, static_cast<int>(wcslen(wszCharName)) );
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_LADDER_RANKINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAggregatePvPRank(CDNUserSession *pSession, bool bIsPvPLadder)
{
TQForceAggregatePvPRank TxPacket;
memset(&TxPacket, 0, sizeof(TQForceCalcPvPRank));
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.bIsPvPLadder = bIsPvPLadder;
AddSendData( MAINCMD_PVP, QUERY_FORCE_AGGREGATE_PVP_RANKING, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif //#if defined(PRE_ADD_PVP_RANKING)
void CDNDBConnection::QueryGetPVPGhoulScores( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetPVPGhoulScores TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket));
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_PVP, QUERY_GET_PVP_GHOULSCORES, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAddPVPGhoulScores( CDNUserSession *pSession )
{
TQAddPVPGhoulScores TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket));
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nGhoulWin = pSession->GetAddGhoulScore(GhoulMode::PointType::GhoulWin);
TxPacket.nHumanWin = pSession->GetAddGhoulScore(GhoulMode::PointType::HumanWin);
TxPacket.nTimeOver = pSession->GetAddGhoulScore(GhoulMode::PointType::TimeOver);
TxPacket.nGhoulKill = pSession->GetAddGhoulScore(GhoulMode::PointType::GhoulKill);
TxPacket.nHumanKill = pSession->GetAddGhoulScore(GhoulMode::PointType::HumanKill);
TxPacket.nHolyWaterUse = pSession->GetAddGhoulScore(GhoulMode::PointType::HolyWaterUse);
AddSendData( MAINCMD_PVP, QUERY_ADD_PVP_GHOULSCORES, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined(PRE_ADD_PVP_TOURNAMENT)
#if defined(PRE_PVP_GAMBLEROOM )
void CDNDBConnection::QueryAddTournamentResult(BYTE cThreadID, int nWorldSetID, STournamentMatchInfo* pTournamentMatchInfo, INT64 nGableRoomDBID)
#else // #if defined(PRE_PVP_GAMBLEROOM )
void CDNDBConnection::QueryAddTournamentResult(BYTE cThreadID, int nWorldSetID, STournamentMatchInfo* pTournamentMatchInfo)
#endif // #if defined(PRE_PVP_GAMBLEROOM )
{
TQAddPVPTournamentResult TxPacket;
memset(&TxPacket, 0, sizeof(TQAddPVPTournamentResult));
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = nWorldSetID;
for(int i=0; i<PvPCommon::Common::PvPTournamentUserMax; ++i)
{
if( pTournamentMatchInfo[i].sTournamentUserInfo.uiAccountDBID>0)
{
TxPacket.biCharacterDBID[i] = pTournamentMatchInfo[i].sTournamentUserInfo.biCharacterDBID;
TxPacket.cTournamentStep[i] = pTournamentMatchInfo[i].cTournamentStep;
TxPacket.bWin[i] = pTournamentMatchInfo[i].bWin;
++TxPacket.nTotalCount;
}
else
break;
}
#if defined( PRE_PVP_GAMBLEROOM )
TxPacket.nGambleDBID = nGableRoomDBID;
#endif
AddSendData( MAINCMD_PVP, QUERY_ADD_PVP_TOURNAMENTRESULT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#endif //#if defined(PRE_ADD_PVP_TOURNAMENT)
void CDNDBConnection::QueryGetPageGuildRecruit( CDNUserSession *pSession, UINT uiPage, BYTE cJob, BYTE cLevel, BYTE cPurposeCode, WCHAR* pwszGuildName, BYTE cSortType )
{
TQGetGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.uiPage = uiPage;
TxPacket.cJobCode = cJob;
TxPacket.cLevel = cLevel;
#if defined( PRE_ADD_GUILD_EASYSYSTEM )
TxPacket.cPurposeCode = cPurposeCode;
if (pwszGuildName)
_wcscpy( TxPacket.wszGuildName, _countof(TxPacket.wszGuildName), pwszGuildName, (int)wcslen(pwszGuildName) );
TxPacket.cSortType = cSortType;
#endif
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_GET_PAGEGUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetGuildRecruitCharacter( CDNUserSession *pSession, UINT nGuildDBID)
{
TQGetGuildRecruitCharacter TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.nGuildDBID = nGuildDBID;
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_GET_PAGEGUILDRECRUITCHARACTER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetMyGuildRecruit( CDNUserSession *pSession )
{
TQGetMyGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_GET_MYGUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryGetGuildRecruitRequestCount( CDNUserSession *pSession )
{
TQGetMyGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_GET_GUILDRECRUIT_REQUESTCOUNT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRegisterOnGuildRecruit( CDNUserSession *pSession, WCHAR* pwszText, BYTE* cClassCode, int nMinLevel, int nMaxLevel, BYTE cPurposeCode, bool bCheckHomePage )
{
TQRegisterOnGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.nGuildDBID = pSession->GetGuildUID().nDBID;
TxPacket.nMinLevel = nMinLevel;
TxPacket.nMaxLevel = nMaxLevel;
if (pwszText)
_wcscpy( TxPacket.wszGuildIntroduction, _countof(TxPacket.wszGuildIntroduction), pwszText, (int)wcslen(pwszText) );
if (cClassCode)
memcpy(TxPacket.cClassCode, cClassCode, sizeof(TxPacket.cClassCode));
#if defined( PRE_ADD_GUILD_EASYSYSTEM )
TxPacket.cPurposeCode = cPurposeCode;
TxPacket.bCheckHomePage = bCheckHomePage;
#endif
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_REGISTERON_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRegisterInfoGuildRecruit( CDNUserSession *pSession )
{
TQRegisterInfoGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.nGuildDBID = pSession->GetGuildUID().nDBID;
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_REGISTERINFO_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRegisterModGuildRecruit( CDNUserSession *pSession, WCHAR* pwszText, BYTE* cClassCode, int nMinLevel, int nMaxLevel, BYTE cPurposeCode, bool bCheckHomePage )
{
TQRegisterOnGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.nGuildDBID = pSession->GetGuildUID().nDBID;
TxPacket.nMinLevel = nMinLevel;
TxPacket.nMaxLevel = nMaxLevel;
if (pwszText)
_wcscpy( TxPacket.wszGuildIntroduction, _countof(TxPacket.wszGuildIntroduction), pwszText, (int)wcslen(pwszText) );
if (cClassCode)
memcpy(TxPacket.cClassCode, cClassCode, sizeof(TxPacket.cClassCode));
#if defined( PRE_ADD_GUILD_EASYSYSTEM )
TxPacket.cPurposeCode = cPurposeCode;
TxPacket.bCheckHomePage = bCheckHomePage;
#endif
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_REGISTERMOD_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRegisterOffGuildRecruit( CDNUserSession *pSession )
{
TQRegisterOnGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.nGuildDBID = pSession->GetGuildUID().nDBID;
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_REGISTEROFF_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRequestOnGuildRecruit( CDNUserSession *pSession, UINT nGuildDBID )
{
TQGuildRecruitRequestOn TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nGuildDBID = nGuildDBID;
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_REQUESTON_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryRequestOffGuildRecruit( CDNUserSession *pSession, UINT nGuildDBID )
{
TQGuildRecruitRequestOff TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nGuildDBID = nGuildDBID;
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_REQUESTOFF_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAcceptOnGuildRecruit( CDNUserSession *pSession, UINT nGuildDBID, INT64 biAcceptCharacterDBID, short wGuildSize, WCHAR* pwszCharacterName )
{
TQGuildRecruitAcceptOn TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nGuildDBID = nGuildDBID;
TxPacket.biAcceptCharacterDBID = biAcceptCharacterDBID;
TxPacket.wGuildSize = wGuildSize;
_wcscpy( TxPacket.wszToCharacterName, _countof(TxPacket.wszToCharacterName), pwszCharacterName, (int)wcslen(pwszCharacterName) );
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_ACCEPTON_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryAcceptOffGuildRecruit( CDNUserSession *pSession, UINT nGuildDBID, INT64 biDenyCharacterDBID, WCHAR* pwszCharacterName )
{
TQGuildRecruitAcceptOff TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nGuildDBID = nGuildDBID;
TxPacket.biDenyCharacterDBID = biDenyCharacterDBID;
_wcscpy( TxPacket.wszToCharacterName, _countof(TxPacket.wszToCharacterName), pwszCharacterName, (int)wcslen(pwszCharacterName) );
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_ACCEPTOFF_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
void CDNDBConnection::QueryCheatDelGuildRecruit( CDNUserSession *pSession, UINT nGuildDBID, BYTE DelType )
{
TQDelGuildRecruit TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cThreadID = pSession->GetDBThreadID();
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.nGuildDBID = nGuildDBID;
TxPacket.nDelType = DelType;
AddSendData( MAINCMD_GUILDRECRUIT, QUERY_DELETE_GUILDRECRUIT, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
#if defined (PRE_ADD_DONATION)
void CDNDBConnection::QueryDonate(CDNUserSession *pSession, time_t tDonationTime, INT64 nCoin)
{
TQDonate packet;
ZeroMemory(&packet, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
packet.tDonationTime = tDonationTime;
packet.nCoin = nCoin;
AddSendData(MAINCMD_DONATION, QUERY_DONATE, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNDBConnection::QueryDonationRanking(CDNUserSession *pSession)
{
TQDonationRanking packet;
ZeroMemory(&packet, sizeof(packet));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_DONATION, QUERY_DONATION_RANKING, reinterpret_cast<char*>(&packet), sizeof(packet));
}
void CDNDBConnection::QueryDonationTopRanker(BYTE cThreadID, char cWorldID)
{
TQDonationTopRanker packet;
ZeroMemory(&packet, sizeof(packet));
packet.cThreadID = cThreadID;
packet.cWorldSetID = cWorldID;
AddSendData(MAINCMD_DONATION, QUERY_DONATION_TOP_RANKER, reinterpret_cast<char*>(&packet), sizeof(packet));
}
#endif // #if defined (PRE_ADD_DONATION)
#if defined( PRE_PARTY_DB )
void CDNDBConnection::QueryDelPartyForServer( int iWorldID, int iServerID )
{
TQDelPartyForServer TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.iServerID = iServerID;
AddSendData( MAINCMD_PARTY, QUERY_DELPARTY_FORSERVER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#if defined( _GAMESERVER )
void CDNDBConnection::QueryDelPartyForGameServer( int iWorldID, int iServerID )
{
TQDelPartyForServer TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.iServerID = iServerID;
AddSendData( MAINCMD_PARTY, QUERY_DELPARTY_FORGAMESERVER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#endif
void CDNDBConnection::QueryGetListParty( int iWorldID )
{
TQGetListParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.iExecptServerID = g_Config.nManagedID;
AddSendData( MAINCMD_PARTY, QUERY_GETLISTPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#if defined(PRE_FIX_62281)
void CDNDBConnection::QueryAddParty( CDNUserSession *pSession, int iManagedID, Party::LocationType::eCode LocationType, int iLocationID, const CSCreateParty* pPacket, const WCHAR * wszAfterInviteCharacterName/*=NULL*/, bool bCheat/*=false*/ )
#else
void CDNDBConnection::QueryAddParty( CDNUserSession *pSession, int iManagedID, Party::LocationType::eCode LocationType, int iLocationID, const CSCreateParty* pPacket, UINT uiAfterInvenAccountDBID/*=0*/, bool bCheat/*=false*/ )
#endif
{
TQAddParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.Data.PartyData.biLeaderCharacterDBID = pSession->GetCharacterDBID();
TxPacket.Data.PartyData.iServerID = iManagedID;
TxPacket.Data.PartyData.LocationType = LocationType;
TxPacket.Data.PartyData.iLocationID = iLocationID;
TxPacket.Data.PartyData.Type = pPacket->PartyType;
_wcscpy(TxPacket.Data.PartyData.wszPartyName, _countof(TxPacket.Data.PartyData.wszPartyName), pPacket->wszPartyName, static_cast<int>(wcslen(pPacket->wszPartyName)) );
TxPacket.Data.PartyData.nPartyMaxCount = pPacket->cPartyMemberMax;
TxPacket.Data.PartyData.iTargetMapIndex = pPacket->nTargetMapIdx;
TxPacket.Data.PartyData.TargetMapDifficulty = pPacket->Difficulty;
TxPacket.Data.PartyData.cMinLevel = pPacket->cUserLvLimitMin;
TxPacket.Data.PartyData.LootRule = pPacket->ItemLootRule;
TxPacket.Data.PartyData.LootItemRank = pPacket->ItemRank;
#if defined(PRE_FIX_62281)
if(wszAfterInviteCharacterName != NULL)
_wcscpy(TxPacket.Data.wszAfterInviteCharacterName, _countof(TxPacket.Data.wszAfterInviteCharacterName), wszAfterInviteCharacterName, static_cast<int>(wcslen(wszAfterInviteCharacterName)) );
else
TxPacket.Data.wszAfterInviteCharacterName[0] = _T('\0');
#else
TxPacket.Data.uiAfterInviteAccountDBID = uiAfterInvenAccountDBID;
#endif
TxPacket.Data.PartyData.iBitFlag = pPacket->iBitFlag;
if( pPacket->iBitFlag&Party::BitFlag::Password )
{
TxPacket.Data.PartyData.iPassword = pPacket->iPassword;
TxPacket.Data.PartyData.iBitFlag |= Party::BitFlag::Password;
}
else
{
TxPacket.Data.PartyData.iBitFlag &= ~Party::BitFlag::Password;
}
#if defined( _FINAL_BUILD )
TxPacket.bCheat = false;
#else
TxPacket.bCheat = bCheat;
#endif // #if defined( _FINAL_BUILD )
#if defined( PRE_ADD_NEWCOMEBACK )
if( pSession->GetComebackAppellation() > 0 )
TxPacket.Data.PartyData.bCheckComeBackParty = true;
#endif
AddSendData( MAINCMD_PARTY, QUERY_ADDPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#if defined( _GAMESERVER )
void CDNDBConnection::QueryAddPartyAndMemberGame( CDNUserSession *pSession, int iManagedID, Party::LocationType::eCode LocationType, int iLocationID, const Party::AddPartyAndMemberGame *PartyData, int iRoomID/*=0*/ )
{
TQAddPartyAndMemberGame TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.Data.PartyData = PartyData->PartyData;
TxPacket.Data.PartyData.iServerID = iManagedID;
TxPacket.Data.PartyData.iCurMemberCount = 0;
TxPacket.Data.PartyData.iRoomID = iRoomID;
TxPacket.Data.PartyData.LocationType = LocationType;
TxPacket.Data.PartyData.iLocationID = iLocationID;
memcpy( TxPacket.nKickedMemberList, PartyData->nKickedMemberList, sizeof(TxPacket.nKickedMemberList) );
for(int i=0;i<PARTYMAX;i++)
{
if( PartyData->biCharacterDBID[i] > 0 )
{
TxPacket.Member[i].biCharacterDBID = PartyData->biCharacterDBID[i];
TxPacket.Member[i].nSessionID = PartyData->nSessionID[i];
#if defined( PRE_ADD_NEWCOMEBACK )
TxPacket.Member[i].bCheckComebackAppellation = PartyData->bCheckComebackAppellation[i];
#endif
TxPacket.Data.PartyData.iCurMemberCount++;
}
else
break;
}
int nSize = ( sizeof(TQAddPartyAndMemberGame) - sizeof(TxPacket.Member) ) + ( sizeof(DBAddPartyMemberGame) * TxPacket.Data.PartyData.iCurMemberCount );
AddSendData( MAINCMD_PARTY, QUERY_ADDPARTYANDMEMBERGAME, reinterpret_cast<char*>(&TxPacket), nSize );
}
void CDNDBConnection::QueryModParty( CDNUserSession* pSession, const Party::Data& PartyData, int iBitFlag )
{
TQModParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.PartyData = PartyData;
TxPacket.PartyData.iBitFlag = iBitFlag;
TxPacket.iRoomID = pSession->GetRoomID();
AddSendData( MAINCMD_PARTY, QUERY_MODPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#endif
#if defined( _VILLAGESERVER )
void CDNDBConnection::QueryAddPartyAndMemberVillage( int iWorldID, UINT uiAccountDBID, int iManagedID, Party::LocationType::eCode LocationType, const Party::AddPartyAndMemberVillage *PartyData )
{
TQAddPartyAndMemberVillage TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.Data.PartyData = PartyData->PartyData;
TxPacket.Data.PartyData.iServerID = iManagedID;
TxPacket.Data.PartyData.LocationType = LocationType;
memcpy( TxPacket.nKickedMemberList, PartyData->nKickedMemberList, sizeof(TxPacket.nKickedMemberList) );
TxPacket.Data.PartyData.iCurMemberCount = 0;
for(int i=0;i<PARTYMAX;i++)
{
if( PartyData->MemberData[i].nAccountDBID > 0 )
{
TxPacket.MemberInfo[i].nAccountDBID = PartyData-> MemberData[i].nAccountDBID;
TxPacket.MemberInfo[i].biCharacterDBID = PartyData-> MemberData[i].biCharacterDBID;
TxPacket.MemberInfo[i].cMemberIndex = PartyData-> MemberData[i].cMemberIndex;
TxPacket.MemberInfo[i].VoiceInfo.cVoiceAvailable = PartyData->MemberData[i].cVoiceAvailable;
#if defined( PRE_ADD_NEWCOMEBACK )
TxPacket.MemberInfo[i].bCheckComebackAppellation = PartyData-> MemberData[i].bCheckComebackAppellation;
#endif
memcpy( TxPacket.MemberInfo[i].VoiceInfo.nMutedList, PartyData->MemberData[i].nMutedList, sizeof(TxPacket.MemberInfo[i].VoiceInfo.nMutedList) );
TxPacket.Data.PartyData.iCurMemberCount++;
}
else
break;
}
int nSize = ( sizeof(TQAddPartyAndMemberVillage) - sizeof(TxPacket.MemberInfo) ) + ( sizeof(TMemberInfo) * TxPacket.Data.PartyData.iCurMemberCount );
AddSendData( MAINCMD_PARTY, QUERY_ADDPARTYANDMEMBERVILLAGE, reinterpret_cast<char*>(&TxPacket), nSize );
}
void CDNDBConnection::QueryModParty( CDNUserSession *pSession, CDNParty* pParty, int iManagedID, Party::LocationType::eCode LocationType, int iLocationID, const CSPartyInfoModify* pPacket )
{
TQModParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.PartyData.PartyID = pParty->GetPartyID();
TxPacket.PartyData.iServerID = iManagedID;
TxPacket.PartyData.LocationType = LocationType;
TxPacket.PartyData.iLocationID = iLocationID;
TxPacket.PartyData.Type = pParty->GetPartyType();
_wcscpy(TxPacket.PartyData.wszPartyName, _countof(TxPacket.PartyData.wszPartyName), pPacket->wszName, static_cast<int>(wcslen(pPacket->wszName)) );
TxPacket.PartyData.nPartyMaxCount = pPacket->cPartyMemberMax;
TxPacket.PartyData.iTargetMapIndex = pPacket->nTargetMapIdx;
TxPacket.PartyData.TargetMapDifficulty = pPacket->Difficulty;
TxPacket.PartyData.cMinLevel = pPacket->cUserLvLimitMin;
TxPacket.PartyData.LootRule = pPacket->LootRule;
TxPacket.PartyData.LootItemRank = pPacket->LootRank;
TxPacket.PartyData.iUpkeepCount = pParty->GetUpkeepCount();
TxPacket.PartyData.biLeaderCharacterDBID = pParty->GetLeaderCharacterID();
TxPacket.PartyData.iCurMemberCount = pParty->GetCurMemberCount();
TxPacket.PartyData.iBitFlag = pPacket->iBitFlag;
if( pPacket->iBitFlag&Party::BitFlag::Password )
{
TxPacket.PartyData.iPassword = pPacket->iPassword;
TxPacket.PartyData.iBitFlag |= Party::BitFlag::Password;
}
else
{
TxPacket.PartyData.iBitFlag &= ~Party::BitFlag::Password;
}
AddSendData( MAINCMD_PARTY, QUERY_MODPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryModParty( CDNUserSession *pSession, CDNParty* pParty, int iManagedID, Party::LocationType::eCode LocationType, int iLocationID )
{
TQModParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.PartyData.PartyID = pParty->GetPartyID();
TxPacket.PartyData.iServerID = iManagedID;
TxPacket.PartyData.LocationType = LocationType;
TxPacket.PartyData.iLocationID = iLocationID;
TxPacket.PartyData.Type = pParty->GetPartyType();
_wcscpy(TxPacket.PartyData.wszPartyName, _countof(TxPacket.PartyData.wszPartyName), pParty->GetPartyName(), static_cast<int>(wcslen(pParty->GetPartyName())) );
TxPacket.PartyData.nPartyMaxCount = pParty->GetMemberMax();
TxPacket.PartyData.iTargetMapIndex = pParty->GetTargetMapIndex();
TxPacket.PartyData.TargetMapDifficulty = pParty->GetDifficulty();
TxPacket.PartyData.cMinLevel = pParty->GetMinLevel();
TxPacket.PartyData.LootRule = pParty->GetItemLootRule();
TxPacket.PartyData.LootItemRank = pParty->GetItemLootRank();
TxPacket.PartyData.iUpkeepCount = pParty->GetUpkeepCount();
TxPacket.PartyData.biLeaderCharacterDBID = pParty->GetLeaderCharacterID();
TxPacket.PartyData.iCurMemberCount = pParty->GetCurMemberCount();
TxPacket.PartyData.iBitFlag = pParty->GetBitFlag();
if( pParty->GetBitFlag()&Party::BitFlag::Password )
{
TxPacket.PartyData.iPassword = pParty->GetPassword();
TxPacket.PartyData.iBitFlag |= Party::BitFlag::Password;
}
else
{
TxPacket.PartyData.iBitFlag &= ~Party::BitFlag::Password;
}
AddSendData( MAINCMD_PARTY, QUERY_MODPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#endif
void CDNDBConnection::QueryDelParty( int iWorldID, TPARTYID PartyID )
{
TQDelParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.PartyID = PartyID;
AddSendData( MAINCMD_PARTY, QUERY_DELPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryJoinParty( CDNUserSession *pSession, int iWorldID, TPARTYID PartyID, int iMaxUserCount )
{
TQJoinParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
TxPacket.PartyID = PartyID;
TxPacket.iMaxUserCount = iMaxUserCount;
#if defined( PRE_ADD_NEWCOMEBACK )
if( pSession->GetComebackAppellation() > 0 )
TxPacket.bCheckComeBackParty = true;
#endif
AddSendData( MAINCMD_PARTY, QUERY_JOINPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryOutParty( int iWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, UINT nSessionID, TPARTYID PartyID, Party::QueryOutPartyType::eCode Type )
{
TQOutParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.nAccountDBID = uiAccountDBID;
TxPacket.biCharacterDBID = biCharacterDBID;
TxPacket.nSessionID = nSessionID;
TxPacket.PartyID = PartyID;
TxPacket.Type = Type;
AddSendData( MAINCMD_PARTY, QUERY_OUTPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryModPartyLeader( CDNUserSession* pSession, TPARTYID PartyID )
{
#if defined( PRE_WORLDCOMBINE_PARTY ) && defined( _GAMESERVER )
CDNGameRoom* pGameRoom = pSession->GetGameRoom();
if( pGameRoom->bIsWorldCombineParty() )
return;
#endif // #if defined( PRE_WORLDCOMBINE_PARTY ) && defined( _GAMESERVER )
TQModPartyLeader TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.PartyID = PartyID;
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();;
AddSendData( MAINCMD_PARTY, QUERY_MODPARTYLEADER, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryGetPartyJoinMembers( CDNUserSession* pSession, TPARTYID PartyID )
{
TQGetListPartyMember TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.PartyID = PartyID;
AddSendData( MAINCMD_PARTY, QUERY_GETPARTY_JOINMEMBERS, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#if defined( PRE_ADD_NEWCOMEBACK )
void CDNDBConnection::QueryModComebackFlag( CDNUserSession* pSession, bool bRewardComeback )
{
TQModComebackFlag TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.bRewardComeback = bRewardComeback;
AddSendData( MAINCMD_STATUS, QUERY_MOD_COMEBACKFLAG, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryModMemberComebackInfo( CDNUserSession* pSession, TPARTYID PartyID )
{
TQModPartyMemberComeback TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
if( pSession->GetComebackAppellation() > 0 )
TxPacket.bComebackAppellation = true;
TxPacket.PartyID = PartyID;
AddSendData( MAINCMD_PARTY, QUERY_MOD_COMEBACKINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#endif // #if defined( PRE_ADD_NEWCOMEBACK )
#endif // #if defined( PRE_PARTY_DB )
#if defined( PRE_WORLDCOMBINE_PARTY )
void CDNDBConnection::QueryGetListWorldParty( int iWorldID )
{
TQGetListParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = iWorldID;
TxPacket.iExecptServerID = g_Config.nManagedID;
AddSendData( MAINCMD_PARTY, QUERY_GETLISTWORLDPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
void CDNDBConnection::QueryAddWorldParty( int iManagedID, Party::LocationType::eCode LocationType, int iLocationID, Party::Data *PartyData )
{
TQAddParty TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
// 파티 관련 Thread 는 직렬화를 위해 0번 쓰레드로 통일한다.
TxPacket.cWorldSetID = PartyData->nWorldSetID;
TxPacket.nAccountDBID = 0;
TxPacket.Data.PartyData.biLeaderCharacterDBID = 0;
TxPacket.Data.PartyData.iServerID = iManagedID;
TxPacket.Data.PartyData.LocationType = LocationType;
TxPacket.Data.PartyData.iLocationID = iLocationID;
TxPacket.Data.PartyData.Type = PartyData->Type;
TxPacket.Data.PartyData.iRoomID = PartyData->iRoomID;
_wcscpy(TxPacket.Data.PartyData.wszPartyName, _countof(TxPacket.Data.PartyData.wszPartyName), PartyData->wszPartyName, static_cast<int>(wcslen(PartyData->wszPartyName)) );
TxPacket.Data.PartyData.nPartyMaxCount = PartyData->nPartyMaxCount;
TxPacket.Data.PartyData.iTargetMapIndex = PartyData->iTargetMapIndex;
TxPacket.Data.PartyData.TargetMapDifficulty = PartyData->TargetMapDifficulty;
TxPacket.Data.PartyData.cMinLevel = PartyData->cMinLevel;
TxPacket.Data.PartyData.LootRule = PartyData->LootRule;
TxPacket.Data.PartyData.LootItemRank = PartyData->LootItemRank;
#if defined(PRE_FIX_62281)
TxPacket.Data.wszAfterInviteCharacterName[0] = _T('\0');
#else
TxPacket.Data.uiAfterInviteAccountDBID = 0;
#endif
TxPacket.Data.PartyData.iBitFlag = PartyData->iBitFlag;
TxPacket.Data.PartyData.nPrimaryIndex = PartyData->nPrimaryIndex;
TxPacket.bCheat = false;
AddSendData( MAINCMD_PARTY, QUERY_ADDWORLDPARTY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#endif
#if defined(PRE_ADD_DOORS_PROJECT)
#if defined(_GAMESERVER)
void CDNDBConnection::QuerySaveCharacterAbility(CDNUserSession* pSession)
{
TQSaveCharacterAbility TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.cWorldSetID = pSession->GetWorldSetID();
TxPacket.nAccountDBID = pSession->GetAccountDBID();
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
CDnPlayerActor* pActor = pSession->GetPlayerActor();
if( pActor )
{
CDnState PlayerState;
pSession->GetPlayerActor()->MakeEquipAndPassiveState( PlayerState );
TxPacket.nCharacterAblity[Doors::CharacterAbility::Strength] = PlayerState.GetStrength();
TxPacket.nCharacterAblity[Doors::CharacterAbility::Agility] = PlayerState.GetAgility();
TxPacket.nCharacterAblity[Doors::CharacterAbility::Intelligence] = PlayerState.GetIntelligence();
TxPacket.nCharacterAblity[Doors::CharacterAbility::Stamina] = PlayerState.GetStamina();
TxPacket.nCharacterAblity[Doors::CharacterAbility::AttackPMin] = PlayerState.GetAttackPMin();
TxPacket.nCharacterAblity[Doors::CharacterAbility::AttackPMax] = PlayerState.GetAttackPMax();
TxPacket.nCharacterAblity[Doors::CharacterAbility::AttackMMin] = PlayerState.GetAttackMMin();
TxPacket.nCharacterAblity[Doors::CharacterAbility::AttackMMax] = PlayerState.GetAttackMMax();
TxPacket.nCharacterAblity[Doors::CharacterAbility::DefenseP] = PlayerState.GetDefenseP();
TxPacket.nCharacterAblity[Doors::CharacterAbility::DefenseM] = PlayerState.GetDefenseM();
TxPacket.nCharacterAblity[Doors::CharacterAbility::Stiff] = PlayerState.GetStiff();
TxPacket.nCharacterAblity[Doors::CharacterAbility::StiffResistance] = PlayerState.GetStiffResistance();
TxPacket.nCharacterAblity[Doors::CharacterAbility::Critical] = PlayerState.GetCritical();
TxPacket.nCharacterAblity[Doors::CharacterAbility::CriticalResistance] = PlayerState.GetCriticalResistance();
TxPacket.nCharacterAblity[Doors::CharacterAbility::Stun] = PlayerState.GetStun();
TxPacket.nCharacterAblity[Doors::CharacterAbility::StunResistance] = PlayerState.GetStunResistance();
TxPacket.nCharacterAblity[Doors::CharacterAbility::FinalDamage] = PlayerState.GetFinalDamage();
TxPacket.nCharacterAblity[Doors::CharacterAbility::FireAttack] = (int)(PlayerState.GetElementAttack(CDnState::Fire)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::IceAttack] = (int)(PlayerState.GetElementAttack(CDnState::Ice)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::LightAttack] = (int)(PlayerState.GetElementAttack(CDnState::Light)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::DarkAttack] = (int)(PlayerState.GetElementAttack(CDnState::Dark)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::FireDefense] = (int)(PlayerState.GetElementDefense(CDnState::Fire)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::IceDefense] = (int)(PlayerState.GetElementDefense(CDnState::Ice)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::LightDefense] = (int)(PlayerState.GetElementDefense(CDnState::Light)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::DarkDefense] = (int)(PlayerState.GetElementDefense(CDnState::Dark)* 100.0f);
TxPacket.nCharacterAblity[Doors::CharacterAbility::MoveSpeed] = PlayerState.GetMoveSpeed();
TxPacket.nCharacterAblity[Doors::CharacterAbility::MaxHP] = (int)PlayerState.GetMaxHP();
TxPacket.nCharacterAblity[Doors::CharacterAbility::MaxMP] = PlayerState.GetMaxSP();
AddSendData( MAINCMD_STATUS, QUERY_SAVE_CHARACTER_ABILITY, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
}
#endif //#if defined(_GAMESERVER)
#endif //#if defined(PRE_ADD_DOORS_PROJECT)
#if defined (PRE_ADD_BESTFRIEND)
void CDNDBConnection::QueryGetBestFriend(BYTE cThreadID, CDNUserSession *pSession, bool bSend)
{
TQGetBestFriend Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.bSend = bSend;
AddSendData(MAINCMD_BESTFRIEND, QUERY_GET_BESTFRIEND, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryRegistBestFriend(CDNUserSession *pSession, UINT nAccountDBID, INT64 biCharacterDBID, LPCWSTR lpwszCharacterName, INT64 biRegistSerial, int nItemID)
{
TQRegistBestFriend Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nFromAccountDBID = pSession->GetAccountDBID();
Packet.biFromCharacterDBID = pSession->GetCharacterDBID();
_wcscpy(Packet.wszFromName, _countof(Packet.wszFromName), pSession->GetCharacterName(), _countof(Packet.wszFromName));
Packet.nToAccountDBID = nAccountDBID;
Packet.biToCharacterDBID = biCharacterDBID;
_wcscpy(Packet.wszToName, _countof(Packet.wszToName), lpwszCharacterName, _countof(Packet.wszToName));
Packet.nItemID = nItemID;
Packet.biRegistSerial = biRegistSerial;
Packet.nMapID = pSession->GetMapIndex();
_wcscpy(Packet.wszIP, _countof(Packet.wszIP), pSession->GetIpW(), (int)wcslen(pSession->GetIpW()));
AddSendData(MAINCMD_BESTFRIEND, QUERY_REGIST_BESTFRIEND, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryCancelBestFriend(CDNUserSession *pSession, bool bCancel)
{
TQCancelBestFriend Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.bCancel = bCancel;
AddSendData(MAINCMD_BESTFRIEND, QUERY_CANCEL_BESTFRIEND, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryCloseBestFriend(CDNUserSession *pSession)
{
TQCloseBestFriend Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_BESTFRIEND, QUERY_CLOSE_BESTFRIEND, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryEditBestFriendMemo(CDNUserSession *pSession, LPCWSTR lpwszMemo)
{
TQEditBestFriendMemo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
_wcscpy(Packet.wszMemo, _countof(Packet.wszMemo), lpwszMemo, _countof(Packet.wszMemo));
AddSendData(MAINCMD_BESTFRIEND, QUERY_EDIT_BESTFRIENDMEMO, (char*)&Packet, sizeof(Packet));
}
#endif
#if defined( PRE_PRIVATECHAT_CHANNEL )
void CDNDBConnection::QueryGetPrivateChatChannelInfo(BYTE cThreadID, int nWorldID)
{
TQPrivateChatChannelInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_GET_PRIVATECHATCHANNEL, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryGetPrivateChatChannelMember(CDNUserSession *pSession, INT64 nChannelID)
{
TQPrivateChatChannelMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nPrivateChatChannelID = nChannelID;
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_GET_PRIVATECHATCHANNELMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryAddPrivateChatChannel(CDNUserSession *pSession, WCHAR* wszChannelName, int nPassWord)
{
TQAddPrivateChatChannel Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.tPrivateChatChannel.biMasterCharacterDBID = pSession->GetCharacterDBID();
Packet.tPrivateChatChannel.nPassWord = nPassWord;
CTimeSet CurTime;
Packet.tJoinDate = CurTime.GetTimeT64_LC();
_wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()) );
if(wszChannelName)
_wcscpy(Packet.tPrivateChatChannel.wszName, _countof(Packet.tPrivateChatChannel.wszName), wszChannelName, (int)wcslen(wszChannelName) );
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_CREATE_PRIVATECHATCHANNEL, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryAddPrivateChatChannelMember(CDNUserSession *pSession, INT64 nChannelID, PrivateChatChannel::Common::eModType eType)
{
TQAddPrivateChatMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nServerID = g_Config.nManagedID;
Packet.eType = eType;
Packet.Member.nAccountDBID = pSession->GetAccountDBID();
Packet.nPrivateChatChannelID = nChannelID;
Packet.Member.biCharacterDBID = pSession->GetCharacterDBID();
CTimeSet CurTime;
Packet.Member.tJoinDate = CurTime.GetTimeT64_LC();
_wcscpy(Packet.Member.wszCharacterName, _countof(Packet.Member.wszCharacterName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()) );
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_ADD_PRIVATECHATMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryInvitePrivateChatChannelMember(CDNUserSession *pSession, INT64 nChannelID, UINT nInviteAccountID )
{
TQInvitePrivateChatMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nServerID = g_Config.nManagedID;
Packet.Member.nAccountDBID = pSession->GetAccountDBID();
Packet.nPrivateChatChannelID = nChannelID;
Packet.Member.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nMasterAccountDBID = nInviteAccountID;
CTimeSet CurTime;
Packet.Member.tJoinDate = CurTime.GetTimeT64_LC();
_wcscpy(Packet.Member.wszCharacterName, _countof(Packet.Member.wszCharacterName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()) );
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_INVITE_PRIVATECHATMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryOutPrivateChatChannelMember(CDNUserSession *pSession, PrivateChatChannel::Common::eModType eType)
{
TQDelPrivateChatMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.eType = eType;
Packet.nPrivateChatChannelID = pSession->GetPrivateChannelID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
_wcscpy(Packet.wszName, _countof(Packet.wszName), pSession->GetCharacterName(), (int)wcslen(pSession->GetCharacterName()) );
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_DEL_PRIVATECHATMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryKickPrivateChatChannelMember(CDNUserSession *pSession, WCHAR* wszKickName, INT64 biKickCharacterDBID)
{
TQDelPrivateChatMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nPrivateChatChannelID = pSession->GetPrivateChannelID();
Packet.biCharacterDBID = biKickCharacterDBID;
if(wszKickName)
_wcscpy(Packet.wszName, _countof(Packet.wszName), wszKickName, (int)wcslen(wszKickName) );
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_KICK_PRIVATECHATMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryModPrivateChatChannelInfo( CDNUserSession *pSession, WCHAR* wszChannelName, int nModType, int nPassWord, INT64 biCharacterDBID )
{
TQModPrivateChatChannelInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.eType = (PrivateChatChannel::Common::eModType)nModType;
Packet.nPrivateChatChannelID = pSession->GetPrivateChannelID();
Packet.nPassWord = nPassWord;
Packet.biCharacterDBID = biCharacterDBID;
if(wszChannelName)
_wcscpy(Packet.wszChannelName, _countof(Packet.wszChannelName), wszChannelName, (int)wcslen(wszChannelName) );
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_MOD_PRIVATECHATCHANNELINFO, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryModPrivateMemberServerID( CDNUserSession *pSession )
{
TQModPrivateChatMemberServerID Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.nServerID = g_Config.nManagedID;
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_MOD_PRIVATEMEMBERSERVERID, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryDelPrivateMemberServerID( BYTE cThreadID, int nWorldID, int nServerID)
{
TQDelPrivateChatMemberServerID Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.nServerID = g_Config.nManagedID;
AddSendData(MAINCMD_PRIVATECHATCHANNEL, QUERY_DEL_PRIVATEMEMBERSERVERID, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif
#if defined( PRE_FIX_67546 )
void CDNDBConnection::QueryAddThreadCount( BYTE cChoiceThreadID )
{
TQAddThreadCount Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = 0;
Packet.cChoiceThreadID = cChoiceThreadID;
AddSendData(MAINCMD_ETC, QUERY_ADD_CHANNELCOUNT, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif
#if defined( PRE_WORLDCOMBINE_PVP )
#if defined( _GAMESERVER )
void CDNDBConnection::QueryAddWorldPvPRoom( BYTE cThreadID, int nWorldID, UINT nGMAccountDBID, int nServerID, int nRoomID, TWorldPvPMissionRoom* pMissonRoom )
{
TQAddWorldPvPRoom Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.nAccountDBID = nGMAccountDBID;
Packet.nServerID = nServerID;
Packet.nRoomID = nRoomID;
memcpy(&Packet.TMissionRoom, pMissonRoom, sizeof(Packet.TMissionRoom));
if( pMissonRoom->unRoomOptionBit&PvPCommon::RoomOption::BreakInto )
Packet.bBreakIntoFlag = true;
if( pMissonRoom->unRoomOptionBit&PvPCommon::RoomOption::NoRegulation )
Packet.bRegulationFlag = true;
if(pMissonRoom->unRoomOptionBit&PvPCommon::RoomOption::RandomTeam )
Packet.bRandomFlag = true;
_wcscpy( Packet.wszRoomName, _countof(Packet.wszRoomName), pMissonRoom->wszRoomName, (int)wcslen(pMissonRoom->wszRoomName) );
AddSendData(MAINCMD_PVP, QUERY_ADD_WORLDPVPROOM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryAddWorldPvPRoomMember( BYTE cThreadID, int nWorldID, CDNUserSession* pSession, BYTE cMaxMemberCount, int nWorldPvPRoomDBIndex, bool bObserverFlag )
{
TQAddWorldPvPRoomMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.nWorldPvPRoomDBIndex = nWorldPvPRoomDBIndex;
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.cMaxPlayers = cMaxMemberCount;
Packet.bObserverFlag = bObserverFlag;
AddSendData(MAINCMD_PVP, QUERY_ADD_WORLDPVPROOMMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryDelWorldPvPRoomForServer( int nServerID )
{
TQDelWorldPvPRoomForServer Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = 0;
Packet.nServerID = nServerID;
AddSendData(MAINCMD_PVP, QUERY_DEL_WORLDPVPROOMFORSERVER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryDelWorldPvPRoom( int nWorldID, int nPvPRoomDBIndex )
{
TQDelWorldPvPRoom Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = 0;
Packet.cWorldSetID = nWorldID;
Packet.nWorldPvPRoomDBIndex = nPvPRoomDBIndex;
AddSendData(MAINCMD_PVP, QUERY_DEL_WORLDPVPROOM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryDelWorldPvPRoomMember( BYTE cThreadID, int nWorldID, int nPvPRoomDBIndex, CDNUserSession* pSession )
{
TQDelWorldPvPRoomMember Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nWorldPvPRoomDBIndex = nPvPRoomDBIndex;
AddSendData(MAINCMD_PVP, QUERY_DEL_WORLDPVPROOMMEMBER, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif
#if defined( _VILLAGESERVER )
void CDNDBConnection::QueryGetListWorldPvPRoom()
{
TQGetListWorldPvPRoom Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = 0;
Packet.cWorldSetID = g_Config.nWorldSetID;
Packet.nCombineWorldID = g_Config.nCombinePartyWorld;
AddSendData(MAINCMD_PVP, QUERY_GETLIST_WORLDPVPROOM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
void CDNDBConnection::QueryUpdateWorldPvPRoom(BYTE cThreadID, int nWorldID)
{
TQUpdateWorldPvPRoom Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
AddSendData(MAINCMD_PVP, QUERY_UPDATE_WORLDPVPROOM, reinterpret_cast<char*>(&Packet), sizeof(Packet));
}
#endif
#endif
// MAINCMD_ACTOZCOMMON
void CDNDBConnection::QueryActozUpdateCharacterInfo(CDNUserSession *pSession, char cUpdateType)
{
TQActozUpdateCharacterInfo Packet;
memset(&Packet, 0, sizeof(TQActozUpdateCharacterInfo));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.cUpdateType = cUpdateType;
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.cJob = pSession->GetUserJob();
Packet.nLevel = pSession->GetLevel();
Packet.nExp = pSession->GetExp();
Packet.biCoin = pSession->GetCoin();
if( pSession->GetIp() )
_strcpy(Packet.szIp, _countof(Packet.szIp), pSession->GetIp(), (int)strlen(pSession->GetIp()));
AddSendData(MAINCMD_ACTOZCOMMON, QUERY_ACTOZ_UPDATECHARACTERINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryActozUpdateCharacterName(CDNUserSession *pSession)
{
TQActozUpdateCharacterName Packet;
memset(&Packet, 0, sizeof(TQActozUpdateCharacterName));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
_strcpy(Packet.szCharacterName, _countof(Packet.szCharacterName), pSession->GetCharacterNameA(), (int)strlen(pSession->GetCharacterNameA()));
AddSendData(MAINCMD_ACTOZCOMMON, QUERY_ACTOZ_UPDATECHARACTERNAME, (char*)&Packet, sizeof(Packet));
}
#if defined( PRE_ALTEIAWORLD_EXPLORE )
void CDNDBConnection::QueryResetAlteiaWorldEvent( BYTE cThreadID, int nWorldID )
{
TQResetAlteiaWorldEvent Packet;
memset(&Packet, 0, sizeof(TQResetAlteiaWorldEvent));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_RESET_ALTEIAWORLDEVENT, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddAlteiaWorldEventTime( BYTE cThreadID, int nWorldID, time_t tAlteiaEventStartTime, time_t tAlteiaEventEndTime )
{
TQAddAlteiaWorldEvent Packet;
memset(&Packet, 0, sizeof(TQAddAlteiaWorldEvent));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.tAlteiaEventStartTime = tAlteiaEventStartTime;
Packet.tAlteiaEventEndTime = tAlteiaEventEndTime;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_ADD_ALTEIAWORLDEVENT, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddAlteiaWorldPlayResult( CDNUserSession *pSession, int nGoldKeyCount, DWORD dwPlayTime, int nGuildID )
{
TQADDAlteiaWorldPlayResult Packet;
memset(&Packet, 0, sizeof(TQADDAlteiaWorldPlayResult));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nGoldKeyCount = nGoldKeyCount;
Packet.dwPlayTime = dwPlayTime;
Packet.nGuildID = nGuildID;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_ADD_ALTEIAWORLDPLAYRESULT, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetAlteiaWorldInfo( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetAlteiaWorldInfo Packet;
memset(&Packet, 0, sizeof(TQGetAlteiaWorldInfo));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_GET_ALTEIAWORLDINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetAlteiaWorldPrivateGoldKeyRank( CDNUserSession *pSession )
{
TQGetAlteiaWorldRankInfo Packet;
memset(&Packet, 0, sizeof(TQGetAlteiaWorldRankInfo));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nMaxRank = AlteiaWorld::Common::MaxRankCount;
Packet.eType = AlteiaWorld::Info::PrivateGoldKeyRankInfo;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_GET_ALTEIAWORLDPRIVATEGOLDKEYRANK, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetAlteiaWorldPrivatePlayTimeRank( CDNUserSession *pSession )
{
TQGetAlteiaWorldRankInfo Packet;
memset(&Packet, 0, sizeof(TQGetAlteiaWorldRankInfo));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nMaxRank = AlteiaWorld::Common::MaxRankCount;
Packet.eType = AlteiaWorld::Info::PrivatePlayTimeRankInfo;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_GET_ALTEIAWORLDPRIVATEPLAYTIMERANK, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetAlteiaWorldGuildGoldKeyRank( CDNUserSession *pSession )
{
TQGetAlteiaWorldRankInfo Packet;
memset(&Packet, 0, sizeof(TQGetAlteiaWorldRankInfo));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nMaxRank = AlteiaWorld::Common::MaxRankCount;
Packet.eType = AlteiaWorld::Info::GuildGoldKeyRankInfo;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_GET_ALTEIAWORLDGUILDGOLDKEYRANK, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetAlteiaWorldSendTicketList( BYTE cThreadID, CDNUserSession *pSession )
{
TQGetAlteiaWorldSendTicketList Packet;
memset(&Packet, 0, sizeof(TQGetAlteiaWorldSendTicketList));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_GET_ALTEIAWORLDSENDTICKETLIST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddAlteiaWorldSendTicketList( CDNUserSession *pSession, INT64 biSendCharacterDBID, WCHAR* wszSendCharacterName, int nSendMaxCount )
{
TQAddAlteiaWorldSendTicketList Packet;
memset(&Packet, 0, sizeof(TQAddAlteiaWorldSendTicketList));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.biSendCharacterDBID = biSendCharacterDBID;
Packet.nSendMaxCount = nSendMaxCount;
if( wszSendCharacterName )
_wcscpy( Packet.wszSendCharacterName, _countof(Packet.wszSendCharacterName), wszSendCharacterName, (int)wcslen(wszSendCharacterName) );
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_ADD_ALTEIAWORLDSENDTICKETLIST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryResetAlteiaWorldPlayAlteia( CDNUserSession *pSession, AlteiaWorld::ResetType::eResetType eType )
{
TQResetAlteiaWorldPlayAlteia Packet;
memset(&Packet, 0, sizeof(TQResetAlteiaWorldPlayAlteia));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.eType = eType;
AddSendData(MAINCMD_ALTEIAWORLD, QUERY_RESET_ALTEIAWORLDPLAYALTEIA, (char*)&Packet, sizeof(Packet));
}
#endif
#if defined( PRE_ADD_STAMPSYSTEM )
void CDNDBConnection::QueryGetListCompleteChallenges( BYTE cThreadID, CDNUserSession * pSession )
{
TQGetListCompleteChallenges Packet;
memset(&Packet, 0, sizeof(TQGetListCompleteChallenges));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STAMPSYSTEM, QUERY_GETLIST_COMPLETECHALLENGES, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryInitCompleteChallenge( CDNUserSession* pSession )
{
TQInitCompleteChallenge Packet;
memset(&Packet, 0, sizeof(TQInitCompleteChallenge));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
AddSendData(MAINCMD_STAMPSYSTEM, QUERY_INIT_COMPLETECHALLENGE, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddCompleteChallenge( CDNUserSession* pSession, BYTE cChallengeIndex, int nWeekDay )
{
TQAddCompleteChallenge Packet;
memset(&Packet, 0, sizeof(TQAddCompleteChallenge));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.cChallengeIndex = cChallengeIndex;
Packet.nWeekDay = nWeekDay;
AddSendData(MAINCMD_STAMPSYSTEM, QUERY_ADD_COMPLETECHALLENGE, (char*)&Packet, sizeof(Packet));
}
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined(PRE_ADD_GAMEQUIT_REWARD)
void CDNDBConnection::QueryModNewbieRewardFlag(CDNUserSession *pSession, bool bRewardFlag)
{
TQModNewbieRewardFlag Packet;
memset(&Packet, 0, sizeof(TQModNewbieRewardFlag));
Packet.bRewardFlag = bRewardFlag;
Packet.nAccountDBID = pSession->GetAccountDBID();
AddSendData(MAINCMD_ETC, QUERY_MOD_NEWBIE_REWARDFLAG, (char*)&Packet, sizeof(Packet));
}
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
#if defined(PRE_ADD_CHNC2C)
void CDNDBConnection::QueryGetGameMoney( BYTE cThreadID, int nWorldID, INT64 biCharacterDBID, const char* szSeqID)
{
TQGetGameMoney Packet;
memset(&Packet, 0, sizeof(TQGetGameMoney));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.biCharacterDBID = biCharacterDBID;
memcpy(Packet.szSeqID, szSeqID, sizeof(Packet.szSeqID));
AddSendData(MAINCMD_ITEM, QUERY_GET_GAMEMONEY, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryKeepGameMoney( BYTE cThreadID, int nWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, INT64 biReduceCoin, const char* szSeqID, const char* szBookID)
{
TQKeepGameMoney Packet;
memset(&Packet, 0, sizeof(TQKeepGameMoney));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.nAccountDBID = uiAccountDBID;
Packet.biCharacterDBID = biCharacterDBID;
Packet.biReduceCoin = biReduceCoin;
memcpy(Packet.szBookID, szBookID, sizeof(Packet.szBookID));
memcpy(Packet.szSeqID, szSeqID, sizeof(Packet.szSeqID));
AddSendData(MAINCMD_ITEM, QUERY_KEEP_GAMEMONEY, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryTransferGameMoney( BYTE cThreadID, int nWorldID, UINT uiAccountDBID, INT64 biCharacterDBID, INT64 biAddCoin, const char* szSeqID, const char* szBookID)
{
TQTransferGameMoney Packet;
memset(&Packet, 0, sizeof(TQTransferGameMoney));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = nWorldID;
Packet.nAccountDBID = uiAccountDBID;
Packet.biCharacterDBID = biCharacterDBID;
Packet.biAddCoin = biAddCoin;
memcpy(Packet.szBookID, szBookID, sizeof(Packet.szBookID));
memcpy(Packet.szSeqID, szSeqID, sizeof(Packet.szSeqID));
AddSendData(MAINCMD_ITEM, QUERY_TRANSFER_GAMEMONEY, (char*)&Packet, sizeof(Packet));
}
#endif //#if defined(PRE_ADD_CHNC2C)
#if defined(PRE_ADD_CP_RANK)
void CDNDBConnection::QueryAddStageClearBest( CDNUserSession* pSession, int nMapID, DBDNWorldDef::ClearGradeCode::eCode ClearCode, int nClearPoint, int nLimitLevel)
{
TQAddStageClearBest Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nMapID = nMapID;
Packet.Code = ClearCode;
Packet.nClearPoint = nClearPoint;
Packet.nLimitLevel = nLimitLevel;
AddSendData(MAINCMD_ETC, QUERY_ADD_STAGE_CLEAR_BEST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetStageClearBest( CDNUserSession* pSession, int nMapID )
{
TQGetStageClearBest Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nMapID = nMapID;
AddSendData(MAINCMD_ETC, QUERY_GET_STAGE_CLEAR_BEST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetStageClearPersonalBest( CDNUserSession* pSession, int nMapID )
{
TQGetStageClearPersonalBest Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.nMapID = nMapID;
AddSendData(MAINCMD_ETC, QUERY_GET_STAGE_PERSONAL_BEST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryInitStageCP(CDNUserSession * pSession, char cInitType)
{
TQInitStageCP Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.cInitType = cInitType;
AddSendData(MAINCMD_ETC, QUERY_INIT_STAGE_BEST, (char*)&Packet, sizeof(Packet));
}
#endif //#if defined(PRE_ADD_CP_RANK)
#if defined( PRE_FIX_76282 )
void CDNDBConnection::SendSyncGoPvPLobby( CDNUserSession* pSession )
{
TQHeader Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
AddSendData(MAINCMD_PVP, SYNC_GOPVPLOBBY, (char*)&Packet, sizeof(Packet));
}
#endif // #if defined( PRE_FIX_76282 )
#if defined(PRE_ADD_GUILD_CONTRIBUTION)
void CDNDBConnection::QueryGetGuildContributionPoint( BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, INT64 biCharacterDBID )
{
TQGetGuildContributionPoint Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nAccountDBID = nAccountDBID;
Packet.biCharacterDBID = biCharacterDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDCONTRIBUTION_POINT, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetWeeklyGuildContributionPointRanking( BYTE cThreadID, char cWorldSetID, UINT nAccountDBID, UINT nGuildDBID)
{
TQGetGuildContributionRanking Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nAccountDBID = nAccountDBID;
Packet.nGuildDBID = nGuildDBID;
AddSendData(MAINCMD_GUILD, QUERY_GET_GUILDCONTRIBUTION_WEEKLYRANKING, (char*)&Packet, sizeof(Packet));
}
#endif // #if defined(PRE_ADD_GUILD_CONTRIBUTION)
#if defined(PRE_ADD_DWC)
void CDNDBConnection::QueryCreateDWCTeam(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, LPCWSTR wszTeamName, char cWorldSetID)
{
TQCreateDWCTeam Packet;
memset(&Packet, 0, sizeof(TQCreateDWCTeam));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nReqAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.biCharacterDBID = nReqCharacterDBID;
_wcscpy(Packet.wszTeamName, _countof(Packet.wszTeamName), wszTeamName, (int)wcslen(wszTeamName));
AddSendData(MAINCMD_DWC, QUERY_CREATE_DWC_TEAM, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddDWCTeamMember(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nTeamID, char cWorldSetID)
{
TQAddDWCTeamMember Packet;
memset(&Packet, 0, sizeof(TQAddDWCTeamMember));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nReqAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.biCharacterDBID = nReqCharacterDBID;
Packet.nTeamID = nTeamID;
AddSendData(MAINCMD_DWC, QUERY_ADD_DWC_TEAMMEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryDWCInviteMember(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nTeamID, char cWorldSetID, bool bNeedMembList)
{
TQDWCInviteMember Packet;
memset(&Packet, 0, sizeof(TQAddDWCTeamMember));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nReqAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.biCharacterDBID = nReqCharacterDBID;
Packet.nTeamID = nTeamID;
Packet.bNeedMembList = bNeedMembList;
AddSendData(MAINCMD_DWC, QUERY_DWC_INVITE_MEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QuerLeaveDWCTeam(BYTE cThreadID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nTeamID, char cWorldSetID)
{
TQDelDWCTeamMember Packet;
memset(&Packet, 0, sizeof(TQDelDWCTeamMember));
Packet.cThreadID = cThreadID;
Packet.nAccountDBID = nReqAccountDBID;
Packet.cWorldSetID = cWorldSetID;
Packet.biCharacterDBID = nReqCharacterDBID;
Packet.nTeamID = nTeamID;
AddSendData(MAINCMD_DWC, QUERY_DEL_DWC_TEAMMEMBER, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetDWCTeamInfo(CDNUserSession *pSession, bool bNeedMembList)
{
TQGetDWCTeamInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.bNeedMembList = bNeedMembList;
AddSendData(MAINCMD_DWC, QUERY_GET_DWC_TEAMINFO, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryAddPvPDWCResult(BYTE cThreadID, char cWorldSetID, int nRoomID, UINT nReqAccountDBID, UINT nTeamID, UINT nOppositeTeamID, BYTE cPvPLadderCode, BYTE cResult, int nDWCGradePoint, int nHiddenDWCGradePoint)
{
TQAddPvPDWCResult Packet;
memset(&Packet, 0, sizeof(TQAddPvPDWCResult));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nRoomID = nRoomID;
Packet.nAccountDBID = nReqAccountDBID;
Packet.nTeamID = nTeamID;
Packet.nOppositeTeamID = nOppositeTeamID;
Packet.cPvPLadderCode = cPvPLadderCode;
Packet.cResult = cResult;
Packet.nDWCGradePoint = nDWCGradePoint;
Packet.nHiddenDWCGradePoint = nHiddenDWCGradePoint;
AddSendData(MAINCMD_DWC, QUERY_ADD_DWC_RESULT, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetListDWCScore(BYTE cThreadID, char cWorldSetID, int nRoomID, INT64 biATeamCharacterDBID, INT64 biBTeamCharacterDBID )
{
TQGetListDWCScore Packet;
memset(&Packet, 0, sizeof(TQGetListDWCScore));
Packet.cThreadID = cThreadID;
Packet.cWorldSetID = cWorldSetID;
Packet.nRoomID = nRoomID;
Packet.biATeamCharacterDBID = biATeamCharacterDBID;
Packet.biBTeamCharacterDBID = biBTeamCharacterDBID;
AddSendData(MAINCMD_DWC, QUERY_GET_DWC_SCORELIST, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryGetDWCRank(CDNUserSession * pSession, int nPageNum, int nPageSize)
{
if (pSession == NULL)
{
_DANGER_POINT();
return;
}
TQGetDWCRankPage packet;
memset(&packet, 0, sizeof(TQGetDWCRankPage));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.nPageNum = nPageNum;
packet.nPageSize = nPageSize;
AddSendData(MAINCMD_DWC, QUERY_GET_DWC_RANKLIST, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetDWCFindRank(CDNUserSession * pSession, BYTE cFindType, const WCHAR * pFindKey)
{
if (pSession == NULL || pFindKey == NULL)
{
_DANGER_POINT();
return;
}
TQGetDWCFindRank packet;
memset(&packet, 0, sizeof(TQGetDWCFindRank));
packet.cThreadID = pSession->GetDBThreadID();
packet.cWorldSetID = pSession->GetWorldSetID();
packet.nAccountDBID = pSession->GetAccountDBID();
packet.cFindType = cFindType;
_wcscpy(packet.wszFindKey, _countof(packet.wszFindKey), pFindKey, static_cast<int>(wcslen(pFindKey)));
AddSendData(MAINCMD_DWC, QUERY_GET_DWC_FINDRANK, (char*)&packet, sizeof(packet));
}
void CDNDBConnection::QueryGetDWCChannelInfo(BYTE cThreadID, int iWorldID)
{
TQGetDWCChannelInfo TxPacket;
memset(&TxPacket, 0, sizeof(TxPacket));
TxPacket.cThreadID = cThreadID;
TxPacket.cWorldSetID = iWorldID;
AddSendData(MAINCMD_DWC, QUERY_GET_DWC_CHANNELINFO, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket));
}
#endif //#if defined(PRE_ADD_DWC)
#if defined(PRE_ADD_EQUIPLOCK)
void CDNDBConnection::QueryAddLockItem( CDNUserSession* pSession, DBDNWorldDef::ItemLocation::eCode Code, BYTE cItemSlotIndex )
{
TQLockItemInfo Packet;
memset(&Packet, 0, sizeof(Packet));
const TItem* pItem;
if(Code == DBDNWorldDef::ItemLocation::Equip)
pItem = pSession->GetItem()->GetEquip(cItemSlotIndex);
else if(Code == DBDNWorldDef::ItemLocation::CashEquip)
pItem = pSession->GetItem()->GetCashEquip(cItemSlotIndex);
else
return;
if(!pItem) return;
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.Code = Code;
Packet.cItemSlotIndex = cItemSlotIndex;
Packet.nItemID = pItem->nItemID;
Packet.biItemSerial = pItem->nSerial;
AddSendData(MAINCMD_ITEM, QUERY_ADDLOCK_ITEM, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryRequestItemLock( CDNUserSession* pSession, DBDNWorldDef::ItemLocation::eCode Code, BYTE cItemSlotIndex, int nUnLockWaitTime )
{
TQUnLockRequsetItemInfo Packet;
memset(&Packet, 0, sizeof(Packet));
const TItem* pItem;
if(Code == DBDNWorldDef::ItemLocation::Equip)
pItem = pSession->GetItem()->GetEquip(cItemSlotIndex);
else if(Code == DBDNWorldDef::ItemLocation::CashEquip)
pItem = pSession->GetItem()->GetCashEquip(cItemSlotIndex);
else
return;
if(!pItem) return;
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.Code = Code;
Packet.cItemSlotIndex = cItemSlotIndex;
Packet.nItemID = pItem->nItemID;
Packet.biItemSerial = pItem->nSerial;
Packet.nUnLockWaitTime = nUnLockWaitTime;
AddSendData(MAINCMD_ITEM, QUERY_REQUEST_ITEMUNLOCK, (char*)&Packet, sizeof(Packet));
}
void CDNDBConnection::QueryUnLockItem( CDNUserSession* pSession, DBDNWorldDef::ItemLocation::eCode Code, BYTE cItemSlotIndex, int nItemID, INT64 biItemSerial )
{
TQLockItemInfo Packet;
memset(&Packet, 0, sizeof(Packet));
Packet.cThreadID = pSession->GetDBThreadID();
Packet.cWorldSetID = pSession->GetWorldSetID();
Packet.nAccountDBID = pSession->GetAccountDBID();
Packet.biCharacterDBID = pSession->GetCharacterDBID();
Packet.Code = Code;
Packet.cItemSlotIndex = cItemSlotIndex;
Packet.nItemID = nItemID;
Packet.biItemSerial = biItemSerial;
AddSendData(MAINCMD_ITEM, QUERY_UNLOCK_ITEM, (char*)&Packet, sizeof(Packet));
}
#endif // #if defined(PRE_ADD_EQUIPLOCK)