2024-12-21 10:04:04 +08:00
|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
|
#include "DNGameConnection.h"
|
|
|
|
|
|
#include "DNUser.h"
|
|
|
|
|
|
//#include "DNParty.h"
|
|
|
|
|
|
#include "DNVillageConnection.h"
|
|
|
|
|
|
#include "DNLoginConnection.h"
|
|
|
|
|
|
#include "DNExtManager.h"
|
|
|
|
|
|
#include "DNDivisionManager.h"
|
|
|
|
|
|
#include "Log.h"
|
|
|
|
|
|
#include "DNPvP.h"
|
|
|
|
|
|
#include "./boost/format.hpp"
|
|
|
|
|
|
#include "./EtStringManager/EtUIXML.h"
|
|
|
|
|
|
#include "DNGuildWarManager.h"
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(_KR)
|
|
|
|
|
|
#include "DNNexonAuth.h"
|
|
|
|
|
|
#elif defined (_JP) && defined (WIN64)
|
|
|
|
|
|
#include "DNNHNNetCafe.h"
|
|
|
|
|
|
#elif defined(_TH)
|
|
|
|
|
|
#include "DNAsiaSoftPCCafe.h"
|
|
|
|
|
|
#elif defined(_ID)
|
|
|
|
|
|
#include "DNKreonPCCafe.h"
|
|
|
|
|
|
#endif // _KR
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_ADD_CHNC2C)
|
|
|
|
|
|
#include "DNC2C.h"
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
extern TMasterConfig g_Config;
|
|
|
|
|
|
|
|
|
|
|
|
CDNGameConnection::CDNGameConnection(void): CConnection(), m_wGameID(0)
|
|
|
|
|
|
{
|
|
|
|
|
|
#if defined(_FINAL_BUILD)
|
|
|
|
|
|
Init(1024 * 1024, 1024 * 1024);
|
|
|
|
|
|
#else // #if defined(_FINAL_BUILD)
|
|
|
|
|
|
Init(1024 * 100, 1024 * 100);
|
|
|
|
|
|
#endif // #if defined(_FINAL_BUILD)
|
|
|
|
|
|
|
|
|
|
|
|
m_nRoomCnt = m_nUserCnt = 0;
|
|
|
|
|
|
m_bZeroPopulation = false;
|
|
|
|
|
|
m_cAffinityType = _GAMESERVER_AFFINITYTYPE_HYBRYD;
|
|
|
|
|
|
m_nManagedID = 0;
|
|
|
|
|
|
m_bConnectComplete = false;
|
|
|
|
|
|
m_uiLastReqEnterGameTick = 0;
|
|
|
|
|
|
m_uiLastEnterGameTick = 0;
|
|
|
|
|
|
#if defined( PRE_FIX_WORLDCOMBINEPARTY )
|
|
|
|
|
|
m_bWorldCombineGameServer = false;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CDNGameConnection::~CDNGameConnection(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
SAFE_DELETE((*ii));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int CDNGameConnection::MessageProcess(int iMainCmd, int iSubCmd, char * pData, int iLen)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (iMainCmd)
|
|
|
|
|
|
{
|
|
|
|
|
|
case GAMA_REGIST:
|
|
|
|
|
|
{
|
|
|
|
|
|
GARegist *pRegist = (GARegist*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
m_nManagedID = pRegist->nManagedID;
|
|
|
|
|
|
m_cAffinityType = pRegist->cAffinityType;
|
|
|
|
|
|
for (int i = 0; i < pRegist->cInfoCount; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
TGameInfo * pInfo = new TGameInfo;
|
|
|
|
|
|
memset(pInfo, 0, sizeof(TGameInfo));
|
|
|
|
|
|
|
|
|
|
|
|
pInfo->nServerID = pRegist->ServerInfo[i].cServerIdx;
|
|
|
|
|
|
pInfo->nServerAttribute = pRegist->ServerInfo[i].nServerAttribute;
|
|
|
|
|
|
pInfo->nIP = pRegist->ServerInfo[i].nIP;
|
|
|
|
|
|
pInfo->nPort = pRegist->ServerInfo[i].nPort;
|
|
|
|
|
|
pInfo->nTcpPort = pRegist->nTcpOpenPort;
|
|
|
|
|
|
pInfo->bHasMargin = pRegist->ServerInfo[i].cMargin == 1 ? true : false;
|
|
|
|
|
|
pInfo->bComplete = false;
|
|
|
|
|
|
pInfo->uiLastDelayReportTick = timeGetTime();
|
|
|
|
|
|
|
|
|
|
|
|
m_GameServerInfoList.push_back(pInfo);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SendReqUserList(ERROR_NONE);
|
|
|
|
|
|
g_Log.Log(LogType::_NORMAL, L"GameConnection Regist ServerInfo ID:[%d]\n", m_wGameID);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_ENDOFREGIST:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAEndofRegist * pPacket = (GAMAEndofRegist*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((*ii)->nServerID == pPacket->nServerID)
|
|
|
|
|
|
{
|
|
|
|
|
|
(*ii)->bComplete = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool bAllComplete = true;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((*ii)->bComplete == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
bAllComplete = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (bAllComplete)
|
|
|
|
|
|
{
|
|
|
|
|
|
SendGameRegistComplete();
|
|
|
|
|
|
g_Log.Log(LogType::_NORMAL, L"[GAMA_ENDOFREGIST] GameID[%d]\r\n", m_wGameID);
|
|
|
|
|
|
}
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_CONNECTCOMPLETE:
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bConnectComplete = true;
|
|
|
|
|
|
#if defined(PRE_FIX_LIVE_CONNECT)
|
|
|
|
|
|
g_pDivisionManager->AddGameServerConnection(this);
|
|
|
|
|
|
#endif //#if defined(PRE_FIX_LIVE_CONNECT)
|
|
|
|
|
|
g_pDivisionManager->GameServerRegist(this);
|
|
|
|
|
|
#ifdef PRE_MOD_OPERATINGFARM
|
|
|
|
|
|
g_pDivisionManager->CheckFarmSync(timeGetTime());
|
|
|
|
|
|
#else //#ifdef PRE_MOD_OPERATINGFARM
|
|
|
|
|
|
g_pDivisionManager->CheckFarmSync();
|
|
|
|
|
|
#endif //#ifdef PRE_MOD_OPERATINGFARM
|
|
|
|
|
|
g_pDivisionManager->SendGuildWarInfoToGame( this );
|
|
|
|
|
|
g_Log.Log(LogType::_NORMAL, L"[GAMA_CONNECTCOMPLETE] GameID[%d]\r\n", m_wGameID);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_DELAYREPORT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMADelayReport * pPacket = (GAMADelayReport*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
m_nRoomCnt = pPacket->nWholeRoomCnt; //<2F><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׳<EFBFBD> <20>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
int nCnt = 0;
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((*ii)->nServerID == pPacket->nServerIdx)
|
|
|
|
|
|
{
|
|
|
|
|
|
(*ii)->nRoomCnt = pPacket->nRoomCnt;
|
|
|
|
|
|
(*ii)->nUserCnt = pPacket->nUserCnt;
|
|
|
|
|
|
(*ii)->nFrame = pPacket->nAvrFrame;
|
|
|
|
|
|
(*ii)->bHasMargin = pPacket->cHasMargin == 1 ? true : false;
|
|
|
|
|
|
(*ii)->uiLastDelayReportTick = timeGetTime();
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WORK
|
|
|
|
|
|
if( pPacket->nAvrFrame < 17 )
|
|
|
|
|
|
g_Log.Log(LogType::_FILELOG, L"ID[%d]Index[%d]WRC[%d]RCnt[%d]UCnt[%d]MinF[%d]MaxF[%d]AvrF[%d]\n", m_wGameID, (*ii)->nServerID, pPacket->nWholeRoomCnt, pPacket->nRoomCnt, pPacket->nUserCnt, pPacket->nMinFrame, pPacket->nMaxFrame, pPacket->nAvrFrame);
|
|
|
|
|
|
#else
|
|
|
|
|
|
if (pPacket->nAvrFrame < 17 && pPacket->nAvrFrame != 0)
|
|
|
|
|
|
g_Log.Log(LogType::_ERROR, L"ID[%d]Index[%d]WRC[%d]RCnt[%d]UCnt[%d]MinF[%d]MaxF[%d]AvrF[%d]\n", m_wGameID, (*ii)->nServerID, pPacket->nWholeRoomCnt, pPacket->nRoomCnt, pPacket->nUserCnt, pPacket->nMinFrame, pPacket->nMaxFrame, pPacket->nAvrFrame);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
nCnt += (*ii)->nUserCnt;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_nUserCnt = nCnt;
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_CHECKUSER:
|
|
|
|
|
|
{
|
|
|
|
|
|
/*GAMACheckUser *pCheckUser = (GAMACheckUser*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->GameCheckUser(this, pCheckUser->nSessionID) == false)
|
|
|
|
|
|
_DANGER_POINT(); */
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_ENTERGAME:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAEnterGame * pPacket = (GAMAEnterGame*)pData;
|
|
|
|
|
|
g_pDivisionManager->EnterGame(pPacket->nAccountDBID, m_wGameID, pPacket->nRoomID, pPacket->nServerIdx);
|
|
|
|
|
|
|
|
|
|
|
|
m_uiLastEnterGameTick = timeGetTime();
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_RECONNECTLOGIN:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAReconnectLogin * pPacket = (GAMAReconnectLogin*)pData;
|
|
|
|
|
|
g_pDivisionManager->ReconnectLogin(pPacket->nAccountDBID);
|
|
|
|
|
|
CDNUser * pUser = g_pDivisionManager->GetUserByAccountDBID(pPacket->nAccountDBID);
|
|
|
|
|
|
if(pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->UpdateUserState(pUser->GetCharacterName(), pUser->GetCharacterDBID(), _LOCATION_NONE, _COMMUNITY_NONE);
|
|
|
|
|
|
}
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_UPDATEWORLDUSERSTATE:
|
|
|
|
|
|
{
|
|
|
|
|
|
#if defined( STRESS_TEST )
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
GAMAUpdateWorldUserState * pPacket = (GAMAUpdateWorldUserState*)pData;
|
|
|
|
|
|
CDNUser * pUser = g_pDivisionManager->GetUserByName(pPacket->szName);
|
|
|
|
|
|
if (pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->UpdateUserState(pUser->GetCharacterName(), pUser->GetCharacterDBID(), _LOCATION_GAME, _COMMUNITY_NONE, -1, pPacket->nMapIdx, this);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_ADDUSERLIST:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAAddUserList *pAdd = (GAMAAddUserList*)pData;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> User<65>߰<EFBFBD><DFB0><EFBFBD><EFBFBD>ְ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_MOD_SELECT_CHAR)
|
|
|
|
|
|
g_pDivisionManager->AddUser(pAdd, m_wGameID, true);
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pAdd->nAccountDBID );
|
|
|
|
|
|
#if defined(_FINAL_BUILD)
|
|
|
|
|
|
if( pUser ){
|
|
|
|
|
|
pUser->m_nRoomID = pAdd->nRoomID;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif //#if defined(_FINAL_BUILD)
|
|
|
|
|
|
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
|
|
|
|
|
|
|
|
|
|
|
BYTE szMID[MACHINEIDMAX] = {0,};
|
|
|
|
|
|
DWORD dwGRC = 0;
|
|
|
|
|
|
#if defined (_KR)
|
|
|
|
|
|
memcpy(szMID, pAdd->szMID, sizeof(szMID));
|
|
|
|
|
|
dwGRC = pAdd->dwGRC;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
g_pDivisionManager->AddUser(0, pAdd->wChannelID, m_wGameID, pAdd->nThreadIdx, pAdd->nAccountDBID, pAdd->nSessionID, pAdd->biCharacterDBID, pAdd->wszCharacterName, pAdd->wszAccountName,
|
|
|
|
|
|
#if defined(PRE_ADD_DWC)
|
|
|
|
|
|
pAdd->cAccountLevel,
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef PRE_ADD_MULTILANGUAGE
|
|
|
|
|
|
pAdd->bAdult, pAdd->szIP, pAdd->szVirtualIp, pAdd->PartyID, szMID, dwGRC, pAdd->cPCBangGrade, pAdd->cSelectedLanguage, true);
|
|
|
|
|
|
#else //#ifdef PRE_ADD_MULTILANGUAGE
|
|
|
|
|
|
pAdd->bAdult, pAdd->szIP, pAdd->szVirtualIp, pAdd->PartyID, szMID, dwGRC, pAdd->cPCBangGrade, 0, true);
|
|
|
|
|
|
#endif //#ifdef PRE_ADD_MULTILANGUAGE
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pAdd->nAccountDBID );
|
|
|
|
|
|
if( pUser ){
|
|
|
|
|
|
pUser->m_nRoomID = pAdd->nRoomID;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(_KR) && defined(_FINAL_BUILD) // nexon pc bang
|
|
|
|
|
|
if (pUser)
|
|
|
|
|
|
g_pNexonAuth->SendLogin(pUser);
|
|
|
|
|
|
|
|
|
|
|
|
#elif defined (_JP) && defined(_FINAL_BUILD) && defined (WIN64)
|
|
|
|
|
|
char szTempAccountName[IDLENMAX * 2];
|
|
|
|
|
|
WideCharToMultiByte(CP_ACP, 0, pAdd->wszAccountName, -1, szTempAccountName, IDLENMAX * 2, NULL, NULL);
|
|
|
|
|
|
|
|
|
|
|
|
bool bTempNetCafe = false;
|
|
|
|
|
|
char szNHNNetCafeCode[NHNNETCAFECODEMAX];
|
|
|
|
|
|
char szNHNProductCode[NHNNETCAFECODEMAX];
|
|
|
|
|
|
|
|
|
|
|
|
if (g_pNHNNetCafe->NetCafe_UserLogin(szTempAccountName, pAdd->szIP, bTempNetCafe))
|
|
|
|
|
|
{
|
|
|
|
|
|
if (bTempNetCafe)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (g_pNHNNetCafe->NetCafe_GetNetCafeCode(szTempAccountName, szNHNNetCafeCode, sizeof(szNHNNetCafeCode)) == false)
|
|
|
|
|
|
memset(szNHNNetCafeCode, 0, sizeof(szNHNNetCafeCode));
|
|
|
|
|
|
|
|
|
|
|
|
if (g_pNHNNetCafe->NetCafe_GetProductCode(szTempAccountName, szNHNProductCode, sizeof(szNHNProductCode)) == false)
|
|
|
|
|
|
memset(szNHNProductCode, 0, sizeof(szNHNProductCode));
|
|
|
|
|
|
|
|
|
|
|
|
if (g_pDivisionManager->SetNHNNetCafeInfo(pAdd->nAccountDBID, bTempNetCafe, szNHNNetCafeCode, szNHNProductCode) == false)
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#elif defined(_TH) && defined(_FINAL_BUILD)
|
|
|
|
|
|
if (pUser)
|
|
|
|
|
|
g_pAsiaSoftPCCafe->SendCheckIPBonus(pUser->GetAccountNameA(), pUser->GetIp(), 1, pUser->GetAccountDBID() );
|
|
|
|
|
|
#elif defined(_ID) && defined(_FINAL_BUILD)
|
|
|
|
|
|
if (pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
_strcpy(pUser->m_szMacAddress, _countof(pUser->m_szMacAddress), pAdd->szMacAddress, (int)strlen(pAdd->szMacAddress));
|
|
|
|
|
|
_strcpy(pUser->m_szKey, _countof(pUser->m_szKey), pAdd->szKey, (int)strlen(pAdd->szKey));
|
|
|
|
|
|
pUser->m_dwKreonCN = pAdd->dwKreonCN;
|
|
|
|
|
|
g_pKreonPCCafe->AddProcessCall(pUser->GetAccountDBID());
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // _KR
|
|
|
|
|
|
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_DELUSER:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMADelUser *pDelUser = (GAMADelUser*)pData;
|
|
|
|
|
|
g_pDivisionManager->DelUser(pDelUser->nAccountDBID);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_SETROOMID:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMASetRoomID *pRoomID = (GAMASetRoomID*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->SetGameRoom(this, pRoomID) == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|
|
|
|
|
if( Party::bIsWorldCombineParty(pRoomID->Type) )
|
|
|
|
|
|
{
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined( STRESS_TEST )
|
|
|
|
|
|
#else
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
g_Log.Log( LogType::_GAMECONNECTLOG, L"SetGameRoom() Failed!!!\n" );
|
|
|
|
|
|
#endif // #if defined( STRESS_TEST )
|
|
|
|
|
|
}
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_SETTUTORIALROOMID:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMASetTutorialRoomID *pRoomID = (GAMASetTutorialRoomID*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->SetTutorialGameRoom(m_wGameID, pRoomID->nAccountDBID, pRoomID->cGameID, pRoomID->cServerIdx, pRoomID->nRoomID, pRoomID->nLoginServerID) == false) {
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
}
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_REQNEXTVILLAGEINFO:
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ұ~
|
|
|
|
|
|
GAMARequestNextVillageInfo * pPacket = (GAMARequestNextVillageInfo*)pData;
|
|
|
|
|
|
g_pDivisionManager->MoveGameToVillage(this, pPacket);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_REBIRTHVILLAGEINFO:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMARebirthVillageInfo *pInfo = (GAMARebirthVillageInfo*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByAccountDBID(pInfo->nAccountDBID);
|
|
|
|
|
|
if (!pUser){
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return _ProcessRebirthVillage( pUser, pInfo->nLastVillageMapIdx );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_MOVEPVPGAMETOPVPLOBBY:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAMovePvPGameToPvPLobby* pPacket = reinterpret_cast<GAMAMovePvPGameToPvPLobby*>(pData);
|
|
|
|
|
|
|
|
|
|
|
|
if( g_pDivisionManager )
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByAccountDBID( pPacket->uiAccountDBID );
|
|
|
|
|
|
if( !pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
char szIp[IPLENMAX] = { 0, };
|
|
|
|
|
|
USHORT nPort = 0;
|
|
|
|
|
|
int nChannel = 0;
|
|
|
|
|
|
BYTE cVillageID = 0;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|
|
|
|
|
if( pPacket->bIsLadderRoom == true || pPacket->uiPvPIndex > WorldPvPMissionRoom::Common::WorldPvPRoomStartIndex )
|
|
|
|
|
|
#else
|
|
|
|
|
|
if( pPacket->bIsLadderRoom == true )
|
|
|
|
|
|
#endif
|
|
|
|
|
|
{
|
|
|
|
|
|
// PvP <20>κ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( g_pDivisionManager->GetPvPLobbyVillageID() );
|
|
|
|
|
|
if( pVillageCon == NULL || pVillageCon->GetActive() == false )
|
|
|
|
|
|
{
|
|
|
|
|
|
return _ProcessRebirthVillage( pUser, pPacket->iLastVillageMapIndex );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|
|
|
|
|
if( pUser->GetPvPVillageID() == 0 && pUser->GetPvPVillageChannelID() == 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
if( pPacket->uiPvPIndex > WorldPvPMissionRoom::Common::WorldPvPRoomStartIndex )
|
|
|
|
|
|
return _ProcessRebirthVillage( pUser, pPacket->iLastVillageMapIndex );
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
nChannel = g_pDivisionManager->GetPvPLobbyChannelID();
|
|
|
|
|
|
cVillageID = g_pDivisionManager->GetPvPLobbyVillageID();
|
|
|
|
|
|
nPort = pVillageCon->GetVillageChannelInfo()->nPort;
|
|
|
|
|
|
_strcpy( szIp, IPLENMAX, pVillageCon->GetVillageChannelInfo()->szIP, (int)strlen(pVillageCon->GetVillageChannelInfo()->szIP) );
|
|
|
|
|
|
|
|
|
|
|
|
if( g_pDivisionManager->GameToVillage( this, pUser->GetAccountDBID(), cVillageID, nChannel ) )
|
|
|
|
|
|
{
|
|
|
|
|
|
SendMovePvPGameToPvPLobby( pPacket->uiAccountDBID, szIp, nPort, ERROR_NONE);
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|
|
|
|
|
if( pPacket->uiPvPIndex > WorldPvPMissionRoom::Common::WorldPvPRoomStartIndex )
|
|
|
|
|
|
{
|
|
|
|
|
|
pUser->SetPvPIndex(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( pUser->GetPvPIndex() == 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
return _ProcessRebirthVillage( pUser, pPacket->iLastVillageMapIndex );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// PvPIndex <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
if( pUser->GetPvPIndex() != pPacket->uiPvPIndex )
|
|
|
|
|
|
{
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CDNPvP* pPvPRoom = g_pDivisionManager->GetPvPRoomByIdx( pPacket->uiPvPIndex );
|
|
|
|
|
|
if( !pPvPRoom )
|
|
|
|
|
|
{
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|
|
|
|
|
if( pPvPRoom->GetGambleRoomType() > 0 )
|
|
|
|
|
|
pUser->SetPvPIndex(0);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
if( g_pDivisionManager->GetVillageInfo( pPvPRoom->GetVillageMapIndex(), pPvPRoom->GetVillageChannelID(), nChannel, cVillageID, szIp, nPort ) )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_pDivisionManager->GameToVillage( this, pUser->GetAccountDBID(), cVillageID, nChannel ) )
|
|
|
|
|
|
{
|
|
|
|
|
|
// PvPCommon::UserSate::Playing|PvPCommon::UserState::Ready <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
UINT uiUserState = pUser->GetPvPUserState()&~(PvPCommon::UserState::Playing|PvPCommon::UserState::Ready);
|
|
|
|
|
|
pPvPRoom->SetPvPUserState( pUser, uiUserState );
|
|
|
|
|
|
|
|
|
|
|
|
SendMovePvPGameToPvPLobby( pPacket->uiAccountDBID, szIp, nPort, ERROR_NONE);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
SendMovePvPGameToPvPLobby( pPacket->uiAccountDBID, szIp, nPort, ERROR_GENERIC_VILLAGECON_NOT_FOUND);
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_LOGINSTATE:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMALoginState *pState = (GAMALoginState*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
if (!g_pDivisionManager->GetLoginConnection() || g_pDivisionManager->GetLoginConnection()->GetDelete()) {
|
|
|
|
|
|
SendLoginState(pState->nAccountDBID, ERROR_LOGIN_FAIL);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
SendLoginState(pState->nAccountDBID, ERROR_NONE);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_VILLAGESTATE:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAVillageState *pState = (GAMAVillageState*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByAccountDBID(pState->nAccountDBID);
|
|
|
|
|
|
if (!pUser){
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
char szIP[IPLENMAX] = { 0, };
|
|
|
|
|
|
USHORT nPort = 0;
|
|
|
|
|
|
int nNextChannelIdx = 0;
|
|
|
|
|
|
BYTE cNextVillageID = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (g_pDivisionManager->GetVillageInfo(pState->nMapIndex, pUser->GetChannelID(), nNextChannelIdx, cNextVillageID, szIP, nPort))
|
|
|
|
|
|
{
|
|
|
|
|
|
SendVillageState(pState->nAccountDBID, pState->nRoomID, pState->nMapIndex, ERROR_NONE );
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
SendVillageState(pState->nAccountDBID, pState->nRoomID, pState->nMapIndex, ERROR_GENERIC_VILLAGECON_NOT_FOUND);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
//case GAMA_DELPARTYMEMBER:
|
|
|
|
|
|
// {
|
|
|
|
|
|
// GAMADelPartyMember *pDelMember = (GAMADelPartyMember*)pData;
|
|
|
|
|
|
// //if (g_pDivisionManager->DelPartyMember(pDelMember->nAccountDBID, true, pDelMember->cKickKind) == false)
|
|
|
|
|
|
// // _DANGER_POINT();
|
|
|
|
|
|
// return ERROR_NONE;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_FRIENDADD:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAFriendAddNotice * pPacket = (GAMAFriendAddNotice*)pData;
|
|
|
|
|
|
g_pDivisionManager->SendFriendAddNotice(pPacket->nAddedAccountDBID, pPacket->wszAddName);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PRIVATECHAT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPrivateChat *pChat = (GAMAPrivateChat*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|
|
|
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pChat->wszChatMsg, pChat->wChatLen);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef PRE_ADD_DOORS
|
|
|
|
|
|
int nRet = g_pDivisionManager->PrivateChat(pChat->nAccountDBID, pChat->wszToCharacterName, pChat->cType, wszChatMsg, pChat->wChatLen, pChat->biDestCharacterDBID);
|
|
|
|
|
|
#else //#ifdef PRE_ADD_DOORS
|
|
|
|
|
|
int nRet = g_pDivisionManager->PrivateChat(pChat->nAccountDBID, pChat->wszToCharacterName, pChat->cType, wszChatMsg, pChat->wChatLen);
|
|
|
|
|
|
#endif //#ifdef PRE_ADD_DOORS
|
|
|
|
|
|
if (nRet != ERROR_NONE)
|
|
|
|
|
|
SendPrivateChat(pChat->nAccountDBID, pChat->wszToCharacterName, pChat->cType, wszChatMsg, pChat->wChatLen, nRet);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_CHAT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAChat *pChat = (GAMAChat*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|
|
|
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pChat->wszChatMsg, pChat->wChatLen);
|
|
|
|
|
|
|
|
|
|
|
|
switch( pChat->cType )
|
|
|
|
|
|
{
|
|
|
|
|
|
// GAMA_CHAT <20><>Ŷ<EFBFBD><C5B6> CHATTYPE_GM <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>߰<EFBFBD>~! by <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
case CHATTYPE_GM:
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pChat->nAccountDBID );
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( pUser->GetUserState() == STATE_VILLAGE )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
pVillageCon->SendChat( pChat->cType, pChat->nAccountDBID, L"", wszChatMsg, pChat->wChatLen );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
case CHATTYPE_WORLD:
|
|
|
|
|
|
#if defined(PRE_ADD_WORLD_MSG_RED)
|
|
|
|
|
|
case CHATTYPE_WORLD_POPMSG:
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|
|
|
|
|
{
|
|
|
|
|
|
#if defined(PRE_ADD_WORLD_MSG_RED)
|
|
|
|
|
|
if (g_pDivisionManager->WorldChat(pChat->nAccountDBID, wszChatMsg, pChat->wChatLen, pChat->cType) != ERROR_NONE)
|
|
|
|
|
|
#else // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|
|
|
|
|
if (g_pDivisionManager->WorldChat(pChat->nAccountDBID, wszChatMsg, pChat->wChatLen) != ERROR_NONE)
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_WORLDSYSTEMMSG:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAWorldSystemMsg *pMsg = (GAMAWorldSystemMsg*)pData;
|
|
|
|
|
|
g_pDivisionManager->WorldSystemMsg(pMsg->nAccountDBID, pMsg->cType, pMsg->nID, pMsg->nValue, pMsg->wszToCharacterName);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|
|
|
|
|
case GAMA_PRIVATECHANNELCHAT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPrivateChannelChatMsg *pChat = (GAMAPrivateChannelChatMsg*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|
|
|
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pChat->wszChatMsg, pChat->wChatLen);
|
|
|
|
|
|
|
|
|
|
|
|
if (g_pDivisionManager->PrivateChannelChat(pChat->nAccountDBID, wszChatMsg, pChat->wChatLen, pChat->nChannelID) != ERROR_NONE)
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_NOTICE:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMANotice * pPacket = (GAMANotice*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|
|
|
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pPacket->szMsg, pPacket->nLen);
|
|
|
|
|
|
|
|
|
|
|
|
g_pDivisionManager->Notice(wszChatMsg, pPacket->nLen, 0);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_BANUSER:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMABanUser * pPacket = (GAMABanUser*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser * pUser = g_pDivisionManager->GetUserByName(pPacket->wszCharacterName);
|
|
|
|
|
|
if(!pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
//std::wstring wString = boost::io::str( boost::wformat( L"%s <20><><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.") % pPacket->wszCharacterName );
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4418, pPacket->cSelectedLang) ) % pPacket->wszCharacterName );
|
|
|
|
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4418) ) % pPacket->wszCharacterName );
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
SendChat( CHATTYPE_GM, pPacket->nAccountDBID, L"", wString.c_str(), static_cast<short>(wString.size()) );
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_pDivisionManager->SendDetachUser(pUser->GetAccountDBID());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PVP_ROOMSYNCOK:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPVP_ROOMSYNCOK* pPacket = reinterpret_cast<GAMAPVP_ROOMSYNCOK*>(pData);
|
|
|
|
|
|
if( g_pDivisionManager )
|
|
|
|
|
|
g_pDivisionManager->SetPvPRoomSyncOK( pPacket->uiPvPIndex );
|
|
|
|
|
|
else
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PVP_LADDERROOMSYNC:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPVP_LADDERROOMSYNC* pPacket = reinterpret_cast<GAMAPVP_LADDERROOMSYNC*>(pData);
|
|
|
|
|
|
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( g_pDivisionManager->GetPvPLobbyVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
pVillageCon->SendLadderSystemRoomSync( pPacket );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PVP_BREAKINTOOK:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPVP_BREAKINTOOK* pPacket = reinterpret_cast<GAMAPVP_BREAKINTOOK*>(pData);
|
|
|
|
|
|
if( g_pDivisionManager )
|
|
|
|
|
|
g_pDivisionManager->SetPvPBreakIntoOK( pPacket );
|
|
|
|
|
|
else
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PVP_COMMAND:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPVP_COMMAND* pPacket = reinterpret_cast<GAMAPVP_COMMAND*>(pData);
|
|
|
|
|
|
|
|
|
|
|
|
if( !g_pDivisionManager )
|
|
|
|
|
|
{
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP)
|
|
|
|
|
|
if( pPacket->uiPvPIndex > WorldPvPMissionRoom::Common::WorldPvPRoomStartIndex )
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
switch( pPacket->uiCommandType )
|
|
|
|
|
|
{
|
|
|
|
|
|
case PvPCommon::GAMA_Command::DeleteGameRoom:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SetDestroyPvPGameRoom( pPacket->uiPvPIndex, pPacket->uiRoomIndex );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case PvPCommon::GAMA_Command::FinishGameMode:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SetPvPFinishGameMode( pPacket->uiPvPIndex, pPacket->uiRoomIndex );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case PvPCommon::GAMA_Command::NoMoreBreakInto:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SetPvPNoMoreBreakInto( pPacket->uiPvPIndex, pPacket->uiRoomIndex );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_PVP_SWAPTMEMBER_INDEX:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPVPSwapMemberIndex * pPacket = (GAMAPVPSwapMemberIndex*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
bool bRet = false;
|
|
|
|
|
|
USHORT nTeam = PvPCommon::Team::A;
|
|
|
|
|
|
if (g_pDivisionManager)
|
|
|
|
|
|
bRet = g_pDivisionManager->SetPvPMemberIndex(pPacket->nAccountDBID, pPacket->cCount, pPacket->Index, nTeam);
|
|
|
|
|
|
|
|
|
|
|
|
SendPvPMemberIndex(nTeam, pPacket, bRet ? ERROR_NONE : ERROR_PVP_SWAPTEAM_MEMBERINDEX_FAIL);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PVP_CHANGEMEMBER_GRADE:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPVPChangeMemberGrade * pPacket = (GAMAPVPChangeMemberGrade*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
bool bRet = false;
|
|
|
|
|
|
USHORT nUserState = PvPCommon::UserState::None;
|
|
|
|
|
|
USHORT nTeam = PvPCommon::Team::A;
|
|
|
|
|
|
if (g_pDivisionManager)
|
|
|
|
|
|
bRet = g_pDivisionManager->SetGuildWarMemberGrade(pPacket->nAccountDBID, pPacket->bAsign, pPacket->nType, pPacket->nTargetSessionID, nUserState, nTeam);
|
|
|
|
|
|
|
|
|
|
|
|
SendPvPMemberGrade(pPacket->nAccountDBID, nTeam, nUserState, pPacket->nTargetSessionID, bRet ? ERROR_NONE : ERROR_PVP_CHANGEMEMBERGRADE_FAIL);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PVP_GUILDWARSCORE:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPvPGuildWarScore * pPacket = (GAMAPvPGuildWarScore*)pData;
|
|
|
|
|
|
if( g_pGuildWarManager )
|
|
|
|
|
|
g_pGuildWarManager->SetGuildWarTournamentPoint(pPacket);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_PVP_GUILDWARRESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPvPGuildWarResult * pPacket = (GAMAPvPGuildWarResult*)pData;
|
|
|
|
|
|
if( g_pGuildWarManager )
|
|
|
|
|
|
g_pGuildWarManager->SetGuildWarTournamentResult(pPacket);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_PVP_GUILDWAREXCEPTION:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPvPGuildWarException * pPacket = (GAMAPvPGuildWarException*)pData;
|
|
|
|
|
|
if (g_pGuildWarManager)
|
|
|
|
|
|
g_pGuildWarManager->SetDropTournament(pPacket->nPvPIndex);
|
|
|
|
|
|
else
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
// Guild
|
|
|
|
|
|
case GAMA_CHANGEGUILDINFO: // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendChangeGuildInfo(reinterpret_cast<MAChangeGuildInfo*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_CHANGEGUILDMEMBINFO: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendChangeGuildMemberInfo(reinterpret_cast<MAChangeGuildMemberInfo*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_GUILDCHAT: // <20><><EFBFBD><EFBFBD> ä<><C3A4>
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendGuildChat(reinterpret_cast<MAGuildChat*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_GUILDCHANGENAME :
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendChangeGuildName(reinterpret_cast<MAGuildChangeName*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_UPDATEGUILDEXP:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendUpdateGuildExp(reinterpret_cast<MAUpdateGuildExp*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_ADDGUILDWAR_POINT:
|
|
|
|
|
|
{
|
|
|
|
|
|
MAAddGuildWarPoint* pPacket = (MAAddGuildWarPoint*)pData;
|
|
|
|
|
|
g_pGuildWarManager->AddGuildWarPoint(pPacket->cTeamType, pPacket->nAddPoint);
|
|
|
|
|
|
g_pDivisionManager->SendAddGuildWarPoint(pPacket);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_CHANGECHARACTERNAME:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendChangeCharacterName(reinterpret_cast<MAChangeCharacterName*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_INVITEPARTYMEMBER:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAInvitePartyMember * pPacket = (GAMAInvitePartyMember*)pData;
|
|
|
|
|
|
int nInviteRet = g_pDivisionManager->SendInvitePartyMember(GetGameID(), pPacket);
|
|
|
|
|
|
if (nInviteRet != ERROR_NONE)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendInvitePartyMemberResult(GetGameID(), pPacket->wszInviterName, pPacket->wszInvitedName, nInviteRet);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_INVITEPARTYMEMBER_RETURNMSG:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAInvitedReturnMsg * pPacket = (GAMAInvitedReturnMsg*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->SendInvitedPartyMemberReturn(pPacket->nAccountDBID, pPacket->nRetCode) == false)
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
|
|
|
|
|
case GAMA_GETPARTYID_RESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAGetPartyIDResult * pPacket = (GAMAGetPartyIDResult*)pData;
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID(pPacket->nSenderAccountDBID);
|
|
|
|
|
|
|
|
|
|
|
|
if( pUser && pUser->GetUserState() == STATE_VILLAGE )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
{
|
|
|
|
|
|
pVillageCon->SendGetPartyIDResult( pPacket->nSenderAccountDBID, pPacket->PartyID );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_RESPARTYASKJOIN:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAResPartyAskJoin* pPacket = (GAMAResPartyAskJoin*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser* pUser = NULL;
|
|
|
|
|
|
if(pPacket->uiReqAccountDBID > 0 )
|
|
|
|
|
|
pUser = g_pDivisionManager->GetUserByAccountDBID(pPacket->uiReqAccountDBID);
|
|
|
|
|
|
else if( pPacket->wszReqChracterName[0] != '\0' )
|
|
|
|
|
|
pUser = g_pDivisionManager->GetUserByName(pPacket->wszReqChracterName);
|
|
|
|
|
|
|
|
|
|
|
|
if( pUser && pUser->GetUserState() == STATE_VILLAGE )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
pVillageCon->SendResPartyAskJoin( pPacket->iRet, pUser->GetAccountDBID());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_ASKJOINAGREEINFO:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAAskJoinAgreeInfo* pPacket = (GAMAAskJoinAgreeInfo*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByName(pPacket->wszAskerCharName);
|
|
|
|
|
|
if( pUser && pUser->GetUserState() == STATE_VILLAGE )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
pVillageCon->SendAskJoinAgreeInfo( pUser->GetAccountDBID(), pPacket->PartyID, pPacket->iPassword );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|
|
|
|
|
case GAMA_SYNC_SYSTEMMAIL:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SyncSystemMail( reinterpret_cast<VIMASyncSystemMail*>(pData) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_PCBANGRESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAPCBangResult *pResult = (GAMAPCBangResult*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByAccountDBID(pResult->nAccountDBID);
|
|
|
|
|
|
if (!pUser){
|
|
|
|
|
|
SendPCBangResult(pResult->nAccountDBID, NULL);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SendPCBangResult(pResult->nAccountDBID, pUser);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_NOTIFYGIFT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMANotifyGift *pGift = (GAMANotifyGift*)pData;
|
|
|
|
|
|
g_pDivisionManager->SendNotifyGift(pGift->nToAccountDBID, pGift->biToCharacterDBID, pGift->bNew, pGift->nGiftCount);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_MASTERSYSTEM_SYNC_SIMPLEINFO:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SyncMasterSystemSimpleInfo( reinterpret_cast<MasterSystem::GAMASyncSimpleInfo*>(pData) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_MASTERSYSTEM_SYNC_GRADUATE:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SyncMasterSystemGraduate( reinterpret_cast<MasterSystem::GAMASyncGraduate*>(pData) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_MASTERSYSTEM_SYNC_CONNECT:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SyncMasterSystemConnect( reinterpret_cast<MasterSystem::GAMASyncConnect*>(pData) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
//Farm
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_FARM_DATALOADED:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAFarmDataLoaded * pPacket = (GAMAFarmDataLoaded*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->SetFarmDataLoaded(pPacket->nFarmDBID, GetGameID(), pPacket->nGameServerIdx, pPacket->nRoomID, pPacket->nMapID, pPacket->nFarmMaxUser) == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F>հ<EFBFBD> <20>ؾ<EFBFBD><D8BE>ұ<EFBFBD>? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾҴٸ<D2B4> <20>հ<EFBFBD> <20>̻<EFBFBD><CCBB>ѰŴ<D1B0>. <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
|
|
|
|
|
g_Log.Log( LogType::_FARM, L"GAMA_FARM_DATALOADED Failed!\n" );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
g_Log.Log( LogType::_FARM, L"GAMA_FARM_DATALOADED! FarmID[%d]\n", pPacket->nFarmDBID );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_FARM_USERCOUNT:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAFarmUserCount * pPacket = (GAMAFarmUserCount*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->SetFarmUpdateUserCount(pPacket->nFarmDBID, pPacket->nFarmRoomID, pPacket->nCurUserCount, pPacket->bStarted, m_nManagedID) == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F>̷<EFBFBD><CCB7>ø<EFBFBD> <20>ƴϵ<C6B4><CFB5>ɴϴ<C9B4>.
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_FARM_INTENDEDDESTROY:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAFarmIntendedDestroy * pPacket = (GAMAFarmIntendedDestroy*)pData;
|
|
|
|
|
|
if (g_pDivisionManager->DestroyFarm(pPacket->nFarmDBID) == false)
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_FARM_SYNC:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SyncFarm( reinterpret_cast<GAMAFarmSync*>(pData) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_FARM_SYNC_ADDWATER:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SyncFarmAddWater( reinterpret_cast<GAMAFarmSyncAddWater*>(pData) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_GUILDMEMBER_LELVEUP:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendGuildMemberLevelUp(reinterpret_cast<MAGuildMemberLevelUp*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_LOAD_USERTEMPDATA:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMALoadUserTempData * pPacket = (GAMALoadUserTempData*)pData;
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pPacket->uiAccountDBID );
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_ADD_REMOTE_QUEST)
|
|
|
|
|
|
if(pUser)
|
|
|
|
|
|
SendUserTempDataResult(pPacket->uiAccountDBID, pUser);
|
|
|
|
|
|
#else
|
|
|
|
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
SendUserTempDataResult(pPacket->uiAccountDBID, pUser->GetDungeonClearCount(), pUser->GetUserGameQuitRewardType());
|
|
|
|
|
|
#else // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
SendUserTempDataResult(pPacket->uiAccountDBID, pUser->GetDungeonClearCount());
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_REMOTE_QUEST)
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_SAVE_USERTEMPDATA:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMASaveUserTempData * pPacket = (GAMASaveUserTempData*)pData;
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pPacket->uiAccountDBID );
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
pUser->SetDungeonClearCount(pPacket->nDungeonClearCount);
|
|
|
|
|
|
#if defined(PRE_ADD_REMOTE_QUEST)
|
|
|
|
|
|
pUser->SetAcceptWaitRemoteQuest(pPacket->nAcceptWaitRemoteQuestCount, pPacket->AcceptWaitRemoteQuestList);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
pUser->SetUserGameQuitRewardType(pPacket->eUserGameQuitRewardType);
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GAMA_DUPLICATE_LOGIN :
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMADuplicateLogin* pPacket = (GAMADuplicateLogin*)pData;
|
|
|
|
|
|
// <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD> <20><><EFBFBD>е<EFBFBD>
|
|
|
|
|
|
//g_pDivisionManager->DelUser(pPacket->nAccountDBID);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20>α<EFBFBD><CEB1>ο<EFBFBD> ResetAuthȣ<68><C8A3><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> <20>˸<EFBFBD>
|
|
|
|
|
|
if( !pPacket->bIsDetach )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNLoginConnection* pLoginConnection = g_pDivisionManager->GetFirstEnableLoginServer();
|
|
|
|
|
|
if( pLoginConnection )
|
|
|
|
|
|
{
|
|
|
|
|
|
pLoginConnection->SendDuplicateLogin(pPacket->nAccountDBID, pPacket->nSessionID);
|
|
|
|
|
|
g_Log.Log(LogType::_ERROR, g_Config.nWorldSetID, pPacket->nAccountDBID, 0, pPacket->nSessionID, L"[ADBID:%u] GAMA_DUPLICATE_LOGIN \r\n", pPacket->nAccountDBID);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_CHECK_LASTDUNGEONINFO:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMACheckLastDungeonInfo* pPacket = reinterpret_cast<GAMACheckLastDungeonInfo*>(pData);
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByCharacterDBID( pPacket->biCharacterDBID );
|
|
|
|
|
|
if( pUser && (pUser->GetUserState() == STATE_VILLAGE || pUser->GetUserState() == STATE_CHECKVILLAGE) )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
pVillageCon->SendCheckLastDungeonInfo( pPacket->uiAccountDBID, pPacket->biCharacterDBID, pPacket->bIsCheck, pPacket->wszPartyName );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAMA_CONFIRM_LASTDUNGEONINFO:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMAConfirmLastDungeonInfo* pPacket = reinterpret_cast<GAMAConfirmLastDungeonInfo*>(pData);
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pPacket->uiAccountDBID );
|
|
|
|
|
|
if( pUser && (pUser->GetUserState() == STATE_VILLAGE || pUser->GetUserState() == STATE_CHECKVILLAGE) )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
pVillageCon->SendConfirmLastDungeonInfo( pPacket->iRet, pPacket->uiAccountDBID, pPacket->BreakIntoType );
|
|
|
|
|
|
#else
|
|
|
|
|
|
pVillageCon->SendConfirmLastDungeonInfo( pPacket->iRet, pPacket->uiAccountDBID );
|
|
|
|
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|
|
|
|
|
case GAMA_DELWORLDPARTY:
|
|
|
|
|
|
{
|
|
|
|
|
|
MADelWorldParty *pPacket = (MADelWorldParty*)pData;
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( g_pDivisionManager->GetPvPLobbyVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
{
|
|
|
|
|
|
pVillageCon->SendDelWorldParty( pPacket );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_WORLDPARTYMEMBER:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMASendWorldPartyMember* pPacket = reinterpret_cast<GAMASendWorldPartyMember*>(pData);
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByCharacterDBID( pPacket->biCharacterDBID );
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
pVillageCon->SendWorldPartyMember( pPacket );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined( PRE_ADD_BESTFRIEND )
|
|
|
|
|
|
case GAMA_LEVELUP_BESTFRIEND:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendLevelBestFriend(reinterpret_cast<MALevelUpBestFriend*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_ADD:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->AddPrivateChatChannel( reinterpret_cast<MAAddPrivateChannel*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_MEMBERADD:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->AddPrivateChatChannelMember( reinterpret_cast<MAAddPrivateChannelMember*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_MEMBERINVITE:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->InvitePrivateChatChannelMember( reinterpret_cast<MAInvitePrivateChannelMember*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_MEMBERINVITERESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->InviteResultPrivateChatChannelMember( reinterpret_cast<MAInvitePrivateChannelMemberResult*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_MEMBERDEL:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->DelPrivateChatChannelMember( reinterpret_cast<MADelPrivateChannelMember*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_MOD:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->ModPrivateChatChannel( reinterpret_cast<MAModPrivateChannel*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_PRIVATECHATCHANNEL_MEMBERKICKRESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nRet = g_pDivisionManager->KickPrivateChatChannelMemberResult( reinterpret_cast<MAKickPrivateChannelMemberResult*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined( PRE_FIX_WORLDCOMBINEPARTY )
|
|
|
|
|
|
case GAMA_WORLDCOMBINEGAMESERVER:
|
|
|
|
|
|
{
|
|
|
|
|
|
SetWorldCombineGameServer(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|
|
|
|
|
case GAMA_DEL_WORLDPVPROOM:
|
|
|
|
|
|
{
|
|
|
|
|
|
MADelWorldPvPRoom *pPacket = (MADelWorldPvPRoom*)pData;
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( g_pDivisionManager->GetPvPLobbyVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
{
|
|
|
|
|
|
pVillageCon->SendDelWorldPvPRoom( pPacket );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_WORLDPVPROOM_JOINRESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
MAWorldPvPRoomJoinResult *pPacket = (MAWorldPvPRoomJoinResult*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByAccountDBID(pPacket->uiAccountDBID);
|
|
|
|
|
|
if (!pUser) break;
|
|
|
|
|
|
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
{
|
|
|
|
|
|
UINT uiUserState = pUser->GetPvPUserState()&~PvPCommon::UserState::Syncing;
|
|
|
|
|
|
pUser->SetPvPUserState( uiUserState );
|
|
|
|
|
|
|
|
|
|
|
|
pVillageCon->SendWorldPvPRoomJoinResult( pPacket );
|
|
|
|
|
|
pVillageCon->SendPvPChangeUserState( g_pDivisionManager->GetPvPLobbyChannelID(), 0, pUser->GetAccountDBID(), uiUserState );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_WORLDPVPROOM_GMCREATERESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
MAWorldPvPRoomGMCreateResult *pPacket = (MAWorldPvPRoomGMCreateResult*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByAccountDBID(pPacket->uiAccountDBID);
|
|
|
|
|
|
if (!pUser) break;
|
|
|
|
|
|
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if( pVillageCon )
|
|
|
|
|
|
{
|
|
|
|
|
|
UINT uiUserState = pUser->GetPvPUserState()&~PvPCommon::UserState::Syncing;
|
|
|
|
|
|
pUser->SetPvPUserState( uiUserState );
|
|
|
|
|
|
|
|
|
|
|
|
pVillageCon->SendWorldPvPRoomGMCreateResult( pPacket );
|
|
|
|
|
|
pVillageCon->SendPvPChangeUserState( g_pDivisionManager->GetPvPLobbyChannelID(), 0, pUser->GetAccountDBID(), uiUserState );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined(PRE_ADD_MUTE_USERCHATTING)
|
|
|
|
|
|
case GAMA_MUTE_USERFIND:
|
|
|
|
|
|
{
|
|
|
|
|
|
MAMuteUserFind *pPacket = (MAMuteUserFind*)pData;
|
|
|
|
|
|
CDNUser *pUser = g_pDivisionManager->GetUserByName(pPacket->wszMuteUserName);
|
|
|
|
|
|
|
|
|
|
|
|
if(pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAMuteUserChat RestraintData;
|
|
|
|
|
|
RestraintData.uiGmAccountID = pPacket->uiGmAccountID;
|
|
|
|
|
|
RestraintData.nMuteMinute = pPacket->nMuteMinute;
|
|
|
|
|
|
RestraintData.uiMuteUserAccountID = pUser->GetAccountDBID();
|
|
|
|
|
|
|
|
|
|
|
|
if(pUser->GetUserState() == STATE_VILLAGE)
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNVillageConnection* pVillageCon = g_pDivisionManager->GetVillageConnectionByVillageID( pUser->GetVillageID() );
|
|
|
|
|
|
if(pVillageCon)
|
|
|
|
|
|
{
|
|
|
|
|
|
pVillageCon->SendMuteUserChatting(&RestraintData);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(pUser->GetUserState() == STATE_GAME)
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNGameConnection* pGameCon = g_pDivisionManager->GetGameConnectionByGameID(pUser->GetGameID());
|
|
|
|
|
|
if(pGameCon)
|
|
|
|
|
|
{
|
|
|
|
|
|
pGameCon->SendMuteUserChatting(&RestraintData);
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4418, pPacket->cSelectedLanguage) ) % pPacket->wszMuteUserName );
|
|
|
|
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4418) ) % pPacket->wszMuteUserName );
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
SendChat( CHATTYPE_GM, pPacket->uiGmAccountID, L"", wString.c_str(), static_cast<short>(wString.size()) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_MUTE_USERCHATTING)
|
|
|
|
|
|
#if defined( PRE_MOD_71820 )
|
|
|
|
|
|
case GAMA_NOTIFYMAIL:
|
|
|
|
|
|
{
|
|
|
|
|
|
GAMANotifyMail *pMail = (GAMANotifyMail*)pData;
|
|
|
|
|
|
g_pDivisionManager->SendNotifyMail(pMail->nToAccountDBID, pMail->biToCharacterDBID, pMail->wTotalMailCount, pMail->wNotReadMailCount, pMail->w7DaysLeftMailCount, pMail->bNewMail);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif // #if defined( PRE_MOD_71820 )
|
|
|
|
|
|
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
|
|
|
|
|
case GAMA_ALTEIAWORLD_SENDTICKET_RESULT:
|
|
|
|
|
|
{
|
|
|
|
|
|
MAAlteiaWorldSendTicketResult *pPacket = (MAAlteiaWorldSendTicketResult*)pData;
|
|
|
|
|
|
int nRet = g_pDivisionManager->AlteiaSendTicketResult( reinterpret_cast<MAAlteiaWorldSendTicketResult*>(pData) );
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined(PRE_ADD_CHNC2C)
|
|
|
|
|
|
case GAMA_C2C_CHAR_ADDCOIN :
|
|
|
|
|
|
{
|
|
|
|
|
|
MAC2CAddCoinResult *pPacket = (MAC2CAddCoinResult*)pData;
|
|
|
|
|
|
if( g_pDnC2C )
|
|
|
|
|
|
g_pDnC2C->SendAddCoin(pPacket->nRetCode, pPacket->szSeqID);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_C2C_CHAR_REDUCECOIN :
|
|
|
|
|
|
{
|
|
|
|
|
|
MAC2CReduceCoinResult *pPacket = (MAC2CReduceCoinResult*)pData;
|
|
|
|
|
|
if( g_pDnC2C )
|
|
|
|
|
|
g_pDnC2C->SendReduceCoin(pPacket->nRetCode, pPacket->szSeqID);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_CHNC2C)
|
|
|
|
|
|
#if defined(PRE_ADD_DWC)
|
|
|
|
|
|
case GAMA_DWC_TEAMCHAT:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendDWCTeamChat(reinterpret_cast<MADWCTeamChat*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GAMA_DWC_UPDATE_SCORE:
|
|
|
|
|
|
{
|
|
|
|
|
|
g_pDivisionManager->SendUpdateDWCScore(reinterpret_cast<MADWCUpdateScore*>(pData));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WORK
|
|
|
|
|
|
//For _WORK
|
|
|
|
|
|
void CDNGameConnection::SendReloadExt()
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_RELOADEXT, 0, NULL, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendReloadAct()
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_RELOADACT, 0, NULL, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif //#ifdef _WORK
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendRegistWorldID()
|
|
|
|
|
|
{
|
|
|
|
|
|
MARegist Regist = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
Regist.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
Regist.cGameID = (BYTE)m_wGameID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_REGISTWORLDINFO, 0, (char*)&Regist, sizeof(MARegist));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendReqUserList(short nRetCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAReqUserList packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nRetCode = nRetCode;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_REQUSERLIST, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendGameRegistComplete()
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_REGISTCOMPLETE, 0, NULL, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendAddUserState(const WCHAR * pName, INT64 biCharacterDBID, int nLocationState, int nCommunityState, int nChannelID, int nMapIdx)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAUserState packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.Type = WorldUserState::Add;
|
|
|
|
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
packet.cLocationState = static_cast<BYTE>(nLocationState == -1 ? _LOCATION_LOGIN : nLocationState); //<2F>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>̿<EFBFBD><CCBF><EFBFBD>
|
|
|
|
|
|
packet.cCommunityState = _COMMUNITY_NONE; //<2F><><EFBFBD><EFBFBD> <20><EFBFBD><EEB6BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
packet.cNameLen = (BYTE)wcslen(pName);
|
|
|
|
|
|
_wcscpy(packet.wszBuf, NAMELENMAX, pName, (BYTE)wcslen(pName));
|
|
|
|
|
|
packet.nChannelID = nChannelID == -1 ? 0 : nChannelID;
|
|
|
|
|
|
packet.nMapIdx = nMapIdx == -1 ? 0 : nMapIdx;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_USERSTATE, 0, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + (packet.cNameLen * sizeof(WCHAR)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDelUserState(const WCHAR * pName, INT64 biCharacterDBID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAUserState packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.Type = WorldUserState::Delete;
|
|
|
|
|
|
packet.cNameLen = (BYTE)wcslen(pName);
|
|
|
|
|
|
_wcscpy(packet.wszBuf, NAMELENMAX, pName, (BYTE)wcslen(pName));
|
|
|
|
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_USERSTATE, 0, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + (packet.cNameLen * sizeof(WCHAR)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendUpdateUserState(const WCHAR * pName, INT64 biCharacterDBID, int nLocationState, int nCommunityState, int nChannelID, int nMapIdx)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAUserState packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.Type = WorldUserState::Modify;
|
|
|
|
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
packet.cNameLen = (BYTE)wcslen(pName);
|
|
|
|
|
|
_wcscpy(packet.wszBuf, NAMELENMAX, pName, (BYTE)wcslen(pName));
|
|
|
|
|
|
packet.cLocationState = nLocationState;
|
|
|
|
|
|
packet.cCommunityState = nCommunityState;
|
|
|
|
|
|
packet.nChannelID = nChannelID;
|
|
|
|
|
|
packet.nMapIdx = nMapIdx;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_USERSTATE, 0, (char*)&packet, sizeof(packet) - sizeof(packet.wszBuf) + (packet.cNameLen * sizeof(WCHAR)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendReqTutorialRoomID(CDNUser *pUser, int nLoginServerID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqTutorialRoomID RoomID = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
RoomID.nAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
RoomID.nSessionID = pUser->GetSessionID();
|
|
|
|
|
|
RoomID.biCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
RoomID.nRandomSeed = pUser->m_nRandomSeed;
|
|
|
|
|
|
RoomID.nTutorialMapIndex = pUser->m_nMapIndex;
|
|
|
|
|
|
RoomID.cTutorialGateNo = pUser->m_cGateNo;
|
|
|
|
|
|
RoomID.cWorldSetID = (BYTE)g_Config.nWorldSetID;
|
|
|
|
|
|
RoomID.bAdult = pUser->IsAdult();
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
RoomID.cSelectedLanguage = pUser->m_eSelectedLanguage;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
_wcscpy(RoomID.wszAccountName, IDLENMAX, pUser->GetAccountName(), (BYTE)wcslen(pUser->GetAccountName()));
|
|
|
|
|
|
RoomID.nLoginServerID = nLoginServerID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_REQTUTORIALROOMID, 0, (char*)&RoomID, sizeof(MAGAReqTutorialRoomID));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNGameConnection::SendReqRoomID( GameTaskType::eType GameTaskType, CDNUser* pUser, TDUNGEONDIFFICULTY StageDifficulty, int nMeritBonusID, bool bDirectConnect )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqRoomID TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.GameTaskType = GameTaskType;
|
|
|
|
|
|
TxPacket.cReqGameIDType = REQINFO_TYPE_SINGLE;
|
|
|
|
|
|
TxPacket.nLeaderAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.InstanceID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.nRandomSeed = pUser->m_nRandomSeed;
|
|
|
|
|
|
TxPacket.nMapIndex = pUser->m_nMapIndex;
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
TxPacket.PartyData.Clear();
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.ItemLootRule = ITEMLOOTRULE_NONE;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.cGateNo = pUser->m_cGateNo;
|
|
|
|
|
|
TxPacket.cGateSelect = pUser->m_cGateSelect;
|
|
|
|
|
|
TxPacket.StageDifficulty = StageDifficulty;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.cVillageID = pUser->GetVillageID();
|
|
|
|
|
|
TxPacket.nMeritBonusID = nMeritBonusID;
|
|
|
|
|
|
TxPacket.bDirectConnect = bDirectConnect;
|
|
|
|
|
|
TxPacket.nChannelID = pUser->GetChannelID();
|
|
|
|
|
|
TxPacket.cMemberCount = 1;
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].MemberAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].MemberSessionID = pUser->GetSessionID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].biMemberCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].MemberTeam = 0;
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].bAdult = pUser->IsAdult();
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].cPCBangGrade = pUser->GetPCBangGrade();
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].cSelectedLanguage = pUser->m_eSelectedLanguage;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
_wcscpy(TxPacket.arrMemberInfo[0].wszAccountName, IDLENMAX, pUser->GetAccountName(), (BYTE)wcslen(pUser->GetAccountName()));
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[0].szMacAddress, _countof(TxPacket.arrMemberInfo[0].szMacAddress), pUser->m_szMacAddress, (int)strlen(pUser->m_szMacAddress));
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[0].szKey, _countof(TxPacket.arrMemberInfo[0].szKey), pUser->m_szKey, (int)strlen(pUser->m_szKey));
|
|
|
|
|
|
#endif //
|
|
|
|
|
|
int iLen = sizeof(MAGAReqRoomID)-sizeof(TxPacket.arrMemberInfo)+sizeof(MAGAReqMemberInfo)*TxPacket.cMemberCount;
|
|
|
|
|
|
int nRet = AddSendData( MAGA_REQROOMID, 0, reinterpret_cast<char*>(&TxPacket), iLen );
|
|
|
|
|
|
if( nRet < 0 )
|
|
|
|
|
|
g_Log.Log( LogType::_GAMECONNECTLOG, pUser, L"SendReqRoomID() Failed!!\n" );
|
|
|
|
|
|
return ( nRet == 0 );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendReqRoomID(VIMAReqGameID * pPacket, int nMeritBonusID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqRoomID TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.GameTaskType = pPacket->GameTaskType;
|
|
|
|
|
|
TxPacket.cReqGameIDType = REQINFO_TYPE_PARTY;
|
|
|
|
|
|
TxPacket.nLeaderAccountDBID = pPacket->PartyData.nLeaderAccountDBID;
|
|
|
|
|
|
TxPacket.InstanceID = pPacket->InstanceID;
|
|
|
|
|
|
TxPacket.nRandomSeed = pPacket->nRandomSeed;
|
|
|
|
|
|
TxPacket.nMapIndex = pPacket->nMapIndex;
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
TxPacket.PartyData = pPacket->PartyData.PartyData;
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.ItemLootRule = pPacket->PartyData.ItemLootRule;
|
|
|
|
|
|
TxPacket.ItemLootRank = pPacket->PartyData.ItemLootRank;
|
|
|
|
|
|
TxPacket.cUserLvLimitMin = pPacket->PartyData.cUserLvLimitMin;
|
|
|
|
|
|
TxPacket.nTargetMapIdx = pPacket->PartyData.nTargetMapIdx;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
TxPacket.cGateNo = pPacket->cGateNo;
|
|
|
|
|
|
TxPacket.cGateSelect = pPacket->cGateSelect;
|
|
|
|
|
|
TxPacket.StageDifficulty = pPacket->StageDifficulty;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.nMeritBonusID = nMeritBonusID;
|
|
|
|
|
|
TxPacket.bDirectConnect = pPacket->bDirectConnect;
|
|
|
|
|
|
TxPacket.nChannelID = pPacket->PartyData.nChannelID;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.cUserLvLimitMax = pPacket->PartyData.cUserLvLimitMax;
|
|
|
|
|
|
TxPacket.PartyDifficulty = pPacket->PartyData.Difficulty;
|
|
|
|
|
|
_wcscpy(TxPacket.wszPartyName, PARTYNAMELENMAX, pPacket->PartyData.wszPartyName, (BYTE)wcslen(pPacket->PartyData.wszPartyName));
|
|
|
|
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.cIsJobDice = pPacket->PartyData.cJobDice;
|
|
|
|
|
|
_wcscpy(TxPacket.wszPartyPass, PARTYPASSWORDMAX, pPacket->PartyData.wszPartyPass, (BYTE)wcslen(pPacket->PartyData.wszPartyPass));
|
|
|
|
|
|
TxPacket.cUpkeepCount = pPacket->PartyData.cUpkeepCount;
|
|
|
|
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|
|
|
|
|
memcpy(&TxPacket.nKickedMemberList, &pPacket->PartyData.nKickedMemberDBID, sizeof(TxPacket.nKickedMemberList));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.nVoiceChannelID[0] = pPacket->PartyData.nVoiceChannelID;
|
|
|
|
|
|
#if defined(PRE_PARTY_DB )
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.cMemberMax = pPacket->PartyData.cMemberMax;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
TxPacket.cMemberCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
for( int i=0 ; i<pPacket->PartyData.PartyData.iCurMemberCount; ++i )
|
|
|
|
|
|
#else
|
|
|
|
|
|
for( int i=0 ; i<pPacket->PartyData.cMemberCount; ++i )
|
|
|
|
|
|
#endif
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID(pPacket->PartyData.MemberInfo[i].nAccountDBID);
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( pUser->GetAccountDBID() == TxPacket.nLeaderAccountDBID )
|
|
|
|
|
|
TxPacket.cVillageID = pUser->GetVillageID();
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberSessionID = pUser->GetSessionID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].biMemberCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberTeam = 0;
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].bAdult = pUser->IsAdult();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].cPCBangGrade = pUser->GetPCBangGrade();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].cMemberIndex = pPacket->PartyData.MemberInfo[i].cMemberIndex;
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].VoiceInfo = pPacket->PartyData.MemberInfo[i].VoiceInfo;
|
|
|
|
|
|
#if defined( PRE_ADD_NEWCOMEBACK )
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].bCheckComebackAppellation = pPacket->PartyData.MemberInfo[i].bCheckComebackAppellation;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].cSelectedLanguage = pUser->m_eSelectedLanguage;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
_wcscpy( TxPacket.arrMemberInfo[TxPacket.cMemberCount].wszAccountName, IDLENMAX, pUser->GetAccountName(), (int)wcslen(pUser->GetAccountName()));
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szMacAddress, _countof(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szMacAddress), pUser->m_szMacAddress, (int)strlen(pUser->m_szMacAddress));
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szKey, _countof(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szKey), pUser->m_szKey, (int)strlen(pUser->m_szKey));
|
|
|
|
|
|
#endif //
|
|
|
|
|
|
++TxPacket.cMemberCount;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|
|
|
|
|
if( Party::bIsWorldCombineParty(pPacket->PartyData.PartyData.Type) )
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2B6A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD> <20>̰ɷ<CCB0> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
TxPacket.cVillageID = (BYTE)pPacket->unVillageChannelID;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
//
|
|
|
|
|
|
int iLen = sizeof(MAGAReqRoomID)-sizeof(TxPacket.arrMemberInfo)+sizeof(MAGAReqMemberInfo)*TxPacket.cMemberCount;
|
|
|
|
|
|
AddSendData( MAGA_REQROOMID, 0, reinterpret_cast<char*>(&TxPacket), iLen );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendLadderReqRoomID( VIMALadderReqGameID* pPacket )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqRoomID TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.GameTaskType = GameTaskType::PvP;
|
|
|
|
|
|
TxPacket.cReqGameIDType = REQINFO_TYPE_LADDER;
|
|
|
|
|
|
TxPacket.nRandomSeed = pPacket->iRandomSeed;
|
|
|
|
|
|
TxPacket.nMapIndex = pPacket->iMapIndex;;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.bDirectConnect = true;
|
|
|
|
|
|
TxPacket.cMemberCount = pPacket->LadderData.cMemberCount;
|
|
|
|
|
|
TxPacket.biLadderRoomIndexArr[0] = pPacket->biRoomIndexArr[0];
|
|
|
|
|
|
TxPacket.biLadderRoomIndexArr[1] = pPacket->biRoomIndexArr[1];
|
|
|
|
|
|
TxPacket.MatchType = pPacket->MatchType;
|
|
|
|
|
|
|
|
|
|
|
|
for( int i=0 ; i<TxPacket.cMemberCount ; ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID( pPacket->LadderData.MemberInfoArr[i].uiAccountDBID );
|
|
|
|
|
|
if (pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
if( i == 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
TxPacket.cVillageID = pUser->GetVillageID();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].MemberAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].MemberSessionID = pUser->GetSessionID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].biMemberCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].MemberTeam = pPacket->LadderData.MemberInfoArr[i].uiTeam;
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].bAdult = pUser->IsAdult();
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].cPCBangGrade = pUser->GetPCBangGrade();
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
TxPacket.arrMemberInfo[i].cSelectedLanguage = pUser->m_eSelectedLanguage;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
_wcscpy( TxPacket.arrMemberInfo[i].wszAccountName, IDLENMAX, pUser->GetAccountName(), (int)wcslen(pUser->GetAccountName()) );
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[i].szMacAddress, _countof(TxPacket.arrMemberInfo[i].szMacAddress), pUser->m_szMacAddress, (int)strlen(pUser->m_szMacAddress));
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[i].szKey, _countof(TxPacket.arrMemberInfo[i].szKey), pUser->m_szKey, (int)strlen(pUser->m_szKey));
|
|
|
|
|
|
#endif //
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int iLen = sizeof(MAGAReqRoomID)-sizeof(TxPacket.arrMemberInfo)+sizeof(MAGAReqMemberInfo)*TxPacket.cMemberCount;
|
|
|
|
|
|
AddSendData( MAGA_REQROOMID, 0, reinterpret_cast<char*>(&TxPacket), iLen );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNGameConnection::SendReqRoomID( CDNPvP* pPvPRoom, bool bDirectConnect )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqRoomID TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.GameTaskType = GameTaskType::PvP;
|
|
|
|
|
|
TxPacket.cReqGameIDType = REQINFO_TYPE_PVP;
|
|
|
|
|
|
TxPacket.nLeaderAccountDBID = pPvPRoom->GetCaptainAccountDBID();
|
|
|
|
|
|
TxPacket.InstanceID = pPvPRoom->GetIndex();
|
|
|
|
|
|
TxPacket.nRandomSeed = pPvPRoom->GetRandomSeed();
|
|
|
|
|
|
TxPacket.nMapIndex = pPvPRoom->GetMapIndex();
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
TxPacket.PartyData.Clear();
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.ItemLootRule = ITEMLOOTRULE_NONE;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
TxPacket.cGateNo = 0;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.nMeritBonusID = 0;
|
|
|
|
|
|
TxPacket.bDirectConnect = bDirectConnect;
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|
|
|
|
|
TxPacket.cGambleType = pPvPRoom->GetGambleRoomType();
|
|
|
|
|
|
TxPacket.nGamblePrice = pPvPRoom->GetGambleRoomPrice();
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
if (pPvPRoom->GetGuildWarInfo(TxPacket.nGuildDBID, TxPacket.nGuildQualifyingScore))
|
|
|
|
|
|
TxPacket.cVillageID = pPvPRoom->GetVillageID();
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.nEventRoomIndex = pPvPRoom->GetEventRoomIndex();
|
|
|
|
|
|
if (pPvPRoom->GetEventRoomIndex() > 0)
|
|
|
|
|
|
g_Log.Log(LogType::_PVPROOM, g_Config.nWorldSetID, 0, 0, 0, L"SendReqRoomID [Index:%d][Room:%d][Event:%d] \r\n", pPvPRoom->GetIndex(), pPvPRoom->GetGameServerRoomIndex(), pPvPRoom->GetEventRoomIndex());
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<UINT> vAccountDBID;
|
|
|
|
|
|
pPvPRoom->GetMembersByAccountDBID( vAccountDBID );
|
|
|
|
|
|
if( pPvPRoom->GetIsGuildWarSystem() == false )
|
|
|
|
|
|
{
|
|
|
|
|
|
if (vAccountDBID.size() <= 0)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
TxPacket.biCreateRoomCharacterDBID = pPvPRoom->GetCreateRoomCharacterDBID();
|
|
|
|
|
|
|
|
|
|
|
|
pPvPRoom->GetVoiceChannelID(TxPacket.nVoiceChannelID);
|
|
|
|
|
|
TxPacket.cMemberCount = 0;
|
|
|
|
|
|
for( size_t i=0 ; i<vAccountDBID.size() ; ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
CDNUser* pUser = g_pDivisionManager->GetUserByAccountDBID(vAccountDBID[i]);
|
|
|
|
|
|
if( pUser && pPvPRoom->bIsReady( pUser ) && pUser->GetPvPUserState()&PvPCommon::UserState::Syncing )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( pUser->GetAccountDBID() == TxPacket.nLeaderAccountDBID )
|
|
|
|
|
|
TxPacket.cVillageID = pUser->GetVillageID();
|
|
|
|
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|
|
|
|
|
else if( pPvPRoom->GetEventRoomIndex() > 0 || pPvPRoom->GetGambleRoomType() > 0 )
|
|
|
|
|
|
#else
|
|
|
|
|
|
else if( pPvPRoom->GetEventRoomIndex() > 0 )
|
|
|
|
|
|
#endif
|
|
|
|
|
|
TxPacket.cVillageID = pPvPRoom->GetVillageID();
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberSessionID = pUser->GetSessionID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].biMemberCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].cMemberIndex = pPvPRoom->GetPvPTeamIndex(pUser);
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].uiPvPUserState = pUser->GetPvPUserState();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].uiPvPUserState &= ~PvPCommon::UserState::CantLeaveMask;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|
|
|
|
|
if( pPvPRoom->GetGameMode() == PvPCommon::GameMode::PvP_Zombie_Survival && pUser->GetPvPTeam() != PvPCommon::Team::Observer )
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberTeam = PvPCommon::Team::A;
|
|
|
|
|
|
#if defined( PRE_ADD_RACING_MODE)
|
|
|
|
|
|
// <20><><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
else if( pPvPRoom->GetGameMode() == PvPCommon::GameMode::PvP_Racing && pUser->GetPvPTeam() != PvPCommon::Team::Observer )
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberTeam = PvPCommon::Team::A;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
else
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].MemberTeam = pUser->GetPvPTeam();
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].bAdult = pUser->IsAdult();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].cPCBangGrade = pUser->GetPCBangGrade();
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].bPvPFatigue = pUser->GetPvPFatiue();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
TxPacket.arrMemberInfo[TxPacket.cMemberCount].cSelectedLanguage = pUser->m_eSelectedLanguage;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szMacAddress, _countof(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szMacAddress), pUser->m_szMacAddress, (int)strlen(pUser->m_szMacAddress));
|
|
|
|
|
|
_strcpy(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szKey, _countof(TxPacket.arrMemberInfo[TxPacket.cMemberCount].szKey), pUser->m_szKey, (int)strlen(pUser->m_szKey));
|
|
|
|
|
|
#endif //
|
|
|
|
|
|
_wcscpy( TxPacket.arrMemberInfo[TxPacket.cMemberCount].wszAccountName, IDLENMAX, pUser->GetAccountName(), (int)wcslen(pUser->GetAccountName()) );
|
|
|
|
|
|
++TxPacket.cMemberCount;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
int iLen = sizeof(MAGAReqRoomID)-sizeof(TxPacket.arrMemberInfo)+sizeof(MAGAReqMemberInfo)*TxPacket.cMemberCount;
|
|
|
|
|
|
AddSendData( MAGA_REQROOMID, 0, reinterpret_cast<char*>(&TxPacket), iLen );
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendWorldPvPReqRoomID( VIMACreateWorldPvPRoom* pPacket, BYTE cVillageID )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqRoomID TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.cVillageID = cVillageID;
|
|
|
|
|
|
TxPacket.GameTaskType = GameTaskType::PvP;
|
|
|
|
|
|
TxPacket.cReqGameIDType = REQINFO_TYPE_PVP;
|
|
|
|
|
|
TxPacket.nMapIndex = pPacket->Data.nMapID;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.bDirectConnect = true;
|
|
|
|
|
|
TxPacket.InstanceID = pPacket->nRoomIndex;
|
|
|
|
|
|
TxPacket.eWorldReqType = pPacket->Data.eWorldReqType;
|
|
|
|
|
|
TxPacket.MissonRoomData = pPacket->Data;
|
|
|
|
|
|
if( pPacket->nGMAccountDBID > 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
TxPacket.cMemberCount++;
|
|
|
|
|
|
TxPacket.arrMemberInfo[0].MemberAccountDBID = pPacket->nGMAccountDBID;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int iLen = sizeof(MAGAReqRoomID)-sizeof(TxPacket.arrMemberInfo)+sizeof(MAGAReqMemberInfo)*TxPacket.cMemberCount;
|
|
|
|
|
|
AddSendData( MAGA_REQROOMID, 0, reinterpret_cast<char*>(&TxPacket), iLen );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_ADD_FARM_DOWNSCALE )
|
|
|
|
|
|
bool CDNGameConnection::SendReqFarmRoomID(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, int iAttr )
|
|
|
|
|
|
#elif defined( PRE_ADD_VIP_FARM )
|
|
|
|
|
|
bool CDNGameConnection::SendReqFarmRoomID(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, Farm::Attr::eType Attr )
|
|
|
|
|
|
#else
|
|
|
|
|
|
bool CDNGameConnection::SendReqFarmRoomID(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart)
|
|
|
|
|
|
#endif // #if defined( PRE_ADD_FARM_DOWNSCALE )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqRoomID TxPacket;
|
|
|
|
|
|
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.GameTaskType = GameTaskType::Farm;
|
|
|
|
|
|
TxPacket.cReqGameIDType = REQINFO_TYPE_FARM;
|
|
|
|
|
|
TxPacket.InstanceID = nFarmDBID;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.nMapIndex = nMapID;
|
|
|
|
|
|
#if defined( PRE_PARTY_DB )
|
|
|
|
|
|
TxPacket.PartyData.Clear();
|
|
|
|
|
|
TxPacket.PartyData.nPartyMaxCount = nMaxUser;
|
|
|
|
|
|
#else
|
|
|
|
|
|
TxPacket.cMemberMax = nMaxUser;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
TxPacket.nRandomSeed = timeGetTime();
|
|
|
|
|
|
TxPacket.bStart = bStart;
|
|
|
|
|
|
#if defined( PRE_ADD_FARM_DOWNSCALE )
|
|
|
|
|
|
TxPacket.iFarmAttr = iAttr;
|
|
|
|
|
|
#elif defined( PRE_ADD_VIP_FARM )
|
|
|
|
|
|
TxPacket.FarmAttr = Attr;
|
|
|
|
|
|
#endif // #if defined( PRE_ADD_FARM_DOWNSCALE )
|
|
|
|
|
|
|
|
|
|
|
|
int iLen = sizeof(MAGAReqRoomID)-sizeof(TxPacket.arrMemberInfo);
|
|
|
|
|
|
int nRet = AddSendData( MAGA_REQROOMID, 0, reinterpret_cast<char*>(&TxPacket), iLen );
|
|
|
|
|
|
if (nRet < 0)
|
|
|
|
|
|
g_Log.Log(LogType::_GAMECONNECTLOG, L"SendReqFarmRoomID() Failed!!\n");
|
|
|
|
|
|
return (nRet == 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SetLastReqEnterGameTick()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_uiLastReqEnterGameTick = timeGetTime();
|
|
|
|
|
|
if( m_uiLastEnterGameTick == 0 )
|
|
|
|
|
|
m_uiLastEnterGameTick = m_uiLastReqEnterGameTick;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNGameConnection::SendForceStopPvP(int nGameRoomID, UINT nForceWinGuildDBID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAForceStopPvP packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAGAForceStopPvP));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nGameRoomID = nGameRoomID;
|
|
|
|
|
|
packet.nForceWinGuildDBID = nForceWinGuildDBID;
|
|
|
|
|
|
|
|
|
|
|
|
if (AddSendData(MAGA_PVP_FORCESTOP, 0, (char*)&packet, sizeof(MAGAForceStopPvP)) == ERROR_NONE)
|
|
|
|
|
|
return true;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendGuildWarAllStop()
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PVP_ALLSTOPGUILDWAR, 0, NULL, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendInivitePartyMemberResult(UINT nAccountDBID, const WCHAR * pwszInvitedName, int nRetCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAInvitePartyMemberResult packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAGAInvitePartyMemberResult));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
STRCPYW(packet.wszInvitedName, NAMELENMAX, pwszInvitedName);
|
|
|
|
|
|
packet.nRetCode = nRetCode;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_INVITEPARTYMEMBERRESULT, 0, (char*)&packet, sizeof(MAGAInvitePartyMemberResult));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
|
|
|
|
|
void CDNGameConnection::SendGetPartyID( UINT nAccountDBID, UINT nSenderAccountDBID )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAGetPartyID packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAGAGetPartyID));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
packet.nSenderAccountDBID = nSenderAccountDBID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_GETPARTYID, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendReqPartyAskJoin( UINT nAccountDBID, const VIMAReqPartyAskJoin* pPacket )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAReqPartyAskJoin TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
TxPacket.nReqAccountDBID = pPacket->uiReqAccountDBID;
|
|
|
|
|
|
TxPacket.biReqCharacterDBID = pPacket->biReqCharacterDBID;
|
|
|
|
|
|
TxPacket.cReqUserJob = pPacket->cReqUserJob;
|
|
|
|
|
|
TxPacket.cReqUserLevel = pPacket->cReqUserLevel;
|
|
|
|
|
|
_wcscpy( TxPacket.wszReqChracterName, _countof(TxPacket.wszReqChracterName), pPacket->wszReqChracterName, static_cast<int>(wcslen(pPacket->wszReqChracterName)) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_REQPARTYASKJOIN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNGameConnection::GetHasMargin()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_GameServerInfoList.empty()) return false;
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if( timeGetTime()-(*ii)->uiLastDelayReportTick >= DELAYED_PRCESS_CHECKTICK+3000 )
|
|
|
|
|
|
{
|
|
|
|
|
|
g_Log.Log( LogType::_GAMESERVERDELAY, L"[%d] GameServer Delay Delay=%d!!!\n", m_nManagedID, timeGetTime()-(*ii)->uiLastDelayReportTick );
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 10<31>е<EFBFBD><D0B5><EFBFBD> <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD>˽ð<CBBD><C3B0>̳<EFBFBD> <20><><EFBFBD><EFBFBD><D7BB>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( m_uiLastReqEnterGameTick && timeGetTime()-m_uiLastReqEnterGameTick >= 1000*60*10 )
|
|
|
|
|
|
{
|
|
|
|
|
|
m_uiLastReqEnterGameTick = timeGetTime();
|
|
|
|
|
|
m_uiLastEnterGameTick = timeGetTime();
|
|
|
|
|
|
//g_Log.Log( LogType::_ENTERGAMECHECK, L"[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>˽ð<CBBD><C3B0>̳<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> Tick <20>ʱ<EFBFBD>ȭ!!!\n", m_nManagedID );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DWORD dwGap = abs( static_cast<int>(m_uiLastReqEnterGameTick-m_uiLastEnterGameTick) );
|
|
|
|
|
|
if( dwGap >= 60000 )
|
|
|
|
|
|
{
|
|
|
|
|
|
//g_Log.Log( LogType::_ENTERGAMECHECK, L"[%d] EnterGameCheck!!! Delay=%d!!!\n", m_nManagedID, dwGap );
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
if ((*ii)->bHasMargin == true)
|
|
|
|
|
|
return true;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int CDNGameConnection::GetIdleGameServer(int nCnt)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_GameServerInfoList.empty()) return -2;
|
|
|
|
|
|
if (nCnt > (int)m_GameServerInfoList.size())
|
|
|
|
|
|
return m_GameServerInfoList[rand()%m_GameServerInfoList.size()]->nServerID;
|
|
|
|
|
|
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
if ((*ii)->bHasMargin == true)
|
|
|
|
|
|
return (*ii)->nServerID;
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int CDNGameConnection::GetIdleGameServerByAtt(int Att)
|
|
|
|
|
|
{
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
if ((*ii)->bHasMargin == true && (*ii)->nServerAttribute&Att)
|
|
|
|
|
|
return (*ii)->nServerID;
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNGameConnection::GetGameServerInfoByID(int nGameServerID, USHORT * pPort, char * pIP, USHORT * pTcpPort)
|
|
|
|
|
|
{
|
|
|
|
|
|
std::vector <TGameInfo*>::iterator ii;
|
|
|
|
|
|
for (ii = m_GameServerInfoList.begin(); ii != m_GameServerInfoList.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((*ii)->nServerID == nGameServerID)
|
|
|
|
|
|
{
|
|
|
|
|
|
*pPort = (*ii)->nPort;
|
|
|
|
|
|
_inet_addr((*ii)->nIP, pIP);
|
|
|
|
|
|
*pTcpPort = (*ii)->nTcpPort;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNextVillageServerInfo(UINT nAccountDBID, int nMapIdx, int nNextMapIdx, int nNextGateIdx, const char * pIP, USHORT nPort, short nRet, INT64 nItemSerial)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGANextVillageInfo packet = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
packet.nMapIdx = nMapIdx;
|
|
|
|
|
|
packet.nNextMapIdx = nNextMapIdx;
|
|
|
|
|
|
packet.nNextGateIdx = nNextGateIdx;
|
|
|
|
|
|
_strcpy( packet.szIP, _countof(packet.szIP), pIP, static_cast<int>(strlen(pIP)) );
|
|
|
|
|
|
packet.nPort = nPort;
|
|
|
|
|
|
packet.nRet = nRet;
|
|
|
|
|
|
packet.nItemSerial = nItemSerial;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_NEXTVILLAGEINFO, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendRebirthVillageInfo(UINT nAccountDBID, int nVillageID, int nChannelID, const char *pIp, USHORT nPort, short nRet)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGARebirthVillageInfo Info = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
Info.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
Info.nVillageID = nVillageID;
|
|
|
|
|
|
Info.nChannelID = nChannelID;
|
|
|
|
|
|
_strcpy(Info.szIP, _countof(Info.szIP), pIp, (int)strlen(pIp));
|
|
|
|
|
|
Info.nPort = nPort;
|
|
|
|
|
|
Info.nRet = nRet;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_REBIRTHVILLAGEINFO, 0, (char*)&Info, sizeof(MAGARebirthVillageInfo));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendMovePvPGameToPvPLobby( const UINT uiAccountDBID, const char* pszIP, const USHORT unPort, const short nRet )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAMovePvPGameToPvPLobby TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.unPort = unPort;
|
|
|
|
|
|
TxPacket.nRet = nRet;
|
|
|
|
|
|
if( pszIP )
|
|
|
|
|
|
_strcpy( TxPacket.szIP, _countof(TxPacket.szIP), pszIP, (int)strlen(pszIP) );
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_MOVEPVPGAMETOPVPLOBBY, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendLoginState(UINT nAccountDBID, short nRet)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGALoginState State = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
State.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
State.nRet = nRet;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_LOGINSTATE, 0, (char*)&State, sizeof(MAGALoginState));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendVillageState(UINT nAccountDBID, int nRoomID, int nMapIndex, short nRet)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAVillageState State = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
State.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
State.nRoomID = nRoomID;
|
|
|
|
|
|
State.nMapIndex = nMapIndex;
|
|
|
|
|
|
State.nRet = nRet;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_VILLAGESTATE, 0, (char*)&State, sizeof(MAGAVillageState));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendFriendAddNotice(UINT nAddedAccountDBID, const WCHAR * pName)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAFriendAddNotice packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAddedAccountDBID = nAddedAccountDBID;
|
|
|
|
|
|
_wcscpy(packet.wszAddName, NAMELENMAX, pName, (int)wcslen(pName));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_FRIENDADDNOTICE, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//void CDNGameConnection::SendDelPartyMember(int nRoomID, UINT nLeaderAccountDBID, UINT nMemberSessionID, UINT nLeaderSessionID, char cKickKind)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// MAGADelPartyMember PartyMember = { 0, };
|
|
|
|
|
|
//
|
|
|
|
|
|
// PartyMember.nRoomID = nRoomID;
|
|
|
|
|
|
// PartyMember.nNewLeaderAccountDBID = nLeaderAccountDBID;
|
|
|
|
|
|
// PartyMember.nMemberSessionID = nMemberSessionID;
|
|
|
|
|
|
// PartyMember.nNewLeaderSessionID = nLeaderSessionID;
|
|
|
|
|
|
// PartyMember.cKickKind = cKickKind;
|
|
|
|
|
|
//
|
|
|
|
|
|
// AddSendData(MAGA_DELPARTYMEMBER, 0, (char*)&PartyMember, sizeof(MAGADelPartyMember));
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChat(UINT nToAccountDBID, const WCHAR *pwszFromCharacterName, char cType, const WCHAR *pwszChatMsg, short wChatLen, int nRet)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAPrivateChat Private = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
Private.nAccountDBID = nToAccountDBID;
|
|
|
|
|
|
Private.wChatLen = wChatLen;
|
|
|
|
|
|
Private.cType = cType;
|
|
|
|
|
|
_wcscpy(Private.wszFromCharacterName, NAMELENMAX, pwszFromCharacterName, (int)wcslen(pwszFromCharacterName));
|
|
|
|
|
|
Private.nRet = nRet;
|
|
|
|
|
|
|
|
|
|
|
|
int nSize = 0;
|
|
|
|
|
|
if (nRet != ERROR_NONE){ // <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>
|
|
|
|
|
|
nSize = sizeof(MAPrivateChat) - sizeof(Private.wszChatMsg);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
nSize = sizeof(MAPrivateChat) - sizeof(Private.wszChatMsg) + (wChatLen * 2);
|
|
|
|
|
|
_wcscpy(Private.wszChatMsg, CHATLENMAX, pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHAT, 0, (char*)&Private, nSize);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChat(char cType, UINT nToAccountDBID, const WCHAR *pwszFromCharacterName, const WCHAR *pwszChatMsg, short wChatLen)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAChat Chat = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
Chat.nAccountDBID = nToAccountDBID;
|
|
|
|
|
|
Chat.cType = cType;
|
|
|
|
|
|
Chat.wChatLen = wChatLen;
|
|
|
|
|
|
if (pwszFromCharacterName)
|
|
|
|
|
|
_wcscpy(Chat.wszFromCharacterName, NAMELENMAX, pwszFromCharacterName, (int)wcslen(pwszFromCharacterName));
|
|
|
|
|
|
|
|
|
|
|
|
if (pwszChatMsg)
|
|
|
|
|
|
_wcscpy(Chat.wszChatMsg, CHATLENMAX, pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_CHAT, 0, (char*)&Chat, sizeof(MAChat) - sizeof(Chat.wszChatMsg) + (wChatLen*sizeof(WCHAR)) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendWorldSystemMsg(const WCHAR *pwszFromCharacterName, char cType, int nID, int nValue, WCHAR* pwszToCharacterName)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAWorldSystemMsg Msg;
|
|
|
|
|
|
memset(&Msg, 0, sizeof(MAWorldSystemMsg));
|
|
|
|
|
|
|
|
|
|
|
|
_wcscpy(Msg.wszFromCharacterName, NAMELENMAX, pwszFromCharacterName, (int)wcslen(pwszFromCharacterName));
|
|
|
|
|
|
Msg.cType = cType;
|
|
|
|
|
|
Msg.nID = nID;
|
|
|
|
|
|
Msg.nValue = nValue;
|
|
|
|
|
|
if (pwszToCharacterName)
|
|
|
|
|
|
_wcscpy(Msg.wszToCharacterName, _countof(Msg.wszToCharacterName), pwszToCharacterName, (int)wcslen(pwszToCharacterName));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_WORLDSYSTEMMSG, 0, (char*)&Msg, sizeof(MAWorldSystemMsg));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChannelChat(const WCHAR *pwszFromCharacterName, const WCHAR *pwszChatMsg, short wChatLen, INT64 nChannelID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAPrivateChannelChat Chat;
|
|
|
|
|
|
memset(&Chat, 0, sizeof(MAPrivateChannelChat));
|
|
|
|
|
|
|
|
|
|
|
|
Chat.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
Chat.wChatLen = wChatLen;
|
|
|
|
|
|
Chat.nChannelID = nChannelID;
|
|
|
|
|
|
_wcscpy(Chat.wszFromCharacterName, NAMELENMAX, pwszFromCharacterName, (int)wcslen(pwszFromCharacterName));
|
|
|
|
|
|
_wcscpy(Chat.wszChatMsg, CHATLENMAX, pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHANNELCHAT, 0, (char*)&Chat, sizeof(Chat) - sizeof(Chat.wszChatMsg) + (wChatLen * 2));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNotice(const WCHAR * pMsg, const int nLen, int nShowSec)
|
|
|
|
|
|
{
|
|
|
|
|
|
MANotice packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.Info.nNoticeType = _NOTICETYPE_WORLD;
|
|
|
|
|
|
packet.Info.nSlideShowSec = nShowSec;
|
|
|
|
|
|
_wcscpy(packet.wszNoticeMsg, CHATLENMAX, pMsg, (int)wcslen(pMsg));
|
|
|
|
|
|
packet.nLen = nLen;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_NOTICE, 0, (char*)&packet, sizeof(MANotice) - sizeof(packet.wszNoticeMsg) + (packet.nLen * sizeof(WCHAR)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNoticeServer(int nManagedID, const WCHAR * pMsg, int nLen, int nShowSec)
|
|
|
|
|
|
{
|
|
|
|
|
|
MANotice packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.Info.nNoticeType = _NOTICETYPE_EACHSERVER;
|
|
|
|
|
|
packet.Info.nManagedID = nManagedID;
|
|
|
|
|
|
packet.Info.nSlideShowSec = nShowSec;
|
|
|
|
|
|
|
|
|
|
|
|
_wcscpy(packet.wszNoticeMsg, CHATLENMAX, pMsg, (int)wcslen(pMsg));
|
|
|
|
|
|
packet.nLen = nLen;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_NOTICE, 0, (char*)&packet, sizeof(MANotice) - sizeof(packet.wszNoticeMsg) + (packet.nLen * sizeof(WCHAR)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNoticeCancel()
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CANCELNOTICE, 0, NULL, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ġƮ<C4A1><C6AE><EFBFBD><EFBFBD>
|
|
|
|
|
|
void CDNGameConnection::SendResRecall( CDNUser* pRecallUser, const VIMAReqRecall* pPacket, const int iRecallMapIndex )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAResRecall TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = pPacket->uiAccountDBID;
|
|
|
|
|
|
TxPacket.uiRecallAccountDBID = pRecallUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.uiRecallChannelID = pPacket->uiRecallChannelID;
|
|
|
|
|
|
TxPacket.iRecallMapIndex = iRecallMapIndex;
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
TxPacket.cRecallerSelectedLang = pPacket->cCallerSelectedLang;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_RESRECALL, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendUserRestraint(UINT nAccountDBID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MARestraint packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MARestraint));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_RESTRAINT, 0, reinterpret_cast<char*>(&packet), sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPvPGameMode( const CDNPvP* pPvPRoom )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAPVP_GAMEMODE TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.iGameRoomID = pPvPRoom->GetGameServerRoomIndex();
|
|
|
|
|
|
TxPacket.uiPvPIndex = pPvPRoom->GetIndex();
|
|
|
|
|
|
TxPacket.uiPvPGameModeTableID = pPvPRoom->GetGameModeTableID();
|
|
|
|
|
|
TxPacket.uiWinCondition = pPvPRoom->GetGameModeWinCondition();
|
|
|
|
|
|
TxPacket.uiPlayTimeSec = pPvPRoom->GetGameModePlayTimeSec();
|
|
|
|
|
|
TxPacket.unGameModeCheck = pPvPRoom->GetGameModeCheck();
|
|
|
|
|
|
TxPacket.biSNMain = pPvPRoom->GetSNMain();
|
|
|
|
|
|
TxPacket.iSNSub = pPvPRoom->GetSNSub();
|
|
|
|
|
|
TxPacket.cIsPWRoom = pPvPRoom->bIsPWRoom() ? 1 : 0;
|
|
|
|
|
|
TxPacket.unRoomOptionBit = pPvPRoom->GetRoomOptionBit();
|
|
|
|
|
|
TxPacket.cMaxUser = static_cast<BYTE>(pPvPRoom->GetMaxUser());
|
|
|
|
|
|
TxPacket.nEventID = pPvPRoom->GetEventRoomIndex();
|
|
|
|
|
|
TxPacket.bIsGuildWar = pPvPRoom->GetIsGuildWarSystem();
|
|
|
|
|
|
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|
|
|
|
|
TxPacket.cPvPChannelType = static_cast<char>(pPvPRoom->GetRoomChannelType());
|
|
|
|
|
|
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_PVP_GAMEMODE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|
|
|
|
|
void CDNGameConnection::SendPvPTournamentUserInfo( CDNPvP* pPvPRoom )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAPVP_TOURNAMENT_INFO TxPacket;
|
|
|
|
|
|
memset(&TxPacket, 0, sizeof(TxPacket));
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.nGameRoomID = pPvPRoom->GetGameServerRoomIndex();
|
|
|
|
|
|
|
|
|
|
|
|
for( int i=0; i<PvPCommon::Common::PvPTournamentUserMax; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
UINT uiAccountDBID = pPvPRoom->GetPvPTournamentIndex(i);
|
|
|
|
|
|
if( uiAccountDBID == 0)
|
|
|
|
|
|
break;
|
|
|
|
|
|
CDNUser * pUser = g_pDivisionManager->GetUserByAccountDBID(uiAccountDBID);
|
|
|
|
|
|
if( pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
TxPacket.sTournamentUserInfo[TxPacket.nCount].uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.sTournamentUserInfo[TxPacket.nCount].biCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.sTournamentUserInfo[TxPacket.nCount].cJob = pUser->GetUserJob();
|
|
|
|
|
|
TxPacket.sTournamentUserInfo[TxPacket.nCount].uiSessionID = pUser->GetSessionID();
|
|
|
|
|
|
_wcscpy( TxPacket.sTournamentUserInfo[TxPacket.nCount].wszCharName, NAMELENMAX, pUser->GetCharacterName(), (int)wcslen(pUser->GetCharacterName()) );
|
|
|
|
|
|
++TxPacket.nCount;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
int nLen = sizeof(MAGAPVP_TOURNAMENT_INFO) - sizeof(TxPacket.sTournamentUserInfo) + (sizeof(STournamentUserInfo)*TxPacket.nCount);
|
|
|
|
|
|
AddSendData( MAGA_PVP_TOURNAMENT_INFO, 0, reinterpret_cast<char*>(&TxPacket), nLen);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPvPLadderGameMode( GAMASetRoomID* pPacket, const TPvPGameModeTable* pGameModeTable )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAPVP_GAMEMODE TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.iGameRoomID = pPacket->iRoomID;
|
|
|
|
|
|
TxPacket.unGameModeCheck = PvPCommon::Check::AllCheck;
|
|
|
|
|
|
TxPacket.bIsLadderRoom = true;
|
|
|
|
|
|
TxPacket.uiPvPGameModeTableID = pGameModeTable->nItemID;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> StartID<49><44> <20>ȳ<EFBFBD><C8B3>Ƽ<EFBFBD> EndLog<6F><67> <20>̻<EFBFBD><CCBB>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>..<2E><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
SYSTEMTIME st;
|
|
|
|
|
|
GetLocalTime( &st );
|
|
|
|
|
|
char szSN[MAX_PATH];
|
|
|
|
|
|
sprintf( szSN, "%.4d%.2d%.2d%.2d%.2d%.2d%.3d%", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds );
|
|
|
|
|
|
TxPacket.biSNMain = _atoi64( szSN );
|
|
|
|
|
|
|
|
|
|
|
|
sprintf( szSN, "%.2d%.2d%.4d", g_Config.nWorldSetID, pPacket->cVillageID, pPacket->iRoomID );
|
|
|
|
|
|
TxPacket.iSNSub = atoi( szSN );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiWinCondition = pGameModeTable->vWinCondition[0];
|
|
|
|
|
|
TxPacket.uiPlayTimeSec = pGameModeTable->vPlayTimeSec[0];
|
|
|
|
|
|
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|
|
|
|
|
TxPacket.cPvPChannelType = static_cast<char>(PvPCommon::RoomType::max);
|
|
|
|
|
|
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_PVP_GAMEMODE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendLadderObserver( int iGameRoomID, CDNUser* pUser )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGABreakIntoRoom TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.iGameRoomID = iGameRoomID;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.cVillageID = pUser->GetVillageID();
|
|
|
|
|
|
TxPacket.uiAccountDBID = pUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.uiSessionID = pUser->GetSessionID();
|
|
|
|
|
|
TxPacket.biCharacterDBID = pUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.uiTeam = PvPCommon::Team::Observer;
|
|
|
|
|
|
TxPacket.bAdult = pUser->IsAdult();
|
|
|
|
|
|
TxPacket.cPCBangGrade = pUser->GetPCBangGrade();
|
|
|
|
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
TxPacket.cSelectedLanguage = pUser->m_eSelectedLanguage;
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
_strcpy(TxPacket.szMacAddress, _countof(TxPacket.szMacAddress), pUser->m_szMacAddress, (int)strlen(pUser->m_szMacAddress));
|
|
|
|
|
|
_strcpy(TxPacket.szKey, _countof(TxPacket.szKey), pUser->m_szKey, (int)strlen(pUser->m_szKey));
|
|
|
|
|
|
#endif
|
|
|
|
|
|
_wcscpy( TxPacket.wszAccountName, IDLENMAX, pUser->GetAccountName(), (int)wcslen(pUser->GetAccountName()) );
|
|
|
|
|
|
STRCPYW(TxPacket.wszCharacterName, NAMELENMAX, pUser->GetCharacterName());
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_BREAKINTOROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPvPMemberGrade(UINT nAccountDBID, USHORT nTeam, UINT uiUserState, UINT nChangedSessionID, int nRetCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAPvPMemberGrade packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAGAPvPMemberGrade));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
packet.nTeam = nTeam;
|
|
|
|
|
|
packet.uiUserState = uiUserState;
|
|
|
|
|
|
packet.nChangedSessionID = nChangedSessionID;
|
|
|
|
|
|
packet.nRetCode = nRetCode;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PVP_MEMBERGRADE, 0, reinterpret_cast<char*>(&packet), sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPvPMemberIndex(USHORT nTeam, const GAMAPVPSwapMemberIndex * pIndex, int nRetCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAPvPMemberIndex packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAGAPvPMemberIndex));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nAccountDBID = pIndex->nAccountDBID;
|
|
|
|
|
|
packet.nRetCode = nRetCode;
|
|
|
|
|
|
packet.nTeam = nTeam;
|
|
|
|
|
|
packet.cCount = pIndex->cCount;
|
|
|
|
|
|
memcpy(packet.Index, pIndex->Index, sizeof(packet.Index));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PVP_MEMBERINDEX, 0, reinterpret_cast<char*>(&packet), sizeof(packet) - sizeof(packet.Index) + (sizeof(TSwapMemberIndex) * packet.cCount));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPvPChangeUserState( const UINT nRoomID, const UINT uiAccountDBID, const UINT uiUserState )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAPVPChangeUserState packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAGAPVPChangeUserState));
|
|
|
|
|
|
|
|
|
|
|
|
packet.nPvPRoomID = nRoomID;
|
|
|
|
|
|
packet.nAccountDBID = uiAccountDBID;
|
|
|
|
|
|
packet.uiUserState = uiUserState;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PVP_MEMBERUSERSTATE, 0, reinterpret_cast<char*>(&packet), sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendBreakintoRoom( int iGameRoomID, CDNUser* pJoinUser, BreakInto::Type::eCode BreakIntoType, char cTeamSlotIndex /*= -1*/ )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGABreakIntoRoom TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.iGameRoomID = iGameRoomID;
|
|
|
|
|
|
TxPacket.cWorldSetID = g_Config.nWorldSetID;
|
|
|
|
|
|
TxPacket.cVillageID = pJoinUser->GetVillageID();
|
|
|
|
|
|
TxPacket.uiAccountDBID = pJoinUser->GetAccountDBID();
|
|
|
|
|
|
TxPacket.uiSessionID = pJoinUser->GetSessionID();
|
|
|
|
|
|
TxPacket.biCharacterDBID = pJoinUser->GetCharacterDBID();
|
|
|
|
|
|
TxPacket.uiTeam = pJoinUser->GetPvPTeam();
|
|
|
|
|
|
TxPacket.bAdult = pJoinUser->IsAdult();
|
|
|
|
|
|
TxPacket.cPCBangGrade = pJoinUser->GetPCBangGrade();
|
|
|
|
|
|
TxPacket.BreakIntoType = BreakIntoType;
|
|
|
|
|
|
TxPacket.bPvPFatigue = pJoinUser->GetPvPFatiue();
|
|
|
|
|
|
TxPacket.uiPvPUserState = pJoinUser->GetPvPUserState();
|
|
|
|
|
|
TxPacket.cPvPTeamIndex = cTeamSlotIndex;
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
_strcpy(TxPacket.szMacAddress, _countof(TxPacket.szMacAddress), pJoinUser->m_szMacAddress, (int)strlen(pJoinUser->m_szMacAddress));
|
|
|
|
|
|
_strcpy(TxPacket.szKey, _countof(TxPacket.szKey), pJoinUser->m_szKey, (int)strlen(pJoinUser->m_szKey));
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
_wcscpy( TxPacket.wszAccountName, IDLENMAX, pJoinUser->GetAccountName(), (int)wcslen(pJoinUser->GetAccountName()) );
|
|
|
|
|
|
STRCPYW(TxPacket.wszCharacterName, NAMELENMAX, pJoinUser->GetCharacterName());
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_BREAKINTOROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPopulationZero(bool bZero)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAZeroPopulation packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.bZeroPopulation = bZero;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_ZEROPOPULATION, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDetachUser(UINT nAccountDBID, bool bIsDuplicate, UINT nSessionID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MADetachUser Detach;
|
|
|
|
|
|
memset(&Detach, 0, sizeof(MADetachUser));
|
|
|
|
|
|
|
|
|
|
|
|
Detach.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
Detach.bIsDuplicate = bIsDuplicate;
|
|
|
|
|
|
Detach.nSessionID = nSessionID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_DETACHUSER, 0, (char*)&Detach, sizeof(MADetachUser));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(_CH)
|
|
|
|
|
|
void CDNGameConnection::SendFCMState(UINT nAccountDBID, int nOnline, bool bSend)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAFCMState State = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
State.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
State.nOnlineMin = nOnline;
|
|
|
|
|
|
State.bSend = bSend;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_FCMSTATE, 0, (char*)&State, sizeof(MAFCMState));
|
|
|
|
|
|
g_Log.Log(LogType::_NORMAL, L"[ADBID:%u] MAGA_FCMSTATE Online:%d\r\n", nAccountDBID, nOnline);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // _CH
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNotifyMail(UINT nToAccountDBID, INT64 biToCharacterDBID, short wTotalMailCount, short wNotReadMailCount, short w7DaysLeftCount, bool bNewMail)
|
|
|
|
|
|
{
|
|
|
|
|
|
MANotifyMail Mail = { 0, };
|
|
|
|
|
|
Mail.nToAccountDBID = nToAccountDBID;
|
|
|
|
|
|
Mail.biToCharacterDBID = biToCharacterDBID;
|
|
|
|
|
|
Mail.wTotalMailCount = wTotalMailCount;
|
|
|
|
|
|
Mail.wNotReadMailCount = wNotReadMailCount;
|
|
|
|
|
|
Mail.w7DaysLeftCount = w7DaysLeftCount;
|
|
|
|
|
|
Mail.bNewMail = bNewMail;
|
|
|
|
|
|
AddSendData(MAGA_NOTIFYMAIL, 0, (char*)&Mail, sizeof(MANotifyMail));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNotifyMarket(UINT nSellerAccountDBID, INT64 biSellerCharacterDBID, int nItemID, short wCalculationCount)
|
|
|
|
|
|
{
|
|
|
|
|
|
MANotifyMarket Market = { 0, };
|
|
|
|
|
|
Market.nSellerAccountDBID = nSellerAccountDBID;
|
|
|
|
|
|
Market.biSellerCharacterDBID = biSellerCharacterDBID;
|
|
|
|
|
|
Market.nItemID = nItemID;
|
|
|
|
|
|
Market.wCalculationCount = wCalculationCount;
|
|
|
|
|
|
AddSendData(MAGA_NOTIFYMARKET, 0, (char*)&Market, sizeof(MANotifyMarket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendNotifyGift(UINT nToAccountDBID, INT64 biToCharacterDBID, bool bNew, int nGiftCount)
|
|
|
|
|
|
{
|
|
|
|
|
|
MANotifyGift Gift = { 0, };
|
|
|
|
|
|
Gift.nToAccountDBID = nToAccountDBID;
|
|
|
|
|
|
Gift.biToCharacterDBID = biToCharacterDBID;
|
|
|
|
|
|
Gift.bNew = bNew;
|
|
|
|
|
|
Gift.nGiftCount = nGiftCount;
|
|
|
|
|
|
AddSendData(MAGA_NOTIFYGIFT, 0, (char*)&Gift, sizeof(MANotifyGift));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDismissGuild(MADismissGuild* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_DISMISSGUILD, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendAddGuildMember(MAAddGuildMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_ADDGUILDMEMBER, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDelGuildMember(MADelGuildMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_DELGUILDMEMBER, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChangeGuildInfo(MAChangeGuildInfo* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGEGUILDINFO, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChangeGuildMemberInfo(MAChangeGuildMemberInfo* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGEGUILDMEMBERINFO, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendGuildChat(MAGuildChat* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GUILDCHAT, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
|
|
|
|
|
void CDNGameConnection::SendDoorsGuildChat(MADoorsGuildChat* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GUILDCHAT_MOBILE, 0, reinterpret_cast<char*>(pPacket), sizeof(MADoorsGuildChat) - sizeof(pPacket->wszChatMsg) + (sizeof(WCHAR) * pPacket->nLen));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif //#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendGuildMemberLevelUp(MAGuildMemberLevelUp* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GUILDMEMBER_LEVELUP, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChangeGuildName(MAGuildChangeName* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGEGUILDNAME, 0, reinterpret_cast<char*>(pPacket), sizeof(MAGuildChangeName));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChangeGuildMark(MAGuildChangeMark* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGEGUILDMARK, 0, reinterpret_cast<char*>(pPacket), sizeof(MAGuildChangeMark));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendUpdateGuildExp(MAUpdateGuildExp* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_UPDATEGUILDEXP, 0, reinterpret_cast<char*>(pPacket), sizeof(MAUpdateGuildExp));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendEnrollGuildWar(MAEnrollGuildWar* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_ENROLLGUILDWAR, 0, reinterpret_cast<char*>(pPacket), sizeof(MAEnrollGuildWar));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendChangeGuildWarStep(MAChangeGuildWarStep* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGE_GUILDWAR_STEP, 0, reinterpret_cast<char*>(pPacket), sizeof(MAChangeGuildWarStep));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendSetGuildWarPoint(MASetGuildWarPoint* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_SETGUILDWAR_POINT, 0, reinterpret_cast<char*>(pPacket), sizeof(MASetGuildWarPoint));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendAddGuildWarPoint(MAAddGuildWarPoint* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_ADDGUILDWAR_POINT, 0, reinterpret_cast<char*>(pPacket), sizeof(MAAddGuildWarPoint));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendSetGuildWarSecretMission(MASetGuildWarSecretMission * pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_SETGUILDWAR_SECRETMISSION, 0, reinterpret_cast<char*>(pPacket), sizeof(MASetGuildWarSecretMission));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendSetGuildwarFinalProcess(char cGuildFinalPart, __time64_t tBeginTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
MASetGuildWarFinalProcess SetGuildWarFinalProcess;
|
|
|
|
|
|
memset(&SetGuildWarFinalProcess, 0, sizeof(MASetGuildWarFinalProcess));
|
|
|
|
|
|
SetGuildWarFinalProcess.cGuildFinalPart = cGuildFinalPart;
|
|
|
|
|
|
SetGuildWarFinalProcess.tBeginTime = tBeginTime;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_SETGUILDWAR_FINALPROCESS, 0, reinterpret_cast<char*>(&SetGuildWarFinalProcess), sizeof(MASetGuildWarFinalProcess));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendSetGuildWarPreWinGuild(MAGuildWarPreWinGuild* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_SETGUILDWAR_PRE_WIN_GUILD, 0, reinterpret_cast<char*>(pPacket), sizeof(MAGuildWarPreWinGuild));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendSetGuildWarTournamentWin(MASetGuildWarTournamentWin* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_SETGUILDWAR_TOURNAMENTWIN, 0, reinterpret_cast<char*>(pPacket), sizeof(MASetGuildWarTournamentWin));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendSetGuildWarSchedule(MASetGuildWarEventTime* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_SETGUILDWAR_EVENT_TIME, 0, reinterpret_cast<char*>(pPacket), sizeof(MASetGuildWarEventTime));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendGuildRecruitMember(MAGuildRecruitMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GUILDRECRUIT_MEMBER, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendAddGuildRewardItem(MAGuildRewardItem* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GUILD_ADD_REWARDITEM, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendExtendGuildSize(MAExtendGuildSize* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GUILD_EXTEND_GUILDSIZE, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendUpdateGuildWare(int nGuildID)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAUpdateGuildWare packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(MAUpdateGuildWare));
|
|
|
|
|
|
|
|
|
|
|
|
packet.GUildID.Set(g_Config.nWorldSetID, nGuildID);
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGI_UPDATEGUILDWARE, 0, reinterpret_cast<char*>(&packet), sizeof(MAUpdateGuildWare));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChangeCharacterName(MAChangeCharacterName* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGE_CHARACTERNAME, 0, reinterpret_cast<char*>(pPacket), sizeof(MAChangeCharacterName));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendMasterSystemSyncSimpleInfo( UINT uiAccountDBID, INT64 biCharacterDBID, MasterSystem::EventType::eCode EventCode )
|
|
|
|
|
|
{
|
|
|
|
|
|
MasterSystem::MAGASyncSimpleInfo TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
TxPacket.EventCode = EventCode;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_MASTERSYSTEM_SYNC_SIMPLEINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendMasterSystemSyncJoin( UINT uiAccountDBID, INT64 biCharacterDBID, bool bIsAddPupil )
|
|
|
|
|
|
{
|
|
|
|
|
|
MasterSystem::MAGASyncJoin TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
TxPacket.bIsAddPupil = bIsAddPupil;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_MASTERSYSTEM_SYNC_JOIN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendMasterSystemSyncLeave( UINT uiAccountDBID, INT64 biCharacterDBID, bool bIsDelPupil )
|
|
|
|
|
|
{
|
|
|
|
|
|
MasterSystem::MAGASyncLeave TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
TxPacket.bIsDelPupil = bIsDelPupil;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_MASTERSYSTEM_SYNC_LEAVE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendMasterSystemSyncGraduate( UINT uiAccountDBID, MasterSystem::VIMASyncGraduate* pPacket )
|
|
|
|
|
|
{
|
|
|
|
|
|
MasterSystem::MAGASyncGraduate TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
_wcscpy( TxPacket.wszCharName, NAMELENMAX, pPacket->wszCharName, (int)wcslen(pPacket->wszCharName) );
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_MASTERSYSTEM_SYNC_GRADUATE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendMasterSystemSyncConnect( UINT uiAccountDBID, bool bIsConnect, WCHAR* pwszCharName )
|
|
|
|
|
|
{
|
|
|
|
|
|
MasterSystem::MAGASyncConnect TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.bIsConnect = bIsConnect;
|
|
|
|
|
|
_wcscpy( TxPacket.wszCharName, NAMELENMAX, pwszCharName, (int)wcslen(pwszCharName) );
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_MASTERSYSTEM_SYNC_CONNECT, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendFarmSync( UINT uiAccountDBID, INT64 biCharacterDBID, Farm::ServerSyncType::eType Type )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAFarmSync TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
TxPacket.Type = Type;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_FARM_SYNC, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendFarmSyncAddWater( UINT uiAccountDBID, WCHAR* pwszCharName, int iAddWaterPoint )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAFarmSyncAddWater TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.iAddPoint = iAddWaterPoint;
|
|
|
|
|
|
_wcscpy( TxPacket.wszCharName, NAMELENMAX, pwszCharName, (int)wcslen(pwszCharName) );
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_FARM_SYNC_ADDWATER, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|
|
|
|
|
void CDNGameConnection::SendSyncSystemMail( UINT uiAccountDBID, VIMASyncSystemMail* pMail )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGASyncSystemMail TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.nMailDBID = pMail->nMailDBID;
|
|
|
|
|
|
TxPacket.iTotalMailCount = pMail->iTotalMailCount;
|
|
|
|
|
|
TxPacket.iNotReadMailCount = pMail->iNotReadMailCount;
|
|
|
|
|
|
TxPacket.i7DaysLeftMailCount = pMail->i7DaysLeftMailCount;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_SYNC_SYSTEMMAIL, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|
|
|
|
|
|
|
|
|
|
|
int CDNGameConnection::_ProcessRebirthVillage( CDNUser* pUser, const int iLastVillageMapIndex )
|
|
|
|
|
|
{
|
|
|
|
|
|
char szIp[IPLENMAX] = { 0, };
|
|
|
|
|
|
USHORT nPort = 0;
|
|
|
|
|
|
int nChannel = 0;
|
|
|
|
|
|
BYTE cVillageID = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if( g_pDivisionManager )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_pDivisionManager->GetVillageInfo( iLastVillageMapIndex, pUser->GetChannelID(), nChannel, cVillageID, szIp, nPort ) )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_pDivisionManager->GameToVillage( this, pUser->GetAccountDBID(), cVillageID, nChannel) )
|
|
|
|
|
|
SendRebirthVillageInfo( pUser->GetAccountDBID(), cVillageID, pUser->GetChannelID(), szIp, nPort, ERROR_NONE );
|
|
|
|
|
|
else
|
|
|
|
|
|
SendRebirthVillageInfo( pUser->GetAccountDBID(), cVillageID, pUser->GetChannelID(), szIp, nPort, ERROR_GENERIC_VILLAGECON_NOT_FOUND );
|
|
|
|
|
|
|
|
|
|
|
|
return ERROR_NONE;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SendRebirthVillageInfo( pUser->GetAccountDBID(), 0, 0, szIp, nPort, ERROR_GENERIC_VILLAGECON_NOT_FOUND );
|
|
|
|
|
|
return ERROR_GENERIC_UNKNOWNERROR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPCBangResult(UINT nAccountDBID, CDNUser *pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAPCBangResult Result;
|
|
|
|
|
|
memset(&Result, 0, sizeof(MAPCBangResult));
|
|
|
|
|
|
|
|
|
|
|
|
Result.nAccountDBID = nAccountDBID;
|
|
|
|
|
|
if (pUser){
|
|
|
|
|
|
#if defined(_KR)
|
|
|
|
|
|
Result.cResult = pUser->m_cPCBangResult;
|
|
|
|
|
|
Result.cAuthorizeType = pUser->m_cPCBangAuthorizeType;
|
|
|
|
|
|
Result.cOption = pUser->m_cPCBangOption;
|
|
|
|
|
|
Result.nArgument = pUser->m_nPCBangArgument;
|
|
|
|
|
|
Result.bShutdowned = pUser->m_bShutdowned;
|
|
|
|
|
|
Result.cPolicyError = pUser->m_cPolicyError;
|
|
|
|
|
|
Result.nShutdownTime = pUser->m_nShutdownTime;
|
|
|
|
|
|
#else // #if defined(_KR)
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(_ID)
|
|
|
|
|
|
Result.bBlockPcCafe = pUser->m_bBlockPcCafe;
|
|
|
|
|
|
#endif // #if defined(_ID)
|
|
|
|
|
|
Result.cPCBangGrade = pUser->GetPCBangGrade();
|
|
|
|
|
|
#if defined(_KRAZ)
|
|
|
|
|
|
Result.ShutdownData = pUser->m_ShutdownData;
|
|
|
|
|
|
#endif // #if defined(_KRAZ)
|
|
|
|
|
|
|
|
|
|
|
|
#endif // #if defined(_KR)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PCBANGRESULT, 0, (char*)&Result, sizeof(MAPCBangResult));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_ADD_REMOTE_QUEST)
|
|
|
|
|
|
void CDNGameConnection::SendUserTempDataResult(UINT uiAccountDBID, CDNUser *pUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!pUser) return;
|
|
|
|
|
|
MAGAUserTempDataResult packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
packet.nDungeonClearCount = pUser->GetDungeonClearCount();
|
|
|
|
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
packet.eUserGameQuitRewardType = pUser->GetUserGameQuitRewardType();
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
#if defined(PRE_ADD_REMOTE_QUEST)
|
|
|
|
|
|
pUser->GetAcceptWaitRemoteQuest(&packet.nAcceptWaitRemoteQuestCount, packet.AcceptWaitRemoteQuestList);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_USERTEMPDATA_RESULT, 0, (char*)&packet, sizeof(MAGAUserTempDataResult) - sizeof(packet.AcceptWaitRemoteQuestList) + sizeof(int) * packet.nAcceptWaitRemoteQuestCount );
|
|
|
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
|
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
void CDNGameConnection::SendUserTempDataResult(UINT uiAccountDBID, int nDungeonClearCount, GameQuitReward::RewardType::eType eUserGameQuitRewardType)
|
|
|
|
|
|
#else // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
void CDNGameConnection::SendUserTempDataResult(UINT uiAccountDBID, int nDungeonClearCount)
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAUserTempDataResult packet;
|
|
|
|
|
|
memset(&packet, 0, sizeof(packet));
|
|
|
|
|
|
|
|
|
|
|
|
packet.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
packet.nDungeonClearCount = nDungeonClearCount;
|
|
|
|
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|
|
|
|
|
packet.eUserGameQuitRewardType = eUserGameQuitRewardType;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
AddSendData(MAGA_USERTEMPDATA_RESULT, 0, (char*)&packet, sizeof(MAGAUserTempDataResult));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_REMOTE_QUEST)
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendCheckLastDungeonInfo( char cWorldSetID, const VIMACheckLastDungeonInfo* pPacket )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGACheckLastDungeonInfo TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.cWorldSetID = cWorldSetID;
|
|
|
|
|
|
TxPacket.uiAccountDBID = pPacket->uiAccountDBID;
|
|
|
|
|
|
TxPacket.biCharacterDBID = pPacket->biCharacterDBID;
|
|
|
|
|
|
TxPacket.iRoomID = pPacket->iRoomID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_CHECK_LASTDUNGEONINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDeleteBackupDungeonInfo( UINT uiAccountDBID, INT64 biCharacterDBID, int iRoomID )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGADeleteBackupDungeonInfo TxPacket;
|
|
|
|
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|
|
|
|
|
|
|
|
|
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
TxPacket.iRoomID = iRoomID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData( MAGA_DELETE_BACKUPDUNGEONINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|
|
|
|
|
void CDNGameConnection::SendGetWorldPartyMember( MAGetWorldPartyMember *Packet)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_GET_WORLDPARTYMEMBER, 0, reinterpret_cast<char*>(Packet), sizeof(MAGetWorldPartyMember));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_ADD_BESTFRIEND )
|
|
|
|
|
|
void CDNGameConnection::SendCancelBestFriend(MACancelBestFriend* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CANCEL_BESTFRIEND, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendCloseBestFriend(MACloseBestFriend* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CLOSE_BESTFRIEND, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendLevelBestFriend(MALevelUpBestFriend* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_LEVELUP_BESTFRIEND, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelAdd(MAAddPrivateChannel* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_ADD, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelMemberAdd(MAAddPrivateChannelMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MEMBERADD, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelMemberInvite(MAInvitePrivateChannelMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MEMBERINVITE, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelMemberInviteResult(MAInvitePrivateChannelMemberResult* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MEMBERINVITERESULT, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelMemberDel(MADelPrivateChannelMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MEMBERDEL, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelMemberKickResult(MAKickPrivateChannelMemberResult* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MEMBERKICKRESULT, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelMod(MAModPrivateChannel* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MOD, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendPrivateChatChannelModMemberName(MAModPrivateChannelMemberName* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_PRIVATECHATCHANNEL_MODMEMBERNAME, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_ADD_PVP_COMBOEXERCISE )
|
|
|
|
|
|
void CDNGameConnection::SendChangeRoomMaster( UINT uiRoomID, INT64 biRoomMasterCharacterDBID, UINT uiRoomMasterSessionID )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAGAChangeRoomMaster Packet;
|
|
|
|
|
|
memset(&Packet, 0, sizeof(MAGAChangeRoomMaster));
|
|
|
|
|
|
|
|
|
|
|
|
Packet.uiRoomID = uiRoomID;
|
|
|
|
|
|
Packet.biRoomMasterCharacterDBID = biRoomMasterCharacterDBID;
|
|
|
|
|
|
Packet.uiRoomMasterSessionID = uiRoomMasterSessionID;
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_PVP_CHANGEROOMMASTER, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // #if defined( PRE_ADD_PVP_COMBOEXERCISE )
|
|
|
|
|
|
#if defined(PRE_ADD_MUTE_USERCHATTING)
|
|
|
|
|
|
void CDNGameConnection::SendMuteUserChatting(MAMuteUserChat* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_MUTE_USERCHAT, 0, reinterpret_cast<char*>(pPacket), sizeof(*pPacket));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif // #if defined(PRE_ADD_MUTE_USERCHATTING)
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
|
|
|
|
|
void CDNGameConnection::SendAlteiaWorldSendTicket( MAAlteiaWorldSendTicket *pPacket )
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_ALTEIAWORLD_SENDTICKET, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
void CDNGameConnection::SendAlteiaWorldSendTicketResult( MAAlteiaWorldSendTicketResult *pPacket )
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_ALTEIAWORLD_SENDTICKET_RESULT, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(PRE_ADD_CHNC2C)
|
|
|
|
|
|
void CDNGameConnection::SendC2CAddCoin( UINT uiAccountDBID, INT64 biCharacterDBID, INT64 biAddCoin, const char* szSeqID, const char* szBookID )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAC2CAddCoin packet = {0,};
|
|
|
|
|
|
packet.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
packet.biAddCoin = biAddCoin;
|
|
|
|
|
|
memcpy(packet.szBookID, szBookID, sizeof(packet.szBookID));
|
|
|
|
|
|
memcpy(packet.szSeqID, szSeqID, sizeof(packet.szSeqID));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_C2C_CHAR_ADDCOIN, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendC2CReduceCoin( UINT uiAccountDBID, INT64 biCharacterDBID, INT64 biReduceCoin, const char* szSeqID, const char* szBookID )
|
|
|
|
|
|
{
|
|
|
|
|
|
MAC2CReduceCoin packet = {0,};
|
|
|
|
|
|
packet.uiAccountDBID = uiAccountDBID;
|
|
|
|
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|
|
|
|
|
packet.biReduceCoin = biReduceCoin;
|
|
|
|
|
|
memcpy(packet.szBookID, szBookID, sizeof(packet.szBookID));
|
|
|
|
|
|
memcpy(packet.szSeqID, szSeqID, sizeof(packet.szSeqID));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_C2C_CHAR_REDUCECOIN, 0, (char*)&packet, sizeof(packet));
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif //#if defined(PRE_ADD_CHNC2C)
|
|
|
|
|
|
#if defined(PRE_ADD_DWC)
|
|
|
|
|
|
void CDNGameConnection::SendAddDWCTeamMember(MAAddDWCTeamMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_ADD_DWCTEAMMEMBER, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendLeaveDWCTeamMember(MALeaveDWCTeamMember* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_DEL_DWCTEAMMEMB, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDismissDWCTeam(MADismissDWCTeam* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_DISMISS_DWCTEAM, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendChangeDWCTeamMemberState(MAChangeDWCTeamMemberState* pPacket)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddSendData(MAGA_CHANGE_DWCTEAMMEMB_STATE, 0, reinterpret_cast<char*>(pPacket), sizeof((*pPacket)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNGameConnection::SendDWCTeamChat(char cType, UINT nToAccountDBID, const WCHAR *pwszFromCharacterName, const WCHAR *pwszChatMsg, short wChatLen)
|
|
|
|
|
|
{
|
|
|
|
|
|
MAChat Chat = { 0, };
|
|
|
|
|
|
|
|
|
|
|
|
Chat.nAccountDBID = nToAccountDBID;
|
|
|
|
|
|
Chat.cType = cType;
|
|
|
|
|
|
Chat.wChatLen = wChatLen;
|
|
|
|
|
|
if (pwszFromCharacterName)
|
|
|
|
|
|
_wcscpy(Chat.wszFromCharacterName, NAMELENMAX, pwszFromCharacterName, (int)wcslen(pwszFromCharacterName));
|
|
|
|
|
|
|
|
|
|
|
|
if (pwszChatMsg)
|
|
|
|
|
|
_wcscpy(Chat.wszChatMsg, CHATLENMAX, pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|
|
|
|
|
|
|
|
|
|
|
AddSendData(MAGA_DWC_TEAMCHAT, 0, (char*)&Chat, sizeof(MAChat) - sizeof(Chat.wszChatMsg) + (wChatLen*sizeof(WCHAR)) );
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|