6386 lines
227 KiB
C++
6386 lines
227 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "DNMasterConnection.h"
|
|||
|
|
#include "DNPartyManager.h"
|
|||
|
|
#include "DNUserSession.h"
|
|||
|
|
#include "DNUserSessionManager.h"
|
|||
|
|
#include "DNIocpManager.h"
|
|||
|
|
#include "DNDBConnection.h"
|
|||
|
|
#include "DNDBConnectionManager.h"
|
|||
|
|
#include "DNFieldManager.h"
|
|||
|
|
#include "DNField.h"
|
|||
|
|
#include "DNWorldUserState.h"
|
|||
|
|
#include "DNGuildSystem.h"
|
|||
|
|
#include "DNGuildVillage.h"
|
|||
|
|
#include "Log.h"
|
|||
|
|
#include "DNPvPRoomManager.h"
|
|||
|
|
#include "DNPvPRoom.h"
|
|||
|
|
#include "DNIsolate.h"
|
|||
|
|
#include "DNEvent.h"
|
|||
|
|
#include "DNServiceConnection.h"
|
|||
|
|
#include "NoticeSystem.h"
|
|||
|
|
#include "DNAuthManager.h"
|
|||
|
|
#include "DNLogConnection.h"
|
|||
|
|
#include "./EtStringManager/EtUIXML.h"
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
#include "dnvoicechat.h"
|
|||
|
|
#endif
|
|||
|
|
#include "MasterSystemCacheRepository.h"
|
|||
|
|
#include "TimeSet.h"
|
|||
|
|
#include "DNGameDataManager.h"
|
|||
|
|
#include "DNFarm.h"
|
|||
|
|
#include "DNPeriodQuestSystem.h"
|
|||
|
|
#include "DNLadderSystemManager.h"
|
|||
|
|
#if defined(_WORK)
|
|||
|
|
#include "PsUpdater.h"
|
|||
|
|
#endif // #if defined(_WORK)
|
|||
|
|
#include "DNLadderRoom.h"
|
|||
|
|
#include "DNGuildWarManager.h"
|
|||
|
|
#include "DNGuildRecruitCacheRepository.h"
|
|||
|
|
#if defined (PRE_ADD_DONATION)
|
|||
|
|
#include "DNDonationScheduler.h"
|
|||
|
|
#endif // #if defined (PRE_ADD_DONATION)
|
|||
|
|
#if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
#include "DNBestFriend.h"
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|||
|
|
#include "DnPrivateChatManager.h"
|
|||
|
|
#include "DNPrivateChatChannel.h"
|
|||
|
|
#endif
|
|||
|
|
#include "DNMissionSystem.h"
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
#include "DNDWCSystem.h"
|
|||
|
|
#include "DNDWCTeam.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
extern TVillageConfig g_Config;
|
|||
|
|
CDNMasterConnection* g_pMasterConnection = NULL;
|
|||
|
|
|
|||
|
|
CDNMasterConnection::CDNMasterConnection(void)
|
|||
|
|
{
|
|||
|
|
m_bConnectCompleted = false;
|
|||
|
|
#if defined(_FINAL_BUILD)
|
|||
|
|
Init(1024 * 1024, 1024 * 1024);
|
|||
|
|
#else // #if defined(_FINAL_BUILD)
|
|||
|
|
Init(1024 * 100, 1024 * 100);
|
|||
|
|
#endif // #if defined(_FINAL_BUILD)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDNMasterConnection::~CDNMasterConnection(void)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::Reconnect()
|
|||
|
|
{
|
|||
|
|
if (!CConnection::GetActive() && !GetConnecting() && g_pIocpManager)
|
|||
|
|
{
|
|||
|
|
SetConnecting(true);
|
|||
|
|
if (g_pIocpManager->AddConnectionEx(this, CONNECTIONKEY_MASTER, g_Config.MasterInfo.szIP, g_Config.MasterInfo.nPort) < 0)
|
|||
|
|
{
|
|||
|
|
SetConnecting(false);
|
|||
|
|
g_Log.Log(LogType::_ERROR, L"MasterServer Fail(%S, %d)\r\n", g_Config.MasterInfo.szIP, g_Config.MasterInfo.nPort);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
g_Log.Log(LogType::_NORMAL, L"MasterServer (%S, %d) Connecting..\r\n",g_Config.MasterInfo.szIP, g_Config.MasterInfo.nPort);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int CDNMasterConnection::MessageProcess(int iMainCmd, int iSubCmd, char *pData, int iLen)
|
|||
|
|
{
|
|||
|
|
switch (iMainCmd)
|
|||
|
|
{
|
|||
|
|
#ifdef _WORK
|
|||
|
|
case MAVI_RELOADEXT:
|
|||
|
|
{
|
|||
|
|
if (g_pDataManager->AllLoad() == false)
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT_MSG(L"ext reload<61><64> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⵿<EFBFBD><E2B5BF><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif //
|
|||
|
|
|
|||
|
|
case MAVI_REGISTWORLDINFO:
|
|||
|
|
{
|
|||
|
|
/*
|
|||
|
|
#if defined(_WORK)
|
|||
|
|
if (!g_PsUpdater)
|
|||
|
|
g_PsUpdater = new(std::nothrow) CPsUpdater;
|
|||
|
|
|
|||
|
|
g_PsUpdater->AsyncUpdate ();
|
|||
|
|
#endif // #if defined(_WORK)
|
|||
|
|
*/
|
|||
|
|
MARegist *pRegist = (MARegist*)pData;
|
|||
|
|
g_Config.nWorldSetID = pRegist->cWorldSetID;
|
|||
|
|
|
|||
|
|
//<2F><> <20><><EFBFBD>尡 <20><><EFBFBD><EFBFBD> <20>˾ƾ<CBBE> <20>ε<EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
|||
|
|
if (!g_pFieldManager->Init())
|
|||
|
|
{
|
|||
|
|
#if defined (_FINAL_BUILD)
|
|||
|
|
::ExitProcess(0);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_pEvent && g_pEvent->IsInitWorld(g_Config.nWorldSetID) == false)
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
{
|
|||
|
|
pDBCon->QueryEventList( cThreadID, g_Config.nWorldSetID);
|
|||
|
|
//#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
|||
|
|
// pDBCon->QuerySimpleConfig(cThreadID);
|
|||
|
|
//#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_pFarm && g_pFarm->GetInitFlag() == false)
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryFarmList(cThreadID, g_Config.nWorldSetID);
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryUpdateWorldPvPRoom(0, g_Config.nWorldSetID);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
if (g_pPeriodQuestSystem)
|
|||
|
|
g_pPeriodQuestSystem->LoadWorldQuestInfo(g_Config.nWorldSetID);
|
|||
|
|
#if defined (PRE_ADD_DONATION)
|
|||
|
|
if (CDNDonationScheduler::IsActive())
|
|||
|
|
CDNDonationScheduler::GetInstance().AddWorldID(g_Config.nWorldSetID);
|
|||
|
|
#endif // #if defined (PRE_ADD_DONATION)
|
|||
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|||
|
|
if( g_pPrivateChatChannelManager && g_pPrivateChatChannelManager->GetFirst() == false )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if ( pDBCon && pDBCon->GetActive() )
|
|||
|
|
{
|
|||
|
|
pDBCon->QueryGetPrivateChatChannelInfo(0, g_Config.nWorldSetID);
|
|||
|
|
pDBCon->QueryDelPrivateMemberServerID(0, g_Config.nWorldSetID, g_Config.nManagedID );
|
|||
|
|
g_pPrivateChatChannelManager->SetFirst(true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
|||
|
|
if( !g_pDataManager->bIsAlteiaWorldEventTime() )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if ( pDBCon && pDBCon->GetActive() )
|
|||
|
|
pDBCon->QueryResetAlteiaWorldEvent(0, g_Config.nWorldSetID);
|
|||
|
|
#if defined( _WORK )
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"Reset AlteiaWorldEvent WorldID:%d\r\n", g_Config.nWorldSetID);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
time_t tAlteiaEventStartTime = g_pDataManager->GetAlteiaWorldEventBeginTime();
|
|||
|
|
time_t tAlteiaEventEndTime = g_pDataManager->GetAlteiaWorldEventEndTime();
|
|||
|
|
if( tAlteiaEventStartTime > 0 && tAlteiaEventEndTime > 0 )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if ( pDBCon && pDBCon->GetActive() )
|
|||
|
|
pDBCon->QueryAddAlteiaWorldEventTime(0, g_Config.nWorldSetID, tAlteiaEventStartTime, tAlteiaEventEndTime);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
if (g_pDWCTeamManager && g_pDWCTeamManager->GetInitFlag() == false)
|
|||
|
|
{
|
|||
|
|
if(g_pFieldManager->bIsIncludeDWCVillage())
|
|||
|
|
g_pDWCTeamManager->SetIncludeDWCVillage(true);
|
|||
|
|
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetDWCChannelInfo(cThreadID, g_Config.nWorldSetID);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
//Master Connect Flow
|
|||
|
|
std::string strPublicIP;
|
|||
|
|
g_pIocpManager->GetPublicIP(strPublicIP);
|
|||
|
|
SendVIllageRegistInfo(g_Config.nManagedID, strPublicIP.c_str(), g_Config.nClientAcceptPort);
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"[MAVI_REGIST] WorldID:%d\r\n", g_Config.nWorldSetID);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_REQUSERLIST:
|
|||
|
|
{
|
|||
|
|
MAReqUserList * pPacket = (MAReqUserList*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->nRetCode == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
BYTE cCount = 0;
|
|||
|
|
TFarmItemFromDB Farms[Farm::Max::FARMCOUNT];
|
|||
|
|
memset(Farms, 0, sizeof(Farms));
|
|||
|
|
g_pFarm->GetFarmList(Farms, cCount);
|
|||
|
|
SendFarmListGot(Farms, cCount); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
|
|||
|
|
g_pUserSessionManager->SendAddUserList(); //<2F><EFBFBD> <20><><EFBFBD>ϴܿ<CFB4> <20><>ġ<EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"[MAVI_REQUSERLIST] WorldID:%d\r\n", g_Config.nWorldSetID);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
g_Log.Log(LogType::_ERROR, g_Config.nWorldSetID, 0, 0, 0, L"[MAVI_REQUSERLIST] Master Registration Failed WorldID:%d\r\n", g_Config.nWorldSetID);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_REGISTCOMPLETE:
|
|||
|
|
{
|
|||
|
|
m_bConnectCompleted = true;
|
|||
|
|
g_pIocpManager->VerifyAccept(ACCEPTOPEN_VERIFY_TYPE_MASTERCONNECTION);
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"[MAVI_REGISTCOMPLETE] WorldID:%d\r\n", g_Config.nWorldSetID);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_VILLAGEINFO:
|
|||
|
|
{
|
|||
|
|
MAVIVillageInfo * pPacket = (MAVIVillageInfo*)pData;
|
|||
|
|
|
|||
|
|
bool bFlag = false;
|
|||
|
|
for (int i = 0; i < pPacket->cCount; i++)
|
|||
|
|
{
|
|||
|
|
std::vector < std::pair <int, sChannelInfo> >::iterator ii;
|
|||
|
|
for (ii = m_vChannelList.begin(); ii != m_vChannelList.end(); ii++)
|
|||
|
|
{
|
|||
|
|
if ((*ii).second.nChannelID == pPacket->Info[i].nChannelID)
|
|||
|
|
{
|
|||
|
|
memcpy(&(*ii).second, &pPacket->Info[i], sizeof(sChannelInfo));
|
|||
|
|
bFlag = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (m_vChannelList.size() <= 0 || bFlag == false)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < pPacket->cCount; i++)
|
|||
|
|
m_vChannelList.push_back(std::make_pair(pPacket->nVillageID, pPacket->Info[i]));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_VILLAGEINFODEL:
|
|||
|
|
{
|
|||
|
|
MAVIVillageInfoDelete * pPacket = (MAVIVillageInfoDelete*)pData;
|
|||
|
|
|
|||
|
|
std::vector < std::pair <int, sChannelInfo> >::iterator ii;
|
|||
|
|
for (ii = m_vChannelList.begin(); ii != m_vChannelList.end();)
|
|||
|
|
{
|
|||
|
|
if ((*ii).first == pPacket->nVillageID)
|
|||
|
|
ii = m_vChannelList.erase(ii);
|
|||
|
|
else
|
|||
|
|
ii++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_LOGINSTATE:
|
|||
|
|
{
|
|||
|
|
MAVILoginState *pState = (MAVILoginState*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSession(pState->nSessionID);
|
|||
|
|
if (pUserObj){
|
|||
|
|
pUserObj->m_eUserState = STATE_READYTOLOGIN;
|
|||
|
|
|
|||
|
|
pUserObj->m_biCertifyingKey = g_pAuthManager->GetCertifyingKey();
|
|||
|
|
DN_ASSERT(0 != pUserObj->m_biCertifyingKey, "Invalid!"); // <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20>ʵ<EFBFBD> !!! (<28><><EFBFBD><EFBFBD> <20>ǹ<EFBFBD>)
|
|||
|
|
|
|||
|
|
g_pAuthManager->QueryStoreAuth(SERVERTYPE_VILLAGE, pUserObj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_SETGAMEID:
|
|||
|
|
{
|
|||
|
|
MAVISetGameID* pPacket = reinterpret_cast<MAVISetGameID*>(pData);
|
|||
|
|
if( pPacket->cReqGameIDType == REQINFO_TYPE_SINGLE || pPacket->cReqGameIDType == REQINFO_TYPE_PVP_BREAKINTO ||
|
|||
|
|
pPacket->cReqGameIDType == REQINFO_TYPE_PARTY_BREAKINTO || pPacket->cReqGameIDType == REQINFO_TYPE_FARM ||
|
|||
|
|
pPacket->cReqGameIDType == REQINFO_TYPE_LADDER_OBSERVER )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( static_cast<UINT>(pPacket->InstanceID) );
|
|||
|
|
if( !pUserObj )
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_GENERIC_INVALIDREQUEST;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
|||
|
|
if( pPacket->nRet < 0)
|
|||
|
|
{
|
|||
|
|
pUserObj->m_eUserState = STATE_NONE;
|
|||
|
|
pUserObj->m_bIsStartGame = false;
|
|||
|
|
|
|||
|
|
pUserObj->SendCancelStage(ERROR_PARTY_STARTSTAGE_FAIL);
|
|||
|
|
if( pPacket->cReqGameIDType == REQINFO_TYPE_LADDER_OBSERVER )
|
|||
|
|
{
|
|||
|
|
LadderSystem::CRoom* pRoom = LadderSystem::CManager::GetInstance().GetRoomPtr( pUserObj->GetCharacterName() );
|
|||
|
|
if( pRoom && pRoom->GetRoomState() == LadderSystem::RoomState::Observer )
|
|||
|
|
pRoom->ChangeRoomState( LadderSystem::RoomState::WaitUser, LadderSystem::RoomStateReason::MAX_OBSERVER );
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pUserObj->m_bIsMove = true;
|
|||
|
|
pUserObj->m_GameTaskType = pPacket->GameTaskType;
|
|||
|
|
|
|||
|
|
if (pPacket->cReqGameIDType == REQINFO_TYPE_PARTY_BREAKINTO)
|
|||
|
|
pUserObj->m_cReqGameIDType = REQINFO_TYPE_PARTY_BREAKINTO;
|
|||
|
|
else
|
|||
|
|
pUserObj->m_cReqGameIDType = (pPacket->cReqGameIDType == REQINFO_TYPE_SINGLE) ? REQINFO_TYPE_SINGLE : REQINFO_TYPE_PVP;
|
|||
|
|
pUserObj->SetGameID(pPacket->wGameID);
|
|||
|
|
pUserObj->SetRoomID(pPacket->iRoomID);
|
|||
|
|
if( pPacket->cReqGameIDType == REQINFO_TYPE_SINGLE )
|
|||
|
|
pUserObj->SetTargetMapIndexByStartStage();
|
|||
|
|
|
|||
|
|
//<2F>̵<EFBFBD><CCB5>ؾ<EFBFBD><D8BE><EFBFBD> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
pUserObj->m_nGameServerIP = pPacket->nIP;
|
|||
|
|
pUserObj->m_nGameServerPort = pPacket->nPort;
|
|||
|
|
pUserObj->m_nGameServerTcpPort = pPacket->nTcpPort;
|
|||
|
|
pUserObj->m_eUserState = STATE_READYTOGAME;
|
|||
|
|
|
|||
|
|
pUserObj->m_biCertifyingKey = g_pAuthManager->GetCertifyingKey();
|
|||
|
|
DN_ASSERT(0 != pUserObj->m_biCertifyingKey, "Invalid!"); // <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20>ʵ<EFBFBD> !!! (<28><><EFBFBD><EFBFBD> <20>ǹ<EFBFBD>)
|
|||
|
|
|
|||
|
|
g_pAuthManager->QueryStoreAuth(SERVERTYPE_VILLAGE, pUserObj);
|
|||
|
|
|
|||
|
|
g_Log.Log(LogType::_NORMAL, pUserObj, L"[ADBID:%u, CDBID:%I64d, SID:%u, ObjID:%u] MAVI_SETGAMEID GameID:%d, RoomID:%d (%u.%u.%u.%u)\r\n", pUserObj->GetAccountDBID(), pUserObj->GetCharacterDBID(), pUserObj->GetSessionID(), pUserObj->GetObjectID(), pPacket->wGameID, pPacket->iRoomID, ((BYTE*)&pUserObj->m_nGameServerIP)[0], ((BYTE*)&pUserObj->m_nGameServerIP)[1], ((BYTE*)&pUserObj->m_nGameServerIP)[2], ((BYTE*)&pUserObj->m_nGameServerIP)[3]);
|
|||
|
|
}
|
|||
|
|
else if( pPacket->cReqGameIDType == REQINFO_TYPE_PARTY )
|
|||
|
|
{
|
|||
|
|
CDNParty* pParty = g_pPartyManager->GetParty( pPacket->InstanceID );
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|||
|
|
if( Party::bIsWorldCombineParty(pPacket->Type) )
|
|||
|
|
{
|
|||
|
|
if( pPacket->nRet != ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
g_pPartyManager->DelCombinePartyData( (int)pPacket->InstanceID );
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
if( !pParty )
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
|||
|
|
if( pPacket->nRet < 0 )
|
|||
|
|
{
|
|||
|
|
pParty->SetStartGame(false);
|
|||
|
|
pParty->SetPartyUserStartFlag(false);
|
|||
|
|
|
|||
|
|
pParty->SendAllCancelStage( ERROR_PARTY_STARTSTAGE_FAIL );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
g_pPartyManager->EraseWaitPartyList(pParty); // wait list<73><74><EFBFBD><EFBFBD> party<74><79> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
pParty->SetMove(true);
|
|||
|
|
pParty->SetPartyUserMoveFlag(true);
|
|||
|
|
|
|||
|
|
if (pPacket->cVillageID == g_Config.nVillageID)
|
|||
|
|
{
|
|||
|
|
pParty->SetMemberTargetMapIndexByStartStage();
|
|||
|
|
pParty->SendAllRoomID( pPacket->GameTaskType, REQINFO_TYPE_PARTY, pPacket->wGameID, pPacket->iRoomID);
|
|||
|
|
//pParty->SendAllLocalSymbolData(); // <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> db<64><62><EFBFBD><EFBFBD> <20>ȵǴ<C8B5> symbol data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
|
|||
|
|
pParty->SendAllReadyToGame(pPacket->nIP, pPacket->nPort, pPacket->nTcpPort); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"[PartyIndex:%I64d] MAVI_SETGAMEID GameID:%d, RoomID:%d\r\n", pPacket->InstanceID, pPacket->wGameID, pPacket->iRoomID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if( pPacket->cReqGameIDType == REQINFO_TYPE_PVP )
|
|||
|
|
{
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|||
|
|
if( pPacket->eWorldReqType > WorldPvPMissionRoom::Common::NoneType )
|
|||
|
|
{
|
|||
|
|
if( pPacket->nRet < 0 )
|
|||
|
|
{
|
|||
|
|
CDNPvPRoomManager::GetInstance().DelWorldPvPRoom((int)(pPacket->InstanceID));
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, static_cast<UINT>(pPacket->InstanceID) );
|
|||
|
|
if( !pPvPRoom )
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
|||
|
|
if( pPacket->nRet < 0 )
|
|||
|
|
{
|
|||
|
|
pPvPRoom->SendAllCancelStage( ERROR_PVP_STARTPVP_FAILED );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pPvPRoom->SendAllRoomID( pPacket->GameTaskType, REQINFO_TYPE_PVP, pPacket->wGameID, pPacket->iRoomID );
|
|||
|
|
//pPvPRoom->SendAllLocalSymbolData(); // <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> db<64><62><EFBFBD><EFBFBD> <20>ȵǴ<C8B5> symbol data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
|
|||
|
|
pPvPRoom->SendAllReadyToGame(pPacket->nIP, pPacket->nPort, pPacket->nTcpPort); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"[PvPIndex:%d] MAVI_SETGAMEID GameID:%d, RoomID:%d\r\n", static_cast<UINT>(pPacket->InstanceID), pPacket->wGameID, pPacket->iRoomID );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_LADDERSYSTEM_SETGAMEID:
|
|||
|
|
{
|
|||
|
|
MAVILadderSetGameID* pPacket = reinterpret_cast<MAVILadderSetGameID*>(pData);
|
|||
|
|
|
|||
|
|
// ValidCheck
|
|||
|
|
int iValidUserCount = 0;
|
|||
|
|
int iNeedVaildUserCount = 0;
|
|||
|
|
|
|||
|
|
std::map<INT64,LadderSystem::CRoom*> mRoom;
|
|||
|
|
|
|||
|
|
for( int i=0 ; i<pPacket->cUserCount ; ++i )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBIDArr[i] );
|
|||
|
|
if( pSession == NULL )
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
LadderSystem::CRoom* pLadderRoom = LadderSystem::CManager::GetInstance().GetRoomPtr( pSession->GetCharacterName() );
|
|||
|
|
if( pLadderRoom == NULL || pLadderRoom->GetRoomState() != LadderSystem::RoomState::Syncing )
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
if( pPacket->nRet != ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
pLadderRoom->ChangeRoomState( LadderSystem::RoomState::WaitUser, LadderSystem::RoomStateReason::CANT_CREATE_GAMEROOM );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mRoom.insert( std::make_pair(pLadderRoom->GetRoomIndex(),pLadderRoom) );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( mRoom.size() != 2 )
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
std::map<INT64,LadderSystem::CRoom*>::iterator itor = mRoom.begin();
|
|||
|
|
LadderSystem::CRoom* pLadderRoom = (*itor++).second;
|
|||
|
|
LadderSystem::CRoom* pLadderRoom2 = (*itor).second;
|
|||
|
|
|
|||
|
|
if( pLadderRoom->GetOpponentRoomIndex() != pLadderRoom2->GetRoomIndex() || pLadderRoom->GetRoomIndex() != pLadderRoom2->GetOpponentRoomIndex() )
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pLadderRoom->SendPvPGameModeTableID( pPacket->nGameModeTableID );
|
|||
|
|
pLadderRoom->SendAllRoomID( pPacket->wGameID, pPacket->iRoomID );
|
|||
|
|
pLadderRoom->SendAllReadyToGame( pPacket->nIP, pPacket->nPort, pPacket->nTcpPort); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
pLadderRoom2->SendPvPGameModeTableID( pPacket->nGameModeTableID );
|
|||
|
|
pLadderRoom2->SendAllRoomID( pPacket->wGameID, pPacket->iRoomID );
|
|||
|
|
pLadderRoom2->SendAllReadyToGame(pPacket->nIP, pPacket->nPort, pPacket->nTcpPort); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
g_Log.Log(LogType::_NORMAL, g_Config.nWorldSetID, 0, 0, 0, L"[PvPIndex:%d] MAVI_SETGAMEID GameID:%d, RoomID:%d\r\n", pPacket->uiIndex, pPacket->wGameID, pPacket->iRoomID );
|
|||
|
|
*/
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_LADDERSYSTEM_ROOMSYNC:
|
|||
|
|
{
|
|||
|
|
LadderSystem::MAVIRoomSync* pPacket = reinterpret_cast<LadderSystem::MAVIRoomSync*>(pData);
|
|||
|
|
|
|||
|
|
bool bRet = LadderSystem::CManager::GetInstance().bIsValidPairRoom( pPacket->biRoomIndexArr[0], pPacket->biRoomIndexArr[1] );
|
|||
|
|
if( bRet == true )
|
|||
|
|
{
|
|||
|
|
LadderSystem::CManager::GetInstance().ChangeRoomState( pPacket->biRoomIndexArr[0], pPacket->State );
|
|||
|
|
LadderSystem::CManager::GetInstance().ChangeRoomState( pPacket->biRoomIndexArr[1], pPacket->State );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_LADDERSYSTEM_ENTERCHANNEL:
|
|||
|
|
{
|
|||
|
|
VIMALadderEnterChannel* pPacket = reinterpret_cast<VIMALadderEnterChannel*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession == NULL )
|
|||
|
|
break;
|
|||
|
|
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
|
|||
|
|
if( pSession->GetField() && !pSession->GetField()->bIsPvPLobby()) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>渮<EFBFBD><E6B8AE>Ʈ <20><><EFBFBD><EFBFBD> <20>鰣<EFBFBD><E9B0A3>..
|
|||
|
|
{
|
|||
|
|
const sChannelInfo* pChannelInfo = g_pMasterConnection->GetChannelInfoFromAttr( GlobalEnum::CHANNEL_ATT_PVPLOBBY );
|
|||
|
|
if( pChannelInfo )
|
|||
|
|
pSession->CmdSelectChannel( pChannelInfo->nChannelID, true );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
LadderSystem::CManager::GetInstance().OnEnterChannel( pSession, pPacket->MatchType );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_LADDERSYSTEM_INVITEUSER:
|
|||
|
|
{
|
|||
|
|
VIMALadderInviteUser* pPacket = reinterpret_cast<VIMALadderInviteUser*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pInviteSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pInviteSession == NULL )
|
|||
|
|
break;
|
|||
|
|
int iRet = pPacket->nRetCode;
|
|||
|
|
if (iRet == ERROR_NONE)
|
|||
|
|
iRet = LadderSystem::CManager::GetInstance().OnInviteUser( pInviteSession, pPacket->wszCharName );
|
|||
|
|
pInviteSession->SendPvPLadderInviteUser( iRet, pPacket->wszCharName );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_LADDERSYSTEM_INVITECONFIRM:
|
|||
|
|
{
|
|||
|
|
VIMALadderInviteConfirm* pPacket = reinterpret_cast<VIMALadderInviteConfirm*>(pData);
|
|||
|
|
LadderSystem::CManager::GetInstance().OnInviteUserConfirm( pPacket );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_CHECKUSER:
|
|||
|
|
{
|
|||
|
|
MAVICheckUser *pCheckUser = (MAVICheckUser*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSession(pCheckUser->nSessionID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if (pCheckUser->nRet != ERROR_NONE){
|
|||
|
|
pUserObj->DetachConnection(L"Connect|Check Fail");
|
|||
|
|
return ERROR_GENERIC_INVALIDREQUEST;
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD>⼭ Ȥ<><C8A4> <20><EFBFBD> <20><>ü DB<44><42> ErrorCheck Ǯ<><C7AE><EFBFBD><EFBFBD><DEB6><EFBFBD> <20><>û
|
|||
|
|
g_pDBConnectionManager->SendResetErrorCheck(pCheckUser->nAccountDBID);
|
|||
|
|
|
|||
|
|
pUserObj->InitAccount(pCheckUser);
|
|||
|
|
pUserObj->SetPvPVillageInfo( pCheckUser->cPvPVillageID, pCheckUser->unPvPVillageChannelID );
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_TARGETVILLAGEINFO:
|
|||
|
|
{
|
|||
|
|
MAVITargetVillageInfo * pPacket = (MAVITargetVillageInfo*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if (pPacket->nRet == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
const sChannelInfo* pChannelInfo = g_pMasterConnection->GetChannelInfo( pUserObj->GetChannelID() );
|
|||
|
|
const sChannelInfo* pTargetCurChannelInfo = g_pMasterConnection->GetChannelInfo( pPacket->nTargetChannelID );
|
|||
|
|
if( pChannelInfo && pTargetCurChannelInfo )
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
if( pChannelInfo->nChannelAttribute&(GlobalEnum::CHANNEL_ATT_PVP|GlobalEnum::CHANNEL_ATT_DWC) && pTargetCurChannelInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVPLOBBY )
|
|||
|
|
#else
|
|||
|
|
if( pChannelInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVP && pTargetCurChannelInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVPLOBBY )
|
|||
|
|
#endif
|
|||
|
|
{
|
|||
|
|
pUserObj->SetPvPVillageInfo( pChannelInfo->cVillageID, pChannelInfo->nChannelID );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (pUserObj->GetPartyID() > 0 && pPacket->cPartyInto <= 0)
|
|||
|
|
{
|
|||
|
|
//<2F><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>
|
|||
|
|
if (pPacket->nTargetChannelID != pUserObj->GetChannelID()) //<2F><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> ä<>η<EFBFBD> <20>̵<EFBFBD><CCB5≯<EFBFBD>
|
|||
|
|
{
|
|||
|
|
CDNParty* pParty = g_pPartyManager->GetParty(pUserObj->GetPartyID());
|
|||
|
|
if (pParty)
|
|||
|
|
{
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
g_pPartyManager->EraseWaitPartyList(pParty);
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_Log.Log(LogType::_ERROR, L"MAVI_TARGETVILLAGEINFO pParty == NULL\n");
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
UINT nMemberAID[PARTYMAX];
|
|||
|
|
memset(nMemberAID, 0, sizeof(nMemberAID));
|
|||
|
|
pParty->GetMembersByAccountDBID(nMemberAID);
|
|||
|
|
|
|||
|
|
CDNUserSession * pPartyUser = NULL;
|
|||
|
|
for (int i = 0; i < PARTYCOUNTMAX; i++)
|
|||
|
|
{
|
|||
|
|
if (nMemberAID[i] <= 0) continue;
|
|||
|
|
pPartyUser = g_pUserSessionManager->FindUserSessionByAccountDBID(nMemberAID[i]);
|
|||
|
|
if (pPartyUser)
|
|||
|
|
{
|
|||
|
|
if (pPacket->cTargetGateNo > 0) // <20><><EFBFBD><EFBFBD>
|
|||
|
|
pPartyUser->ChangeMap(pPacket->cVillageID, pPacket->cTargetGateNo, pPacket->nTargetChannelID, pPacket->nTargetMapIdx, pPacket->szIP, pPacket->nPort);
|
|||
|
|
else // cheat<61><74> ä<>θ<EFBFBD> <20>̵<EFBFBD><CCB5>ϰ<EFBFBD><CFB0>쵵 <20><><EFBFBD><EFBFBD> <20><> <20>־<EFBFBD>ȿ~
|
|||
|
|
pPartyUser->ChangeMap(pPacket->cVillageID, pPacket->nTargetChannelID, pPacket->nTargetMapIdx, pPacket->szIP, pPacket->nPort);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT(); //<2F>̰<EFBFBD> <20>۹<EFBFBD>?
|
|||
|
|
}
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
if (pPacket->cTargetGateNo <= 0) // ġƮ<C4A1>̵<EFBFBD><CCB5><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if ( pPartyUser && pPartyUser->GetDBConnection() && pPartyUser->GetDBConnection()->GetActive() )
|
|||
|
|
pPartyUser->GetDBConnection()->QueryModParty( pPartyUser, pParty, g_Config.nManagedID, Party::LocationType::Village, pPacket->nTargetChannelID );
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (pPacket->cTargetGateNo > 0){ // <20><><EFBFBD><EFBFBD>
|
|||
|
|
pUserObj->ChangeMap(pPacket->cVillageID, pPacket->cTargetGateNo, pPacket->nTargetChannelID, pPacket->nTargetMapIdx, pPacket->szIP, pPacket->nPort);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
else { // cheat<61><74> ä<>θ<EFBFBD> <20>̵<EFBFBD><CCB5>ϰ<EFBFBD><CFB0>쵵 <20><><EFBFBD><EFBFBD> <20><> <20>־<EFBFBD>ȿ~ <20><>Ƽ<EFBFBD><C6BC><EFBFBD>ν<EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD> <20>߰<EFBFBD>
|
|||
|
|
pUserObj->WarpVillage(pPacket);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pUserObj->m_eUserState = STATE_NONE;
|
|||
|
|
pUserObj->SendVillageInfo(pPacket->szIP, pPacket->nPort, pPacket->nRet, 0, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_DETACHUSER:
|
|||
|
|
{
|
|||
|
|
MADetachUser *pDetach = (MADetachUser*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pDetach->nAccountDBID);
|
|||
|
|
if (!pUserObj)
|
|||
|
|
{
|
|||
|
|
if( pDetach->bIsDuplicate )
|
|||
|
|
{
|
|||
|
|
SendDuplicateLogin(pDetach->nAccountDBID, false, pDetach->nSessionID);
|
|||
|
|
g_Log.Log(LogType::_NORMAL,0, pDetach->nAccountDBID, 0, pDetach->nSessionID, L"[MAVI_DETACHUSER] Duplicate User Not Village ID:%d, SID:%d !!\r\n", g_Config.nVillageID, g_Config.nManagedID);
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
|
|||
|
|
// <20>ߺ<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û.
|
|||
|
|
// DetachFlag<61><67> On<4F><6E> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ(Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>۵ǰų<C7B0> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ߺ<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
|||
|
|
if( pDetach->bIsDuplicate && !pUserObj->GetDetachFlag() )
|
|||
|
|
{
|
|||
|
|
pUserObj->SendCompleteDetachMsg( ERROR_DUPLICATEUSER_INGAME, L"ERROR_DUPLICATEUSER_INGAME", true );
|
|||
|
|
SendDuplicateLogin(pDetach->nAccountDBID, true, pDetach->nSessionID);
|
|||
|
|
g_Log.Log(LogType::_NORMAL,0, pDetach->nAccountDBID, 0, pDetach->nSessionID, L"[MAVI_DETACHUSER] Duplicate User Village!! ID:%d, SID:%d\r\n", g_Config.nVillageID, g_Config.nManagedID);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pUserObj->DetachConnection(L"Connect|MAVI_DETACHUSER");
|
|||
|
|
g_Log.Log(LogType::_NORMAL,0, pDetach->nAccountDBID, 0, pDetach->nSessionID, L"[MAVI_DETACHUSER] User Village!! ID:%d, SID:%d\r\n", g_Config.nVillageID, g_Config.nManagedID);
|
|||
|
|
}
|
|||
|
|
#else // #if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
|
|||
|
|
pUserObj->DetachConnection(L"Connect|MAVI_DETACHUSER");
|
|||
|
|
g_Log.Log(LogType::_NORMAL,0, pDetach->nAccountDBID, 0, pDetach->nSessionID, L"[MAVI_DETACHUSER] User Village!! ID:%d, SID:%d\r\n", g_Config.nVillageID, g_Config.nManagedID);
|
|||
|
|
if( pDetach->bIsDuplicate )
|
|||
|
|
{
|
|||
|
|
SendDuplicateLogin(pDetach->nAccountDBID, true, pDetach->nSessionID);
|
|||
|
|
g_Log.Log(LogType::_NORMAL,0, pDetach->nAccountDBID, 0, pDetach->nSessionID, L"[MAVI_DETACHUSER] Duplicate User Village!! ID:%d, SID:%d\r\n", g_Config.nVillageID, g_Config.nManagedID);
|
|||
|
|
}
|
|||
|
|
#endif // #if defined(PRE_MOD_DUPLICATION_LOGIN_MES)
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_USERSTATE:
|
|||
|
|
{
|
|||
|
|
MAUserState * pPacket = (MAUserState*)pData;
|
|||
|
|
|
|||
|
|
if (g_pWorldUserState == NULL)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
if (pPacket->cNameLen <= 0 || pPacket->cNameLen > NAMELENMAX-1)
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WCHAR wszName[NAMELENMAX];
|
|||
|
|
_wcscpy(wszName, NAMELENMAX, pPacket->wszBuf, pPacket->cNameLen);
|
|||
|
|
|
|||
|
|
if (pPacket->Type == WorldUserState::Add )
|
|||
|
|
{
|
|||
|
|
g_pWorldUserState->AddUserState(wszName, pPacket->biCharacterDBID, pPacket->cLocationState, pPacket->cCommunityState, pPacket->nChannelID, pPacket->nMapIdx);
|
|||
|
|
}
|
|||
|
|
else if (pPacket->Type == WorldUserState::Delete )
|
|||
|
|
{
|
|||
|
|
g_pWorldUserState->DelUserState(wszName, pPacket->biCharacterDBID);
|
|||
|
|
LadderSystem::CManager::GetInstance().OnDisconnectUser( pPacket->biCharacterDBID, wszName );
|
|||
|
|
}
|
|||
|
|
else if( pPacket->Type == WorldUserState::Modify )
|
|||
|
|
{
|
|||
|
|
g_pWorldUserState->UpdateUserState(wszName, pPacket->biCharacterDBID, pPacket->cLocationState, pPacket->cCommunityState, pPacket->nChannelID, pPacket->nMapIdx);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
if(g_pDWCTeamManager && g_pDWCTeamManager->bIsIncludeDWCVillage())
|
|||
|
|
g_pDWCTeamManager->ChangeDWCTeamMemberState(pPacket->biCharacterDBID, pPacket->Type == WorldUserState::Delete,
|
|||
|
|
pPacket->cLocationState, pPacket->nChannelID, pPacket->nMapIdx);
|
|||
|
|
#endif
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if defined(_CH)
|
|||
|
|
case MAVI_FCMSTATE: // <20>Ƿε<C7B7>
|
|||
|
|
{
|
|||
|
|
MAFCMState *pState = (MAFCMState*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pState->nAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
pUserObj->SetFCMOnlineMin(pState->nOnlineMin, pState->bSend);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif // _CH
|
|||
|
|
|
|||
|
|
// <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
case MAVI_RESPARTYINVITE:
|
|||
|
|
{
|
|||
|
|
MAVIResPartyInvite* pPacket= reinterpret_cast<MAVIResPartyInvite*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiReqAccountDBID );
|
|||
|
|
if( pSession == NULL )
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
switch( pPacket->iRet )
|
|||
|
|
{
|
|||
|
|
case ERROR_PARTY_INVITEFAIL:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_DESTUSER_NOTFOUND:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_DEST_USER_NOWREADY:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_DESTLOCATION_NOT_SAME:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_ALREADY_HAS_PARTY:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_CHARACTERLEVEL_SHORTAGE:
|
|||
|
|
case ERROR_PARTY_JOINFAIL_CHARACTERLEVEL_OVER:
|
|||
|
|
case ERROR_PARTY_INVITEFAIL_ALREADY_INVITED:
|
|||
|
|
{
|
|||
|
|
pSession->SendPartyInviteFail( pPacket->iRet );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ERROR_ISOLATE_REQUESTFAIL:
|
|||
|
|
{
|
|||
|
|
pSession->SendIsolateResult( pPacket->iRet );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_REQPARTYINVITE:
|
|||
|
|
{
|
|||
|
|
MAVIReqPartyInvite* pPacket = reinterpret_cast<MAVIReqPartyInvite*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pInviteSession = g_pUserSessionManager->FindUserSessionByName( pPacket->wszInviteCharName );
|
|||
|
|
if( pInviteSession == NULL )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_DESTUSER_NOTFOUND, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
if(pInviteSession->IsDWCCharacter())
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_DESTUSER_NOTFOUND, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined(PRE_FIX_62281)
|
|||
|
|
int nRet = pInviteSession->CheckPartyInvitableState(pPacket->wszReqCharName, pPacket->iPartyMinLevel);
|
|||
|
|
if(nRet != ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( nRet, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
if( pInviteSession->m_eUserState != STATE_NONE )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_DEST_USER_NOWREADY, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pInviteSession->IsAcceptAbleOption( pPacket->biReqCharacterDBID, pPacket->uiReqAccountDBID, _ACCEPTABLE_CHECKTYPE_PARTYINVITE) == false )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pInviteSession->GetIsolate()->IsIsolateItem( pPacket->wszReqCharName) )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( (pInviteSession->GetAccountLevel() >= AccountLevel_New) && (pInviteSession->GetAccountLevel() <= AccountLevel_Master))
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_DESTUSER_NOTFOUND, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const sChannelInfo* pUserChInfo = g_pMasterConnection->GetChannelInfo(pInviteSession->GetChannelID());
|
|||
|
|
if( pUserChInfo == NULL )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pUserChInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVP || pUserChInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVPLOBBY)
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( !pInviteSession->IsNoneWindowState())
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pInviteSession->GetPartyID() > 0)
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_ALREADY_HAS_PARTY, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pInviteSession->GetLevel() < pPacket->iPartyMinLevel )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyInvite( ERROR_PARTY_INVITEFAIL_CHARACTERLEVEL_SHORTAGE, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
pInviteSession->SetWindowState(WINDOW_ISACCEPT);
|
|||
|
|
pInviteSession->SendPartyInviteMsg( pPacket->PartyID, pPacket->wszPartyName, pPacket->iPartyPassword, pPacket->wszReqCharName, (BYTE)pPacket->iPartyMemberMax, (BYTE)pPacket->iPartyMemberCount, (USHORT)pPacket->iPartyAvrLV, -1, pPacket->iReqMapIndex );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_PARTYINVITEDENIED:
|
|||
|
|
{
|
|||
|
|
MAVIPartyInviteDenided* pPacket = reinterpret_cast<MAVIPartyInviteDenided*>(pData);
|
|||
|
|
|
|||
|
|
CDNParty* pParty = g_pPartyManager->GetParty( pPacket->PartyID );
|
|||
|
|
if( pParty == NULL )
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if( pParty->InviteDenied( pPacket->wszInviteCharName ) == true )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pParty->GetLeaderAccountDBID());
|
|||
|
|
if (pUser)
|
|||
|
|
pUser->SendPartyInviteDenied( pPacket->wszInviteCharName, pPacket->cIsOpenBlind > 0 ? ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED : ERROR_NONE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
|||
|
|
case MAVI_REQPARTYASKJOIN:
|
|||
|
|
{
|
|||
|
|
MAVIReqPartyAskJoin* pPacket = reinterpret_cast<MAVIReqPartyAskJoin*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pTargetSession = g_pUserSessionManager->FindUserSessionByName( pPacket->wszTargetChracterName );
|
|||
|
|
if( pTargetSession == NULL )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_FAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
if( pTargetSession->GetPartyID() <= 0 )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_PARTY_NOTFOUND, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDNParty* pParty = g_pPartyManager->GetParty(pTargetSession->GetPartyID());
|
|||
|
|
if( pParty == NULL )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_PARTY_NOTFOUND, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDNUserSession* pLeader = g_pUserSessionManager->FindUserSessionByAccountDBID(pParty->GetLeaderAccountDBID());
|
|||
|
|
if( pLeader == NULL )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_FAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
if( pLeader->GetIsolate()->IsIsolateItem(pPacket->wszReqChracterName) )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_FAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
if( pLeader->IsAcceptAbleOption(pPacket->biReqCharacterDBID, pPacket->uiReqAccountDBID, _ACCEPTABLE_CHECKTYPE_PARTYINVITE) == false)
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_FAIL, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
if( !pLeader->IsNoneWindowState() )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendResPartyAskJoin( ERROR_PARTY_ASKJOIN_DESTUSER_SITUATION_NOTALLOWED, pPacket->uiReqAccountDBID );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pLeader->SetWindowState(WINDOW_ISACCEPT);
|
|||
|
|
pLeader->SendAskJoinToLeader(pPacket->wszReqChracterName, pPacket->cReqUserJob, pPacket->cReqUserLevel);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_RESPARTYASKJOIN:
|
|||
|
|
{
|
|||
|
|
MAVIResPartyAskJoin* pPacket = reinterpret_cast<MAVIResPartyAskJoin*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiReqAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
pSession->SendAskJoinResult( pPacket->iRet );
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_ASKJOINAGREEINFO:
|
|||
|
|
{
|
|||
|
|
MAVIAskJoinAgreeInfo* pPacket = reinterpret_cast<MAVIAskJoinAgreeInfo*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAskerAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
pSession->SendAskJoinAgreeInfo( pPacket->PartyID, pPacket->iPassword ); //<2F>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#else
|
|||
|
|
case MAVI_REQPARTYID:
|
|||
|
|
{
|
|||
|
|
MAVIReqPartyID * pPacket = (MAVIReqPartyID*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if(pUser)
|
|||
|
|
{
|
|||
|
|
if (pUser->GetPartyID() > 0) //<2F><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ŵٰ<C5B4> <20>س<EFBFBD><D8B3><EFBFBD> <20><> <20><><EFBFBD>̿<EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>. <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
CDNParty * pParty = g_pPartyManager->CreateParty(pUser, pPacket->PartyID, pPacket->wszPartyName, pPacket->wszPartyPass, pPacket->cMemberMax, pPacket->ItemLootRule, pPacket->ItemRank, pPacket->cUserLvLimitMin, pPacket->cUserLvLimitMax, pPacket->nTargetMapIdx, pPacket->Difficulty, pPacket->cPartyJobDice);
|
|||
|
|
if (pParty)
|
|||
|
|
{
|
|||
|
|
int nMemberIdx = -1;
|
|||
|
|
if (pParty->AddPartyMember(pUser->GetAccountDBID(), pUser->GetSessionID(), pUser->GetCharacterName(), nMemberIdx, true))
|
|||
|
|
{
|
|||
|
|
pUser->SendCreateParty(ERROR_NONE, pParty->GetPartyID(), pPacket->nAfterInviteAccountDBID > 0 ? true : false, pParty->m_bRaidParty ? _RAID_PARTY_8 : _NORMAL_PARTY);
|
|||
|
|
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
if (pPacket->cUseVoice > 0 && g_pVoiceChat) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
SendReqVoiceChannelID(pParty->GetPartyID(), _VOICECHANNEL_REQTYPE_PARTY);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
pUser->SetPartyID( pParty->GetPartyID() );
|
|||
|
|
pUser->m_nPartyMemberIndex = nMemberIdx;
|
|||
|
|
pUser->m_boPartyLeader = true;
|
|||
|
|
|
|||
|
|
pParty->SendAllRefreshParty(PARTYREFRESH_NONE);
|
|||
|
|
pParty->SendPartyMemberMoveEachOther(pUser->GetSessionID(), pUser->GetTargetPos().nX, pUser->GetTargetPos().nY, pUser->GetTargetPos().nZ);
|
|||
|
|
|
|||
|
|
if (pPacket->nAfterInviteAccountDBID > 0)
|
|||
|
|
{
|
|||
|
|
CDNUserSession * pInviteUser = (CDNUserSession*)g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAfterInviteAccountDBID);
|
|||
|
|
if (pInviteUser != NULL)
|
|||
|
|
{
|
|||
|
|
//<2F>ʴ<EFBFBD><CAB4>ҳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|||
|
|
if( !pInviteUser->IsNoneWindowState() )
|
|||
|
|
{
|
|||
|
|
pUser->SendPartyInviteFail(ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
if (pParty->InvitePartyMember(pInviteUser->GetCharacterName()) == true)
|
|||
|
|
{
|
|||
|
|
pInviteUser->SendPartyInviteMsg(pParty->GetPartyID(), pParty->GetPartyName(), pParty->m_wszPartyPassword, pUser->GetCharacterName(), (BYTE)pParty->GetMemberMax(), (BYTE)pParty->GetMemberCount(), (USHORT)pParty->GetAvrUserLv());
|
|||
|
|
pInviteUser->SetWindowState(WINDOW_ISACCEPT);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
pUser->SendPartyInviteFail(ERROR_PARTY_INVITEFAIL_ALREADY_INVITED);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
g_pPartyManager->DestroyParty(pParty->GetPartyID());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
pUser->SendCreateParty(ERROR_PARTY_CREATE_FAIL, 0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_REQPARTYIDFAIL:
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
case MAVI_INVITEPARTYMEMBER_RETMSG:
|
|||
|
|
{
|
|||
|
|
MAVIResult *pResult = (MAVIResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pResult->nAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
switch (pResult->nMainCmd)
|
|||
|
|
{
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
case MAVI_REQPARTYIDFAIL:
|
|||
|
|
{
|
|||
|
|
pUserObj->SendCreateParty(pResult->nRet, 0);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
case MAVI_INVITEPARTYMEMBER_RETMSG:
|
|||
|
|
{
|
|||
|
|
pUserObj->SendPartyInviteFail(pResult->nRet);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PUSHPARTY:
|
|||
|
|
{
|
|||
|
|
MAVIPushParty * pPacket = (MAVIPushParty*)pData;
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
g_pPartyManager->PushParty(pPacket);
|
|||
|
|
#else
|
|||
|
|
if (g_pPartyManager->PushParty(pPacket) == NULL )
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_INVITEPARTYMEMBER:
|
|||
|
|
{
|
|||
|
|
MAVIInvitePartyMember * pPacket = (MAVIInvitePartyMember*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nInvitedAccountDBID);
|
|||
|
|
if (pUser)
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_FIX_62281)
|
|||
|
|
bool bPermitCheck = true;
|
|||
|
|
for (int j = 0; j < PERMITMAPPASSCLASSMAX; j++)
|
|||
|
|
{
|
|||
|
|
if (pPacket->cPassClassIds[j] <= 0) continue;
|
|||
|
|
if (pUser->GetClassID() == pPacket->cPassClassIds[j])
|
|||
|
|
{
|
|||
|
|
bPermitCheck = false;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (bPermitCheck)
|
|||
|
|
{
|
|||
|
|
if (pPacket->cPermitLevel > pUser->GetLevel())
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_ZONLEVEL_SHORTAGE);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_PARTY_DB)
|
|||
|
|
int nRet = pUser->CheckPartyInvitableState(pPacket->wszInviterName, pPacket->cLimitLevelMin);
|
|||
|
|
#else
|
|||
|
|
int nRet = pUser->CheckPartyInvitableState(pPacket->wszInviterName, pPacket->cLimitLevelMin, pPacket->cLimitLevelMax);
|
|||
|
|
#endif
|
|||
|
|
if(nRet != ERROR_NONE)
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, nRet);
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pUser->SetWindowState(WINDOW_ISACCEPT);
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
pUser->SendPartyInviteMsg(pPacket->PartyID, pPacket->wszPartyName, -1, pPacket->wszInviterName, pPacket->cPartyMemberMax, pPacket->cPartyMemberCount, pPacket->cPartyAvrLevel, pPacket->nGameServerID, pPacket->nMapIdx);
|
|||
|
|
#else
|
|||
|
|
pUser->SendPartyInviteMsg(pPacket->PartyID, pPacket->wszPartyName, NULL, pPacket->wszInviterName, pPacket->cPartyMemberMax, pPacket->cPartyMemberCount, pPacket->cPartyAvrLevel, pPacket->nGameServerID, pPacket->nMapIdx);
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
if (pUser->m_eUserState != STATE_NONE || !pUser->IsNoneWindowState()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>̰ų<CCB0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20>ʴ<EFBFBD> <20>Ұ<EFBFBD><D2B0>ϴ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool bPermitCheck = true;
|
|||
|
|
for (int j = 0; j < PERMITMAPPASSCLASSMAX; j++)
|
|||
|
|
{
|
|||
|
|
if (pPacket->cPassClassIds[j] <= 0) continue;
|
|||
|
|
if (pUser->GetClassID() == pPacket->cPassClassIds[j])
|
|||
|
|
{
|
|||
|
|
bPermitCheck = false;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (bPermitCheck)
|
|||
|
|
{
|
|||
|
|
if (pPacket->cPermitLevel > pUser->GetLevel())
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_ZONLEVEL_SHORTAGE);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӿɼ<D3BF><C9BC><EFBFBD> Ȯ<><C8AE><EFBFBD>մϴ<D5B4>.
|
|||
|
|
if (pUser->IsAcceptAbleOption(pPacket->biInviterCharacterDBID, pPacket->nInviterAccountDBID, _ACCEPTABLE_CHECKTYPE_PARTYINVITE) == false)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20>˾<EFBFBD> <20><><EFBFBD>ϴ<EFBFBD>
|
|||
|
|
if (pUser->GetIsolate()->IsIsolateItem(pPacket->wszInviterName))
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GM<47≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20>ؾ<EFBFBD><D8BE><EFBFBD>
|
|||
|
|
if ((pUser->GetAccountLevel() >= AccountLevel_New) && (pUser->GetAccountLevel() <= AccountLevel_Master))
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_DESTUSER_NOTFOUND);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><>Ƽ <20>ʴ븦 <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD> üŷ<C3BC>Ŀ<EFBFBD> <20>ʴ<EFBFBD> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
|
const sChannelInfo * pChInfo = g_pMasterConnection->GetChannelInfo(pUser->GetChannelID());
|
|||
|
|
if (pChInfo == NULL)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (pChInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVP || pChInfo->nChannelAttribute&GlobalEnum::CHANNEL_ATT_PVPLOBBY)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
if (pUser->GetMapIndex() != pPacket->nVillageMapIdx)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
if (pUser->GetPartyID() > 0)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_ALREADY_HAS_PARTY);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (pUser->GetLevel() < pPacket->cLimitLevelMin)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_CHARACTERLEVEL_SHORTAGE);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
if (pUser->GetLevel() > pPacket->cLimitLevelMax)
|
|||
|
|
{
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_JOINFAIL_CHARACTERLEVEL_OVER);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
pUser->SendPartyInviteMsg(pPacket->PartyID, pPacket->wszPartyName, -1, pPacket->wszInviterName, pPacket->cPartyMemberMax, pPacket->cPartyMemberCount, pPacket->cPartyAvrLevel, pPacket->nGameServerID, pPacket->nMapIdx);
|
|||
|
|
#else
|
|||
|
|
pUser->SendPartyInviteMsg(pPacket->PartyID, pPacket->wszPartyName, NULL, pPacket->wszInviterName, pPacket->cPartyMemberMax, pPacket->cPartyMemberCount, pPacket->cPartyAvrLevel, pPacket->nGameServerID, pPacket->nMapIdx);
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
}
|
|||
|
|
#endif // #if defined(PRE_FIX_62281)
|
|||
|
|
else
|
|||
|
|
SendInvitePartyResult(pPacket->nGameServerID, pPacket->wszInviterName, pPacket->wszInvitedName, ERROR_PARTY_INVITEFAIL_DESTUSER_NOTFOUND);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_INVITEGUILDMEMB:
|
|||
|
|
{
|
|||
|
|
MAInviteGuildMember * pPacket = (MAInviteGuildMember*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByName(pPacket->wszToCharacterName);
|
|||
|
|
|
|||
|
|
if (pUser)
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
if(pUser->IsDWCCharacter())
|
|||
|
|
{
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_CHARACTER_DATA_NOT_LOADED_OPPOSITE);
|
|||
|
|
return ERROR_PARTY_INVITEFAIL_DESTUSER_SITUATION_NOTALLOWED;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
|
if (!pUser->GetLoadUserData())
|
|||
|
|
{
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_CHARACTER_DATA_NOT_LOADED_OPPOSITE);
|
|||
|
|
return ERROR_CHARACTER_DATA_NOT_LOADED_OPPOSITE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>尡<EFBFBD><E5B0A1> <20><><EFBFBD><EFBFBD>
|
|||
|
|
if (pUser->GetGuildUID().IsSet())
|
|||
|
|
{
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_GUILD_ALREADYINGUILD_OPPOSITEUSER);
|
|||
|
|
return ERROR_GUILD_ALREADYINGUILD_OPPOSITEUSER;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>ڱ<EFBFBD><DAB1>ڽſ<DABD><C5BF><EFBFBD> <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
|
|||
|
|
if (pPacket->nAccountDBID == pUser->GetAccountDBID())
|
|||
|
|
{
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_GUILD_CANTINVITE_YOURSELF);
|
|||
|
|
return ERROR_GUILD_CANTINVITE_YOURSELF;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD> <20>˻<EFBFBD>
|
|||
|
|
if (pUser->IsAcceptAbleOption(pPacket->nCharacterDBID, pPacket->nAccountDBID, _ACCEPTABLE_CHECKTYPE_GUILDINVITE) == false)
|
|||
|
|
{
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_GUILD_REFUESED_GUILDINVITATION);
|
|||
|
|
return ERROR_GUILD_REFUESED_GUILDINVITATION;
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
if( pUser->IsNoneWindowState() )
|
|||
|
|
{
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_GUILD_CANTACCEPT_GUILDINVITATION);
|
|||
|
|
return ERROR_GUILD_CANTACCEPT_GUILDINVITATION;
|
|||
|
|
}
|
|||
|
|
pUser->SetWindowState(WINDOW_ISACCEPT);
|
|||
|
|
pUser->SendInviteGuildMemberReq(pPacket->GuildUID, pPacket->nAccountDBID, pPacket->nSessionID, pPacket->wszFromCharacterName,
|
|||
|
|
ERROR_NONE, pUser->GetAccountDBID(), pUser->GetSessionID(), pPacket->wszGuildName);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>ش<EFBFBD>.
|
|||
|
|
SendInviteGuildResult(pPacket->nAccountDBID, ERROR_GUILD_NOTEXIST_OPPOSITEUSER);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
|
|||
|
|
case MAVI_INVITEGUILDMEMBER_RETMSG:
|
|||
|
|
{
|
|||
|
|
MAVIGuildMemberInvitedResult * pPacket = (MAVIGuildMemberInvitedResult*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
// CS_INVITEGUILDMEMBACK<43><4B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pPacket->bAck)
|
|||
|
|
{
|
|||
|
|
pUser->SendInviteGuildMemberAck( NULL, NULL, pPacket->wszInvitedName,
|
|||
|
|
ERROR_GUILD_REFUESED_GUILDINVITATION, NULL, NULL,
|
|||
|
|
0, 0, NULL, NULL);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// CS_INVITEGUILDMEMBREQ<45><51> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pUser->SendInviteGuildMemberReq(pUser->GetGuildUID(), pUser->GetAccountDBID(), pUser->GetSessionID(), pPacket->wszInvitedName, pPacket->nRet);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_GUILDWAREINFO: // <20><><EFBFBD><EFBFBD>â<EFBFBD><C3A2> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
MAGuildWareInfo * pPacket = (MAGuildWareInfo*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->nManagedID == g_Config.nManagedID)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
//if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ȯ
|
|||
|
|
_ASSERT( dynamic_cast<CDNGuildVillage *>(pGuild) );
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
|
|||
|
|
if (pGuildVillage)
|
|||
|
|
{
|
|||
|
|
CDNGuildWare* pGuildWare = NULL;
|
|||
|
|
pGuildWare = pGuildVillage->GetGuildWare ();
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (pGuildWare)
|
|||
|
|
pGuildWare->OnRecvGuildWareInfo (pPacket);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_RETGUILDWAREINFO: // <20><><EFBFBD><EFBFBD>â<EFBFBD><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
MAGuildWareInfoResult * pPacket = (MAGuildWareInfoResult*)pData;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
if (pPacket->nFromManagedID != g_Config.nManagedID)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ȯ
|
|||
|
|
_ASSERT( dynamic_cast<CDNGuildVillage *>(pGuild) );
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
|
|||
|
|
if (pGuildVillage)
|
|||
|
|
{
|
|||
|
|
CDNGuildWare* pGuildWare = NULL;
|
|||
|
|
pGuildWare = pGuildVillage->GetGuildWare ();
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (pGuildWare)
|
|||
|
|
pGuildWare->OnRecvGuildWareInfoResult (pPacket);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_GUILDMEMBER_LEVELUP: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
MAGuildMemberLevelUp * pPacket = (MAGuildMemberLevelUp*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->nManagedID == g_Config.nManagedID)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
pGuild->UpdateMemberLevel (pPacket->nCharacterDBID, pPacket->cLevel);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_REFRESH_GUILDITEM: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
MARefreshGuildItem * pPacket = (MARefreshGuildItem*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->nManagedID == g_Config.nManagedID)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ȯ
|
|||
|
|
_ASSERT( dynamic_cast<CDNGuildVillage *>(pGuild) );
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
|
|||
|
|
if (pGuildVillage)
|
|||
|
|
pGuildVillage->RecvMaRefreshGuildItem (pPacket);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_REFRESH_GUILDCOIN: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
MARefreshGuildCoin * pPacket = (MARefreshGuildCoin*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->nManagedID == g_Config.nManagedID)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ȯ
|
|||
|
|
_ASSERT( dynamic_cast<CDNGuildVillage *>(pGuild) );
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
|
|||
|
|
if (pGuildVillage)
|
|||
|
|
pGuildVillage->RecvMaRefreshGuildCoin (pPacket);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_EXTEND_GUILDWARE: // <20><><EFBFBD><EFBFBD>â<EFBFBD><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
MAExtendGuildWare * pPacket = (MAExtendGuildWare*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->nManagedID == g_Config.nManagedID)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
pGuild->SetInfo()->wGuildWareSize = pPacket->wWareSize;
|
|||
|
|
|
|||
|
|
pGuild->SendExtendGuildWare((short)pPacket->wWareSize);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_DISMISSGUILD: // <20><><EFBFBD><EFBFBD> <20><>ü <20>˸<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaDismissGuild(reinterpret_cast<MADismissGuild*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_ADDGUILDMEMB: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20>˸<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaAddGuildMember(reinterpret_cast<MAAddGuildMember*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_DELGUILDMEMB: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Ż<><C5BB>/<2F>߹<EFBFBD>) <20>˸<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaDelGuildMember(reinterpret_cast<MADelGuildMember*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_CHANGEGUILDINFO: // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaChangeGuildInfo(reinterpret_cast<MAChangeGuildInfo*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_CHANGEGUILDMEMBINFO: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaChangeGuildMemberInfo(reinterpret_cast<MAChangeGuildMemberInfo*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_GUILDCHAT: // <20><><EFBFBD><EFBFBD> ä<><C3A4> <20>˸<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaGuildChat(reinterpret_cast<MAGuildChat*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
|||
|
|
case MAVI_GUILDCHAT_MOBILE:
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaDoorsGuildChat(reinterpret_cast<MADoorsGuildChat*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif //#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
case MAVI_GUILDCHANGE_NAME:
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaGuildChangeName(reinterpret_cast<MAGuildChangeName*>(pData));
|
|||
|
|
g_pGuildWarManager->OnRecvMaGuildChangeName(reinterpret_cast<MAGuildChangeName*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>帶ũ <20><><EFBFBD><EFBFBD>
|
|||
|
|
case MAVI_GUILDCHANGEMARK:
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaGuildChangeMark(reinterpret_cast<MAGuildChangeMark*>(pData));
|
|||
|
|
g_pGuildWarManager->OnRecvMaGuildChangeMark(reinterpret_cast<MAGuildChangeMark*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_UPDATEGUILDEXP:
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaGuildUpdateExp(reinterpret_cast<MAUpdateGuildExp*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û <20>˸<EFBFBD>
|
|||
|
|
case MAVI_ENROLL_GUILDWAR:
|
|||
|
|
{
|
|||
|
|
g_pGuildManager->OnRecvMaEnrollGuildWar(reinterpret_cast<MAEnrollGuildWar*>(pData));
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_CHANGE_GUILDWAR_STEP :
|
|||
|
|
{
|
|||
|
|
MAChangeGuildWarStep * pPacket = (MAChangeGuildWarStep*)pData;
|
|||
|
|
|
|||
|
|
if (pPacket->bCheatFlag)
|
|||
|
|
g_pGuildWarManager->SetStepIndex(GUILDWAR_STEP_NONE);
|
|||
|
|
|
|||
|
|
bool bChangeEvent = false;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
|||
|
|
if (g_pGuildWarManager->GetScheduleID() == pPacket->wScheduleID)
|
|||
|
|
{
|
|||
|
|
if (pPacket->cEventType == GUILDWAR_EVENT_START && g_pGuildWarManager->GetStepIndex() < pPacket->cEventStep)
|
|||
|
|
bChangeEvent = true;
|
|||
|
|
else if (pPacket->cEventType == GUILDWAR_EVENT_END && g_pGuildWarManager->GetStepIndex() == pPacket->cEventStep)
|
|||
|
|
bChangeEvent = true;
|
|||
|
|
}
|
|||
|
|
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
bChangeEvent = true;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (bChangeEvent)
|
|||
|
|
{
|
|||
|
|
g_pGuildWarManager->SetGuildWarStep(pPacket->cEventStep, pPacket->wScheduleID, pPacket->wWinersWeightRate);
|
|||
|
|
g_pUserSessionManager->SendGuildWarEvent(pPacket->wScheduleID, pPacket->cEventStep, pPacket->cEventType);
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
if( pPacket->cEventStep == GUILDWAR_STEP_REWARD && pPacket->cEventType == GUILDWAR_EVENT_END )
|
|||
|
|
g_pGuildWarManager->Reset();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_SCHEDULE : // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
|
|||
|
|
{
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetGuildWarSchedule(rand()%THREADMAX, g_Config.nWorldSetID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_FINALSCHEDULE : // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȸ <20><>û
|
|||
|
|
{
|
|||
|
|
MAGetGuildWarFinalSchedule * pPacket = (MAGetGuildWarFinalSchedule*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetGuildWarFinalSchedule(rand()%THREADMAX, g_Config.nWorldSetID, pPacket->wScheduleID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_FINALPROCESS : // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ
|
|||
|
|
{
|
|||
|
|
MASetGuildWarFinalProcess* pPacket = (MASetGuildWarFinalProcess*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
{
|
|||
|
|
g_pGuildWarManager->SetGuildWarFinalPart(pPacket->cGuildFinalPart, pPacket->tBeginTime);
|
|||
|
|
|
|||
|
|
if( pPacket->cGuildFinalPart != GUILDWAR_FINALPART_NONE && g_pGuildWarManager->GetPreWinGuildUID().IsSet() ) // <20><><EFBFBD>±<EFBFBD><C2B1><EFBFBD> <20><><EFBFBD>õǾ<C3B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
{
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (g_pGuildWarManager->GetPreWinGuildUID());
|
|||
|
|
g_pGuildWarManager->ResetPreWinGuildUID();
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
pGuildVillage->SendGuildWarPreWinGuild(false);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_POINT : // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>ȸ <20><>û(û<><C3BB>, ȫ<><C8AB>)
|
|||
|
|
{
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetGuildWarPoint(rand()%THREADMAX, g_Config.nWorldSetID, 0, 'T', 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_POINT : // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>.
|
|||
|
|
{
|
|||
|
|
MASetGuildWarPoint * pPacket = (MASetGuildWarPoint*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
g_pGuildWarManager->SetTeamPoint(pPacket->nBlueTeamPoint, pPacket->nRedTeamPoint);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_ADDGUILDWAR_POINT : // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ȹ<><C8B9>
|
|||
|
|
{
|
|||
|
|
MAAddGuildWarPoint * pPacket = (MAAddGuildWarPoint*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
{
|
|||
|
|
if( pPacket->cTeamType == GUILDWAR_TEAM_BLUE )
|
|||
|
|
g_pGuildWarManager->AddBlueTeamPoint(pPacket->nAddPoint);
|
|||
|
|
else if( pPacket->cTeamType == GUILDWAR_TEAM_RED)
|
|||
|
|
g_pGuildWarManager->AddRedTeamPoint(pPacket->nAddPoint);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>忡 <20><><EFBFBD><EFBFBD>
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
if( pGuildVillage->GetGuildWarScheduleID() != g_pGuildWarManager->GetScheduleID() )
|
|||
|
|
{
|
|||
|
|
pGuildVillage->GuildWarReset();
|
|||
|
|
pGuildVillage->SetGuildWarScheduleID(g_pGuildWarManager->GetScheduleID());
|
|||
|
|
}
|
|||
|
|
pGuildVillage->AddGuildWarPoint(pPacket->nAddPoint);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_FINAL_TEAM : // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
{
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
{
|
|||
|
|
pDBCon->QueryGetGuildWarPointGuildTotal(rand()%THREADMAX, g_Config.nWorldSetID, 0, true, 'A', g_pGuildWarManager->GetScheduleID(), 0 );
|
|||
|
|
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QueryGetGuildWarPointGuildTotal ScheduleID:%d !!\r\n", g_pGuildWarManager->GetScheduleID() );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] QueryGetGuildWarPointGuildTotal Not DB Connection!!\r\n" );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_FINAL_TEAM : // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ǥ <20><><EFBFBD><EFBFBD>)
|
|||
|
|
{
|
|||
|
|
MAVISetGuildWarFinalTeam * pPacket = (MAVISetGuildWarFinalTeam*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryAddGuildWarFinalMatchList(rand()%THREADMAX, g_Config.nWorldSetID, g_pGuildWarManager->GetScheduleID(), pPacket->GuildDBID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_TOURNAMENTINFO :
|
|||
|
|
{
|
|||
|
|
MAGetGuildWarTournamentInfo* pPacket = (MAGetGuildWarTournamentInfo*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetGuildWarFinalResults(rand()%THREADMAX, g_Config.nWorldSetID, pPacket->wScheduleID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_TOURNAMENTINFO :
|
|||
|
|
{
|
|||
|
|
MAGuildWarTournamentInfo* pPacket = (MAGuildWarTournamentInfo*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
g_pGuildWarManager->SetGuildTournamentInfo(pPacket->sGuildWarFinalInfo);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_TRIAL_STATS : // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
|||
|
|
// <20><><EFBFBD><EFBFBD>, QueryGetGuildWarPointPartTotal, QueryGetGuildWarPointGuildPartTotal, QueryGetGuildWarPointDaily, QueryGetGuildWarPointGuildTotal
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if( pDBCon )
|
|||
|
|
{
|
|||
|
|
pDBCon->QueryGetGuildWarPointPartTotal(cThreadID, g_Config.nWorldSetID, 0, 'A', 0);
|
|||
|
|
g_Log.Log(LogType::_GUILDWAR,g_Config.nWorldSetID, 0, 0, 0, L"[GUILDWAR] MAVI_GETGUILDWAR_TRIAL_STATS !!\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_SETGUILDWAR_SECRETMISSION: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>̼<EFBFBD>
|
|||
|
|
{
|
|||
|
|
MASetGuildWarSecretMission* pPacket = (MASetGuildWarSecretMission*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
g_pGuildWarManager->SetGuildSecretMission(pPacket);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_FINAL_RESULT :
|
|||
|
|
{
|
|||
|
|
MAVISetGuildWarFinalResult* pPacket = (MAVISetGuildWarFinalResult*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
g_pGuildWarManager->SetGuildTournamentResult(pPacket);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_FINAL_RESULT_DB :
|
|||
|
|
{
|
|||
|
|
MAVISetGuildWarFinalDB* pPacket = (MAVISetGuildWarFinalDB*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if( pDBCon )
|
|||
|
|
{
|
|||
|
|
pDBCon->QueryAddGuildWarFinalResults(cThreadID, g_Config.nWorldSetID, pPacket->GuildDBID,
|
|||
|
|
pPacket->wScheduleID, pPacket->cMatchSequence, pPacket->cMatchTypeCode, pPacket->bWin ? 1:2 );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_PREWIN_GUILD :
|
|||
|
|
{
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetGuildWarPreWinGuild(rand()%THREADMAX, g_Config.nWorldSetID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_PREWIN_GUILD :
|
|||
|
|
{
|
|||
|
|
MAGuildWarPreWinGuild* pPacket = (MAGuildWarPreWinGuild*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
{
|
|||
|
|
if( pPacket->bPreWin )
|
|||
|
|
g_pGuildWarManager->SetPreWinGuildUID(pPacket->GuildUID);
|
|||
|
|
else
|
|||
|
|
g_pGuildWarManager->ResetPreWinGuildUID();
|
|||
|
|
|
|||
|
|
g_Log.Log(LogType::_GUILDWAR, L"[GUILDWAR] VillageServer Set PreWinGuildReward! GuildID:%d\n", pPacket->GuildUID.nDBID);
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
|
|||
|
|
pGuildVillage->SendGuildWarPreWinGuild(pPacket->bPreWin);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_PREWIN_SKILLCOOLTIME :
|
|||
|
|
{
|
|||
|
|
MAGuildWarPreWinSkillCoolTime* pPacket = (MAGuildWarPreWinSkillCoolTime*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
g_pGuildWarManager->SetPreWinSKillCoolTime(pPacket->dwSkillCoolTime);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_EVENT_TIME :
|
|||
|
|
{
|
|||
|
|
MASetGuildWarEventTime* pPacket = (MASetGuildWarEventTime*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
{
|
|||
|
|
g_pGuildWarManager->SetGuildWarSechdule(pPacket);
|
|||
|
|
g_pUserSessionManager->SendGuildWarEventTime();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_TOURNAMENTWIN :
|
|||
|
|
{
|
|||
|
|
MASetGuildWarTournamentWin* pPacket = (MASetGuildWarTournamentWin*)pData;
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
// <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ű<C5B1><E2B6A7><EFBFBD><EFBFBD> Copy<70><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
SCGuildWarTournamentWin GuildWarTournamentWin;
|
|||
|
|
memset(&GuildWarTournamentWin, 0, sizeof(GuildWarTournamentWin));
|
|||
|
|
GuildWarTournamentWin.cMatchTypeCode = pPacket->cMatchTypeCode;
|
|||
|
|
memcpy(GuildWarTournamentWin.wszGuildName, pPacket->wszGuildName, sizeof(GuildWarTournamentWin.wszGuildName));
|
|||
|
|
g_pUserSessionManager->SendGuildWarTournamentWin(&GuildWarTournamentWin);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_ADD_DBJOBSYSTEM_RESERVE :
|
|||
|
|
{
|
|||
|
|
MAVIAddDBJobSystemReserve* pPacket = (MAVIAddDBJobSystemReserve*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if( pDBCon )
|
|||
|
|
pDBCon->QueryAddDBJobSystemReserve(cThreadID, g_Config.nWorldSetID, pPacket->cJobType);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GET_DBJOBSYSTEM_RESERVE :
|
|||
|
|
{
|
|||
|
|
MAVIGetDBJobSystemReserve* pPacket = (MAVIGetDBJobSystemReserve*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if( pDBCon )
|
|||
|
|
pDBCon->QueryGetDBJobSystemReserve(cThreadID, g_Config.nWorldSetID, pPacket->nJobSeq);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_POINT_RUNNING :
|
|||
|
|
{
|
|||
|
|
if( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if( pDBCon )
|
|||
|
|
pDBCon->QueryGetGuildWarPointRunningTotal(cThreadID, g_Config.nWorldSetID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_SETGUILDWAR_POINT_RUNNING :
|
|||
|
|
{
|
|||
|
|
MASetGuildWarPointRunningTotal* pPacket = (MASetGuildWarPointRunningTotal*)pData;
|
|||
|
|
if( g_pGuildWarManager )
|
|||
|
|
{
|
|||
|
|
g_pGuildWarManager->SetGuildWarTrialRankingInfo(pPacket);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GUILDWAR_REFRESH_GUILD_POINT :
|
|||
|
|
{
|
|||
|
|
MAGuildWarRefreshGuildPoint* pPacket = (MAGuildWarRefreshGuildPoint*)pData;
|
|||
|
|
MAChangeGuildInfo GuildInfo;
|
|||
|
|
memset(&GuildInfo, 0, sizeof(MAChangeGuildInfo));
|
|||
|
|
|
|||
|
|
for (int i=0; i<GUILDWAR_FINALS_TEAM_MAX; ++i )
|
|||
|
|
{
|
|||
|
|
if( !pPacket->GuildUID[i].IsSet() )
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>忡 <20><><EFBFBD><EFBFBD>
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID[i]);
|
|||
|
|
if (!pGuild)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
if( g_pGuildManager )
|
|||
|
|
{
|
|||
|
|
GuildInfo.Int1 = pPacket->nGuildPoint[i];
|
|||
|
|
GuildInfo.Int2 = pPacket->nGuildPoint[i];
|
|||
|
|
g_pGuildManager->MaChangePoint(pGuild, &GuildInfo);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GETGUILDWAR_PREWIN_REWARD :
|
|||
|
|
{
|
|||
|
|
MAVIGetGuildWarPrewinReward* pPacket = (MAVIGetGuildWarPrewinReward*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if( pDBCon )
|
|||
|
|
pDBCon->QueryGetGuildWarRewarForGuild(cThreadID, g_Config.nWorldSetID, pPacket->wScheduleID, pPacket->nGuildDBID, 'M');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GUILDWAR_RESET_BUYED_ITEM_COUNT:
|
|||
|
|
{
|
|||
|
|
g_pUserSessionManager->ResetGuildWarBuyedItems();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_GUILDRECRUIT_MEMBER:
|
|||
|
|
{
|
|||
|
|
MAGuildRecruitMember* pPacket = (MAGuildRecruitMember*)pData;
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if( pPacket->cAcceptType == GuildRecruitSystem::AcceptType::AcceptOn )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
pUserObj->SetGuildSelfView(TGuildSelfView(pPacket->GuildView, GUILDROLE_TYPE_JUNIOR));
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD> üũ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
{
|
|||
|
|
if (pUserObj->GetDBConnection() && pUserObj->GetDBConnection()->GetActive())
|
|||
|
|
{
|
|||
|
|
pUserObj->GetDBConnection()->QueryGetGuildInfo(pUserObj, pPacket->GuildUID.nDBID, true);
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȿ<><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pUserObj->GetDBConnection()->QueryGetGuildRewardItem( pUserObj->GetDBThreadID(), pUserObj->GetWorldSetID(), pUserObj->GetAccountDBID(), pPacket->GuildUID.nDBID );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
TGuildRewardItem *RewardItemInfo;
|
|||
|
|
RewardItemInfo = pGuild->GetGuildRewardItem();
|
|||
|
|
pUserObj->SendGuildRewardItem(RewardItemInfo);
|
|||
|
|
pUserObj->GetEventSystem()->OnEvent( EventSystem::OnGuildJoin );
|
|||
|
|
}
|
|||
|
|
pUserObj->SendGuildRecruitMemberResult( ERROR_NONE, pPacket->GuildView.wszGuildName, (GuildRecruitSystem::AcceptType::eType)pPacket->cAcceptType );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GUILD_ADD_REWARDITEM:
|
|||
|
|
{
|
|||
|
|
MAGuildRewardItem* pPacket = (MAGuildRewardItem*)pData;
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
if( g_pGuildManager )
|
|||
|
|
{
|
|||
|
|
TGuildRewardItem RewardItemInfo;
|
|||
|
|
memset( &RewardItemInfo, 0, sizeof(RewardItemInfo) );
|
|||
|
|
pGuild->AddGuildRewardItem(pPacket->nItemID, pPacket->m_tExpireDate, RewardItemInfo);
|
|||
|
|
pGuild->SendAddGuildRewardItem( RewardItemInfo );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_GUILD_EXTEND_GUILDSIZE:
|
|||
|
|
{
|
|||
|
|
MAExtendGuildSize *pPacket = (MAExtendGuildSize*)pData;
|
|||
|
|
|
|||
|
|
const TGuildUID GuildUID = pPacket->GuildUID;
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
pGuild->SetInfo()->wGuildSize = pPacket->nGuildSize;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>ش<EFBFBD>
|
|||
|
|
pGuild->SendExtendGuildSize((short)pPacket->nGuildSize);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_UPDATEGUILDWARE:
|
|||
|
|
{
|
|||
|
|
MAUpdateGuildWare * pPacket = (MAUpdateGuildWare*)pData;
|
|||
|
|
|
|||
|
|
const TGuildUID GuildUID = pPacket->GUildID;
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
|
|||
|
|
if (!pGuild)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
|
|||
|
|
if (FALSE == pGuild->IsEnable()) break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
pGuild->ReqGetGuildWareInfo(true);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
|
|||
|
|
case MAVI_FRIENDADDNOTICE:
|
|||
|
|
{
|
|||
|
|
MAVIFriendAddNotice * pPacket = (MAVIFriendAddNotice*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAddedAccountDBID);
|
|||
|
|
if (pUser)
|
|||
|
|
pUser->SendFriendAddNotice(pPacket->wszAddName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_PRIVATECHAT:
|
|||
|
|
{
|
|||
|
|
MAPrivateChat *pChat = (MAPrivateChat*)pData;
|
|||
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pChat->nAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
//ä<><C3A4> <20>Ҵ<DEBE>
|
|||
|
|
if (pChat->nRet == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
|
if (pUserObj->GetIsolate()->IsIsolateItem(pChat->wszFromCharacterName))
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
// GM<47≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20>ؾ<EFBFBD><D8BE><EFBFBD>
|
|||
|
|
if ((pUserObj->GetAccountLevel() >= AccountLevel_New) && (pUserObj->GetAccountLevel() <= AccountLevel_QA)){
|
|||
|
|
if (!pUserObj->GetGMCommand()->IsWhisperName(pChat->wszFromCharacterName)){
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pChat->wszChatMsg, pChat->wChatLen);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pUserObj->SendChat(pChat->cType, pChat->wChatLen, pChat->wszFromCharacterName, wszChatMsg, NULL, pChat->nRet);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_CHAT:
|
|||
|
|
{
|
|||
|
|
MAChat *pChat = (MAChat*)pData;
|
|||
|
|
|
|||
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|||
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pChat->wszChatMsg, pChat->wChatLen);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>⼭ äƮ Ÿ<>Կ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ߰ڴپ<DAB4>~
|
|||
|
|
#if defined(PRE_ADD_WORLD_MSG_RED)
|
|||
|
|
if (pChat->cType == CHATTYPE_WORLD || pChat->cType == CHATTYPE_WORLD_POPMSG)
|
|||
|
|
#else // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|||
|
|
if (pChat->cType == CHATTYPE_WORLD)
|
|||
|
|
#endif // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|||
|
|
{
|
|||
|
|
//<2F>پ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ֽŴ<D6BD>.
|
|||
|
|
g_pUserSessionManager->SendChat(static_cast<eChatType>(pChat->cType), pChat->wChatLen, pChat->wszFromCharacterName, wszChatMsg);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pChat->nAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
pUserObj->SendChat(static_cast<eChatType>(pChat->cType), pChat->wChatLen, pChat->wszFromCharacterName, wszChatMsg);
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_ZONECHAT:
|
|||
|
|
{
|
|||
|
|
MAZoneChat * pPacket = (MAZoneChat*)pData;
|
|||
|
|
|
|||
|
|
WCHAR wszChatMsg[CHATLENMAX];
|
|||
|
|
memset(wszChatMsg, 0, sizeof(wszChatMsg));
|
|||
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pPacket->wszChatMsg, pPacket->wChatLen);
|
|||
|
|
|
|||
|
|
g_pUserSessionManager->SendZoneChat(pPacket->nMapIdx, pPacket->wszFromCharacterName, wszChatMsg, pPacket->wChatLen);
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_WORLDSYSTEMMSG:
|
|||
|
|
{
|
|||
|
|
MAWorldSystemMsg *pMsg = (MAWorldSystemMsg*)pData;
|
|||
|
|
g_pUserSessionManager->SendWorldSystemMsg(pMsg->wszFromCharacterName, pMsg->cType, pMsg->nID, pMsg->nValue, pMsg->wszToCharacterName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|||
|
|
case MAVI_PRIVATECHNNELCHAT:
|
|||
|
|
{
|
|||
|
|
MAPrivateChannelChat *pMsg = (MAPrivateChannelChat*)pData;
|
|||
|
|
if(g_pPrivateChatChannelManager)
|
|||
|
|
{
|
|||
|
|
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pMsg->cWorldSetID, pMsg->nChannelID);
|
|||
|
|
if(pPrivateChatChannel)
|
|||
|
|
{
|
|||
|
|
std::list<TPrivateChatChannelMember> MemberList;
|
|||
|
|
MemberList.clear();
|
|||
|
|
pPrivateChatChannel->GetPrivateChannelMember(MemberList);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = NULL;
|
|||
|
|
|
|||
|
|
for(std::list<TPrivateChatChannelMember>::iterator itor = MemberList.begin(); itor != MemberList.end();itor++)
|
|||
|
|
{
|
|||
|
|
pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( itor->nAccountDBID );
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
pSession->SendChat( CHATTYPE_PRIVATECHANNEL, pMsg->wChatLen, pMsg->wszFromCharacterName, pMsg->wszChatMsg );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// PvP
|
|||
|
|
case MAVI_PVP_CREATEROOM:
|
|||
|
|
{
|
|||
|
|
if( !g_pUserSessionManager )
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
MAVIPVP_CREATEROOM* pPacket = reinterpret_cast<MAVIPVP_CREATEROOM*>(pData);
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiCreateAccountDBID );
|
|||
|
|
|
|||
|
|
if( pPacket->nRetCode != ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPCreateRoom( pPacket->nRetCode );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// ToDo:MaterServer<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PvP<76><50><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF>µ<EFBFBD> Village<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><EFBFBD><DFBB>ϸ<EFBFBD> <20>ȵǹǷ<C7B9> <20>ش<EFBFBD> Connection <20><><EFBFBD><EFBFBD><EFBFBD>൵ <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>)
|
|||
|
|
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|||
|
|
if (pPacket->sCSPVP_CREATEROOM.cRoomType >= PvPCommon::RoomType::max)
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|||
|
|
CDNPvPRoomManager::GetInstance().CreatePvPRoom( pUserObj, pPacket );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_PVP_MODIFYROOM:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_MODIFYROOM* pPacket = reinterpret_cast<MAVIPVP_MODIFYROOM*>(pData);
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom == NULL )
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
if( pPacket->nRetCode == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
pPvPRoom->ModifyRoom( pPacket );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// Event<6E><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
if( pPvPRoom->GetEventRoomIndex() > 0)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPModifyRoom( pPacket->nRetCode );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_PVP_DESTROYROOM:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_DESTROYROOM* pPacket = reinterpret_cast<MAVIPVP_DESTROYROOM*>(pData);
|
|||
|
|
if( CDNPvPRoomManager::GetInstance().bDestroyPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex ) )
|
|||
|
|
{
|
|||
|
|
#if 0
|
|||
|
|
if( g_pFieldManager )
|
|||
|
|
{
|
|||
|
|
WCHAR wszBuffer[MAX_PATH];
|
|||
|
|
wsprintf( wszBuffer, L"%d<><64> PvP<76><50><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.", pPacket->uiPvPIndex );
|
|||
|
|
g_pFieldManager->SendDebugChat(pPacket->cVillageChannelID, wszBuffer);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PVP_LEAVEROOM:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_LEAVEROOM* pPacket = reinterpret_cast<MAVIPVP_LEAVEROOM*>(pData);
|
|||
|
|
if( pPacket->nRetCode == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
pPvPRoom->LeaveUser( pPacket->uiLeaveAccountDBID, pPacket->eType );
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiLeaveAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPLeaveRoom( pPacket->nRetCode, pPacket->eType, 0 );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PVP_ROOMLIST:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_ROOMLIST* pPacket = reinterpret_cast<MAVIPVP_ROOMLIST*>(pData);
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
if(pUserObj && pUserObj->IsDWCCharacter() && pPacket->sCSPVP_ROOMLIST.cChannelType == 0 ) //ó<><C3B3> <20>κ<EFBFBD> <20><><EFBFBD>ӽ<EFBFBD> <20><><EFBFBD>۵Ǵ<DBB5> <20><>Ŷ
|
|||
|
|
pPacket->sCSPVP_ROOMLIST.cChannelType = PvPCommon::RoomType::dwc;
|
|||
|
|
#endif
|
|||
|
|
if( pUserObj )
|
|||
|
|
CDNPvPRoomManager::GetInstance().SendPvPRoomList( pUserObj, pPacket );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
|
|||
|
|
case MAVI_PVP_ROOMLIST_RELAY :
|
|||
|
|
{
|
|||
|
|
MAVIPVP_ROOMLIST_RELAY* pPacket = reinterpret_cast<MAVIPVP_ROOMLIST_RELAY*>(pData);
|
|||
|
|
CDNPvPRoomManager::GetInstance().SendPvPRoomList(NULL, &pPacket->sRoomList, pPacket->cVillageID, pPacket->uiAccountDBID);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PVP_ROOMLIST_RELAY_ACK :
|
|||
|
|
{
|
|||
|
|
PVP_ROOMLIST_RELAY* pPacket = reinterpret_cast<PVP_ROOMLIST_RELAY*>(pData);
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPRoomList(&pPacket->sSCPVP_ROOMLIST, pPacket->nSize);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|||
|
|
case MAVI_PVP_CHANGECHANNEL:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_CHANGECHANNEL * pPacket = (MAVIPVP_CHANGECHANNEL*)pData;
|
|||
|
|
if (g_pUserSessionManager)
|
|||
|
|
{
|
|||
|
|
CDNUserSession * pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (pSession)
|
|||
|
|
{
|
|||
|
|
if (pPacket->nRetCode == ERROR_NONE)
|
|||
|
|
pSession->SetPvPChannelType(pPacket->cType);
|
|||
|
|
pSession->SendPvPChangeChannelResult(pPacket->cType, pPacket->nRetCode);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|||
|
|
|
|||
|
|
case MAVI_PVP_WAITUSERLIST:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_WAITUSERLIST* pPacket = reinterpret_cast<MAVIPVP_WAITUSERLIST*>(pData);
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserSession )
|
|||
|
|
CDNPvPRoomManager::GetInstance().SendPvPWaitUserList( pUserSession, pPacket );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PVP_JOINROOM:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_JOINROOM* pPacket = reinterpret_cast<MAVIPVP_JOINROOM*>(pData);
|
|||
|
|
if( pPacket->nRetCode == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
{
|
|||
|
|
if( pUserObj->GetField() && !pUserObj->GetField()->bIsPvPLobby()) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>渮<EFBFBD><E6B8AE>Ʈ <20><><EFBFBD><EFBFBD> <20>鰣<EFBFBD><E9B0A3>..
|
|||
|
|
{
|
|||
|
|
const sChannelInfo* pChannelInfo = g_pMasterConnection->GetChannelInfoFromAttr( GlobalEnum::CHANNEL_ATT_PVPLOBBY );
|
|||
|
|
if( pChannelInfo )
|
|||
|
|
pUserObj->CmdSelectChannel( pChannelInfo->nChannelID, true );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20>̰<EFBFBD> <20>ƴϸ<C6B4> <20>κ<EFBFBD>üũ<C3BC><C5A9> <20><><EFBFBD>⼭ <20>Ѵ<EFBFBD>.
|
|||
|
|
if (pUserObj->_CheckPvPGameModeInventory(pPacket->uiPvPIndex) == false)
|
|||
|
|
{
|
|||
|
|
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
|||
|
|
g_pMasterConnection->SendPvPLeaveRoom( pUserObj->GetAccountDBID() );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
{
|
|||
|
|
int nRetCode = pPvPRoom->CheckGambleRoomJoin(pUserObj);
|
|||
|
|
if( nRetCode != ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
pUserObj->SendPvPJoinRoom( nRetCode );
|
|||
|
|
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
|||
|
|
g_pMasterConnection->SendPvPLeaveRoom( pUserObj->GetAccountDBID() );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif //
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|||
|
|
if( pPacket->uiPvPIndex > PvPCommon::Common::MaxRoomCount && pUserObj )
|
|||
|
|
{
|
|||
|
|
TWorldPvPRoomDBData* pWorldPvPRoomData = CDNPvPRoomManager::GetInstance().GetWorldPvPRoom( pPacket->uiPvPIndex );
|
|||
|
|
int nWorldPvPRoomChannelID = CDNPvPRoomManager::GetInstance().GetWorldPvPRoomChannelID();
|
|||
|
|
if( pWorldPvPRoomData )
|
|||
|
|
{
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( nWorldPvPRoomChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( g_pMasterConnection && pPvPRoom )
|
|||
|
|
{
|
|||
|
|
if( pUserObj->GetField() && !pUserObj->GetField()->bIsPvPLobby())
|
|||
|
|
{
|
|||
|
|
const sChannelInfo* pChannelInfo = g_pMasterConnection->GetChannelInfoFromAttr( GlobalEnum::CHANNEL_ATT_PVPLOBBY );
|
|||
|
|
if( pChannelInfo )
|
|||
|
|
pUserObj->CmdSelectChannel( pChannelInfo->nChannelID, true );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
pUserObj->SetPvPIndex(pPacket->uiPvPIndex);
|
|||
|
|
pUserObj->SendPvPJoinRoom(ERROR_NONE, pPvPRoom);
|
|||
|
|
g_pMasterConnection->SendWorldPvPJoinRoom( pUserObj->GetAccountDBID(), pUserObj->GetCharacterDBID(), pPacket->uiPvPIndex, pWorldPvPRoomData, pPacket->unPvPTeam, true );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
pPvPRoom->JoinUser( pPacket );
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
{
|
|||
|
|
pUserObj->SendPvPJoinRoom( pPacket->nRetCode );
|
|||
|
|
pUserObj->SetPvPRoomListRefreshTime( 0 ); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
case MAVI_PVP_ROOMSTATE:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_ROOMSTATE* pPacket = reinterpret_cast<MAVIPVP_ROOMSTATE*>(pData);
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
pPvPRoom->SetRoomState( pPacket->uiRoomState );
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_PVP_CHANGETEAM:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_CHANGETEAM* pPacket = reinterpret_cast<MAVIPVP_CHANGETEAM*>(pData);
|
|||
|
|
if( pPacket->nRetCode == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
pPvPRoom->ChangeTeam( pPacket );
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->sVIMAPVP_CHANGETEAM.uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPChangeTeam( pPacket->nRetCode );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_PVP_CHANGEUSERSTATE:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_CHANGEUSERSTATE* pPacket = reinterpret_cast<MAVIPVP_CHANGEUSERSTATE*>(pData);
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
pPvPRoom->ChangeUserState( pPacket );
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_PVP_START:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_START* pPacket = reinterpret_cast<MAVIPVP_START*>(pData);
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
{
|
|||
|
|
pPvPRoom->StartPvP( pPacket );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPStart( pPacket->nRetCode );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PVP_STARTMSG:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_STARTMSG* pPacket = reinterpret_cast<MAVIPVP_STARTMSG*>(pData);
|
|||
|
|
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pPacket->unVillageChannelID, pPacket->uiPvPIndex );
|
|||
|
|
if( pPvPRoom )
|
|||
|
|
pPvPRoom->StartPvPMsg( pPacket );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PVP_ROOMINFO:
|
|||
|
|
{
|
|||
|
|
MAVIPVP_ROOMINFO* pPacket = reinterpret_cast<MAVIPVP_ROOMINFO*>(pData);
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pUserObj )
|
|||
|
|
pUserObj->SendPvPRoomInfo( pPacket );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_PVP_MEMBERINDEX:
|
|||
|
|
{
|
|||
|
|
MAVIPvPMemberIndex * pPacket = (MAVIPvPMemberIndex*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession * pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (pSession)
|
|||
|
|
{
|
|||
|
|
if (pPacket->nRetCode == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
CDNPvPRoom * pPvP = CDNPvPRoomManager::GetInstance().GetPvPRoom(pSession->GetChannelID(), pSession->GetPvPIndex());
|
|||
|
|
if (pPvP)
|
|||
|
|
{
|
|||
|
|
pPvP->SendMemberIndex(pPacket->nTeam, pPacket->cCount, pPacket->Index, pPacket->nRetCode);
|
|||
|
|
}
|
|||
|
|
else _DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pSession->SendPvPMemberIndex(pPacket->nTeam, 0, NULL, pPacket->nRetCode);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else _DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|||
|
|
case MAVI_PVP_SWAP_TOURNAMENT_INDEX :
|
|||
|
|
{
|
|||
|
|
MAVIPVPSwapTournamentIndex* pPacket = (MAVIPVPSwapTournamentIndex*)pData;
|
|||
|
|
CDNUserSession * pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (pSession)
|
|||
|
|
{
|
|||
|
|
if (pPacket->nRetCode == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
CDNPvPRoom * pPvP = CDNPvPRoomManager::GetInstance().GetPvPRoom(pSession->GetChannelID(), pSession->GetPvPIndex());
|
|||
|
|
if (pPvP)
|
|||
|
|
pPvP->SendPvPSwapTounamentIndex(pPacket->cSourceIndex, pPacket->cDestIndex);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
pSession->SendPvPSwapTournamentIndex(pPacket->nRetCode, pPacket->cSourceIndex, pPacket->cDestIndex);
|
|||
|
|
}
|
|||
|
|
else _DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PVP_SHUFFLE_TOURNAMENT_INDEX :
|
|||
|
|
{
|
|||
|
|
MAVIPVPShuffleTournamentIndex* pPacket = (MAVIPVPShuffleTournamentIndex*)pData;
|
|||
|
|
CDNPvPRoom * pPvP = CDNPvPRoomManager::GetInstance().GetPvPRoom(pPacket->unVillageChannelID, pPacket->uiPvPIndex);
|
|||
|
|
if( pPvP )
|
|||
|
|
pPvP->SetPvPShuffleIndex(pPacket);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
case MAVI_MASTERSYSTEM_CHECK_MASTERAPPLICATION:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVICheckMasterApplication* pPacket = reinterpret_cast<MasterSystem::MAVICheckMasterApplication*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiPupilAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
pSession->SendMasterSystemMasterApplication( pPacket->nRet );
|
|||
|
|
|
|||
|
|
// PupilList <20><>û
|
|||
|
|
if( pPacket->nRet == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
MasterSystem::CCacheRepository::GetInstance().GetPupilList( pSession, pPacket->biMasterCharacterDBID, true );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_SYNC_SIMPLEINFO:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVISyncSimpleInfo* pPacket = reinterpret_cast<MasterSystem::MAVISyncSimpleInfo*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
if( pSession->GetCharacterDBID() == pPacket->biCharacterDBID )
|
|||
|
|
{
|
|||
|
|
if( pSession->CheckDBConnection() == false )
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
pSession->GetDBConnection()->QueryGetMasterSystemSimpleInfo( pSession->GetDBThreadID(), pSession, true, pPacket->EventCode );
|
|||
|
|
|
|||
|
|
if( pSession->GetPartyID() > 0 )
|
|||
|
|
{
|
|||
|
|
CDNParty* pParty = g_pPartyManager->GetParty( pSession->GetPartyID() );
|
|||
|
|
if( pParty )
|
|||
|
|
pParty->UpdateMasterSystemCountInfo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_SYNC_JOIN:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVISyncJoin* pPacket = reinterpret_cast<MasterSystem::MAVISyncJoin*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
if( pSession->GetCharacterDBID() == pPacket->biCharacterDBID )
|
|||
|
|
pSession->SendMasterSystemJoin( ERROR_NONE, true, pPacket->bIsAddPupil, false );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_SYNC_LEAVE:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVISyncLeave* pPacket = reinterpret_cast<MasterSystem::MAVISyncLeave*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
if( pSession->GetCharacterDBID() == pPacket->biCharacterDBID )
|
|||
|
|
pSession->SendMasterSystemLeave( ERROR_NONE, pPacket->bIsDelPupil );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_SYNC_GRADUATE:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVISyncGraduate* pPacket = reinterpret_cast<MasterSystem::MAVISyncGraduate*>(pData);
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
pSession->SendMasterSystemGraduate( pPacket->wszCharName );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_SYNC_CONNECT:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVISyncConnect* pPacket = reinterpret_cast<MasterSystem::MAVISyncConnect*>(pData);
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
pSession->SendMasterSystemConnect( pPacket->bIsConnect, pPacket->wszCharName );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_CHECK_LEAVE:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVICheckLeave* pPacket = reinterpret_cast<MasterSystem::MAVICheckLeave*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
if( pPacket->iRet != ERROR_NONE && pPacket->iRet != ERROR_MASTERSYSTEM_LEAVE_DESTUSER_OFFLINE )
|
|||
|
|
{
|
|||
|
|
pSession->SendMasterSystemLeave( pPacket->iRet );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( pSession->CheckDBConnection() == false )
|
|||
|
|
{
|
|||
|
|
pSession->SendMasterSystemLeave( ERROR_GENERIC_DBCON_NOT_FOUND );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
INT64 biMasterCharacterDBID = (pPacket->bIsMaster) ? pSession->GetCharacterDBID() : pPacket->biDestCharacterDBID;
|
|||
|
|
INT64 biPupilCharacterDBID = (pPacket->bIsMaster) ? pPacket->biDestCharacterDBID : pSession->GetCharacterDBID();
|
|||
|
|
DBDNWorldDef::TransactorCode::eCode Code = (pPacket->bIsMaster) ? DBDNWorldDef::TransactorCode::Master : DBDNWorldDef::TransactorCode::Pupil;
|
|||
|
|
|
|||
|
|
int iPenaltyDay = 0;
|
|||
|
|
int iPenaltyRespectPoint = 0;
|
|||
|
|
|
|||
|
|
if( Code == DBDNWorldDef::TransactorCode::Master )
|
|||
|
|
{
|
|||
|
|
const TPupilInfo* pPupilInfo = MasterSystem::CCacheRepository::GetInstance().GetPupilInfo( biMasterCharacterDBID, biPupilCharacterDBID );
|
|||
|
|
if( pPupilInfo == NULL )
|
|||
|
|
{
|
|||
|
|
pSession->SendMasterSystemLeave( ERROR_MASTERSYSTEM_LEAVE_FAILED );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if( Code == DBDNWorldDef::TransactorCode::Pupil )
|
|||
|
|
{
|
|||
|
|
iPenaltyDay = MasterSystem::Penalty::PupilLeavePenaltyDay;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( _FINAL_BUILD )
|
|||
|
|
pSession->GetDBConnection()->QueryLeaveMasterSystem( pSession, biMasterCharacterDBID, biPupilCharacterDBID, Code, iPenaltyDay, iPenaltyRespectPoint );
|
|||
|
|
#else
|
|||
|
|
pSession->GetDBConnection()->QueryLeaveMasterSystem( pSession, biMasterCharacterDBID, biPupilCharacterDBID, Code, iPenaltyDay, iPenaltyRespectPoint, pSession->m_bIsMasterSystemSkipDate );
|
|||
|
|
#endif // #if defined( _FINAL_BUILD )
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_RECALL_MASTER:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVIRecallMaster* pPacket = reinterpret_cast<MasterSystem::MAVIRecallMaster*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
if( pPacket->iRet == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
if( pSession->m_eUserState != STATE_NONE || pSession->GetPartyID() > 0 || !pSession->IsNoneWindowState() )
|
|||
|
|
{
|
|||
|
|
SendMasterSystemBreakInto( ERROR_MASTERSYSTEM_RECALL_CANTSTATUS, pSession->GetAccountDBID(), pPacket->wszCharName, pSession->GetMasterSystemData() );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if( pPacket->bIsConfirm ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD>
|
|||
|
|
pSession->SetWindowState(WINDOW_ISACCEPT);
|
|||
|
|
}
|
|||
|
|
pSession->SendMasterSystemRecallMaster( pPacket->iRet, pPacket->wszCharName, pPacket->bIsConfirm );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_JOIN_CONFIRM:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVIJoinConfirm* pPacket = reinterpret_cast<MasterSystem::MAVIJoinConfirm*>(pData);
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiMasterAccountDBID);
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>..
|
|||
|
|
pSession->SendMasterSystemJoinComfirm(pPacket->cLevel, pPacket->cJob, pPacket->wszPupilCharName);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SendMasterSystemJoinConfirmResult(ERROR_MASTERSYSTEM_CANT_JOINSTATE, false, 0, pPacket->wszPupilCharName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_MASTERSYSTEM_JOIN_CONFIRM_RESULT:
|
|||
|
|
{
|
|||
|
|
MasterSystem::MAVIJoinResult* pPacket = reinterpret_cast<MasterSystem::MAVIJoinResult*>(pData);
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByName(pPacket->wszPupilCharName);
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
if( pPacket->iRet == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
if( pPacket->bIsAccept )
|
|||
|
|
{
|
|||
|
|
#if defined( _FINAL_BUILD )
|
|||
|
|
pSession->GetDBConnection()->QueryJoinMasterSystem( pSession, pPacket->biMasterCharacterDBID, pSession->GetCharacterDBID(), false, DBDNWorldDef::TransactorCode::Pupil );
|
|||
|
|
#else
|
|||
|
|
pSession->GetDBConnection()->QueryJoinMasterSystem( pSession, pPacket->biMasterCharacterDBID, pSession->GetCharacterDBID(), false, DBDNWorldDef::TransactorCode::Pupil, pSession->m_bIsMasterSystemSkipDate );
|
|||
|
|
#endif // #if defined( _FINAL_BUILD )
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
pSession->SendMasterSystemJoin(ERROR_MASTERSYSTEM_JOIN_DENY, false, false, true);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
pSession->SendMasterSystemJoin(pPacket->iRet, false, false, true);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|||
|
|
case MAVI_SYNC_SYSTEMMAIL:
|
|||
|
|
{
|
|||
|
|
MAVISyncSystemMail* pPacket = reinterpret_cast<MAVISyncSystemMail*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
pSession->SendNotifyMail( pPacket->iTotalMailCount, pPacket->iNotReadMailCount, pPacket->i7DaysLeftMailCount, true );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|||
|
|
|
|||
|
|
case MAVI_RESRECALL:
|
|||
|
|
{
|
|||
|
|
MAVIResRecall* pPacket = reinterpret_cast<MAVIResRecall*>(pData);
|
|||
|
|
if( _CmdRecall( pPacket ) == false )
|
|||
|
|
{
|
|||
|
|
//std::wstring wString = boost::io::str( boost::wformat( L"<22><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>." ) );
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4413, pPacket->cRecallerSelectedLang) ) );
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4413) ) );
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
SendChat( CHATTYPE_GM, pPacket->uiAccountDBID, wString.c_str(), static_cast<short>(wString.size()), -1 );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_VILLAGETRACE:
|
|||
|
|
{
|
|||
|
|
MAVIVillageTrace* pPacket = reinterpret_cast<MAVIVillageTrace*>(pData);
|
|||
|
|
if( _CmdVillageTrace( pPacket ) == false )
|
|||
|
|
{
|
|||
|
|
if( pPacket->bIsGMCall )
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4427, pPacket->cSelectedLang) ) );
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4427) ) );
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
SendChat( CHATTYPE_GM, pPacket->uiAccountDBID, wString.c_str(), static_cast<short>(wString.size()), -1 );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case MAVI_VOICECHANNELID:
|
|||
|
|
{
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
MAVIVoiceChannelID * pPacket = (MAVIVoiceChannelID*)pData;
|
|||
|
|
|
|||
|
|
switch (pPacket->cType)
|
|||
|
|
{
|
|||
|
|
case _VOICECHANNEL_REQTYPE_PARTY:
|
|||
|
|
{
|
|||
|
|
CDNParty * pParty = g_pPartyManager->GetParty(pPacket->InstanceID);
|
|||
|
|
if (pParty)
|
|||
|
|
{
|
|||
|
|
if (pParty->CreateVoiceChannel(pPacket->nVoiceChannelD[0]))
|
|||
|
|
{
|
|||
|
|
//todo
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case _VOICECHANNEL_REQTYPE_PVP:
|
|||
|
|
{
|
|||
|
|
/*CDNPvPRoom * pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom(pPacket->nPvPLobbyChannelID, pPacket->nID);
|
|||
|
|
if (pPvPRoom)
|
|||
|
|
pPvPRoom->CreateVoiceChannel(pPacket->nVoiceChannelD);
|
|||
|
|
else
|
|||
|
|
_DANGER_POINT();*/
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_NOTICE:
|
|||
|
|
{
|
|||
|
|
MANotice * pPacket = (MANotice*)pData;
|
|||
|
|
|
|||
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|||
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pPacket->wszNoticeMsg, pPacket->nLen);
|
|||
|
|
|
|||
|
|
if (pPacket->Info.nChannelID > 0)
|
|||
|
|
pPacket->Info.nMapIdx = GetChannelMapIndex(pPacket->Info.nChannelID);
|
|||
|
|
|
|||
|
|
if (pPacket->Info.nSlideShowSec > 0 && g_pNoticeSystem->AddNotice(&pPacket->Info, wszChatMsg) == false)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
switch (pPacket->Info.nNoticeType)
|
|||
|
|
{
|
|||
|
|
case _NOTICETYPE_WORLD: g_pUserSessionManager->SendNotice(wszChatMsg, pPacket->nLen, pPacket->Info.nSlideShowSec); break;
|
|||
|
|
case _NOTICETYPE_EACHSERVER:
|
|||
|
|
{
|
|||
|
|
if (g_pServiceConnection && pPacket->Info.nManagedID != 0)
|
|||
|
|
if (pPacket->Info.nManagedID == g_pServiceConnection->GetManagedID())
|
|||
|
|
g_pUserSessionManager->SendNotice(wszChatMsg, pPacket->nLen, pPacket->Info.nSlideShowSec);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case _NOTICETYPE_CHANNEL: g_pFieldManager->SendChannelNotice(pPacket->Info.nChannelID, pPacket->nLen, pPacket->wszNoticeMsg, pPacket->Info.nSlideShowSec); break;
|
|||
|
|
case _NOTICETYPE_ZONE: g_pFieldManager->SendFieldNotice(pPacket->Info.nMapIdx, pPacket->nLen, pPacket->wszNoticeMsg, pPacket->Info.nSlideShowSec); break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_CANCELNOTICE:
|
|||
|
|
{
|
|||
|
|
if (g_pUserSessionManager)
|
|||
|
|
g_pUserSessionManager->SendNoticeCancel();
|
|||
|
|
else _DANGER_POINT();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
/*case MAVI_ZONENOTICE:
|
|||
|
|
{
|
|||
|
|
MAZoneNotice * pPacket = (MAZoneNotice*)pData;
|
|||
|
|
|
|||
|
|
WCHAR wszChatMsg[CHATLENMAX] = { 0, };
|
|||
|
|
_wcscpy(wszChatMsg, CHATLENMAX, pPacket->wszNoticeMsg, pPacket->nLen);
|
|||
|
|
|
|||
|
|
g_pFieldManager->SendZoneNotice(pPacket->nMapIndex, pPacket->nLen, pPacket->wszNoticeMsg);
|
|||
|
|
}
|
|||
|
|
break;*/
|
|||
|
|
|
|||
|
|
case MAVI_NOTIFYMAIL:
|
|||
|
|
{
|
|||
|
|
MANotifyMail *pMail = (MANotifyMail*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pMail->nToAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if (pMail->biToCharacterDBID == pUserObj->GetCharacterDBID())
|
|||
|
|
pUserObj->SendNotifyMail(pMail->wTotalMailCount, pMail->wNotReadMailCount, pMail->w7DaysLeftCount, pMail->bNewMail); // <20><><EFBFBD>ϿԴٰ<D4B4> <20>뺸
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_NOTIFYMARKET:
|
|||
|
|
{
|
|||
|
|
MANotifyMarket *pMarket = (MANotifyMarket*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pMarket->nSellerAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if (pMarket->biSellerCharacterDBID == pUserObj->GetCharacterDBID())
|
|||
|
|
pUserObj->SendNotifyMarket(pMarket->nItemID, pMarket->wCalculationCount);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_NOTIFYGIFT:
|
|||
|
|
{
|
|||
|
|
MANotifyGift *pGift = (MANotifyGift*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pGift->nToAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
if (pGift->biToCharacterDBID == pUserObj->GetCharacterDBID())
|
|||
|
|
pUserObj->SendCashshopNotifyGift(pGift->bNew, pGift->nGiftCount); // <20><><EFBFBD><EFBFBD><EFBFBD>Դٰ<D4B4> <20>뺸
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_RESTRAINT:
|
|||
|
|
{
|
|||
|
|
MARestraint * pPacket = (MARestraint*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUserObj = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (!pUserObj) return ERROR_NONE;
|
|||
|
|
|
|||
|
|
pUserObj->GetDBConnection()->QueryGetRestraint(pUserObj);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_PCBANGRESULT:
|
|||
|
|
{
|
|||
|
|
MAPCBangResult *pResult = (MAPCBangResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pResult->nAccountDBID);
|
|||
|
|
if( !pUser ) break;
|
|||
|
|
|
|||
|
|
pUser->PCBangResult(pResult);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_UPDATECHANNELSHOWINFO:
|
|||
|
|
{
|
|||
|
|
MAVIUpdateChannelShowInfo* pPacket = reinterpret_cast<MAVIUpdateChannelShowInfo*>(pData);
|
|||
|
|
|
|||
|
|
for( UINT i=0 ; i<m_vChannelList.size() ; ++i )
|
|||
|
|
{
|
|||
|
|
if( m_vChannelList[i].second.nChannelID == pPacket->unChannelID )
|
|||
|
|
{
|
|||
|
|
m_vChannelList[i].second.bShow = pPacket->bShow;
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_UPPDATE_WORLDEVENTCOUNTER:
|
|||
|
|
{
|
|||
|
|
MAUpdateWorldEventCounter* pPacket = reinterpret_cast<MAUpdateWorldEventCounter*>(pData);
|
|||
|
|
|
|||
|
|
if (g_pPeriodQuestSystem)
|
|||
|
|
g_pPeriodQuestSystem->UpdateWorldEvent(pPacket->cWorldSetID, pPacket->nScheduleID, pPacket->nCount);
|
|||
|
|
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_FARMINFOUPDATE:
|
|||
|
|
{
|
|||
|
|
MAVIFarmInfoUpdate * pPacket = (MAVIFarmInfoUpdate*)pData;
|
|||
|
|
g_pFarm->UpdateFarmInfo(pPacket->FarmInfo, pPacket->cFarmCount);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_FARM_SYNC:
|
|||
|
|
{
|
|||
|
|
MAVIFarmSync* pPacket = reinterpret_cast<MAVIFarmSync*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession && pSession->CheckDBConnection() )
|
|||
|
|
{
|
|||
|
|
pSession->GetDBConnection()->QueryGetCountHarvestDepotItem( pSession );
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
case MAVI_CHANGE_CHARACTERNAME:
|
|||
|
|
{
|
|||
|
|
MAChangeCharacterName *pPacket = (MAChangeCharacterName*)pData;
|
|||
|
|
|
|||
|
|
if (g_pUserSessionManager)
|
|||
|
|
g_pUserSessionManager->SwapUserKeyName(pPacket->wszOriginName, pPacket->wszCharacterName);
|
|||
|
|
|
|||
|
|
CDNGuildBase* pGuild = g_pGuildManager->At (pPacket->GuildUID);
|
|||
|
|
#if !defined( PRE_ADD_NODELETEGUILD )
|
|||
|
|
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
|
|||
|
|
#endif
|
|||
|
|
if (pGuild)
|
|||
|
|
pGuild->UpdateMemberName (pPacket->nCharacterDBID, pPacket->wszCharacterName);
|
|||
|
|
|
|||
|
|
#if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
CDNUserSession* pBFSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiBFAccountDBID );
|
|||
|
|
if (pBFSession)
|
|||
|
|
pBFSession->GetBestFriend()->ChangeName(pPacket->wszCharacterName);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_LADDERSYSTEM_DELUSER:
|
|||
|
|
{
|
|||
|
|
LadderSystem::MAVIDelUser* pPacket = reinterpret_cast<LadderSystem::MAVIDelUser*>(pData);
|
|||
|
|
LadderSystem::CManager::GetInstance().OnDisconnectUser( pPacket->biCharDBID, pPacket->wszCharName );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_USERTEMPDATA_RESULT:
|
|||
|
|
{
|
|||
|
|
MAVIUserTempDataResult *pResult = (MAVIUserTempDataResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pResult->uiAccountDBID);
|
|||
|
|
if( !pUser ) break;
|
|||
|
|
pUser->SetDungeonClearCount (pResult->nDungeonClearCount);
|
|||
|
|
#if defined(PRE_ADD_REMOTE_QUEST)
|
|||
|
|
pUser->GetQuest()->RefreshRemoteQuest(pResult->nAcceptWaitRemoteQuestCount, pResult->AcceptWaitRemoteQuestList);
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|||
|
|
pUser->SetUserGameQuitRewardType(pResult->eUserGameQuitRewardType);
|
|||
|
|
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_CHECK_LASTDUNGEONINFO:
|
|||
|
|
{
|
|||
|
|
MAVICheckLastDungeonInfo* pPacket= reinterpret_cast<MAVICheckLastDungeonInfo*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession == NULL )
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if defined( _WORK )
|
|||
|
|
std::cout << "MAVI_CHECK_LASTDUNGEONINFO CharDBID=" << pSession->GetCharacterDBID() << " Check=" << (pPacket->bIsCheck ? "true" : "false") << std::endl;
|
|||
|
|
#endif // #if defined( _WORK )
|
|||
|
|
if( pPacket->bIsCheck == true )
|
|||
|
|
{
|
|||
|
|
pSession->SetCheckLastDungeonInfo(true);
|
|||
|
|
pSession->SendCheckLastDungeonInfo( pPacket->wszPartyName );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pSession->ModCommonVariableData( CommonVariable::Type::LastPartyDungeonInfo, 0 );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case MAVI_CONFIRM_LASTDUNGEONINFO:
|
|||
|
|
{
|
|||
|
|
MAVIConfirmLastDungeonInfo* pPacket = reinterpret_cast<MAVIConfirmLastDungeonInfo*>(pData);
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( pSession == NULL )
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
#if defined( _WORK )
|
|||
|
|
std::cout << "MAVI_CONFIRM_LASTDUNGEONINFO CharDBID=" << pSession->GetCharacterDBID() << " Ret=" << pPacket->iRet << std::endl;
|
|||
|
|
#endif // #if defined( _WORK )
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
switch( pPacket->BreakIntoType )
|
|||
|
|
{
|
|||
|
|
case BreakInto::Type::PartyRestore:
|
|||
|
|
{
|
|||
|
|
switch( pPacket->iRet )
|
|||
|
|
{
|
|||
|
|
case ERROR_GENERIC_GAMECON_NOT_FOUND:
|
|||
|
|
case ERROR_CANT_EXSIT_BACKUPPARTYINFO:
|
|||
|
|
{
|
|||
|
|
pSession->ModCommonVariableData( CommonVariable::Type::LastPartyDungeonInfo, 0 );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
pSession->SendConfirmLastDungeonInfo( pPacket->iRet );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case BreakInto::Type::PartyJoin:
|
|||
|
|
{
|
|||
|
|
if( pPacket->iRet != ERROR_NONE )
|
|||
|
|
pSession->SendJoinParty( pPacket->iRet, 0, NULL );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
switch( pPacket->iRet )
|
|||
|
|
{
|
|||
|
|
case ERROR_GENERIC_GAMECON_NOT_FOUND:
|
|||
|
|
case ERROR_CANT_EXSIT_BACKUPPARTYINFO:
|
|||
|
|
{
|
|||
|
|
pSession->ModCommonVariableData CommonVariable::Type::LastPartyDungeonInfo, 0 );
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pSession->SendConfirmLastDungeonInfo( pPacket->iRet );
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
case MAVI_SEARCH_BESTFRIEND:
|
|||
|
|
{
|
|||
|
|
MASearchBestFriend *pPacket = (MASearchBestFriend*)pData;
|
|||
|
|
|
|||
|
|
if (!pPacket->bAck)
|
|||
|
|
{
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByName(pPacket->wszName);
|
|||
|
|
if (pUser)
|
|||
|
|
{
|
|||
|
|
if (pUser->GetBestFriend()->IsRegistered())
|
|||
|
|
{
|
|||
|
|
SendSearchBestFriend(pPacket->nAccountDBID, ERROR_BESTFRIEND_REGISTFAIL_DESTUSER_SITUATION_NOTALLOWED, true, pPacket->wszName);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SendSearchBestFriend(pPacket->nAccountDBID, ERROR_NONE, true, pPacket->wszName, pUser->GetLevel(), pUser->GetStatusData()->cJob);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SendSearchBestFriend(pPacket->nAccountDBID, ERROR_BESTFRIEND_NOTSEARCH, true, pPacket->wszName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (pUser)
|
|||
|
|
pUser->SendSearchBestFriendResult(pPacket->nRet, pPacket->cLevel, pPacket->cJob, pPacket->wszName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_REGIST_BESTFRIEND:
|
|||
|
|
{
|
|||
|
|
MARegistBestFriend *pPacket = (MARegistBestFriend*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByName(pPacket->wszToName);
|
|||
|
|
|
|||
|
|
if (pUser)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> üũ
|
|||
|
|
if (pUser->GetBestFriend()->IsRegistered())
|
|||
|
|
{
|
|||
|
|
SendRegistBestFriendResult(pPacket->nAccountDBID, ERROR_BESTFRIEND_REGISTFAIL_DESTUSER_SITUATION_NOTALLOWED, false, 0, NULL, 0, 0, NULL);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ģ <20><>û
|
|||
|
|
pUser->SendRegistBestFriendReq(ERROR_NONE, pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->wszFromName, pUser->GetAccountDBID(), pUser->GetCharacterDBID(), pUser->GetCharacterName());
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
SendRegistBestFriendResult(pPacket->nAccountDBID, ERROR_BESTFRIEND_NOTEXIST_OPPOSITEUSER, false, 0, NULL, 0, 0, NULL);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_REGIST_BESTFRIEND_RETMSG:
|
|||
|
|
{
|
|||
|
|
MARegistBestFriendResult *pPacket = (MARegistBestFriendResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
if (pPacket->nRet == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
INT64 biRegistSerial = pUser->GetBestFriend()->GetRegistSerial();
|
|||
|
|
const TItem* pRegistItem = pUser->GetItem()->GetCashInventory(biRegistSerial);
|
|||
|
|
if (!pRegistItem)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
TItemData* pItemData = g_pDataManager->GetItemData(pRegistItem->nItemID);
|
|||
|
|
if (!pItemData)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
// <20>³<EFBFBD>: DB ó<><C3B3>
|
|||
|
|
pUser->GetDBConnection()->QueryRegistBestFriend(pUser, pPacket->nToAccountDBID, pPacket->biToCharacterDBID, pPacket->wszToName, biRegistSerial, pRegistItem->nItemID);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (pPacket->bAck)
|
|||
|
|
pUser->SendRegistBestFriendAck(ERROR_BESTFRIEND_REFUESED_REGISTRATION, 0, 0, 0, pPacket->wszToName);
|
|||
|
|
else
|
|||
|
|
pUser->SendRegistBestFriendReq(pPacket->nRet, pUser->GetAccountDBID(), pUser->GetCharacterDBID(), pUser->GetCharacterName(), 0, 0, pPacket->wszToName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_COMPLETE_BESTFRIEND:
|
|||
|
|
{
|
|||
|
|
MACompleteBestFriend *pPacket = (MACompleteBestFriend*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nFromAccountDBID);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
pUser->GetBestFriend()->ExecuteReward(pPacket->nItemID);
|
|||
|
|
pUser->GetDBConnection()->QueryGetBestFriend(pUser->GetDBThreadID(), pUser, true);
|
|||
|
|
pUser->SendCompleteBestFriend(ERROR_NONE, pPacket->wszName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_EDIT_BESTFRIENDMEMO:
|
|||
|
|
{
|
|||
|
|
MAEditBestFriendMemo *pPacket = (MAEditBestFriendMemo*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nToAccountDBID);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
pUser->GetBestFriend()->ChangeMemo(false, pPacket->wszMemo);
|
|||
|
|
pUser->SendEditBestFriendMemo(ERROR_NONE, false, pPacket->wszMemo);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_CANCEL_BESTFRIEND:
|
|||
|
|
{
|
|||
|
|
MACancelBestFriend *pPacket = (MACancelBestFriend*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByName(pPacket->wszToName);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
pUser->GetDBConnection()->QueryGetBestFriend(pUser->GetDBThreadID(), pUser, true);
|
|||
|
|
|
|||
|
|
pUser->SendCancelBestFriend(ERROR_NONE, pPacket->wszFromName, pPacket->bCancel);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_CLOSE_BESTFRIEND:
|
|||
|
|
{
|
|||
|
|
MACloseBestFriend *pPacket = (MACloseBestFriend*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByName(pPacket->wszToName);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
pUser->SendCloseBestFriend(ERROR_NONE, pPacket->wszFromName);
|
|||
|
|
|
|||
|
|
pUser->CloseBestFirend();
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_LEVELUP_BESTFRIEND:
|
|||
|
|
{
|
|||
|
|
MALevelUpBestFriend *pPacket = (MALevelUpBestFriend*)pData;
|
|||
|
|
CDNUserSession * pUser = g_pUserSessionManager->FindUserSessionByName(pPacket->wszName);
|
|||
|
|
if (!pUser)
|
|||
|
|
break;
|
|||
|
|
pUser->GetBestFriend()->ChangeLevel(pPacket->cLevel);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif // #if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_QUICK_PVP)
|
|||
|
|
case MAVI_MAKEQUICKPVP_ROOM :
|
|||
|
|
{
|
|||
|
|
MAVIMakeQuickPvPRoom* pPacket = (MAVIMakeQuickPvPRoom*)pData;
|
|||
|
|
CDNUserSession *pMasterSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiMasterAccountDBID);
|
|||
|
|
if( pMasterSession == NULL )
|
|||
|
|
break;
|
|||
|
|
CDNUserSession *pSlaveSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiSlaveAccountDBID);
|
|||
|
|
if( pSlaveSession == NULL )
|
|||
|
|
break;
|
|||
|
|
if( pPacket->nRet == ERROR_NONE)
|
|||
|
|
{
|
|||
|
|
const sChannelInfo* pChannelInfo = g_pMasterConnection->GetChannelInfoFromAttr( GlobalEnum::CHANNEL_ATT_PVPLOBBY );
|
|||
|
|
if( pChannelInfo )
|
|||
|
|
{
|
|||
|
|
pMasterSession->CmdSelectChannel( pChannelInfo->nChannelID, true );
|
|||
|
|
pSlaveSession->CmdSelectChannel( pChannelInfo->nChannelID, true );
|
|||
|
|
g_Log.Log(LogType::_NORMAL, pMasterSession, L"MakeQuickPvP %s vs %s\r\n", pMasterSession->GetCharacterName(), pSlaveSession->GetCharacterName());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3>..
|
|||
|
|
pMasterSession->SendQuickPvPResult(ERROR_PVP_QUICK_FAIL);
|
|||
|
|
pSlaveSession->SendQuickPvPResult(ERROR_PVP_QUICK_FAIL);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|||
|
|
case MAVI_DELWORLDPARTY:
|
|||
|
|
{
|
|||
|
|
MADelWorldParty* pPacket = (MADelWorldParty*)pData;
|
|||
|
|
g_pPartyManager->DelCombinePartyData( (int)pPacket->nPrimaryIndex );
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_WORLDPARTYMEMBER:
|
|||
|
|
{
|
|||
|
|
GAMASendWorldPartyMember* pPacket = (GAMASendWorldPartyMember*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (!pSession) break;
|
|||
|
|
|
|||
|
|
if( pPacket->nRetCode == ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
SCPartyMemberInfo TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.PartyID = pPacket->PartyID;
|
|||
|
|
TxPacket.PartyType = _WORLDCOMBINE_PARTY;
|
|||
|
|
TxPacket.nCount = pPacket->nCount;
|
|||
|
|
for( int i=0 ; i<pPacket->nCount ; ++i )
|
|||
|
|
TxPacket.MemberData[i] = pPacket->MemberData[i];
|
|||
|
|
|
|||
|
|
pSession->SendPartyMemberInfo( &TxPacket );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
pSession->SendPartyInfoErr( ERROR_PARTY_NOTFOUND_MEMBERINFO );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
|||
|
|
case MAVI_GETPARTYID:
|
|||
|
|
{
|
|||
|
|
MAVIGetPartyID* pPacket = (MAVIGetPartyID*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nAccountDBID);
|
|||
|
|
if (!pSession) break;
|
|||
|
|
|
|||
|
|
g_pMasterConnection->SendGetPartyIDResult(pPacket->nSenderAccountDBID, pSession->GetPartyID());
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case MAVI_GETPARTYID_RESULT:
|
|||
|
|
{
|
|||
|
|
MAVIGetPartyIDResult* pPacket = (MAVIGetPartyIDResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nSenderAccountDBID);
|
|||
|
|
if (!pSession) break;
|
|||
|
|
|
|||
|
|
CDNParty* pParty = g_pPartyManager->GetParty(pPacket->PartyID);
|
|||
|
|
pSession->SendPartyInfo(ERROR_NONE, pParty);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_ADD:
|
|||
|
|
{
|
|||
|
|
MAAddPrivateChannel* pPacket = (MAAddPrivateChannel*)pData;
|
|||
|
|
if( g_pPrivateChatChannelManager && pPacket->nManagedID != g_Config.nManagedID )
|
|||
|
|
{
|
|||
|
|
g_pPrivateChatChannelManager->AddPrivateChatChannel( pPacket->cWorldSetID, pPacket->tPrivateChatChannel);
|
|||
|
|
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo( pPacket->cWorldSetID, pPacket->tPrivateChatChannel.nPrivateChatChannelID);
|
|||
|
|
if( pPrivateChatChannel )
|
|||
|
|
pPrivateChatChannel->SetLoaded(true);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MEMBERADD:
|
|||
|
|
{
|
|||
|
|
MAAddPrivateChannelMember* pPacket = (MAAddPrivateChannelMember*)pData;
|
|||
|
|
if( g_pPrivateChatChannelManager && pPacket->nManagedID != g_Config.nManagedID )
|
|||
|
|
{
|
|||
|
|
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pPacket->cWorldSetID, pPacket->nPrivateChatChannelID);
|
|||
|
|
if( pPrivateChatChannel )
|
|||
|
|
{
|
|||
|
|
pPrivateChatChannel->AddPrivateChannelMember(pPacket->Member);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MEMBERINVITE:
|
|||
|
|
{
|
|||
|
|
MAInvitePrivateChannelMember* pPacket = (MAInvitePrivateChannelMember*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByName(pPacket->wszInviteName);
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
if(pSession->GetPrivateChannelID())
|
|||
|
|
{
|
|||
|
|
if(g_pMasterConnection && g_pMasterConnection->GetActive() )
|
|||
|
|
{
|
|||
|
|
g_pMasterConnection->SendInvitePrivateChatChannelResult(ERROR_ALREADY_JOINCHANNEL, pPacket->nMasterAccountDBID);
|
|||
|
|
}
|
|||
|
|
return ERROR_ALREADY_JOINCHANNEL;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
pSession->SetPrivateChannelID(pPacket->nPrivateChatChannelID);
|
|||
|
|
pSession->GetDBConnection()->QueryInvitePrivateChatChannelMember(pSession, pPacket->nPrivateChatChannelID, pPacket->nMasterAccountDBID);
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MEMBERINVITERESULT:
|
|||
|
|
{
|
|||
|
|
MAInvitePrivateChannelMemberResult* pPacket = (MAInvitePrivateChannelMemberResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nMasterAccountDBID);
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
pSession->SendPrivateChatChannelInviteResult(pPacket->nRet);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MEMBERDEL:
|
|||
|
|
{
|
|||
|
|
MADelPrivateChannelMember* pPacket = (MADelPrivateChannelMember*)pData;
|
|||
|
|
if( g_pPrivateChatChannelManager && pPacket->nManagedID != g_Config.nManagedID )
|
|||
|
|
{
|
|||
|
|
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo( pPacket->cWorldSetID, pPacket->nPrivateChatChannelID);
|
|||
|
|
if( pPrivateChatChannel )
|
|||
|
|
{
|
|||
|
|
pPrivateChatChannel->DelPrivateChannelMember( pPacket->eType, pPacket->biCharacterDBID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MEMBERKICKRESULT:
|
|||
|
|
{
|
|||
|
|
MAKickPrivateChannelMemberResult* pPacket = (MAKickPrivateChannelMemberResult*)pData;
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->nAccountDBID );
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
pSession->SendPrivateChatChannelKickResult(ERROR_NONE, true);
|
|||
|
|
pSession->SetPrivateChannelID(0);
|
|||
|
|
}
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MOD:
|
|||
|
|
{
|
|||
|
|
MAModPrivateChannel* pPacket = (MAModPrivateChannel*)pData;
|
|||
|
|
if( g_pPrivateChatChannelManager && pPacket->nManagedID != g_Config.nManagedID )
|
|||
|
|
{
|
|||
|
|
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pPacket->cWorldSetID, pPacket->nPrivateChatChannelID);
|
|||
|
|
if( pPrivateChatChannel )
|
|||
|
|
{
|
|||
|
|
pPrivateChatChannel->ModPrivateChannelInfo( pPacket->eType, pPacket->nPassWord, pPacket->biCharacterDBID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_PRIVATECHATCHANNEL_MODMEMBERNAME:
|
|||
|
|
{
|
|||
|
|
MAModPrivateChannelMemberName* pPacket = (MAModPrivateChannelMemberName*)pData;
|
|||
|
|
if( g_pPrivateChatChannelManager && pPacket->nManagedID != g_Config.nManagedID )
|
|||
|
|
{
|
|||
|
|
CDNPrivateChaChannel* pPrivateChatChannel = g_pPrivateChatChannelManager->GetPrivateChannelInfo(pPacket->cWorldSetID, pPacket->nPrivateChatChannelID);
|
|||
|
|
if( pPrivateChatChannel )
|
|||
|
|
{
|
|||
|
|
pPrivateChatChannel->ModPrivateChannelMemberName( pPacket->biCharacterDBID, pPacket->wszName );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|||
|
|
case MAVI_DEL_WORLDPVPROOM:
|
|||
|
|
{
|
|||
|
|
MADelWorldPvPRoom* pPacket = (MADelWorldPvPRoom*)pData;
|
|||
|
|
int nRoomIndex = (UINT)(pPacket->nRoomIndex + PvPCommon::Common::MaxRoomCount);
|
|||
|
|
CDNPvPRoomManager::GetInstance().DelWorldPvPRoom(nRoomIndex);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_WORLDPVPROOM_JOINRESULT:
|
|||
|
|
{
|
|||
|
|
MAWorldPvPRoomJoinResult* pPacket = (MAWorldPvPRoomJoinResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiAccountDBID);
|
|||
|
|
if (!pSession) break;
|
|||
|
|
if( pPacket->nRet != ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
pSession->SendWorldPvPRoomJoinResult( pPacket->nRet );
|
|||
|
|
pSession->SetPvPIndex(0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_WORLDPVPROOM_GMCRETERESULT:
|
|||
|
|
{
|
|||
|
|
MAWorldPvPRoomGMCreateResult* pPacket = (MAWorldPvPRoomGMCreateResult*)pData;
|
|||
|
|
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiAccountDBID);
|
|||
|
|
if (!pSession) break;
|
|||
|
|
if( pPacket->nRet != ERROR_NONE )
|
|||
|
|
{
|
|||
|
|
pSession->SendWorldPvPRoomJoinResult( pPacket->nRet );
|
|||
|
|
pSession->SetPvPIndex(0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int nWorldPvPRoomChannelID = CDNPvPRoomManager::GetInstance().GetWorldPvPRoomChannelID();
|
|||
|
|
if( pPacket->Data.nDBRoomID > 0 )
|
|||
|
|
{
|
|||
|
|
MAVIPVP_CREATEROOM CreateRoomData;
|
|||
|
|
memset(&CreateRoomData, 0, sizeof(CreateRoomData));
|
|||
|
|
CreateRoomData.unVillageChannelID = nWorldPvPRoomChannelID;
|
|||
|
|
CreateRoomData.uiPvPIndex = pPacket->uiPvPIndex;
|
|||
|
|
CreateRoomData.cGameMode = pPacket->Data.cModeID;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.cMaxUser = pPacket->Data.cMaxPlayers;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.uiMapIndex = pPacket->Data.nMapID;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.uiGameModeTableID = pPacket->Data.cModeID;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.uiSelectWinCondition = pPacket->Data.nWinCondition;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.uiSelectPlayTimeSec = pPacket->Data.nPlayTimeSec;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.uiGameModeTableID = pPacket->Data.cModeID;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.cMinLevel = pPacket->Data.cMinLevel;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.cMaxLevel = pPacket->Data.cMaxLevel;
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.cRoomNameLen = (BYTE)wcslen(pPacket->Data.wszRoomName);
|
|||
|
|
CreateRoomData.sCSPVP_CREATEROOM.nWorldPvPRoomType = WorldPvPMissionRoom::Common::GMRoom;
|
|||
|
|
_wcscpy( CreateRoomData.sCSPVP_CREATEROOM.wszBuf, _countof(CreateRoomData.sCSPVP_CREATEROOM.wszBuf), pPacket->Data.wszRoomName, CreateRoomData.sCSPVP_CREATEROOM.cRoomNameLen );
|
|||
|
|
|
|||
|
|
CDNPvPRoom* pRoom = new (std::nothrow) CDNPvPRoom;
|
|||
|
|
if( !pRoom )
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
|
|||
|
|
short nRet = pRoom->Create( &CreateRoomData );
|
|||
|
|
|
|||
|
|
if( g_pMasterConnection )
|
|||
|
|
{
|
|||
|
|
pSession->SetPvPIndex(pPacket->uiPvPIndex);
|
|||
|
|
pSession->SendPvPJoinRoom(ERROR_NONE, pRoom);
|
|||
|
|
UINT uiTeam = PvPCommon::Team::Observer;
|
|||
|
|
|
|||
|
|
g_pMasterConnection->SendWorldPvPJoinRoom( pSession->GetAccountDBID(), pSession->GetCharacterDBID(), pPacket->uiPvPIndex, &pPacket->Data, uiTeam, true );
|
|||
|
|
}
|
|||
|
|
delete pRoom;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_ADD_MUTE_USERCHATTING)
|
|||
|
|
case MAVI_MUTE_USERCHAT:
|
|||
|
|
{
|
|||
|
|
MAMuteUserChat* pPacket = (MAMuteUserChat*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->uiMuteUserAccountID);
|
|||
|
|
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
pSession->ModCommonVariableData(CommonVariable::Type::MuteChatting, pPacket->nMuteMinute);
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined(PRE_ADD_MUTE_USERCHATTING)
|
|||
|
|
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
|||
|
|
case MAVI_ALTEIAWORLD_SENDTICKET:
|
|||
|
|
{
|
|||
|
|
MAAlteiaWorldSendTicket* pPacket = (MAAlteiaWorldSendTicket*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByName(pPacket->wszRecvCharacterName);
|
|||
|
|
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
int nMaxSendTicketCount = static_cast<int>(CGlobalWeightTable::GetInstance().GetValue( CGlobalWeightTable::AlteiaWorldSendTicketCount ));
|
|||
|
|
pSession->GetDBConnection()->QueryAddAlteiaWorldSendTicketList(pSession, pPacket->biSendCharacterDBID, pPacket->wszSendCharacterName, nMaxSendTicketCount );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if( g_pMasterConnection )
|
|||
|
|
g_pMasterConnection->SendAddAlteiaWorldSendTicketResult(ERROR_ALTEIAWORLD_NOTEXIST_RECVCHARACTER, pPacket->biSendCharacterDBID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_ALTEIAWORLD_SENDTICKET_RESULT:
|
|||
|
|
{
|
|||
|
|
MAAlteiaWorldSendTicketResult* pPacket = (MAAlteiaWorldSendTicketResult*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nSendAccountDBID);
|
|||
|
|
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
if( pPacket->nRetCode == ERROR_NONE )
|
|||
|
|
pSession->DelAlteiaSendTicket();
|
|||
|
|
pSession->SendAlteiaWorldSendTicketResult( pPacket->nRetCode, pSession->GetAlteiaSendTicketCount() );
|
|||
|
|
return ERROR_NONE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_ADD_CHNC2C)
|
|||
|
|
case MAVI_C2C_CHAR_COINBALANCE :
|
|||
|
|
{
|
|||
|
|
MAC2CGetCoinBalance* pPacket = (MAC2CGetCoinBalance*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryGetGameMoney(rand()%THREADMAX, g_Config.nWorldSetID, pPacket->biCharacterDBID, pPacket->szSeqID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_C2C_CHAR_ADDCOIN :
|
|||
|
|
{
|
|||
|
|
MAC2CAddCoin* pPacket = (MAC2CAddCoin*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryTransferGameMoney(rand()%THREADMAX, g_Config.nWorldSetID, pPacket->uiAccountDBID, pPacket->biCharacterDBID, pPacket->biAddCoin, pPacket->szSeqID, pPacket->szBookID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_C2C_CHAR_REDUCECOIN :
|
|||
|
|
{
|
|||
|
|
MAC2CReduceCoin* pPacket = (MAC2CReduceCoin*)pData;
|
|||
|
|
if ( g_pDBConnectionManager )
|
|||
|
|
{
|
|||
|
|
BYTE cThreadID;
|
|||
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection( cThreadID );
|
|||
|
|
if (pDBCon)
|
|||
|
|
pDBCon->QueryKeepGameMoney(rand()%THREADMAX, g_Config.nWorldSetID, pPacket->uiAccountDBID, pPacket->biCharacterDBID, pPacket->biReduceCoin, pPacket->szSeqID, pPacket->szBookID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif //#if defined(PRE_ADD_CHNC2C)
|
|||
|
|
#if defined( PRE_DRAGONBUFF )
|
|||
|
|
case MAVI_APPLYWORLDBUFF:
|
|||
|
|
{
|
|||
|
|
MAApplyWorldBuff* pPacket = (MAApplyWorldBuff*)pData;
|
|||
|
|
if( g_pDataManager )
|
|||
|
|
{
|
|||
|
|
g_pDataManager->AddWorldBuffData(pPacket->nItemID);
|
|||
|
|
}
|
|||
|
|
if( g_pUserSessionManager )
|
|||
|
|
{
|
|||
|
|
g_pUserSessionManager->ApplyWorldBuff( pPacket->wszCharacterName, pPacket->nItemID, pPacket->nMapIdx );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|||
|
|
case MAVI_GAMBLEROOM_CREATE:
|
|||
|
|
{
|
|||
|
|
MACreateGambleRoom* pPacket = (MACreateGambleRoom*)pData;
|
|||
|
|
CDNPvPRoomManager::GetInstance().CreateGambleRoom(pPacket->nTotalGambleRoomCount);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
case MAVI_INVITE_DWCTEAMMEMB:
|
|||
|
|
{
|
|||
|
|
MAInviteDWCTeamMember* pPacket = (MAInviteDWCTeamMember*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByName(pPacket->wszToCharacterName);
|
|||
|
|
if(pSession)
|
|||
|
|
pSession->SendInviteDWCTeamMemberReq(pPacket->nTeamID, pPacket->nAccountDBID, pPacket->wszFromCharacterName, pPacket->wszTeamName );
|
|||
|
|
else
|
|||
|
|
SendInviteDWCTeamMemberACK(pPacket->nAccountDBID, ERROR_DWC_NOT_DWC_CHARACTER, false, NULL);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_INVITE_DWCTEAMMEMB_ACK:
|
|||
|
|
{
|
|||
|
|
MAInviteDWCTeamMemberAck* pPacket = (MAInviteDWCTeamMemberAck*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nInviterDBID);
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
pSession->SendInviteDWCTeamMemberAck(pPacket->nRetCode);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_ADD_DWCTEAMMEMBER:
|
|||
|
|
{
|
|||
|
|
MAAddDWCTeamMember* pPacket = (MAAddDWCTeamMember*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nTartgetUserAccountDBID);
|
|||
|
|
if(pSession)
|
|||
|
|
{
|
|||
|
|
pSession->SendInviteDWCTeamMemberAck( pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->wszCharacterName, ERROR_NONE, 0 , 0, pPacket->nJob, &pPacket->Location, pPacket->nTeamID );
|
|||
|
|
if(g_pDWCTeamManager)
|
|||
|
|
{
|
|||
|
|
CDnDWCTeam* pDWCTeam = g_pDWCTeamManager->GetDWCTeam(pPacket->nTeamID);
|
|||
|
|
if(pDWCTeam)
|
|||
|
|
{
|
|||
|
|
TDWCTeamMember DWCTeamMember(pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->wszCharacterName, pPacket->nJob, false);
|
|||
|
|
pDWCTeam->AddMember(&DWCTeamMember, &pPacket->Location);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_DEL_DWCTEAMMEMB:
|
|||
|
|
{
|
|||
|
|
MALeaveDWCTeamMember* pPacket = (MALeaveDWCTeamMember*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nTartgetUserAccountDBID);
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
pSession->SendLeaveDWCTeamMember( pPacket->nTeamID, pPacket->biLeaveUserCharacterDBID, pPacket->wszCharacterName, pPacket->nRet);
|
|||
|
|
}
|
|||
|
|
if(g_pDWCTeamManager)
|
|||
|
|
{
|
|||
|
|
CDnDWCTeam* pDWCTeam = g_pDWCTeamManager->GetDWCTeam(pPacket->nTeamID);
|
|||
|
|
if(pDWCTeam)
|
|||
|
|
{
|
|||
|
|
pDWCTeam->DelMember(pPacket->biLeaveUserCharacterDBID);
|
|||
|
|
pDWCTeam->ResetTeamScore();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_DISMISS_DWCTEAM:
|
|||
|
|
{
|
|||
|
|
MADismissDWCTeam* pPacket = (MADismissDWCTeam*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nTartgetUserAccountDBID);
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
pSession->SendDismissDWCTeam( pPacket->nTeamID, pPacket->nRet );
|
|||
|
|
pSession->SetDWCTeamID(0);
|
|||
|
|
}
|
|||
|
|
if(g_pDWCTeamManager)
|
|||
|
|
g_pDWCTeamManager->DelDWCTeamResource(pPacket->nTeamID);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_CHANGE_DWCTEAMMEMB_STATE:
|
|||
|
|
{
|
|||
|
|
MAChangeDWCTeamMemberState* pPacket = (MAChangeDWCTeamMemberState*)pData;
|
|||
|
|
CDNUserSession *pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(pPacket->nTartgetUserAccountDBID);
|
|||
|
|
if( pSession )
|
|||
|
|
{
|
|||
|
|
pSession->SendChangeDWCTeamMemberState( pPacket->nTeamID, pPacket->biCharacterDBID, &pPacket->Location );
|
|||
|
|
}
|
|||
|
|
if(g_pDWCTeamManager)
|
|||
|
|
{
|
|||
|
|
CDnDWCTeam* pDWCTeam = g_pDWCTeamManager->GetDWCTeam(pPacket->nTeamID);
|
|||
|
|
if(pDWCTeam)
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
pDWCTeam->ChangeDWCTeamMemberState(pPacket->biCharacterDBID, &pPacket->Location, false);
|
|||
|
|
if(pPacket->bLogin)
|
|||
|
|
g_pDWCTeamManager->RegistDWCCharacter(pPacket->biCharacterDBID, pPacket->nTeamID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case MAVI_DWC_UPDATE_SCORE:
|
|||
|
|
{
|
|||
|
|
MADWCUpdateScore* pPacket = (MADWCUpdateScore*)pData;
|
|||
|
|
if(g_pDWCTeamManager && g_pDWCTeamManager->bIsIncludeDWCVillage())
|
|||
|
|
{
|
|||
|
|
CDnDWCTeam* pDWCTeam = g_pDWCTeamManager->GetDWCTeam(pPacket->nTeamID);
|
|||
|
|
if(pDWCTeam)
|
|||
|
|
{
|
|||
|
|
pDWCTeam->UpdateDWCScore(pPacket);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
return ERROR_UNKNOWN_HEADER;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendProcessDelayed(UINT nDelayedTick)
|
|||
|
|
{
|
|||
|
|
VIMAProcessDelayed Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nDelayedTick = nDelayedTick;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PROCESSDELAYED, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendVIllageRegistInfo(int nManagedID, const char * pszIP, short nPort)
|
|||
|
|
{
|
|||
|
|
VIMARegist Regist;
|
|||
|
|
memset(&Regist, 0, sizeof(VIMARegist));
|
|||
|
|
|
|||
|
|
Regist.cVillageID = g_Config.nVillageID;
|
|||
|
|
Regist.nManagedID = nManagedID;
|
|||
|
|
_strcpy(Regist.szIP, _countof(Regist.szIP), pszIP, (int)strlen(pszIP));
|
|||
|
|
Regist.nPort = nPort;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_REGIST, 0, (char*)&Regist, sizeof(Regist));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendEndofVillageInfo()
|
|||
|
|
{
|
|||
|
|
AddSendData(VIMA_ENDOFREGIST, 0, NULL, 0);
|
|||
|
|
|
|||
|
|
if( g_pFieldManager )
|
|||
|
|
g_pFieldManager->UpdateChannelShowInfo();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddUserList(CDNUserSession *pUserObj)
|
|||
|
|
{
|
|||
|
|
VIMAAddUserList AddUserList;
|
|||
|
|
memset(&AddUserList, 0, sizeof(VIMAAddUserList));
|
|||
|
|
|
|||
|
|
AddUserList.nAccountDBID = pUserObj->GetAccountDBID();
|
|||
|
|
AddUserList.nSessionID = pUserObj->GetSessionID();
|
|||
|
|
AddUserList.biCharacterDBID = pUserObj->GetCharacterDBID();
|
|||
|
|
AddUserList.wChannelID = pUserObj->GetChannelID();
|
|||
|
|
_wcscpy(AddUserList.wszAccountName, _countof(AddUserList.wszAccountName), pUserObj->GetAccountName(), (int)wcslen(pUserObj->GetAccountName()));
|
|||
|
|
_wcscpy(AddUserList.wszCharacterName, _countof(AddUserList.wszCharacterName), pUserObj->wszName(), (int)wcslen(pUserObj->wszName()));
|
|||
|
|
_strcpy(AddUserList.szIP, _countof(AddUserList.szIP), pUserObj->GetIp(), (int)strlen(pUserObj->GetIp()));
|
|||
|
|
_strcpy(AddUserList.szVirtualIp, _countof(AddUserList.szVirtualIp), pUserObj->m_szVirtualIp, (int)strlen(pUserObj->m_szVirtualIp));
|
|||
|
|
AddUserList.bAdult = pUserObj->m_bAdult;
|
|||
|
|
AddUserList.cPvPVillageID = pUserObj->GetPvPVillageID();
|
|||
|
|
AddUserList.unPvPVillageChannelID = pUserObj->GetPvPVillageChannelID();
|
|||
|
|
#if defined (_KR)
|
|||
|
|
memcpy(AddUserList.szMID, pUserObj->m_szMID, sizeof(AddUserList.szMID));
|
|||
|
|
AddUserList.dwGRC = pUserObj->m_dwGRC;
|
|||
|
|
#endif
|
|||
|
|
AddUserList.cPCBangGrade = pUserObj->GetPCBangGrade();
|
|||
|
|
#ifdef PRE_ADD_MULTILANGUAGE
|
|||
|
|
AddUserList.cSelectedLanguage = pUserObj->m_eSelectedLanguage;
|
|||
|
|
#endif //#ifdef PRE_ADD_MULTILANGUAGE
|
|||
|
|
#if defined(_ID)
|
|||
|
|
_strcpy(AddUserList.szMacAddress, _countof(AddUserList.szMacAddress), pUserObj->m_szMacAddress, (int)strlen(pUserObj->m_szMacAddress));
|
|||
|
|
_strcpy(AddUserList.szKey, _countof(AddUserList.szKey), pUserObj->m_szKey, (int)strlen(pUserObj->m_szKey));
|
|||
|
|
AddUserList.dwKreonCN = pUserObj->m_dwKreonCN;
|
|||
|
|
#endif
|
|||
|
|
#if defined(_KRAZ)
|
|||
|
|
AddUserList.ShutdownData = pUserObj->m_ShutdownData;
|
|||
|
|
#endif // #if defined(_KRAZ)
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
AddUserList.cAccountLevel = pUserObj->GetAccountLevel();
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ADDUSERLIST, 0, (char*)&AddUserList, sizeof(AddUserList));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDelUser(UINT nAccountDBID, UINT nSessionID)
|
|||
|
|
{
|
|||
|
|
VIMADelUser DelUser;
|
|||
|
|
memset(&DelUser, 0, sizeof(VIMADelUser));
|
|||
|
|
DelUser.nAccountDBID = nAccountDBID;
|
|||
|
|
DelUser.nSessionID = nSessionID;
|
|||
|
|
AddSendData(VIMA_DELUSER, 0, (char*)&DelUser, sizeof(VIMADelUser));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendCheckUser(UINT nSessionID)
|
|||
|
|
{
|
|||
|
|
VIMACheckUser CheckUser;
|
|||
|
|
memset(&CheckUser, 0, sizeof(VIMACheckUser));
|
|||
|
|
CheckUser.nSessionID = nSessionID;
|
|||
|
|
AddSendData(VIMA_CHECKUSER, 0, (char*)&CheckUser, sizeof(VIMACheckUser));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendEnterVillage(UINT nAccountDBID, int nChannelID)
|
|||
|
|
{
|
|||
|
|
VIMAEnterVillage Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAEnterVillage));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nChannelID = nChannelID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ENTERVILLAGE, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendCheckReconnectLogin(UINT nAccountDBID)
|
|||
|
|
{
|
|||
|
|
VIMAReconnectLogin Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAReconnectLogin));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_RECONNECTLOGIN, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendReqGameID( GameTaskType::eType GameTaskType, BYTE cReqGameIDType, TINSTANCEID InstanceID, USHORT unVillageChannelID, int nRandomSeed, int nMapIndex, char cGateNo, TDUNGEONDIFFICULTY Difficulty, bool bDirectConnect, CDNParty * pParty, UINT nFarmDBID, char cGateSelect )
|
|||
|
|
{
|
|||
|
|
VIMAReqGameID TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.GameTaskType = GameTaskType;
|
|||
|
|
TxPacket.cReqGameIDType = cReqGameIDType;
|
|||
|
|
TxPacket.InstanceID = InstanceID;
|
|||
|
|
TxPacket.unVillageChannelID = unVillageChannelID;
|
|||
|
|
TxPacket.nRandomSeed = nRandomSeed;
|
|||
|
|
TxPacket.nMapIndex = nMapIndex;
|
|||
|
|
TxPacket.cGateNo = cGateNo;
|
|||
|
|
TxPacket.cGateSelect = cGateSelect;
|
|||
|
|
TxPacket.StageDifficulty = Difficulty;
|
|||
|
|
TxPacket.bDirectConnect = bDirectConnect;
|
|||
|
|
TxPacket.nFarmDBID = nFarmDBID;
|
|||
|
|
|
|||
|
|
if (pParty)
|
|||
|
|
{
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
TxPacket.PartyData.PartyData = pParty->GetPartyStructData();
|
|||
|
|
#else
|
|||
|
|
TxPacket.PartyData.cMemberMax = pParty->GetMemberMax();
|
|||
|
|
TxPacket.PartyData.ItemLootRule = pParty->GetItemLootRule();
|
|||
|
|
TxPacket.PartyData.ItemLootRank = pParty->GetItemLootRank();
|
|||
|
|
TxPacket.PartyData.cUserLvLimitMin = pParty->GetMinLevel();
|
|||
|
|
#endif
|
|||
|
|
TxPacket.PartyData.nLeaderAccountDBID = pParty->GetLeaderAccountDBID();
|
|||
|
|
TxPacket.PartyData.nLeaderSessionID = pParty->GetLeaderSessionID();
|
|||
|
|
TxPacket.PartyData.nChannelID = pParty->GetChannelID();
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
TxPacket.PartyData.cUserLvLimitMax = pParty->GetMaxLevel();
|
|||
|
|
TxPacket.PartyData.nTargetMapIdx = pParty->GetTargetMapIndex();
|
|||
|
|
TxPacket.PartyData.Difficulty = pParty->GetDifficulty();
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
TxPacket.PartyData.cJobDice = pParty->m_cIsJobDice;
|
|||
|
|
_wcscpy(TxPacket.PartyData.wszPartyPass, _countof(TxPacket.PartyData.wszPartyPass), pParty->m_wszPartyPassword, (int)wcslen(pParty->m_wszPartyPassword));
|
|||
|
|
_wcscpy(TxPacket.PartyData.wszPartyName, _countof(TxPacket.PartyData.wszPartyName), pParty->GetPartyName(), (int)wcslen(pParty->GetPartyName()));
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
int nCnt = 0;
|
|||
|
|
const std::vector<UINT>& KickList = pParty->GetKickList();
|
|||
|
|
for (int i = (int)KickList.size()-1; i >= 0; i--)
|
|||
|
|
{
|
|||
|
|
TxPacket.PartyData.nKickedMemberDBID[nCnt] = KickList[i];
|
|||
|
|
nCnt++;
|
|||
|
|
if (nCnt >= PARTYKICKMAX)
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
TxPacket.PartyData.nVoiceChannelID = pParty->m_nVoiceChannelID;
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
TxPacket.PartyData.cUpkeepCount = (BYTE)pParty->GetUpkeepCount();
|
|||
|
|
#endif
|
|||
|
|
UINT MemberArr[PARTYMAX];
|
|||
|
|
pParty->GetMembersByAccountDBID(MemberArr);
|
|||
|
|
|
|||
|
|
bool bMemberArray[PARTYMAX];
|
|||
|
|
pParty->GetMemberCheckFlag(bMemberArray);
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
TxPacket.PartyData.PartyData.iCurMemberCount = 0;
|
|||
|
|
for (int i = 0; i < PARTYMAX; i++)
|
|||
|
|
{
|
|||
|
|
if (MemberArr[i] <= 0) continue;
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.PartyData.iCurMemberCount].nAccountDBID = MemberArr[i];
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.PartyData.iCurMemberCount].cMemberIndex = i;
|
|||
|
|
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(MemberArr[i]);
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
if (!pSession) continue;
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.PartyData.iCurMemberCount].VoiceInfo.cVoiceAvailable = pSession->m_bVoiceAvailable == true ? 1 : 0;
|
|||
|
|
memcpy(TxPacket.PartyData.MemberInfo[TxPacket.PartyData.PartyData.iCurMemberCount].VoiceInfo.nMutedList, pSession->m_nVoiceMutedList, sizeof(UINT[PARTYCOUNTMAX]));
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_ADD_NEWCOMEBACK )
|
|||
|
|
if( !pSession ) continue;
|
|||
|
|
if( pSession->GetComebackAppellation() > 0 )
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.PartyData.iCurMemberCount].bCheckComebackAppellation = true;
|
|||
|
|
#endif
|
|||
|
|
TxPacket.PartyData.PartyData.iCurMemberCount++;
|
|||
|
|
}
|
|||
|
|
#else // #if defined( PRE_PARTY_DB )
|
|||
|
|
for (int i = 0; i < PARTYMAX; i++)
|
|||
|
|
{
|
|||
|
|
if (MemberArr[i] <= 0) continue;
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.cMemberCount].nAccountDBID = MemberArr[i];
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.cMemberCount].cMemberIndex = i;
|
|||
|
|
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(MemberArr[i]);
|
|||
|
|
if (!pSession) continue;
|
|||
|
|
TxPacket.PartyData.MemberInfo[TxPacket.PartyData.cMemberCount].VoiceInfo.cVoiceAvailable = pSession->m_bVoiceAvailable == true ? 1 : 0;
|
|||
|
|
memcpy(TxPacket.PartyData.MemberInfo[TxPacket.PartyData.cMemberCount].VoiceInfo.nMutedList, pSession->m_nVoiceMutedList, sizeof(UINT[PARTYCOUNTMAX]));
|
|||
|
|
#endif
|
|||
|
|
TxPacket.PartyData.cMemberCount++;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
AddSendData( VIMA_REQGAMEID, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) - sizeof(TxPacket.PartyData.MemberInfo) + (sizeof(TMemberInfo) * TxPacket.PartyData.PartyData.iCurMemberCount) );
|
|||
|
|
#else
|
|||
|
|
AddSendData( VIMA_REQGAMEID, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) - sizeof(TxPacket.PartyData.MemberInfo) + (sizeof(TMemberInfo) * TxPacket.PartyData.cMemberCount) );
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPLadderEnterChannel( UINT uiAccountDBID, LadderSystem::MatchType::eCode MatchType )
|
|||
|
|
{
|
|||
|
|
VIMALadderEnterChannel TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.MatchType = MatchType;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_LADDER_ENTERCHANNEL, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendReqLadderGameID( LadderSystem::CRoom* pLadderRoom, LadderSystem::CRoom* pLadderRoom2, USHORT unVillageChannelID, int iRandomSeed, int iMapIndex )
|
|||
|
|
{
|
|||
|
|
VIMALadderReqGameID TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
_ASSERT( pLadderRoom->GetMatchType() == pLadderRoom2->GetMatchType() );
|
|||
|
|
|
|||
|
|
TxPacket.MatchType = pLadderRoom->GetMatchType();
|
|||
|
|
TxPacket.biRoomIndexArr[0] = pLadderRoom->GetRoomIndex();
|
|||
|
|
TxPacket.biRoomIndexArr[1] = pLadderRoom2->GetRoomIndex();
|
|||
|
|
TxPacket.unVillageChannelID = unVillageChannelID;
|
|||
|
|
TxPacket.iRandomSeed = iRandomSeed;
|
|||
|
|
TxPacket.iMapIndex = iMapIndex;
|
|||
|
|
|
|||
|
|
const std::vector<LadderSystem::CRoom::SUserInfo>& UserInfo = pLadderRoom->GetUserInfo();
|
|||
|
|
const std::vector<LadderSystem::CRoom::SUserInfo>& UserInfo2 = pLadderRoom2->GetUserInfo();
|
|||
|
|
|
|||
|
|
if( UserInfo.empty() || UserInfo2.empty() )
|
|||
|
|
{
|
|||
|
|
_ASSERT(0);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch( pLadderRoom->GetMatchType() )
|
|||
|
|
{
|
|||
|
|
case LadderSystem::MatchType::_1vs1:
|
|||
|
|
{
|
|||
|
|
TxPacket.LadderData.cMemberCount = 2;
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[0].uiAccountDBID = UserInfo[0].uiAccountDBID;
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[0].uiTeam = PvPCommon::Team::A;
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[1].uiAccountDBID = UserInfo2[0].uiAccountDBID;
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[1].uiTeam = PvPCommon::Team::B;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case LadderSystem::MatchType::_2vs2:
|
|||
|
|
case LadderSystem::MatchType::_3vs3:
|
|||
|
|
case LadderSystem::MatchType::_4vs4:
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
case LadderSystem::MatchType::_3vs3_DWC:
|
|||
|
|
case LadderSystem::MatchType::_3vs3_DWC_PRACTICE:
|
|||
|
|
#endif
|
|||
|
|
{
|
|||
|
|
int iCount = 0;
|
|||
|
|
for( UINT i=0 ; i<UserInfo.size() ; ++i )
|
|||
|
|
{
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[iCount].uiAccountDBID = UserInfo[i].uiAccountDBID;
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[iCount].uiTeam = PvPCommon::Team::A;
|
|||
|
|
++iCount;
|
|||
|
|
}
|
|||
|
|
for( UINT i=0 ; i<UserInfo2.size() ; ++i )
|
|||
|
|
{
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[iCount].uiAccountDBID = UserInfo2[i].uiAccountDBID;
|
|||
|
|
TxPacket.LadderData.MemberInfoArr[iCount].uiTeam = PvPCommon::Team::B;
|
|||
|
|
++iCount;
|
|||
|
|
}
|
|||
|
|
TxPacket.LadderData.cMemberCount = static_cast<BYTE>(iCount);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pLadderRoom->ChangeRoomState( LadderSystem::RoomState::Syncing );
|
|||
|
|
pLadderRoom2->ChangeRoomState( LadderSystem::RoomState::Syncing );
|
|||
|
|
|
|||
|
|
int iSize = sizeof(TxPacket)-sizeof(TxPacket.LadderData.MemberInfoArr)+TxPacket.LadderData.cMemberCount*sizeof(TxPacket.LadderData.MemberInfoArr[0]);
|
|||
|
|
AddSendData( VIMA_LADDER_REQGAMEID, 0, reinterpret_cast<char*>(&TxPacket), iSize );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendLadderObserver( INT64 biCharacterDBID, int iGameServerID, int iGameRoomID )
|
|||
|
|
{
|
|||
|
|
VIMALadderObserver TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|||
|
|
TxPacket.iGameServerID = iGameServerID;
|
|||
|
|
TxPacket.iGameRoomID = iGameRoomID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_LADDER_OBSERVER, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendVillageUserReport()
|
|||
|
|
{
|
|||
|
|
std::map <int, int> Map;
|
|||
|
|
UINT nCount = g_pUserSessionManager->GetUserCount(Map);
|
|||
|
|
|
|||
|
|
VIMAUserReport Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nUserCount = nCount;
|
|||
|
|
std::map <int, int>::iterator ii;
|
|||
|
|
for (ii = Map.begin(); ii != Map.end(); ii++)
|
|||
|
|
{
|
|||
|
|
Packet.Info[Packet.nCount].nChannelID = (*ii).first;
|
|||
|
|
Packet.Info[Packet.nCount].nChannelUserCount = (*ii).second;
|
|||
|
|
Packet.nCount++;
|
|||
|
|
if (Packet.nCount >= VILLAGECHANNELMAX )
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_VILLAGEUSERREPORT, 0, (char*)&Packet, sizeof(Packet) - sizeof(Packet.Info) + (Packet.nCount * sizeof(TVillageUserReport)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
void CDNMasterConnection::SendVillageToVillage(BYTE cReqType, INT64 biID, int nMapIndex, int nEnteredGateIndex, int nMoveChannel, CDNParty * pParty, INT64 nItemSerial)
|
|||
|
|
#else
|
|||
|
|
void CDNMasterConnection::SendVillageToVillage(BYTE cReqType, UINT nID, int nMapIndex, int nEnteredGateIndex, int nMoveChannel, CDNParty * pParty, INT64 nItemSerial)
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
{
|
|||
|
|
VIMAVillageToVillage Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAVillageToVillage));
|
|||
|
|
|
|||
|
|
Packet.cReqType = cReqType;
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
Packet.biID = biID;
|
|||
|
|
#else
|
|||
|
|
Packet.nID = nID;
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
Packet.nMapIndex = nMapIndex;
|
|||
|
|
Packet.nEnteredGateIndex = nEnteredGateIndex;
|
|||
|
|
Packet.nMoveChannel = nMoveChannel;
|
|||
|
|
Packet.nItemSerial = nItemSerial;
|
|||
|
|
|
|||
|
|
if (pParty)
|
|||
|
|
{
|
|||
|
|
Packet.PartyData.nLeaderAccountDBID = pParty->GetLeaderAccountDBID();
|
|||
|
|
Packet.PartyData.nLeaderSessionID = pParty->GetLeaderSessionID();
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
Packet.PartyData.PartyData = pParty->GetPartyStructData();
|
|||
|
|
Packet.PartyData.PartyData.iCurMemberCount = 0;
|
|||
|
|
#else
|
|||
|
|
Packet.PartyData.nChannelID = pParty->GetChannelID();
|
|||
|
|
Packet.PartyData.cMemberMax = pParty->GetMemberMax();
|
|||
|
|
Packet.PartyData.ItemLootRank = pParty->GetItemLootRank();
|
|||
|
|
Packet.PartyData.ItemLootRule = pParty->GetItemLootRule();
|
|||
|
|
Packet.PartyData.cUserLvLimitMin = pParty->GetMinLevel();
|
|||
|
|
Packet.PartyData.cUserLvLimitMax = pParty->GetMaxLevel();
|
|||
|
|
Packet.PartyData.nTargetMapIdx = pParty->GetTargetMapIndex();
|
|||
|
|
Packet.PartyData.Difficulty = pParty->GetDifficulty();
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
#else
|
|||
|
|
Packet.PartyData.cJobDice = pParty->m_cIsJobDice;
|
|||
|
|
_wcscpy(Packet.PartyData.wszPartyPass, _countof(Packet.PartyData.wszPartyPass), pParty->m_wszPartyPassword, (int)wcslen(pParty->m_wszPartyPassword) );
|
|||
|
|
_wcscpy(Packet.PartyData.wszPartyName, _countof(Packet.PartyData.wszPartyName), pParty->GetPartyName(), (int)wcslen(pParty->GetPartyName()));
|
|||
|
|
Packet.PartyData.cUpkeepCount = (BYTE)pParty->GetUpkeepCount();
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
int nCnt = 0;
|
|||
|
|
const std::vector <UINT>& KickList = pParty->GetKickList();
|
|||
|
|
for (int i = (int)KickList.size()-1; i >= 0; i--)
|
|||
|
|
{
|
|||
|
|
Packet.PartyData.nKickedMemberDBID[nCnt] = KickList[i];
|
|||
|
|
nCnt++;
|
|||
|
|
if (nCnt >= PARTYKICKMAX) break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
Packet.PartyData.nVoiceChannelID = pParty->m_nVoiceChannelID;
|
|||
|
|
#endif
|
|||
|
|
UINT MemberArr[PARTYMAX];
|
|||
|
|
pParty->GetMembersByAccountDBID(MemberArr);
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
for (int i = 0; i < PARTYMAX; i++)
|
|||
|
|
{
|
|||
|
|
if (MemberArr[i] <= 0) continue;
|
|||
|
|
Packet.PartyData.MemberInfo[Packet.PartyData.PartyData.iCurMemberCount].nAccountDBID = MemberArr[i];
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(MemberArr[i]);
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
if (!pSession) continue;
|
|||
|
|
Packet.PartyData.MemberInfo[Packet.PartyData.PartyData.iCurMemberCount].VoiceInfo.cVoiceAvailable = pSession->m_bVoiceAvailable == true ? 1 : 0;
|
|||
|
|
memcpy(Packet.PartyData.MemberInfo[Packet.PartyData.PartyData.iCurMemberCount].VoiceInfo.nMutedList, pSession->m_nVoiceMutedList, sizeof(UINT[PARTYCOUNTMAX]));
|
|||
|
|
#endif
|
|||
|
|
Packet.PartyData.MemberInfo[Packet.PartyData.PartyData.iCurMemberCount].biCharacterDBID = pSession->GetCharacterDBID();
|
|||
|
|
#if defined( PRE_ADD_NEWCOMEBACK )
|
|||
|
|
if (!pSession) continue;
|
|||
|
|
if( pSession->GetComebackAppellation() > 0 )
|
|||
|
|
Packet.PartyData.MemberInfo[Packet.PartyData.PartyData.iCurMemberCount].bCheckComebackAppellation = true;
|
|||
|
|
#endif
|
|||
|
|
Packet.PartyData.PartyData.iCurMemberCount++;
|
|||
|
|
}
|
|||
|
|
#else // #if defined( PRE_PARTY_DB )
|
|||
|
|
for (int i = 0; i < PARTYMAX; i++)
|
|||
|
|
{
|
|||
|
|
if (MemberArr[i] <= 0) continue;
|
|||
|
|
Packet.PartyData.MemberInfo[Packet.PartyData.cMemberCount].nAccountDBID = MemberArr[i];
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
CDNUserSession* pSession = g_pUserSessionManager->FindUserSessionByAccountDBID(MemberArr[i]);
|
|||
|
|
if (!pSession) continue;
|
|||
|
|
Packet.PartyData.MemberInfo[Packet.PartyData.cMemberCount].VoiceInfo.cVoiceAvailable = pSession->m_bVoiceAvailable == true ? 1 : 0;
|
|||
|
|
memcpy(Packet.PartyData.MemberInfo[Packet.PartyData.cMemberCount].VoiceInfo.nMutedList, pSession->m_nVoiceMutedList, sizeof(UINT[PARTYCOUNTMAX]));
|
|||
|
|
#endif
|
|||
|
|
Packet.PartyData.cMemberCount++;
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_VILLAGETOVILLAGE, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendReqPartyInvite( CDNUserSession* pReqSession, const WCHAR* pwszInviteCharName, CDNParty* pParty )
|
|||
|
|
{
|
|||
|
|
VIMAReqPartyInvite TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.PartyID = pReqSession->GetPartyID();
|
|||
|
|
TxPacket.iPartyMinLevel = pParty->GetMinLevel();
|
|||
|
|
_wcscpy( TxPacket.wszPartyName, _countof(TxPacket.wszPartyName), pParty->GetPartyName(), static_cast<int>(wcslen(pParty->GetPartyName())) );
|
|||
|
|
TxPacket.iPartyPassword = pParty->GetPassword();
|
|||
|
|
TxPacket.iPartyMemberMax = pParty->GetMemberMax();
|
|||
|
|
TxPacket.iPartyMemberCount = pParty->GetMemberCount();
|
|||
|
|
TxPacket.iPartyAvrLV = pParty->GetAvrUserLv();
|
|||
|
|
TxPacket.uiReqAccountDBID = pReqSession->GetAccountDBID();
|
|||
|
|
TxPacket.biReqCharacterDBID = pReqSession->GetCharacterDBID();
|
|||
|
|
TxPacket.iReqMapIndex = pReqSession->GetMapIndex();
|
|||
|
|
_wcscpy( TxPacket.wszReqCharName, _countof(TxPacket.wszReqCharName), pReqSession->GetCharacterName(), static_cast<int>(wcslen(pReqSession->GetCharacterName())) );
|
|||
|
|
_wcscpy(TxPacket.wszInviteCharName, _countof(TxPacket.wszInviteCharName), pwszInviteCharName, static_cast<int>(wcslen(pwszInviteCharName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_REQPARTYINVITE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendResPartyInvite( int iRet, UINT uiReqAccountDBID )
|
|||
|
|
{
|
|||
|
|
VIMAResPartyInvite TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.iRet = iRet;
|
|||
|
|
TxPacket.uiReqAccountDBID = uiReqAccountDBID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_RESPARTYINVITE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPartyInviteDenied( const WCHAR* pwszReqCharName, TPARTYID PartyID, const WCHAR* pwszInviteCharName, BYTE cIsOpenBlind )
|
|||
|
|
{
|
|||
|
|
VIMAPartyInviteDenied TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.PartyID = PartyID;
|
|||
|
|
TxPacket.cIsOpenBlind = cIsOpenBlind;
|
|||
|
|
_wcscpy( TxPacket.wszReqCharName, _countof(TxPacket.wszReqCharName), pwszReqCharName, static_cast<int>(wcslen(pwszReqCharName)) );
|
|||
|
|
_wcscpy( TxPacket.wszInviteCharName, _countof(TxPacket.wszInviteCharName), pwszInviteCharName, static_cast<int>(wcslen(pwszInviteCharName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PARTYINVITEDENIED, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
|||
|
|
void CDNMasterConnection::SendGetPartyID( UINT nSenderAccountDBID , const WCHAR* pwszCharName)
|
|||
|
|
{
|
|||
|
|
VIMAGetPartyID TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.nSenderAccountDBID = nSenderAccountDBID;
|
|||
|
|
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, static_cast<int>(wcslen(pwszCharName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_GETPARTYID, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGetPartyIDResult( UINT nSenderAccountDBID , TPARTYID PartyID )
|
|||
|
|
{
|
|||
|
|
VIMAGetPartyIDResult TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.nSenderAccountDBID = nSenderAccountDBID;
|
|||
|
|
TxPacket.PartyID = PartyID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_GETPARTYID_RESULT, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendReqPartyAskJoin(CDNUserSession* pReqSession, const WCHAR* pwszTargetCharName)
|
|||
|
|
{
|
|||
|
|
VIMAReqPartyAskJoin TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiReqAccountDBID = pReqSession->GetAccountDBID();
|
|||
|
|
TxPacket.biReqCharacterDBID = pReqSession->GetCharacterDBID();
|
|||
|
|
TxPacket.cReqUserJob = pReqSession->GetUserJob();
|
|||
|
|
TxPacket.cReqUserLevel = pReqSession->GetLevel();
|
|||
|
|
_wcscpy( TxPacket.wszReqChracterName, _countof(TxPacket.wszReqChracterName), pReqSession->GetCharacterName(), static_cast<int>(wcslen(pReqSession->GetCharacterName())) );
|
|||
|
|
_wcscpy(TxPacket.wszTargetChracterName, _countof(TxPacket.wszTargetChracterName), pwszTargetCharName, static_cast<int>(wcslen(pwszTargetCharName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_REQPARTYASKJOIN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendResPartyAskJoin(int iRet, UINT uiReqAccountDBID, const WCHAR* pwszReqChracterName )
|
|||
|
|
{
|
|||
|
|
VIMAResPartyAskJoin TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.iRet = iRet;
|
|||
|
|
TxPacket.uiReqAccountDBID = uiReqAccountDBID;
|
|||
|
|
if(pwszReqChracterName)
|
|||
|
|
_wcscpy(TxPacket.wszReqChracterName, _countof(TxPacket.wszReqChracterName), pwszReqChracterName, static_cast<int>(wcslen(pwszReqChracterName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_RESPARTYASKJOIN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAskJoinAgreeInfo( const WCHAR* pwszAskerCharName, TPARTYID PartyID, int iPassword)
|
|||
|
|
{
|
|||
|
|
VIMAAskJoinAgreeInfo TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
TxPacket.PartyID = PartyID;
|
|||
|
|
TxPacket.iPassword = iPassword;
|
|||
|
|
_wcscpy(TxPacket.wszAskerCharName, _countof(TxPacket.wszAskerCharName), pwszAskerCharName, static_cast<int>(wcslen(pwszAskerCharName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_ASKJOINAGREEINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif //#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendReqPartyID(UINT nLeaderAccountDBID, int nChannelID, BYTE cMemberMax, TPARTYITEMLOOTRULE LootRule, TITEMRANK LootItemRank, int nUserLvLimitMin, \
|
|||
|
|
int nUserLvLimitMax, int nTargetMapIdx, TDUNGEONDIFFICULTY Difficulty, BYTE cIsPartyJobDice, const WCHAR * pwszPartyName, const WCHAR * pPass, UINT nAfterInviteDBID, bool bUseVoice)
|
|||
|
|
{
|
|||
|
|
VIMAReqPartyID Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAReqPartyID));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nLeaderAccountDBID;
|
|||
|
|
Packet.nChannelID = nChannelID;
|
|||
|
|
Packet.cMemberMax = cMemberMax;
|
|||
|
|
|
|||
|
|
Packet.ItemLootRule = LootRule;
|
|||
|
|
Packet.ItemLootRank = LootItemRank;
|
|||
|
|
Packet.cUserLvLimitMin = (BYTE)nUserLvLimitMin;
|
|||
|
|
Packet.cUserLvLimitMax = (BYTE)nUserLvLimitMax;
|
|||
|
|
|
|||
|
|
Packet.nCreateAfterInvite = nAfterInviteDBID;
|
|||
|
|
Packet.nTargetMapIdx = nTargetMapIdx;
|
|||
|
|
Packet.Difficulty = Difficulty;
|
|||
|
|
Packet.cPartyJobDice = cIsPartyJobDice;
|
|||
|
|
#ifdef _USE_VOICECHAT
|
|||
|
|
Packet.cUseVoice = bUseVoice == true ? 1 : 0;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
_wcscpy(Packet.wszBuf, _countof(Packet.wszBuf), pwszPartyName, (int)wcslen(pwszPartyName));
|
|||
|
|
Packet.cNameLen = (BYTE)wcslen(pwszPartyName);
|
|||
|
|
|
|||
|
|
if (pPass != NULL && pPass[0] != '\0')
|
|||
|
|
{
|
|||
|
|
_wcscpy(Packet.wszBuf + Packet.cNameLen, _countof(Packet.wszBuf) - Packet.cNameLen, pPass, (int)wcslen(pPass));
|
|||
|
|
Packet.cPassWordLen = (BYTE)wcslen(pPass);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_REQPARTYID, 0, (char*)&Packet, sizeof(Packet) - sizeof(Packet.wszBuf) + \
|
|||
|
|
((Packet.cNameLen + Packet.cPassWordLen) * sizeof(WCHAR)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendInvitePartyResult(int nGameServerID, const WCHAR * pwszInviterName, const WCHAR * pwszInvitedName, int nRetCode)
|
|||
|
|
{
|
|||
|
|
VIMAInvitePartyMemberResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAInvitePartyMemberResult));
|
|||
|
|
|
|||
|
|
Packet.nGameServerID = nGameServerID;
|
|||
|
|
if (pwszInviterName) _wcscpy(Packet.wszInviterName, NAMELENMAX, pwszInviterName, (int)wcslen(pwszInviterName));
|
|||
|
|
if (pwszInvitedName) _wcscpy(Packet.wszInvitedName, NAMELENMAX, pwszInvitedName, (int)wcslen(pwszInvitedName));
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_RETINVITEPARTYMEMBER, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendLoginState(UINT nSessionID)
|
|||
|
|
{
|
|||
|
|
VIMALoginState State = { 0, };
|
|||
|
|
State.nSessionID = nSessionID;
|
|||
|
|
AddSendData(VIMA_LOGINSTATE, 0, (char*)&State, sizeof(VIMALoginState));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendInviteGuildMember(TGuildUID GuildUID, UINT nAccountDBID, UINT nSessionID, INT64 nCharacterDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, LPCWSTR lpwszGuildName)
|
|||
|
|
{
|
|||
|
|
MAInviteGuildMember Packet;
|
|||
|
|
Packet.GuildUID = GuildUID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nSessionID = nSessionID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
_wcscpy(Packet.wszFromCharacterName, _countof(Packet.wszFromCharacterName), lpwszFromCharacterName, (int)wcslen(lpwszFromCharacterName));
|
|||
|
|
_wcscpy(Packet.wszToCharacterName, _countof(Packet.wszToCharacterName), lpwszToCharacterName, (int)wcslen(lpwszToCharacterName));
|
|||
|
|
_wcscpy(Packet.wszGuildName, _countof(Packet.wszGuildName), lpwszGuildName, (int)wcslen(lpwszGuildName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_INVAITEGUILDMEMB, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendInviteGuildResult(UINT nAccountDBID, int nRetCode, bool bAck, LPCWSTR pwszToCharacterName)
|
|||
|
|
{
|
|||
|
|
VIMAInviteGuildMemberResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAInviteGuildMemberResult));
|
|||
|
|
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
Packet.nInviterDBID = nAccountDBID;
|
|||
|
|
Packet.bAck = bAck;
|
|||
|
|
|
|||
|
|
if (pwszToCharacterName)
|
|||
|
|
_wcscpy(Packet.wszInvitedName, NAMELENMAX, pwszToCharacterName, (int)wcslen(pwszToCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_RETINVITEGUILDMEMBER, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildWareInfo(TGuildUID GuildUID)
|
|||
|
|
{
|
|||
|
|
MAGuildWareInfo Packet;
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = GuildUID;
|
|||
|
|
|
|||
|
|
AddSendData (VIMA_GUILDWAREINFO, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildWareInfoResult(MAGuildWareInfoResult& result)
|
|||
|
|
{
|
|||
|
|
int nSize = sizeof(MAGuildWareInfoResult) - sizeof(result.WareSlotList) + (sizeof(TGuildWareSlot)*result.cSlotListCount);
|
|||
|
|
|
|||
|
|
AddSendData (VIMA_RETGUILDWAREINFO, 0, (char*)&result, nSize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildMemberLevelUp(TGuildUID GuildUID, INT64 nCharacterDBID, char cLevel)
|
|||
|
|
{
|
|||
|
|
MAGuildMemberLevelUp Packet;
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = GuildUID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
Packet.cLevel = cLevel;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILDMEMBER_LEVELUP, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDismissGuild(const TGuildUID pGuildUID)
|
|||
|
|
{
|
|||
|
|
MADismissGuild Packet;
|
|||
|
|
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_DISMISSGUILD, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddGuildMember(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszFromCharacterName, TP_JOB nJob, char cLevel, __time64_t pJoinDate)
|
|||
|
|
{
|
|||
|
|
MAAddGuildMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
Packet.nJob = nJob;
|
|||
|
|
Packet.cLevel = cLevel;
|
|||
|
|
Packet.JoinDate = pJoinDate;
|
|||
|
|
_wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), lpwszFromCharacterName, (int)wcslen(lpwszFromCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ADDGUILDMEMB, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDelGuildMember(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, bool bIsExiled)
|
|||
|
|
{
|
|||
|
|
MADelGuildMember Packet;
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
Packet.bIsExiled = bIsExiled;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_DELGUILDMEMB, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendChangeGuildInfo(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, BYTE btGuildUpdate, int iInt1, int iInt2, int iInt3, int iInt4, INT64 biInt64, LPCWSTR pText)
|
|||
|
|
{
|
|||
|
|
MAChangeGuildInfo Packet;
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
Packet.btGuildUpdate = btGuildUpdate;
|
|||
|
|
Packet.Int1 = iInt1;
|
|||
|
|
Packet.Int2 = iInt2;
|
|||
|
|
Packet.Int64 = biInt64;
|
|||
|
|
Packet.Int3 = iInt3;
|
|||
|
|
Packet.Int4 = iInt4;
|
|||
|
|
if (pText) {
|
|||
|
|
_wcscpy(Packet.Text, _countof(Packet.Text), pText, (int)wcslen(pText));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CHANGEGUILDINFO, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendRefreshGuildItem (const TGuildUID pGuildUID, char cType, INT64 biSrcSerial, INT64 biDestSerial, const TItemInfo *pSrcInfo, const TItemInfo *pDestInfo, __time64_t VersionDate)
|
|||
|
|
{
|
|||
|
|
MARefreshGuildItem Refresh;
|
|||
|
|
memset (&Refresh, 0, sizeof(Refresh));
|
|||
|
|
|
|||
|
|
Refresh.nManagedID = g_Config.nManagedID;
|
|||
|
|
Refresh.GuildUID = pGuildUID;
|
|||
|
|
|
|||
|
|
Refresh.cMoveType = cType;
|
|||
|
|
Refresh.biSrcSerial = biSrcSerial;
|
|||
|
|
Refresh.biDestSerial = biDestSerial;
|
|||
|
|
Refresh.VersionDate = VersionDate;
|
|||
|
|
|
|||
|
|
if (pSrcInfo)
|
|||
|
|
Refresh.SrcInfo = *pSrcInfo;
|
|||
|
|
|
|||
|
|
if (pDestInfo)
|
|||
|
|
Refresh.DestInfo = *pDestInfo;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_REFRESH_GUILDITEM, 0, reinterpret_cast<char*>(&Refresh), sizeof(Refresh));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendRefreshGuildCoin (const TGuildUID pGuildUID, INT64 biTotalCoin)
|
|||
|
|
{
|
|||
|
|
MARefreshGuildCoin Refresh;
|
|||
|
|
memset (&Refresh, 0, sizeof(Refresh));
|
|||
|
|
|
|||
|
|
Refresh.nManagedID = g_Config.nManagedID;
|
|||
|
|
Refresh.GuildUID = pGuildUID;
|
|||
|
|
Refresh.biTotalCoin = biTotalCoin;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_REFRESH_GUILDCOIN, 0, reinterpret_cast<char*>(&Refresh), sizeof(Refresh));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendExtendGuildWareSize (const TGuildUID pGuildUID, short wSize)
|
|||
|
|
{
|
|||
|
|
MAExtendGuildWare Packet;
|
|||
|
|
memset (&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.wWareSize = wSize;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_EXTEND_GUILDWARE, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendChangeGuildMemberInfo(const TGuildUID pGuildUID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nChgAccountDBID, INT64 nChgCharacterDBID, BYTE btGuildMemberUpdate, int iInt1, int iInt2, INT64 biInt64, LPCWSTR pText, bool bReturn)
|
|||
|
|
{
|
|||
|
|
MAChangeGuildMemberInfo Packet;
|
|||
|
|
memset (&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
if(bReturn) //<2F>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ٽ<EFBFBD> <20>ƾ<DEBE> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
Packet.nManagedID = 0;
|
|||
|
|
else
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nReqAccountDBID = nReqAccountDBID;
|
|||
|
|
Packet.nReqCharacterDBID = nReqCharacterDBID;
|
|||
|
|
Packet.nChgAccountDBID = nChgAccountDBID;
|
|||
|
|
Packet.nChgCharacterDBID = nChgCharacterDBID;
|
|||
|
|
Packet.btGuildMemberUpdate = btGuildMemberUpdate;
|
|||
|
|
Packet.Int1 = iInt1;
|
|||
|
|
Packet.Int2 = iInt2;
|
|||
|
|
Packet.Int64 = biInt64;
|
|||
|
|
if (pText) {
|
|||
|
|
_wcscpy(Packet.Text, _countof(Packet.Text), pText, (int)wcslen(pText));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CHANGEGUILDMEMBINFO, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildChat(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen)
|
|||
|
|
{
|
|||
|
|
MAGuildChat Packet;
|
|||
|
|
memset (&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
|
|||
|
|
_wcscpy( Packet.wszChatMsg, _countof(Packet.wszChatMsg), lpwszChatMsg, nLen );
|
|||
|
|
Packet.nLen = nLen;
|
|||
|
|
|
|||
|
|
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.wszChatMsg) + sizeof(Packet.wszChatMsg[0]) * Packet.nLen);
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILDCHAT, 0, reinterpret_cast<char*>(&Packet), iSize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildChangeName(const TGuildUID pGuildUID, LPCWSTR lpwszGuildName)
|
|||
|
|
{
|
|||
|
|
MAGuildChangeName Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAGuildChangeName));
|
|||
|
|
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
_wcscpy( Packet.wszGuildName, _countof(Packet.wszGuildName), lpwszGuildName, (int)wcslen(lpwszGuildName) );
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILDCHANGENAME, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildChangeName));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildChangeMark(const TGuildUID pGuildUID, short wMark, short wMarkBG, short wMarkBorder)
|
|||
|
|
{
|
|||
|
|
MAGuildChangeMark Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAGuildChangeMark));
|
|||
|
|
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.wMark = wMark;
|
|||
|
|
Packet.wMarkBG = wMarkBG;
|
|||
|
|
Packet.wMarkBorder = wMarkBorder;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILDCHANGEMARK, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildChangeMark));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendUpdateGuildExp(const TGuildUID pGuildUID, const TAModGuildExp* pPacket)
|
|||
|
|
{
|
|||
|
|
MAUpdateGuildExp Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.cPointType = pPacket->cPointType;
|
|||
|
|
Packet.nPointValue = pPacket->nPointValue;
|
|||
|
|
Packet.nTotalGuildExp = pPacket->nTotalGuildExp;
|
|||
|
|
Packet.nDailyPointValue = pPacket->nDailyPointValue;
|
|||
|
|
Packet.nLevel = pPacket->nLevel;
|
|||
|
|
Packet.biCharacterDBID = pPacket->biCharacterDBID;
|
|||
|
|
Packet.nMissionID = pPacket->nMissionID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_UPDATEGUILDEXP, 0, reinterpret_cast<char*>(&Packet), sizeof(MAUpdateGuildExp));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendEnrollGuildWar (const TGuildUID pGuildUID, short wScheduleID, BYTE cTeamColorCode)
|
|||
|
|
{
|
|||
|
|
MAEnrollGuildWar Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAEnrollGuildWar));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.wScheduleID = wScheduleID;
|
|||
|
|
Packet.cTeamColorCode = cTeamColorCode;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ENROLLGUILDWAR, 0, reinterpret_cast<char*>(&Packet), sizeof(MAEnrollGuildWar));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarSchedule(int nResultCode, short wSchdeduleID, short wWinersWeightRate, TGuildWarEventInfo* pEventInfo, bool bForce, bool bFinalProgress, __time64_t tRewardExpireDate)
|
|||
|
|
{
|
|||
|
|
VIMASetGuildWarSchedule Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMASetGuildWarSchedule));
|
|||
|
|
|
|||
|
|
Packet.nResultCode = nResultCode;
|
|||
|
|
Packet.wScheduleID = wSchdeduleID;
|
|||
|
|
Packet.wWinersWeightRate = wWinersWeightRate;
|
|||
|
|
Packet.bForce = bForce;
|
|||
|
|
Packet.bFinalProgress = bFinalProgress;
|
|||
|
|
Packet.tRewardExpireDate = tRewardExpireDate;
|
|||
|
|
memcpy(Packet.EventInfo, pEventInfo, sizeof(Packet.EventInfo));
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_SCHEDULE, 0, reinterpret_cast<char*>(&Packet), sizeof(VIMASetGuildWarSchedule));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarFinalSchedule(TGuildWarEventInfo* pFinalSchedule)
|
|||
|
|
{
|
|||
|
|
MASetGuildWarFinalSchedule Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MASetGuildWarFinalSchedule));
|
|||
|
|
|
|||
|
|
memcpy(Packet.GuildWarFinalSchedule, pFinalSchedule, sizeof(Packet.GuildWarFinalSchedule));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_FINALSCHEDULE, 0, reinterpret_cast<char*>(&Packet), sizeof(MASetGuildWarFinalSchedule));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarPoint(int nResultCode, int nBlueTeamPoint, int nRedTeamPoint)
|
|||
|
|
{
|
|||
|
|
MASetGuildWarPoint Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MASetGuildWarPoint));
|
|||
|
|
|
|||
|
|
Packet.nResultCode = nResultCode;
|
|||
|
|
Packet.nBlueTeamPoint = nBlueTeamPoint;
|
|||
|
|
Packet.nRedTeamPoint = nRedTeamPoint;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_POINT, 0, reinterpret_cast<char*>(&Packet), sizeof(MASetGuildWarPoint));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddGuildWarPoint(char cTeamType, TGuildUID GuildUID, int nAddPoint)
|
|||
|
|
{
|
|||
|
|
MAAddGuildWarPoint Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAAddGuildWarPoint));
|
|||
|
|
|
|||
|
|
Packet.cTeamType = cTeamType;
|
|||
|
|
Packet.GuildUID = GuildUID;
|
|||
|
|
Packet.nAddPoint = nAddPoint;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ADDGUILDWAR_POINT, 0, reinterpret_cast<char*>(&Packet), sizeof(MAAddGuildWarPoint));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarTournamentInfo(TAGetGuildWarFinalResults* pGuildWarFinalResults)
|
|||
|
|
{
|
|||
|
|
MAGuildWarTournamentInfo Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAGuildWarTournamentInfo));
|
|||
|
|
|
|||
|
|
char cMatchSequence = 0;
|
|||
|
|
for( int i=0; i<GUILDWAR_FINALS_TEAM_MAX; ++i)
|
|||
|
|
{
|
|||
|
|
if( pGuildWarFinalResults->GuildFinalResultInfo[i].nGuildDBID == 0 )
|
|||
|
|
break;
|
|||
|
|
cMatchSequence = pGuildWarFinalResults->GuildFinalResultInfo[i].cMatchSequence -1; //
|
|||
|
|
if( cMatchSequence < 0 || cMatchSequence >= GUILDWAR_FINALS_TEAM_MAX)
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
TGuildUID GuidUID(g_Config.nWorldSetID, pGuildWarFinalResults->GuildFinalResultInfo[i].nGuildDBID);
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].GuildUID = GuidUID;
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].cMatchTypeCode = pGuildWarFinalResults->GuildFinalResultInfo[i].cMatchTypeCode;
|
|||
|
|
memcpy(Packet.sGuildWarFinalInfo[cMatchSequence].wszGuildName, pGuildWarFinalResults->GuildFinalResultInfo[i].wszGuildName, sizeof(Packet.sGuildWarFinalInfo[cMatchSequence].wszGuildName) );
|
|||
|
|
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].wGuildMark = pGuildWarFinalResults->GuildFinalResultInfo[i].wGuildMark;
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].wGuildMarkBG = pGuildWarFinalResults->GuildFinalResultInfo[i].wGuildMarkBG;
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].wGuildMarkBorder = pGuildWarFinalResults->GuildFinalResultInfo[i].wGuildMarkBorder;
|
|||
|
|
|
|||
|
|
if(pGuildWarFinalResults->GuildFinalResultInfo[i].cMatchResultCode == 1
|
|||
|
|
|| pGuildWarFinalResults->GuildFinalResultInfo[i].cMatchResultCode == 4) //1=<3D>¸<EFBFBD>, 2=<3D>й<EFBFBD>, 3=<3D><><EFBFBD><EFBFBD>, 4=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].bWin = true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
Packet.sGuildWarFinalInfo[cMatchSequence].bWin = false;
|
|||
|
|
}
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_TOURNAMENTINFO, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildWarTournamentInfo));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarPreWinGuild(TGuildUID GuildUID, short wScheduleID)
|
|||
|
|
{
|
|||
|
|
MAGuildWarPreWinGuild Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAGuildWarPreWinGuild));
|
|||
|
|
|
|||
|
|
Packet.GuildUID = GuildUID;
|
|||
|
|
Packet.wScheduleID = wScheduleID;
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_PRE_WIN_GUILD, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildWarPreWinGuild));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarFinalTeam(TAGetGuildWarPointGuildTotal* pGuildWarPointGuildTotal)
|
|||
|
|
{
|
|||
|
|
VIMASetGuildWarFinalTeam Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMASetGuildWarFinalTeam));
|
|||
|
|
for( int i=0; i<GUILDWAR_FINALS_TEAM_MAX; ++i)
|
|||
|
|
{
|
|||
|
|
if( pGuildWarPointGuildTotal->sGuildWarPointGuildTotal[i].nGuildDBID <= 0 || pGuildWarPointGuildTotal->nTotalCount == Packet.nCount)
|
|||
|
|
break;
|
|||
|
|
TGuildUID GuildUID(g_Config.nWorldSetID, pGuildWarPointGuildTotal->sGuildWarPointGuildTotal[i].nGuildDBID);
|
|||
|
|
Packet.GuidUID[i] = GuildUID;
|
|||
|
|
memcpy(Packet.wszGuildName[i], pGuildWarPointGuildTotal->sGuildWarPointGuildTotal[i].wszGuildName, sizeof(pGuildWarPointGuildTotal->sGuildWarPointGuildTotal[i].wszGuildName));
|
|||
|
|
Packet.nTotalPoint[i] = pGuildWarPointGuildTotal->sGuildWarPointGuildTotal[i].nOpeningPointSum;
|
|||
|
|
++Packet.nCount;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_FINAL, 0,reinterpret_cast<char*>(&Packet), sizeof(VIMASetGuildWarFinalTeam));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarPointRunning(TAGetGuildWarPointRunningTotal* pGuildWarPointRunningTotal )
|
|||
|
|
{
|
|||
|
|
MASetGuildWarPointRunningTotal Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MASetGuildWarPointRunningTotal));
|
|||
|
|
int nTotal = 0;
|
|||
|
|
for( int i=0; i<GUILDWAR_TRIAL_POINT_TEAM_MAX; ++i)
|
|||
|
|
{
|
|||
|
|
if( pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].nGuildDBID <=0 || pGuildWarPointRunningTotal->nTotalCount == nTotal )
|
|||
|
|
break;
|
|||
|
|
Packet.sGuildWarPointRunningTotal[i].wRanking = pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].wRanking;
|
|||
|
|
memcpy(Packet.sGuildWarPointRunningTotal[i].wszGuildName, pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].wszGuildName, sizeof(Packet.sGuildWarPointRunningTotal[i].wszGuildName));
|
|||
|
|
memcpy(Packet.sGuildWarPointRunningTotal[i].wszGuildMasterName, pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].wszMasterName,sizeof(Packet.sGuildWarPointRunningTotal[i].wszGuildMasterName));
|
|||
|
|
Packet.sGuildWarPointRunningTotal[i].wCurGuildUserCount = pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].wGuildMemberCount;
|
|||
|
|
Packet.sGuildWarPointRunningTotal[i].nTotalPoint = pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].nOpeningPointSum;
|
|||
|
|
|
|||
|
|
Packet.sGuildWarPointRunningTotal[i].wMaxGuildUserCount = pGuildWarPointRunningTotal->sGuildWarPointGuildTotal[i].nMaxMemberCount;
|
|||
|
|
++nTotal;
|
|||
|
|
}
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_POINT_RUNNING_TOTAL, 0, reinterpret_cast<char*>(&Packet), sizeof(MASetGuildWarPointRunningTotal));
|
|||
|
|
}
|
|||
|
|
void CDNMasterConnection::SendSetGuildWarPreWinReward()
|
|||
|
|
{
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_PRE_WIN_REWARD, 0,NULL, 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildWarRefreshGuildPoint(TAGetGuildWarPointFinalRewards* pPointFinalRewards )
|
|||
|
|
{
|
|||
|
|
MAGuildWarRefreshGuildPoint Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAGuildWarRefreshGuildPoint));
|
|||
|
|
|
|||
|
|
for( int i=0; i<GUILDWAR_FINALS_TEAM_MAX; ++i)
|
|||
|
|
{
|
|||
|
|
if( pPointFinalRewards->nGuildDBID[i] == 0 )
|
|||
|
|
break;
|
|||
|
|
TGuildUID GuildUID(g_Config.nWorldSetID, pPointFinalRewards->nGuildDBID[i] );
|
|||
|
|
Packet.GuildUID[i] = GuildUID;
|
|||
|
|
Packet.nGuildPoint[i] = pPointFinalRewards->nGuildPoint[i];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILDWAR_REFRESH_GUILD_POINT, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildWarRefreshGuildPoint));
|
|||
|
|
}
|
|||
|
|
void CDNMasterConnection::SendGuildWarScheduleReload()
|
|||
|
|
{
|
|||
|
|
AddSendData(VIMA_GUILDWAR_SCHEDULE_RELOAD, 0,NULL, 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSetGuilldWarPreWinSkillCoolTime(int nManagedID, DWORD dwSkillCoolTime)
|
|||
|
|
{
|
|||
|
|
MAGuildWarPreWinSkillCoolTime Packet;
|
|||
|
|
|
|||
|
|
memset(&Packet, 0, sizeof(MAGuildWarPreWinSkillCoolTime));
|
|||
|
|
Packet.nManagedID = nManagedID;
|
|||
|
|
Packet.dwSkillCoolTime = dwSkillCoolTime;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_SETGUILDWAR_PREWIN_SKILLCOOLTIME, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildWarPreWinSkillCoolTime));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddJobReserve(int nResultCode, char cJobType, int nJobSeq)
|
|||
|
|
{
|
|||
|
|
VIMAAddDBJobSystemReserve Packet;
|
|||
|
|
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAAddDBJobSystemReserve));
|
|||
|
|
Packet.nResultCode = nResultCode;
|
|||
|
|
Packet.cJobType = cJobType;
|
|||
|
|
Packet.nJobSeq = nJobSeq;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ADD_DBJOBSYSTEM_RESERVE, 0, reinterpret_cast<char*>(&Packet), sizeof(VIMAAddDBJobSystemReserve));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGetJobReserve(int nResultCode, int nJobSeq, char cJobStatus)
|
|||
|
|
{
|
|||
|
|
VIMAGetDBJobSystemReserve Packet;
|
|||
|
|
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAGetDBJobSystemReserve));
|
|||
|
|
Packet.nResultCode = nResultCode;
|
|||
|
|
Packet.nJobSeq = nJobSeq;
|
|||
|
|
Packet.cJobStatus = cJobStatus;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GET_DBJOBSYSTEM_RESERVE, 0, reinterpret_cast<char*>(&Packet), sizeof(VIMAGetDBJobSystemReserve));
|
|||
|
|
}
|
|||
|
|
void CDNMasterConnection::SendMatchListSaveResult(int nResultCode)
|
|||
|
|
{
|
|||
|
|
VIMAMatchListSaveResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
Packet.nResultCode = nResultCode;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_MATCHLIST_SAVE_RESULT, 0, reinterpret_cast<char*>(&Packet), sizeof(VIMAMatchListSaveResult));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendGuildRecruitMemberResult( const TGuildUID pGuildUID, WCHAR* wszCharacterName, INT64 nCharacterDBID, TGuildView GuildView, GuildRecruitSystem::AcceptType::eType type )
|
|||
|
|
{
|
|||
|
|
MAGuildRecruitMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.cAcceptType = type;
|
|||
|
|
if (wszCharacterName)
|
|||
|
|
_wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), wszCharacterName, (int)wcslen(wszCharacterName));
|
|||
|
|
Packet.biCharacterDBID = nCharacterDBID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.GuildView = GuildView;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILDRECRUIT_MEBMER, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildRecruitMember));
|
|||
|
|
}
|
|||
|
|
void CDNMasterConnection::SendAddGuildRewardItem( const TGuildUID pGuildUID, TAAddGuildRewardItem* GuildRewardItem )
|
|||
|
|
{
|
|||
|
|
MAGuildRewardItem Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nItemID = GuildRewardItem->nItemID;
|
|||
|
|
Packet.cItemBuyType = GuildRewardItem->cItemBuyType;
|
|||
|
|
Packet.m_tExpireDate = GuildRewardItem->m_tExpireDate;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILD_ADD_REWARDITEM, 0, reinterpret_cast<char*>(&Packet), sizeof(MAGuildRewardItem));
|
|||
|
|
}
|
|||
|
|
void CDNMasterConnection::SendExtendGuildSize( const TGuildUID pGuildUID, short wSize )
|
|||
|
|
{
|
|||
|
|
MAExtendGuildSize Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.nGuildSize = wSize;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GUILD_EXTEND_GUILDSIZE, 0, reinterpret_cast<char*>(&Packet), sizeof(MAExtendGuildSize));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendChangeCharacterName(const TGuildUID pGuildUID, char cWorldSetID, UINT uiAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszOriginName, LPCWSTR lpwszCharacterName, INT64 biBFCharacterDBID)
|
|||
|
|
{
|
|||
|
|
MAChangeCharacterName Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAChangeCharacterName));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.GuildUID = pGuildUID;
|
|||
|
|
Packet.cWorldSetID = cWorldSetID;
|
|||
|
|
Packet.uiAccountDBID = uiAccountDBID;
|
|||
|
|
Packet.nCharacterDBID = nCharacterDBID;
|
|||
|
|
#if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
Packet.biBFCharacterDBID = biBFCharacterDBID;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (lpwszOriginName) _wcscpy(Packet.wszOriginName, _countof(Packet.wszOriginName), lpwszOriginName, (int)wcslen(lpwszOriginName));
|
|||
|
|
if (lpwszCharacterName) _wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), lpwszCharacterName, (int)wcslen(lpwszCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CHANGECHARACTERNAME, 0, reinterpret_cast<char*>(&Packet), sizeof(MAChangeCharacterName));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// MasterSystem
|
|||
|
|
void CDNMasterConnection::SendCheckMasterApplication( const INT64 biMasterCharacterDBID, const INT64 biPupilCharacterDBID )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMACheckMasterApplication TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
|
|||
|
|
TxPacket.biPupilCharacterDBID = biPupilCharacterDBID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_CHECKMASTERAPPLICATION, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemSyncSimpleInfo( const INT64 biCharacterDBID, MasterSystem::EventType::eCode Type )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMASyncSimpleInfo TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|||
|
|
TxPacket.EventCode = Type;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_SYNC_SIMPLEINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemSyncJoin( const INT64 biCharacterDBID, bool bIsAddPupil )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMASyncJoin TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|||
|
|
TxPacket.bIsAddPupil = bIsAddPupil;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_SYNC_JOIN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemSyncLeave( const INT64 biCharacterDBID, bool bIsDelPupil )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMASyncLeave TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|||
|
|
TxPacket.bIsDelPupil = bIsDelPupil;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_SYNC_LEAVE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemSyncGraduate( const INT64 biCharacterDBID, WCHAR* pwszCharName )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMASyncGraduate TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biCharacterDBID = biCharacterDBID;
|
|||
|
|
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_SYNC_GRADUATE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemSyncConnect( const bool bIsConnect, WCHAR* pwszCharName, const TMasterSystemData* pMasterSystemData )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ䰡 <20><><EFBFBD><EFBFBD>.
|
|||
|
|
if( pMasterSystemData->SimpleInfo.cCharacterDBIDCount == 0 )
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
MasterSystem::VIMASyncConnect TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.bIsConnect = bIsConnect;
|
|||
|
|
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, (int)wcslen(pwszCharName) );
|
|||
|
|
TxPacket.cCharacterDBIDCount = pMasterSystemData->SimpleInfo.cCharacterDBIDCount;
|
|||
|
|
for( UINT i=0 ; i<TxPacket.cCharacterDBIDCount ; ++i )
|
|||
|
|
TxPacket.CharacterDBIDList[i] = pMasterSystemData->SimpleInfo.OppositeInfo[i].CharacterDBID;
|
|||
|
|
|
|||
|
|
int iSize = sizeof(TxPacket)-sizeof(TxPacket.CharacterDBIDList)+TxPacket.cCharacterDBIDCount*sizeof(TxPacket.CharacterDBIDList[0]);
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_SYNC_CONNECT, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemCheckLeave( UINT uiAccountDBID, const INT64 biDestCharacterDBID, bool bIsMaster )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMACheckLeave TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.biDestCharacterDBID = biDestCharacterDBID;
|
|||
|
|
TxPacket.bIsMaster = bIsMaster;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_CHECK_LEAVE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemRecallMaster( UINT uiPupilAccountDBID, WCHAR* pwszPupilCharName, WCHAR* pwszMasterCharName, const TMasterSystemData* pMasterSystemData )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMARecallMaster TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiPupilAccountDBID = uiPupilAccountDBID;
|
|||
|
|
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pwszPupilCharName, (int)wcslen(pwszPupilCharName) );
|
|||
|
|
_wcscpy( TxPacket.wszMasterCharName, _countof(TxPacket.wszMasterCharName), pwszMasterCharName, (int)wcslen(pwszMasterCharName) );
|
|||
|
|
TxPacket.cCharacterDBIDCount = pMasterSystemData->SimpleInfo.cCharacterDBIDCount;
|
|||
|
|
for( UINT i=0 ; i<pMasterSystemData->SimpleInfo.cCharacterDBIDCount ; ++i )
|
|||
|
|
TxPacket.CharacterDBIDList[i] = pMasterSystemData->SimpleInfo.OppositeInfo[i].CharacterDBID;
|
|||
|
|
|
|||
|
|
int iSize = sizeof(TxPacket)-sizeof(TxPacket.CharacterDBIDList)+TxPacket.cCharacterDBIDCount*sizeof(TxPacket.CharacterDBIDList[0]);
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_RECALL_MASTER, 0, reinterpret_cast<char*>(&TxPacket), iSize );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemBreakInto( int iRet, UINT uiMasterAccountDBID, WCHAR* pwszPupilCharName, const TMasterSystemData* pMasterSystemData )
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMABreakInto TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.iRet = iRet;
|
|||
|
|
TxPacket.uiMasterAccountDBID = uiMasterAccountDBID;
|
|||
|
|
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pwszPupilCharName, (int)wcslen(pwszPupilCharName) );
|
|||
|
|
TxPacket.cCharacterDBIDCount = pMasterSystemData->SimpleInfo.cCharacterDBIDCount;
|
|||
|
|
for( UINT i=0 ; i<TxPacket.cCharacterDBIDCount ; ++i )
|
|||
|
|
TxPacket.CharacterDBIDList[i] = pMasterSystemData->SimpleInfo.OppositeInfo[i].CharacterDBID;
|
|||
|
|
|
|||
|
|
int iSize = sizeof(TxPacket)-sizeof(TxPacket.CharacterDBIDList)+TxPacket.cCharacterDBIDCount*sizeof(TxPacket.CharacterDBIDList[0]);
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_BREAKINTO, 0, reinterpret_cast<char*>(&TxPacket), iSize );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemJoinConfirm( const INT64 biMasterCharacterDBID, const BYTE cLevel, const BYTE cJob, WCHAR* pwszPupilCharName)
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMAJoinConfirm TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
|
|||
|
|
TxPacket.cLevel = cLevel;
|
|||
|
|
TxPacket.cJob = cJob;
|
|||
|
|
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pwszPupilCharName, (int)wcslen(pwszPupilCharName) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_JOIN_CONFIRM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendMasterSystemJoinConfirmResult( const int iRet, const bool bIsAccept, const INT64 biMasterCharacterDBID, WCHAR* pwszPupilCharName)
|
|||
|
|
{
|
|||
|
|
MasterSystem::VIMAJoinConfirmResult TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.iRet = iRet;
|
|||
|
|
TxPacket.bIsAccept = bIsAccept;
|
|||
|
|
TxPacket.biMasterCharacterDBID = biMasterCharacterDBID;
|
|||
|
|
_wcscpy( TxPacket.wszPupilCharName, _countof(TxPacket.wszPupilCharName), pwszPupilCharName, (int)wcslen(pwszPupilCharName) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_MASTERSYSTEM_JOIN_CONFIRM_RESULT, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSyncSystemMail( TASendSystemMail* pMail )
|
|||
|
|
{
|
|||
|
|
VIMASyncSystemMail TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.biReceiverCharacterDBID = pMail->biReceiverCharacterDBID;
|
|||
|
|
TxPacket.nMailDBID = pMail->nMailDBID;
|
|||
|
|
TxPacket.iTotalMailCount = pMail->iTotalMailCount;
|
|||
|
|
TxPacket.iNotReadMailCount = pMail->iNotReadMailCount;
|
|||
|
|
TxPacket.i7DaysLeftMailCount = pMail->i7DaysLeftMailCount;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_SYNC_SYSTEMMAIL, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendFriendAddNotify(UINT nAddedAccountDBID, const WCHAR * pAddName)
|
|||
|
|
{
|
|||
|
|
VIMAFriendAddNotice Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nAddedAccountDBID = nAddedAccountDBID;
|
|||
|
|
_wcscpy(Packet.wszAddName, _countof(Packet.wszAddName), pAddName, (int)wcslen(pAddName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_FRIENDADD, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef PRE_ADD_DOORS
|
|||
|
|
void CDNMasterConnection::SendPrivateChat(UINT nFromAccountDBID, WCHAR *pwszToCharacterName, char cType, WCHAR *pwszChatMsg, short wChatLen, INT64 biDestCharacterDBID/* = 0*/)
|
|||
|
|
#else //#ifdef PRE_ADD_DOORS
|
|||
|
|
void CDNMasterConnection::SendPrivateChat(UINT nFromAccountDBID, WCHAR *pwszToCharacterName, char cType, WCHAR *pwszChatMsg, short wChatLen)
|
|||
|
|
#endif //#ifdef PRE_ADD_DOORS
|
|||
|
|
{
|
|||
|
|
VIMAPrivateChat Private = { 0, };
|
|||
|
|
|
|||
|
|
Private.nAccountDBID = nFromAccountDBID;
|
|||
|
|
memcpy(Private.wszToCharacterName, pwszToCharacterName, sizeof(Private.wszToCharacterName));
|
|||
|
|
Private.cType = cType;
|
|||
|
|
Private.wChatLen = wChatLen;
|
|||
|
|
_wcscpy(Private.wszChatMsg, _countof(Private.wszChatMsg), pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|||
|
|
#ifdef PRE_ADD_DOORS
|
|||
|
|
Private.biDestCharacterDBID = biDestCharacterDBID;
|
|||
|
|
#endif //#ifdef PRE_ADD_DOORS
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHAT, 0, (char*)&Private, sizeof(Private) - sizeof(Private.wszChatMsg) + (wChatLen * 2));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendChat(char cType, UINT nFromAccountDBID, const WCHAR *pwszChatMsg, short wChatLen, int nMapIdx)
|
|||
|
|
{
|
|||
|
|
VIMAChat Chat = { 0, };
|
|||
|
|
|
|||
|
|
Chat.nAccountDBID = nFromAccountDBID;
|
|||
|
|
Chat.cType = cType;
|
|||
|
|
Chat.wChatLen = wChatLen;
|
|||
|
|
Chat.nMapIdx = nMapIdx;
|
|||
|
|
_wcscpy(Chat.wszChatMsg, _countof(Chat.wszChatMsg), pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CHAT, 0, (char*)&Chat, sizeof(Chat) - sizeof(Chat.wszChatMsg) + (wChatLen * 2));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendWorldSystemMsg(UINT nFromAccountDBID, char cType, int nID, int nValue, const WCHAR* pwszToCharacterName)
|
|||
|
|
{
|
|||
|
|
VIMAWorldSystemMsg Msg = { 0, };
|
|||
|
|
|
|||
|
|
Msg.nAccountDBID = nFromAccountDBID;
|
|||
|
|
Msg.cType = cType;
|
|||
|
|
Msg.nID = nID;
|
|||
|
|
Msg.nValue = nValue;
|
|||
|
|
if (pwszToCharacterName)
|
|||
|
|
_wcscpy(Msg.wszToCharacterName, _countof(Msg.wszToCharacterName), pwszToCharacterName, (int)wcslen(pwszToCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_WORLDSYSTEMMSG, 0, (char*)&Msg, sizeof(VIMAWorldSystemMsg));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendWorldSystemMsg888(UINT nFromAccountDBID, char cType, int nID, int nValue, const WCHAR* pwszToCharacterName)
|
|||
|
|
{
|
|||
|
|
VIMAWorldSystemMsg Msg = { 0, };
|
|||
|
|
|
|||
|
|
Msg.nAccountDBID = nFromAccountDBID;
|
|||
|
|
Msg.cType = cType;
|
|||
|
|
Msg.nID = nID;
|
|||
|
|
Msg.nValue = nValue;
|
|||
|
|
if (pwszToCharacterName)
|
|||
|
|
_wcscpy(Msg.wszToCharacterName, _countof(Msg.wszToCharacterName), pwszToCharacterName, (int)wcslen(pwszToCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_WORLDSYSTEMMSG, 0, (char*)&Msg, sizeof(VIMAWorldSystemMsg));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|||
|
|
void CDNMasterConnection::SendPrivateChannelChat(char cType, UINT nFromAccountDBID, const WCHAR *pwszChatMsg, short wChatLen, INT64 nChannelID)
|
|||
|
|
{
|
|||
|
|
VIMAPrivateChannelChatMsg Chat = { 0, };
|
|||
|
|
|
|||
|
|
Chat.nAccountDBID = nFromAccountDBID;
|
|||
|
|
Chat.cType = cType;
|
|||
|
|
Chat.wChatLen = wChatLen;
|
|||
|
|
Chat.nChannelID = nChannelID;
|
|||
|
|
if(pwszChatMsg)
|
|||
|
|
_wcscpy(Chat.wszChatMsg, _countof(Chat.wszChatMsg), pwszChatMsg, (int)wcslen(pwszChatMsg));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHANNELCHAT, 0, (char*)&Chat, sizeof(VIMAPrivateChannelChatMsg));
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// VoiceChat
|
|||
|
|
void CDNMasterConnection::SendReqVoiceChannelID( TINSTANCEID InstanceID, int nChannelType, int nPvPLobbyChannelID)
|
|||
|
|
{
|
|||
|
|
VIMAReqVoiceChannelID Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.InstanceID = InstanceID;
|
|||
|
|
Packet.nPvPLobbyChannelID = nPvPLobbyChannelID;
|
|||
|
|
Packet.cVoiceChannelType = (BYTE)nChannelType;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_REQVOICECHANNELID, 0, (char*)&Packet, sizeof(VIMAReqVoiceChannelID));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// PvP
|
|||
|
|
void CDNMasterConnection::SendMovePvPLobbyToPvPVillage( const UINT uiAccountDBID )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_MOVELOBBYTOVILLAGE TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_MOVELOBBYTOVILLAGE, 0, reinterpret_cast<char*>(&TxPacket), sizeof(VIMAPVP_MOVELOBBYTOVILLAGE) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|||
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|||
|
|
void CDNMasterConnection::SendPvPCreateRoom( const UINT uiCreateAccountDBID, const BYTE cGameMode, const USHORT unVillageChannelID, const UINT uiVillageMapIndex, const CSPVP_CREATEROOM* pPacket, TEvent* pEvent, BYTE cJob, TPvPGambleRoomData* GambleData )
|
|||
|
|
#else
|
|||
|
|
void CDNMasterConnection::SendPvPCreateRoom( const UINT uiCreateAccountDBID, const BYTE cGameMode, const USHORT unVillageChannelID, const UINT uiVillageMapIndex, const CSPVP_CREATEROOM* pPacket, TEvent* pEvent, BYTE cJob )
|
|||
|
|
#endif
|
|||
|
|
#else
|
|||
|
|
void CDNMasterConnection::SendPvPCreateRoom( const UINT uiCreateAccountDBID, const BYTE cGameMode, const USHORT unVillageChannelID, const UINT uiVillageMapIndex, const CSPVP_CREATEROOM* pPacket, TEvent* pEvent/*=NULL*/ )
|
|||
|
|
#endif
|
|||
|
|
{
|
|||
|
|
VIMAPVP_CREATEROOM TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiCreateAccountDBID = uiCreateAccountDBID;
|
|||
|
|
TxPacket.unVillageChannelID = unVillageChannelID;
|
|||
|
|
TxPacket.uiVillageMapIndex = uiVillageMapIndex;
|
|||
|
|
TxPacket.cGameMode = cGameMode;
|
|||
|
|
if( pEvent )
|
|||
|
|
{
|
|||
|
|
TxPacket.nEventID = pEvent->nEventID;
|
|||
|
|
memcpy( &TxPacket.EventData, pEvent, sizeof(TEvent) );
|
|||
|
|
}
|
|||
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|||
|
|
TxPacket.cCreateUserJob = cJob;
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|||
|
|
if( GambleData )
|
|||
|
|
{
|
|||
|
|
TxPacket.cGambleType = GambleData->cGambleType;
|
|||
|
|
TxPacket.nPrice = GambleData->nPrice;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
memcpy( &TxPacket.sCSPVP_CREATEROOM, pPacket, sizeof(CSPVP_CREATEROOM)-sizeof(pPacket->wszBuf)+sizeof(WCHAR)*(pPacket->cRoomNameLen+pPacket->cRoomPWLen) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_CREATEROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(VIMAPVP_CREATEROOM)-sizeof(pPacket->wszBuf)+sizeof(WCHAR)*(pPacket->cRoomNameLen+pPacket->cRoomPWLen) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPModifyRoom( const UINT uiAccountDBID, const BYTE cGameMode, const CSPVP_MODIFYROOM* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_MODIFYROOM TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.cGameMode = cGameMode;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_MODIFYROOM, pPacket, sizeof(CSPVP_MODIFYROOM)-sizeof(pPacket->sCSPVP_CREATEROOM.wszBuf)+sizeof(WCHAR)*(pPacket->sCSPVP_CREATEROOM.cRoomNameLen+pPacket->sCSPVP_CREATEROOM.cRoomPWLen) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_MODIFYROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(VIMAPVP_MODIFYROOM)-sizeof(pPacket->sCSPVP_CREATEROOM.wszBuf)+sizeof(WCHAR)*(pPacket->sCSPVP_CREATEROOM.cRoomNameLen+pPacket->sCSPVP_CREATEROOM.cRoomPWLen) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPLeaveRoom( const UINT uiLeaveAccountDBID )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_LEAVEROOM TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiLeaveAccountDBID = uiLeaveAccountDBID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_LEAVEROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPChangeCaptain( const UINT uiAccountDBID, const CSPVP_CHANGECAPTAIN* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_CHANGECAPTAIN TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_CHANGECAPTAIN, pPacket, sizeof(CSPVP_CHANGECAPTAIN) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_CHANGECAPTAIN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPRoomList( const UINT uiAccountDBID, const USHORT unVillageChannelID, const CSPVP_ROOMLIST* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_ROOMLIST TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.unVillageChannelID = unVillageChannelID;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_ROOMLIST, pPacket, sizeof(CSPVP_ROOMLIST) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_ROOMLIST, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPWaitUserList( const UINT uiAccountDBID, const USHORT unVillageChannelID, const CSPVP_WAITUSERLIST* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_WAITUSERLIST TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.unVillageChannelID = unVillageChannelID;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_WAITUSERLIST, pPacket, sizeof(CSPVP_WAITUSERLIST) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_WAITUSERLIST, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
|
|||
|
|
void CDNMasterConnection::SendPvPRoomListRelay( const BYTE cVIllageID, const UINT uiAccountDBID, const short nRetCode, std::vector<CDNPvPRoom*>& vPvPRoom, const UINT uiMaxPage)
|
|||
|
|
{
|
|||
|
|
PVP_ROOMLIST_RELAY TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket));
|
|||
|
|
|
|||
|
|
TxPacket.cVillageID = cVIllageID;
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
|
|||
|
|
TxPacket.sSCPVP_ROOMLIST.nRetCode = nRetCode;
|
|||
|
|
TxPacket.sSCPVP_ROOMLIST.cRoomCount = static_cast<BYTE>( vPvPRoom.size() );
|
|||
|
|
TxPacket.sSCPVP_ROOMLIST.uiMaxPage = uiMaxPage;
|
|||
|
|
WCHAR* pBufferOffset = TxPacket.sSCPVP_ROOMLIST.RoomInfoList.wszBuffer;
|
|||
|
|
for( UINT i=0 ; i<vPvPRoom.size() ; ++i )
|
|||
|
|
pBufferOffset = vPvPRoom[i]->MakeRoomInfoList( NULL, &TxPacket.sSCPVP_ROOMLIST.RoomInfoList, i, pBufferOffset );
|
|||
|
|
|
|||
|
|
int nSize = static_cast<int>(sizeof(TxPacket.sSCPVP_ROOMLIST)-sizeof(TxPacket.sSCPVP_ROOMLIST.RoomInfoList.wszBuffer)+(sizeof(WCHAR)*(pBufferOffset-TxPacket.sSCPVP_ROOMLIST.RoomInfoList.wszBuffer)) );
|
|||
|
|
|
|||
|
|
TxPacket.nSize = nSize;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_ROOMLIST_RELAY, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket)-sizeof(TxPacket.sSCPVP_ROOMLIST)+nSize );
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|||
|
|
void CDNMasterConnection::SendPvPChangeChannel(UINT nAccountDBID, BYTE cType, BYTE cPvPLevel, BYTE cSeperateLevel, bool bSend)
|
|||
|
|
{
|
|||
|
|
PVP_CHANGECHANNEL packet;
|
|||
|
|
memset(&packet, 0, sizeof(PVP_CHANGECHANNEL));
|
|||
|
|
|
|||
|
|
packet.nAccountDBID = nAccountDBID;
|
|||
|
|
packet.cType = cType;
|
|||
|
|
packet.cPvPLevel;
|
|||
|
|
packet.cSeperateLevel = cSeperateLevel;
|
|||
|
|
packet.bSend = bSend;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PVP_CHANGECHANNEL, 0, reinterpret_cast<char*>(&packet), sizeof(packet));
|
|||
|
|
}
|
|||
|
|
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPJoinRoom( const UINT uiAccountDBID, BYTE cUserLevel, const CSPVP_JOINROOM* pPacket, CDNUserSession * pSession )
|
|||
|
|
{
|
|||
|
|
// <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
|||
|
|
if( pPacket->cRoomPWLen > PvPCommon::TxtMax::RoomPW )
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
VIMAPVP_JOINROOM TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.cUserLevel = cUserLevel;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_JOINROOM, pPacket, sizeof(CSPVP_JOINROOM)-sizeof(TxPacket.sCSPVP_JOINROOM.wszRoomPW)+pPacket->cRoomPWLen*sizeof(WCHAR) );
|
|||
|
|
if (pSession)
|
|||
|
|
TxPacket.sCSPVP_JOINROOM.nGuildDBID = pSession->GetGuildUID().nDBID;
|
|||
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|||
|
|
if( pSession )
|
|||
|
|
TxPacket.cUserJob = pSession->GetUserJob();
|
|||
|
|
#endif
|
|||
|
|
AddSendData( VIMA_PVP_JOINROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(VIMAPVP_JOINROOM)-sizeof(TxPacket.sCSPVP_JOINROOM.wszRoomPW)+pPacket->cRoomPWLen*sizeof(WCHAR) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPReady( const UINT uiAccountDBID, const CSPVP_READY* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_READY TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_READY, pPacket, sizeof(CSPVP_READY) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_READY, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPStart( const UINT uiAccountDBID, const CSPVP_START* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_START TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_START, pPacket, sizeof(CSPVP_START) );
|
|||
|
|
|
|||
|
|
#if defined( _FINAL_BUILD )
|
|||
|
|
TxPacket.sCSPVP_START.unCheck = PvPCommon::Check::AllCheck;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_START, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPRandomJoinRoom( const UINT uiAccountDBID, BYTE cUserLevel )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_RANDOMJOINROOM TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.cUserLevel = cUserLevel;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_RANDOMJOINROOM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(VIMAPVP_RANDOMJOINROOM) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPChangeTeam( const UINT uiAccountDBID, BYTE cLevel, const CSPVP_CHANGETEAM* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_CHANGETEAM TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.cUserLevel = cLevel;
|
|||
|
|
memcpy( &TxPacket.sCSPVP_CHANGETEAM, pPacket, sizeof(CSPVP_CHANGETEAM) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_CHANGETEAM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPBan( const UINT uiAccountDBID, const CSPVP_BAN* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_BAN TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
memcpy( &TxPacket.sCSPvPBan, pPacket, sizeof(CSPVP_BAN) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_BAN, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPEnterLobby( const UINT uiAccountDBID, const USHORT unVillageChannelID )
|
|||
|
|
{
|
|||
|
|
VIMAPVP_ENTERLOBBY TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.unVillageChannelID = unVillageChannelID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_ENTERLOBBY, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPLadderInviteUser( UINT uiAccountDBID, const WCHAR* pwszCharName )
|
|||
|
|
{
|
|||
|
|
VIMALadderInviteUser TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), pwszCharName, static_cast<int>(wcslen(pwszCharName)) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_LADDER_INVITEUSER, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPLadderInviteConfirm( UINT uiAccountDBID, const WCHAR* pwszConfirmCharName, const LadderSystem::CS_INVITE_CONFIRM* pPacket )
|
|||
|
|
{
|
|||
|
|
VIMALadderInviteConfirm TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
_wcscpy( TxPacket.wszConfirmCharName, _countof(TxPacket.wszConfirmCharName), pwszConfirmCharName, static_cast<int>(wcslen(pwszConfirmCharName)) );
|
|||
|
|
memcpy( &TxPacket.sInviteComfirm, pPacket, sizeof(TxPacket.sInviteComfirm) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_LADDER_INVITECONFIRM, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPFatigueOption( const UINT uiAccountDBID, bool bFatigueOption)
|
|||
|
|
{
|
|||
|
|
VIMAPVP_FATIGUE_OPTION TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket));
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.bFatigueOption = bFatigueOption;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_PVP_FATIGUE_OPTION, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPSwapMemberIndex(UINT nAccountDBID, BYTE cCount, const TSwapMemberIndex * pIndex)
|
|||
|
|
{
|
|||
|
|
if (pIndex == NULL) return;
|
|||
|
|
|
|||
|
|
VIMAPVPSwapMemberIndex Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAPVPSwapMemberIndex));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.cCount = cCount;
|
|||
|
|
memcpy(Packet.Index, pIndex, sizeof(Packet.Index));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PVP_SWAPTMEMBER_INDEX, 0, (char*)(&Packet), sizeof(Packet) - sizeof(Packet.Index) + (sizeof(TSwapMemberIndex) * Packet.cCount));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendPvPChangeMemberGrade(UINT nAccountDBID, USHORT nType, UINT nSessionID, bool bAsign)
|
|||
|
|
{
|
|||
|
|
VIMAPVPChangeMemberGrade Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAPVPChangeMemberGrade));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nType = nType;
|
|||
|
|
Packet.bAsign = bAsign;
|
|||
|
|
Packet.nTargetSessionID = nSessionID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PVP_CHANGEMEMBER_GRADE, 0, (char*)(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|||
|
|
void CDNMasterConnection::SendPvPSwapTournamentIndex(UINT nAccountDBID, char cSourceIndex, char cDestIndex)
|
|||
|
|
{
|
|||
|
|
VIMAPVPSwapTournamentIndex Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAPVPSwapTournamentIndex));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.cSourceIndex = cSourceIndex;
|
|||
|
|
Packet.cDestIndex = cDestIndex;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PVP_SWAP_TOURNAMENT_INDEX, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet) );
|
|||
|
|
}
|
|||
|
|
#endif //#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|||
|
|
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendWorldPvPCreateRoom( int nRoomIndex, TWorldPvPMissionRoom Data, UINT nAccountDBID/*=0*/ )
|
|||
|
|
{
|
|||
|
|
VIMACreateWorldPvPRoom Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMACreateWorldPvPRoom));
|
|||
|
|
|
|||
|
|
Packet.nRoomIndex = nRoomIndex;
|
|||
|
|
Packet.Data = Data;
|
|||
|
|
Packet.nGMAccountDBID = nAccountDBID;
|
|||
|
|
AddSendData(VIMA_WORLDPVP_REQGAMEID, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendWorldPvPJoinRoom( UINT nAccountDBID, INT64 biCharacterDBID, int nRoomIndex, TWorldPvPRoomDBData *Data, UINT uiTeam, bool bPvPLobby )
|
|||
|
|
{
|
|||
|
|
VIMAWorldPvPRoomBreakInto Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAWorldPvPRoomBreakInto));
|
|||
|
|
|
|||
|
|
|
|||
|
|
Packet.uiAccountDBID = nAccountDBID;
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
Packet.nManagedID = Data->nServerID;
|
|||
|
|
Packet.nRoomIndex = nRoomIndex;
|
|||
|
|
Packet.nRoomID = Data->nRoomID;
|
|||
|
|
Packet.uiTeam = uiTeam;
|
|||
|
|
Packet.bPvPLobby = bPvPLobby;
|
|||
|
|
Packet.BreakIntoType = BreakInto::Type::WorldPvPRoom;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_WORLDPVP_BREAKINTO, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendNotifyMail(UINT nToAccountDBID, INT64 biToCharacterDBID, short wTotalMailCount, short wNotReadMailCount, short w7DaysLeftCount, bool bNewMail)
|
|||
|
|
{
|
|||
|
|
VIMANotifyMail Mail = { 0, };
|
|||
|
|
Mail.nToAccountDBID = nToAccountDBID;
|
|||
|
|
Mail.biToCharacterDBID = biToCharacterDBID;
|
|||
|
|
Mail.wTotalMailCount = wTotalMailCount;
|
|||
|
|
Mail.wNotReadMailCount = wNotReadMailCount;
|
|||
|
|
Mail.w7DaysLeftMailCount = w7DaysLeftCount;
|
|||
|
|
Mail.bNewMail = bNewMail;
|
|||
|
|
AddSendData(VIMA_NOTIFYMAIL, 0, (char*)&Mail, sizeof(VIMANotifyMail));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendNotifyMarket(UINT nSellerAccountDBID, INT64 biSellerCharacterDBID, int nItemID, short wCalculationCount)
|
|||
|
|
{
|
|||
|
|
VIMANotifyMarket Market = {0, };
|
|||
|
|
Market.nSellerAccountDBID = nSellerAccountDBID;
|
|||
|
|
Market.biSellerCharacterDBID = biSellerCharacterDBID;
|
|||
|
|
Market.nItemID = nItemID;
|
|||
|
|
Market.wCalculationCount = wCalculationCount;
|
|||
|
|
AddSendData(VIMA_NOTIFYMARKET, 0, (char*)&Market, sizeof(VIMANotifyMarket));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendNotifyGift(UINT nToAccountDBID, INT64 biToCharacterDBID, bool bNew, int nGiftCount)
|
|||
|
|
{
|
|||
|
|
VIMANotifyGift Result;
|
|||
|
|
Result.nToAccountDBID = nToAccountDBID;
|
|||
|
|
Result.biToCharacterDBID = biToCharacterDBID;
|
|||
|
|
Result.bNew = bNew;
|
|||
|
|
Result.nGiftCount = nGiftCount;
|
|||
|
|
AddSendData(VIMA_NOTIFYGIFT, 0, (char*)&Result, sizeof(VIMANotifyGift));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendFarmListGot(TFarmItemFromDB * pFarm, BYTE cCount)
|
|||
|
|
{
|
|||
|
|
if( cCount >= Farm::Max::FARMCOUNT )
|
|||
|
|
{
|
|||
|
|
_DANGER_POINT();
|
|||
|
|
return; //<2F>̷<EFBFBD><CCB7>ø<EFBFBD> <20>ƴϵ<C6B4><CFB5>ɴϴ<C9B4>.
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VIMAFarmList Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMAFarmList));
|
|||
|
|
|
|||
|
|
for (int i = 0; i < cCount; i++)
|
|||
|
|
memcpy_s(&Packet.Farms[i], sizeof(Packet.Farms[i]), &pFarm[i], sizeof(TFarmItemFromDB));
|
|||
|
|
Packet.cCount = cCount;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_FARMLIST, 0, (char*)&Packet, sizeof(VIMAFarmList) - sizeof(Packet.Farms) + (sizeof(TFarmItem) * cCount));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendNoticeFromClient(const WCHAR * pMsg, int nLen)
|
|||
|
|
{
|
|||
|
|
VIMANotice Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
Packet.nLen = nLen;
|
|||
|
|
_wcscpy(Packet.szMsg, _countof(Packet.szMsg), pMsg, (int)wcslen(pMsg));
|
|||
|
|
AddSendData(VIMA_NOTICE, 0, (char*)&Packet, sizeof(Packet) - sizeof(Packet.szMsg) + (nLen * sizeof(WCHAR)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendZoneNoticeFromClient(int nMapIndex, const WCHAR * pMsg, int nLen)
|
|||
|
|
{
|
|||
|
|
VIMAZoneNotice Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
Packet.nMapIndex = nMapIndex;
|
|||
|
|
Packet.nLen = nLen;
|
|||
|
|
_wcscpy(Packet.szMsg, _countof(Packet.szMsg), pMsg, (int)wcslen(pMsg));
|
|||
|
|
AddSendData(VIMA_ZONENOTICE, 0, (char*)&Packet, sizeof(Packet) - sizeof(Packet.szMsg) + (nLen * sizeof(WCHAR)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendTraceBreakInto(int nType, const UINT uiAccountDBID, const WCHAR* pwszCharacterName, char cSelectedLang )
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendTraceBreakInto(int nType, const UINT uiAccountDBID, const WCHAR* pwszCharacterName )
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
{
|
|||
|
|
VIMATraceBreakInto TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.nType = nType;
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
if (pwszCharacterName) _wcscpy( TxPacket.wszParam, SCHAR_MAX, pwszCharacterName, (int)wcslen(pwszCharacterName) );
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
TxPacket.cCallerSelectedLang = cSelectedLang;
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_TRACEBREAKINTO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendReqRecall( const UINT uiAccountDBID, const UINT uiRecallChannelID, const WCHAR* pwszCharacterName, char cSelectedLang )
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendReqRecall( const UINT uiAccountDBID, const UINT uiRecallChannelID, const WCHAR* pwszCharacterName )
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
{
|
|||
|
|
VIMAReqRecall TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
TxPacket.uiRecallChannelID = uiRecallChannelID;
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
TxPacket.cCallerSelectedLang = cSelectedLang;
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
if (pwszCharacterName) _wcscpy( TxPacket.wszCharacterName, NAMELENMAX, pwszCharacterName, (int)wcslen(pwszCharacterName) );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_REQRECALL, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendBanUser(UINT nAccountDBID, const WCHAR * pCharacterName, char cSelectedLang)
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendBanUser(UINT nAccountDBID, const WCHAR * pCharacterName)
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
{
|
|||
|
|
VIMABanUser Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(VIMABanUser));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
_wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), pCharacterName, (int)wcslen(pCharacterName));
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
Packet.cSelectedLang = cSelectedLang;
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_BANUSER, 0, reinterpret_cast<char*>(&Packet), sizeof(VIMABanUser));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendForceDestroyPvP(UINT nAccountDBID, int nPvPIndex, const WCHAR * pForceWinGuildName)
|
|||
|
|
{
|
|||
|
|
VIMADestroyPvP packet;
|
|||
|
|
memset(&packet, 0, sizeof(VIMADestroyPvP));
|
|||
|
|
|
|||
|
|
packet.nAccountDBID = nAccountDBID;
|
|||
|
|
packet.nPvPIndex = nPvPIndex;
|
|||
|
|
if (pForceWinGuildName)
|
|||
|
|
_wcscpy(packet.wszGuildName, GUILDWAR_FINALS_TEAM_MAX, pForceWinGuildName, static_cast<int>(wcslen(pForceWinGuildName)));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_DESTROYPVP, 0, reinterpret_cast<char*>(&packet), sizeof(VIMADestroyPvP));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_QUICK_PVP)
|
|||
|
|
void CDNMasterConnection::SendMakeQuickPvPRoom(UINT nMasterAccountDBID, UINT nSlaveAccountDBID)
|
|||
|
|
{
|
|||
|
|
VIMAMakeQuickPvPRoom packet;
|
|||
|
|
memset(&packet, 0, sizeof(VIMAMakeQuickPvPRoom));
|
|||
|
|
|
|||
|
|
packet.uiMasterAccountDBID = nMasterAccountDBID;
|
|||
|
|
packet.uiSlaveAccountDBID = nSlaveAccountDBID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_MAKEQUICKPVP_ROOM, 0, reinterpret_cast<char*>(&packet), sizeof(VIMAMakeQuickPvPRoom));
|
|||
|
|
}
|
|||
|
|
#endif //#if defined(PRE_ADD_QUICK_PVP)
|
|||
|
|
|
|||
|
|
bool CDNMasterConnection::VerifyChannelID(int nChannelID, int nMapIdx)
|
|||
|
|
{
|
|||
|
|
std::vector < std::pair < int, sChannelInfo > >::iterator ii;
|
|||
|
|
for (ii = m_vChannelList.begin(); ii != m_vChannelList.end(); ii++)
|
|||
|
|
{
|
|||
|
|
if ((*ii).second.nChannelID == nChannelID && (*ii).second.nMapIdx == nMapIdx)
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int CDNMasterConnection::GetChannelIndex(int nChannelID)
|
|||
|
|
{
|
|||
|
|
std::vector < std::pair < int, sChannelInfo > >::iterator ii;
|
|||
|
|
for (ii = m_vChannelList.begin(); ii != m_vChannelList.end(); ii++)
|
|||
|
|
{
|
|||
|
|
if ((*ii).second.nChannelID == nChannelID)
|
|||
|
|
return (*ii).second.nChannelIdx;
|
|||
|
|
}
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const sChannelInfo* CDNMasterConnection::GetChannelInfo( const int nChannelID )
|
|||
|
|
{
|
|||
|
|
for( std::vector<std::pair<int,sChannelInfo>>::iterator itor=m_vChannelList.begin() ; itor!=m_vChannelList.end() ; ++itor )
|
|||
|
|
{
|
|||
|
|
if( (*itor).second.nChannelID == nChannelID )
|
|||
|
|
return &(*itor).second;
|
|||
|
|
}
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const sChannelInfo* CDNMasterConnection::GetChannelInfoFromMapIndex( const int nMapIndex )
|
|||
|
|
{
|
|||
|
|
for( std::vector<std::pair<int,sChannelInfo>>::iterator itor=m_vChannelList.begin() ; itor!=m_vChannelList.end() ; ++itor )
|
|||
|
|
{
|
|||
|
|
if( (*itor).second.nMapIdx == nMapIndex )
|
|||
|
|
return &(*itor).second;
|
|||
|
|
}
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const sChannelInfo* CDNMasterConnection::GetChannelInfoFromAttr( const int iAttr )
|
|||
|
|
{
|
|||
|
|
for( std::vector<std::pair<int,sChannelInfo>>::iterator itor=m_vChannelList.begin() ; itor!=m_vChannelList.end() ; ++itor )
|
|||
|
|
{
|
|||
|
|
if( (*itor).second.nChannelAttribute&iAttr )
|
|||
|
|
return &(*itor).second;
|
|||
|
|
}
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int CDNMasterConnection::GetChannelMapIndex(int nChannelID)
|
|||
|
|
{
|
|||
|
|
std::vector<std::pair<int,sChannelInfo>>::iterator ii;
|
|||
|
|
for(ii = m_vChannelList.begin(); ii != m_vChannelList.end(); ii++)
|
|||
|
|
{
|
|||
|
|
if ((*ii).second.nChannelID == nChannelID)
|
|||
|
|
return (*ii).second.nMapIdx;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int CDNMasterConnection::GetMeritBonusID(int nChannelID)
|
|||
|
|
{
|
|||
|
|
std::vector<std::pair<int,sChannelInfo>>::iterator ii;
|
|||
|
|
for(ii = m_vChannelList.begin(); ii != m_vChannelList.end(); ii++)
|
|||
|
|
{
|
|||
|
|
if ((*ii).second.nChannelID == nChannelID)
|
|||
|
|
return (*ii).second.nMeritBonusID;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNMasterConnection::GetActive()
|
|||
|
|
{
|
|||
|
|
if (m_bConnectCompleted == false)
|
|||
|
|
return false;
|
|||
|
|
return CConnection::GetActive();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNMasterConnection::_CmdRecall( MAVIResRecall* pPacket )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pRecallUser = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiRecallAccountDBID );
|
|||
|
|
if( !pRecallUser )
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
if( pRecallUser->m_eUserState != STATE_NONE )
|
|||
|
|
{
|
|||
|
|
//std::wstring wString = boost::io::str( boost::wformat( L"%s <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20><> <20><><EFBFBD><EFBFBD> State(%d) <20>Դϴ<D4B4>.") % pRecallUser->GetCharacterName() % static_cast<int>(pRecallUser->m_eUserState) );
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4417, pPacket->cRecallerSelectedLang) ) % pRecallUser->GetCharacterName() % static_cast<int>(pRecallUser->m_eUserState) );
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4417) ) % pRecallUser->GetCharacterName() % static_cast<int>(pRecallUser->m_eUserState) );
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
SendChat( CHATTYPE_GM, pPacket->uiAccountDBID, wString.c_str(), static_cast<short>(wString.size()), -1 );
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pRecallUser->GetField() && pRecallUser->GetField()->GetChnnelID() == pPacket->uiRecallChannelID )
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
return ( pRecallUser->CmdSelectChannel( pPacket->uiRecallChannelID ) == ERROR_NONE ) ? true : false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNMasterConnection::_CmdVillageTrace( MAVIVillageTrace* pPacket )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUser = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiAccountDBID );
|
|||
|
|
if( !pUser )
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
if( pUser->m_eUserState != STATE_NONE )
|
|||
|
|
{
|
|||
|
|
if( pPacket->bIsGMCall )
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4428, pPacket->cSelectedLang) ) % pUser->GetCharacterName() % static_cast<int>(pUser->m_eUserState) );
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4428) ) % pUser->GetCharacterName() % static_cast<int>(pUser->m_eUserState) );
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
SendChat( CHATTYPE_GM, pPacket->uiAccountDBID, wString.c_str(), static_cast<short>(wString.size()), -1 );
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( pUser->GetChannelID() == pPacket->iTargetChannelID )
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pTargetUser = g_pUserSessionManager->FindUserSessionByAccountDBID( pPacket->uiTargetAccountDBID );
|
|||
|
|
if( !pTargetUser )
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
if( pTargetUser->m_eUserState != STATE_NONE )
|
|||
|
|
{
|
|||
|
|
if( pPacket->bIsGMCall )
|
|||
|
|
{
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4428, pPacket->cSelectedLang) ) % pUser->GetCharacterName() % static_cast<int>(pUser->m_eUserState) );
|
|||
|
|
#else //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
std::wstring wString = boost::io::str( boost::wformat( GetEtUIXML().GetUIString(CEtUIXML::idCategory1,4428) ) % pUser->GetCharacterName() % static_cast<int>(pUser->m_eUserState) );
|
|||
|
|
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
SendChat( CHATTYPE_GM, pPacket->uiAccountDBID, wString.c_str(), static_cast<short>(wString.size()), -1 );
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GM ȣ<><C8A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>Ѵ<EFBFBD>.
|
|||
|
|
if( pPacket->bIsGMCall == true )
|
|||
|
|
{
|
|||
|
|
BYTE pBuffer[128];
|
|||
|
|
CPacketCompressStream Stream( pBuffer, 128 );
|
|||
|
|
|
|||
|
|
EtVector3 vPos( pTargetUser->GetCurrentPos().nX/1000.f, pTargetUser->GetCurrentPos().nY/1000.f, pTargetUser->GetCurrentPos().nZ/1000.f );
|
|||
|
|
EtVector2 vLook( 0.f, 0.f );
|
|||
|
|
|
|||
|
|
Stream.Write( &vPos, sizeof(EtVector3), CPacketCompressStream::VECTOR3_BIT );
|
|||
|
|
Stream.Write( &vLook, sizeof(EtVector2), CPacketCompressStream::VECTOR2_SHORT );
|
|||
|
|
|
|||
|
|
pUser->SendActorMsg( pUser->GetSessionID(), eActor::SC_CMDWARP, Stream.Tell(), Stream.GetBuffer() );
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return (pUser->CmdSelectChannel( pPacket->iTargetChannelID, true ) == ERROR_NONE ) ? true : false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendUpdateChannelShowInfo( USHORT unChannelID, bool bShow, int nServerID, BYTE cThreadID )
|
|||
|
|
{
|
|||
|
|
VIMAUpdateChannelShowInfo TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.unChannelID = unChannelID;
|
|||
|
|
TxPacket.bShow = bShow;
|
|||
|
|
TxPacket.nServerID = nServerID;
|
|||
|
|
TxPacket.cThreadID = cThreadID;
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_UPDATECHANNELSHOWINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined(_KR) || defined(_TH) || defined(_ID)
|
|||
|
|
void CDNMasterConnection::SendPCBangResult(UINT nAccountDBID)
|
|||
|
|
{
|
|||
|
|
VIMAPCBangResult Result;
|
|||
|
|
Result.nAccountDBID = nAccountDBID;
|
|||
|
|
AddSendData(VIMA_PCBANGRESULT, 0, (char*)&Result, sizeof(VIMAPCBangResult) );
|
|||
|
|
}
|
|||
|
|
#endif // #if defined(_KR) || defined(_TH)
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendSaveUserTempData(CDNUserSession* pSession)
|
|||
|
|
{
|
|||
|
|
VIMASaveUserTempData TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = pSession->GetAccountDBID();
|
|||
|
|
TxPacket.nDungeonClearCount = pSession->GetDungeonClearCount();
|
|||
|
|
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|||
|
|
TxPacket.eUserGameQuitRewardType = pSession->GetUserGameQuitRewardType();
|
|||
|
|
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
|||
|
|
#if defined(PRE_ADD_REMOTE_QUEST)
|
|||
|
|
pSession->GetQuest()->GetAcceptWaitRemoteQuest(&TxPacket.nAcceptWaitRemoteQuestCount, TxPacket.AcceptWaitRemoteQuestList);
|
|||
|
|
AddSendData (VIMA_SAVE_USERTEMPDATA, 0, (char*)&TxPacket, sizeof(VIMASaveUserTempData) - sizeof(TxPacket.AcceptWaitRemoteQuestList) + sizeof(int) * TxPacket.nAcceptWaitRemoteQuestCount );
|
|||
|
|
#else
|
|||
|
|
AddSendData (VIMA_SAVE_USERTEMPDATA, 0, (char*)&TxPacket, sizeof(VIMASaveUserTempData) );
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendLoadUserTempData(UINT uiAccountDBID)
|
|||
|
|
{
|
|||
|
|
VIMALoadUserTempData TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = uiAccountDBID;
|
|||
|
|
AddSendData (VIMA_LOAD_USERTEMPDATA, 0, (char*)&TxPacket, sizeof(VIMALoadUserTempData) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDuplicateLogin(UINT nAccountDBID, bool bIsDetach, UINT nSessionID)
|
|||
|
|
{
|
|||
|
|
VIMADuplicateLogin TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.nAccountDBID = nAccountDBID;
|
|||
|
|
TxPacket.bIsDetach = bIsDetach;
|
|||
|
|
TxPacket.nSessionID = nSessionID;
|
|||
|
|
|
|||
|
|
AddSendData (VIMA_DUPLICATE_LOGIN, 0, (char*)&TxPacket, sizeof(VIMADuplicateLogin) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendWorldEventCounter(char cWorldSetID, int nScheduleID, int nCount)
|
|||
|
|
{
|
|||
|
|
MAUpdateWorldEventCounter TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.cWorldSetID = cWorldSetID;
|
|||
|
|
TxPacket.nScheduleID = nScheduleID;
|
|||
|
|
TxPacket.nCount = nCount;
|
|||
|
|
|
|||
|
|
AddSendData (VIMA_UPPDATE_WORLDEVENTCOUNTER, 0, (char*)&TxPacket, sizeof(MAUpdateWorldEventCounter) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendCheckLastDungeonInfo( CDNUserSession* pSession, INT64 biValue )
|
|||
|
|
{
|
|||
|
|
VIMACheckLastDungeonInfo TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = pSession->GetAccountDBID();
|
|||
|
|
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
|
|||
|
|
TxPacket.iManagedID = LODWORD( biValue );
|
|||
|
|
TxPacket.iRoomID = HIDWORD( biValue );
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_CHECK_LASTDUNGEONINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
#if defined( _WORK)
|
|||
|
|
std::cout << "SendCheckLastDungeonInfo MasterServerReq CharDBID=" << pSession->GetCharacterDBID() << std::endl;
|
|||
|
|
#endif // #if defined( _WORK)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
void CDNMasterConnection::SendConfirmLastDungeonInfo( CDNUserSession* pSession, INT64 biValue, BreakInto::Type::eCode BreakIntoType/*=BreakInto::Type::PartyRestore*/, bool bIsOK/*=true*/ )
|
|||
|
|
#else
|
|||
|
|
void CDNMasterConnection::SendConfirmLastDungeonInfo( CDNUserSession* pSession, INT64 biValue, bool bIsOK/*=true*/ )
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
{
|
|||
|
|
VIMAConfirmLastDungeonInfo TxPacket;
|
|||
|
|
memset( &TxPacket, 0, sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
TxPacket.uiAccountDBID = pSession->GetAccountDBID();
|
|||
|
|
TxPacket.biCharacterDBID = pSession->GetCharacterDBID();
|
|||
|
|
TxPacket.iManagedID = LODWORD( biValue );
|
|||
|
|
TxPacket.iRoomID = HIDWORD( biValue );
|
|||
|
|
TxPacket.bIsOK = bIsOK;
|
|||
|
|
#if defined( PRE_PARTY_DB )
|
|||
|
|
TxPacket.BreakIntoType = BreakIntoType;
|
|||
|
|
#endif // #if defined( PRE_PARTY_DB )
|
|||
|
|
|
|||
|
|
AddSendData( VIMA_CONFIRM_LASTDUNGEONINFO, 0, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
|
|||
|
|
|
|||
|
|
#if defined( _WORK)
|
|||
|
|
std::cout << "SendConfirmLastDungeonInfo MasterServerReq CharDBID=" << pSession->GetCharacterDBID() << " OK=" << (bIsOK?"true":"false") << std::endl;
|
|||
|
|
#endif // #if defined( _WORK)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
void CDNMasterConnection::SendSearchBestFriend(UINT nAccountDBID, int nRet, bool bAck, LPCWSTR lpwszCharacterName, char cLevel, char cJob)
|
|||
|
|
{
|
|||
|
|
MASearchBestFriend packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.nRet = nRet;
|
|||
|
|
packet.nAccountDBID = nAccountDBID;
|
|||
|
|
packet.bAck = bAck;
|
|||
|
|
packet.cLevel = cLevel;
|
|||
|
|
packet.cJob = cJob;
|
|||
|
|
|
|||
|
|
if (lpwszCharacterName)
|
|||
|
|
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszCharacterName, _countof(packet.wszName));
|
|||
|
|
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_SEARCH_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendRegistBestFriend(UINT nAccountDBID, INT64 biCharacterDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, int nRegistItemID)
|
|||
|
|
{
|
|||
|
|
MARegistBestFriend packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.nAccountDBID = nAccountDBID;
|
|||
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
packet.nRegistItemID = nRegistItemID;
|
|||
|
|
|
|||
|
|
if (lpwszFromCharacterName)
|
|||
|
|
_wcscpy(packet.wszFromName, _countof(packet.wszFromName), lpwszFromCharacterName, _countof(packet.wszFromName));
|
|||
|
|
if (lpwszToCharacterName)
|
|||
|
|
_wcscpy(packet.wszToName, _countof(packet.wszToName), lpwszToCharacterName, _countof(packet.wszToName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_REGIST_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendRegistBestFriendResult(UINT nAccountDBID, int nRetCode, bool bAck, INT64 biFromCharacterDBID, LPCWSTR lpwszFromCharacterName, UINT nToAccountDBID, INT64 biToCharacterDBID, LPCWSTR lpwszToCharacterName)
|
|||
|
|
{
|
|||
|
|
MARegistBestFriendResult packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.nRet = nRetCode;
|
|||
|
|
packet.nAccountDBID = nAccountDBID;
|
|||
|
|
packet.bAck = bAck;
|
|||
|
|
|
|||
|
|
packet.biFromCharacterDBID = biFromCharacterDBID;
|
|||
|
|
if (lpwszFromCharacterName)
|
|||
|
|
_wcscpy(packet.wszFromName, _countof(packet.wszFromName), lpwszFromCharacterName, _countof(packet.wszFromName));
|
|||
|
|
|
|||
|
|
packet.nToAccountDBID = nToAccountDBID;
|
|||
|
|
packet.biToCharacterDBID = biToCharacterDBID;
|
|||
|
|
if (lpwszToCharacterName)
|
|||
|
|
_wcscpy(packet.wszToName, _countof(packet.wszToName), lpwszToCharacterName, _countof(packet.wszToName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_RETREGIST_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendCompleteBestFriend(UINT nFromAccountDBID, UINT nToAccountDBID, INT64 biCharacterDBID, LPCWSTR lpwszCharacterName, int nItemID)
|
|||
|
|
{
|
|||
|
|
MACompleteBestFriend packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.nFromAccountDBID = nFromAccountDBID;
|
|||
|
|
|
|||
|
|
packet.nToAccountDBID = nToAccountDBID;
|
|||
|
|
packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
packet.nItemID = nItemID;
|
|||
|
|
|
|||
|
|
if (lpwszCharacterName)
|
|||
|
|
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszCharacterName, _countof(packet.wszName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_COMPLETE_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendEditBestFriendMemo(UINT nFromAccountDBID, INT64 biToCharacterDBID, LPCWSTR lpwszToMemo)
|
|||
|
|
{
|
|||
|
|
MAEditBestFriendMemo packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.nFromAccountDBID = nFromAccountDBID;
|
|||
|
|
packet.biToCharacterDBID = biToCharacterDBID;
|
|||
|
|
if (lpwszToMemo)
|
|||
|
|
_wcscpy(packet.wszMemo, _countof(packet.wszMemo), lpwszToMemo, (int)wcslen(lpwszToMemo));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_EDIT_BESTFRIENDMEMO, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendCancelBestFriend(LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, bool bCancel)
|
|||
|
|
{
|
|||
|
|
MACancelBestFriend packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.bCancel = bCancel;
|
|||
|
|
|
|||
|
|
if (lpwszFromCharacterName)
|
|||
|
|
_wcscpy(packet.wszFromName, _countof(packet.wszFromName), lpwszFromCharacterName, _countof(packet.wszFromName));
|
|||
|
|
|
|||
|
|
if (lpwszToCharacterName)
|
|||
|
|
_wcscpy(packet.wszToName, _countof(packet.wszToName), lpwszToCharacterName, _countof(packet.wszToName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CANCEL_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendCloseBestFriend(LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName)
|
|||
|
|
{
|
|||
|
|
MACloseBestFriend packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
if (lpwszFromCharacterName)
|
|||
|
|
_wcscpy(packet.wszFromName, _countof(packet.wszFromName), lpwszFromCharacterName, _countof(packet.wszFromName));
|
|||
|
|
|
|||
|
|
if (lpwszToCharacterName)
|
|||
|
|
_wcscpy(packet.wszToName, _countof(packet.wszToName), lpwszToCharacterName, _countof(packet.wszToName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CLOSE_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendLevelUpBestFriend(BYTE cLevel, LPCWSTR lpwszCharacterName)
|
|||
|
|
{
|
|||
|
|
MALevelUpBestFriend packet;
|
|||
|
|
memset(&packet, 0, sizeof(packet));
|
|||
|
|
|
|||
|
|
packet.cLevel = cLevel;
|
|||
|
|
if (lpwszCharacterName)
|
|||
|
|
_wcscpy(packet.wszName, _countof(packet.wszName), lpwszCharacterName, _countof(packet.wszName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_LEVELUP_BESTFRIEND, 0, (char*)&packet, sizeof(packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif // #if defined (PRE_ADD_BESTFRIEND)
|
|||
|
|
|
|||
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|||
|
|
void CDNMasterConnection::SendGetWorldPartyMember(UINT nAccountDBID, INT64 biCharacterDBID, const Party::Data &PartyData)
|
|||
|
|
{
|
|||
|
|
MAGetWorldPartyMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAGetWorldPartyMember));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
Packet.iServerID = PartyData.iServerID;
|
|||
|
|
Packet.PartyID = PartyData.PartyID;
|
|||
|
|
Packet.iRoomID = PartyData.iRoomID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GET_WORLDPARTYMEMBER, 0, (char*)&Packet, sizeof(MAGetWorldPartyMember));
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|||
|
|
void CDNMasterConnection::SendAddPrivateChatChannel(TPrivateChatChannelInfo tPrivateChatChannel)
|
|||
|
|
{
|
|||
|
|
MAAddPrivateChannel Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAAddPrivateChannel));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.tPrivateChatChannel = tPrivateChatChannel;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_ADD, 0, (char*)&Packet, sizeof(MAAddPrivateChannel));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddPrivateChatChannelMember(INT64 nChannelID, TPrivateChatChannelMember Member)
|
|||
|
|
{
|
|||
|
|
MAAddPrivateChannelMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAAddPrivateChannelMember));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.nPrivateChatChannelID = nChannelID;
|
|||
|
|
Packet.Member = Member;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MEMBERADD, 0, (char*)&Packet, sizeof(MAAddPrivateChannelMember));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendInvitePrivateChatChannel(INT64 nChannelID, UINT nAccountDBID, WCHAR* wszInviteCharacterName)
|
|||
|
|
{
|
|||
|
|
MAInvitePrivateChannelMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAInvitePrivateChannelMember));
|
|||
|
|
|
|||
|
|
Packet.nPrivateChatChannelID = nChannelID;
|
|||
|
|
Packet.nMasterAccountDBID = nAccountDBID;
|
|||
|
|
if(wszInviteCharacterName)
|
|||
|
|
_wcscpy(Packet.wszInviteName, _countof(Packet.wszInviteName), wszInviteCharacterName, (int)wcslen(wszInviteCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MEMBERINVITE, 0, (char*)&Packet, sizeof(MAInvitePrivateChannelMember));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendInvitePrivateChatChannelResult(int nRet, UINT nAccountDBID)
|
|||
|
|
{
|
|||
|
|
MAInvitePrivateChannelMemberResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAInvitePrivateChannelMemberResult));
|
|||
|
|
|
|||
|
|
Packet.nRet = nRet;
|
|||
|
|
Packet.nMasterAccountDBID = nAccountDBID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MEMBERINVITERESULT, 0, (char*)&Packet, sizeof(MAInvitePrivateChannelMemberResult));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDelPrivateChatChannelMember(PrivateChatChannel::Common::eModType eType, INT64 nChannelID, INT64 biCharacterDBID, const WCHAR* wszName)
|
|||
|
|
{
|
|||
|
|
MADelPrivateChannelMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MADelPrivateChannelMember));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.eType = eType;
|
|||
|
|
Packet.nPrivateChatChannelID = nChannelID;
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
if(wszName)
|
|||
|
|
_wcscpy(Packet.wszName, _countof(Packet.wszName), wszName, (int)wcslen(wszName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MEMBERDEL, 0, (char*)&Packet, sizeof(MADelPrivateChannelMember));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendKickPrivateChatChannelMemberResult(INT64 biCharacterDBID)
|
|||
|
|
{
|
|||
|
|
MAKickPrivateChannelMemberResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAKickPrivateChannelMemberResult));
|
|||
|
|
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MEMBERKICKRESULT, 0, (char*)&Packet, sizeof(MAKickPrivateChannelMemberResult));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendModPrivateChatChannelInfo(INT64 nChannelID, PrivateChatChannel::Common::eModType eModType, int nPassWord, INT64 biCharacterDBID)
|
|||
|
|
{
|
|||
|
|
MAModPrivateChannel Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAModPrivateChannel));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.nPrivateChatChannelID = nChannelID;
|
|||
|
|
Packet.eType = eModType;
|
|||
|
|
Packet.nPassWord = nPassWord;
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MOD, 0, (char*)&Packet, sizeof(MAModPrivateChannel));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendModPrivateChatChannelMemberName(INT64 nChannelID, INT64 biCharacterDBID, const WCHAR* wszName )
|
|||
|
|
{
|
|||
|
|
MAModPrivateChannelMemberName Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAModPrivateChannel));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.nPrivateChatChannelID = nChannelID;
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
|
|||
|
|
if(wszName)
|
|||
|
|
_wcscpy(Packet.wszName, _countof(Packet.wszName), wszName, (int)wcslen(wszName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_PRIVATECHATCHANNEL_MODMEMBERNAME, 0, (char*)&Packet, sizeof(MAModPrivateChannelMemberName));
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#if defined( PRE_ADD_MUTE_USERCHATTING )
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendMuteUserFind(UINT uiGmAccountDBID, char cWorldSetID, const WCHAR * pMuteCharacterName, int nMuteMinute, char cSelectLanguage )
|
|||
|
|
#else // #if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
void CDNMasterConnection::SendMuteUserFind(UINT uiGmAccountDBID, char cWorldSetID, const WCHAR * pMuteCharacterName, int nMuteMinute )
|
|||
|
|
#endif // #if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
{
|
|||
|
|
MAMuteUserFind Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAMuteUserFind));
|
|||
|
|
|
|||
|
|
Packet.uiGmAccountID = uiGmAccountDBID;
|
|||
|
|
Packet.nMuteMinute = nMuteMinute;
|
|||
|
|
#if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
Packet.cSelectedLanguage = cSelectLanguage;
|
|||
|
|
#endif // #if defined(PRE_ADD_MULTILANGUAGE)
|
|||
|
|
_wcscpy(Packet.wszMuteUserName, _countof(Packet.wszMuteUserName), pMuteCharacterName, (int)wcslen(pMuteCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_MUTE_USERFIND, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
#endif // #if defined( PRE_ADD_MUTE_USERCHATTING )
|
|||
|
|
|
|||
|
|
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
|||
|
|
void CDNMasterConnection::SendAddAlteiaWorldSendTicket( char cWorldSetID, const WCHAR* wszRecvCharacterName, INT64 biSendCharacterDBID, WCHAR* wszSendCharacterName)
|
|||
|
|
{
|
|||
|
|
MAAlteiaWorldSendTicket Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAAlteiaWorldSendTicket));
|
|||
|
|
|
|||
|
|
_wcscpy(Packet.wszRecvCharacterName, _countof(Packet.wszRecvCharacterName), wszRecvCharacterName, (int)wcslen(wszRecvCharacterName));
|
|||
|
|
_wcscpy(Packet.wszSendCharacterName, _countof(Packet.wszSendCharacterName), wszSendCharacterName, (int)wcslen(wszSendCharacterName));
|
|||
|
|
Packet.biSendCharacterDBID = biSendCharacterDBID;
|
|||
|
|
Packet.cWorldSetID = cWorldSetID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ALTEIAWORLD_SENDTICKET, 0, (char*)&Packet, sizeof(MAAlteiaWorldSendTicket));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddAlteiaWorldSendTicketResult( int nRetCode, INT64 biSendCharacterDBID )
|
|||
|
|
{
|
|||
|
|
MAAlteiaWorldSendTicketResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAAlteiaWorldSendTicketResult));
|
|||
|
|
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
Packet.biSendCharacterDBID = biSendCharacterDBID;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ALTEIAWORLD_SENDTICKET_RESULT, 0, (char*)&Packet, sizeof(MAAlteiaWorldSendTicketResult));
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#if defined(PRE_ADD_CHNC2C)
|
|||
|
|
void CDNMasterConnection::SendC2CCoinBalanceResult( int nRetCode, Int64 biCoinBalance, const char* szSeqID)
|
|||
|
|
{
|
|||
|
|
MAC2CGetCoinBalanceResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAC2CGetCoinBalanceResult));
|
|||
|
|
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
Packet.biCoinBalance = biCoinBalance;
|
|||
|
|
memcpy(&Packet.szSeqID, szSeqID, sizeof(Packet.szSeqID));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_C2C_CHAR_COINBALANCE, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendC2CAddCoinResult( int nRetCode, const char* szSeqID)
|
|||
|
|
{
|
|||
|
|
MAC2CAddCoinResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAC2CAddCoinResult));
|
|||
|
|
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
memcpy(&Packet.szSeqID, szSeqID, sizeof(Packet.szSeqID));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_C2C_CHAR_ADDCOIN, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendC2CReduceCoinResult( int nRetCode, const char* szSeqID)
|
|||
|
|
{
|
|||
|
|
MAC2CReduceCoinResult Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(MAC2CReduceCoinResult));
|
|||
|
|
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
memcpy(&Packet.szSeqID, szSeqID, sizeof(Packet.szSeqID));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_C2C_CHAR_REDUCECOIN, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
#endif //#if defined(PRE_ADD_CHNC2C)
|
|||
|
|
|
|||
|
|
#if defined( PRE_DRAGONBUFF )
|
|||
|
|
void CDNMasterConnection::SendApplyWorldBuff( WCHAR *wszCharacterName, int nItemID, int nMapIdx )
|
|||
|
|
{
|
|||
|
|
MAApplyWorldBuff Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nManagedID = g_Config.nManagedID;
|
|||
|
|
Packet.nItemID = nItemID;
|
|||
|
|
Packet.nMapIdx = nMapIdx;
|
|||
|
|
|
|||
|
|
if(wszCharacterName)
|
|||
|
|
_wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), wszCharacterName, (int)wcslen(wszCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_APPLY_WORLDBUFF, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined(PRE_ADD_DWC)
|
|||
|
|
void CDNMasterConnection::SendInviteDWCTeamMember(UINT nTeamID, UINT nAccountDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, LPCWSTR lpwszTeamName)
|
|||
|
|
{
|
|||
|
|
MAInviteDWCTeamMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
_wcscpy(Packet.wszFromCharacterName, _countof(Packet.wszFromCharacterName), lpwszFromCharacterName, (int)wcslen(lpwszFromCharacterName));
|
|||
|
|
_wcscpy(Packet.wszToCharacterName, _countof(Packet.wszToCharacterName), lpwszToCharacterName, (int)wcslen(lpwszToCharacterName));
|
|||
|
|
_wcscpy(Packet.wszTeamName, _countof(Packet.wszTeamName), lpwszTeamName, (int)wcslen(lpwszTeamName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_INVITE_DWCTEAMMEMB, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendInviteDWCTeamMemberACK(UINT nAccountDBID, int nRetCode, bool bAck, LPCWSTR pwszToCharacterName)
|
|||
|
|
{
|
|||
|
|
MAInviteDWCTeamMemberAck Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nRetCode = nRetCode;
|
|||
|
|
Packet.nInviterDBID = nAccountDBID;
|
|||
|
|
Packet.bAck = bAck;
|
|||
|
|
|
|||
|
|
if (pwszToCharacterName)
|
|||
|
|
_wcscpy(Packet.wszInvitedName, NAMELENMAX, pwszToCharacterName, (int)wcslen(pwszToCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_INVITE_DWCTEAMMEMB_ACK, 0, (char*)&Packet, sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendAddDWCTeamMember(UINT nTargetUserAccountDBID, UINT nTeamID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszFromCharacterName, TP_JOB nJob, TCommunityLocation* pLocation, bool bAlredySentByVillage)
|
|||
|
|
{
|
|||
|
|
MAAddDWCTeamMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nTartgetUserAccountDBID = nTargetUserAccountDBID;
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.biCharacterDBID = nCharacterDBID;
|
|||
|
|
Packet.nJob = nJob;
|
|||
|
|
if(pLocation)
|
|||
|
|
Packet.Location = (*pLocation);
|
|||
|
|
Packet.bAlredySentByVillage = bAlredySentByVillage;
|
|||
|
|
_wcscpy(Packet.wszCharacterName, _countof(Packet.wszCharacterName), lpwszFromCharacterName, (int)wcslen(lpwszFromCharacterName));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_ADD_DWCTEAMMEMB, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDismissDWCTeam(UINT nTargetUserAccountDBID, UINT nTeamID, int nRet, bool bAlredySentByVillage)
|
|||
|
|
{
|
|||
|
|
MADismissDWCTeam Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nTartgetUserAccountDBID = nTargetUserAccountDBID;
|
|||
|
|
Packet.nRet = nRet;
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
Packet.bAlredySentByVillage = bAlredySentByVillage;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_DISMISS_DWCTEAM, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendLeaveDWCTeamMember(UINT nTargetUserAccountDBID, UINT nTeamID, INT64 biLeaveUserCharacterDBID, LPCWSTR pwszCharacterName, int nRet, bool bAlredySentByVillage)
|
|||
|
|
{
|
|||
|
|
MALeaveDWCTeamMember Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nTartgetUserAccountDBID = nTargetUserAccountDBID;
|
|||
|
|
Packet.nRet = nRet;
|
|||
|
|
Packet.biLeaveUserCharacterDBID = biLeaveUserCharacterDBID;
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
if (pwszCharacterName)
|
|||
|
|
_wcscpy(Packet.wszCharacterName, NAMELENMAX, pwszCharacterName, (int)wcslen(pwszCharacterName));
|
|||
|
|
Packet.bAlredySentByVillage = bAlredySentByVillage;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_DEL_DWCTEAMMEMB, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendChangeDWCTeamMemberState(UINT nTargetUserAccountDBID, UINT nTeamID, INT64 biCharacterDBID, TCommunityLocation* pLocation, bool bLogin)
|
|||
|
|
{
|
|||
|
|
MAChangeDWCTeamMemberState Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nTartgetUserAccountDBID = nTargetUserAccountDBID;
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
Packet.biCharacterDBID = biCharacterDBID;
|
|||
|
|
if(pLocation)
|
|||
|
|
Packet.Location = (*pLocation);
|
|||
|
|
Packet.bLogin = bLogin;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_CHANGE_DWCTEAMMEMB_STATE, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDWCTeamMemberList(UINT nAccountDBID, UINT nTeamID, std::vector<INT64> &VecMemberList)
|
|||
|
|
{
|
|||
|
|
VIMADWCTeamMemberList Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
for(int i = 0 ; i < MIN(VecMemberList.size(), DWC::DWC_MAX_MEMBERISZE) ; i++ )
|
|||
|
|
Packet.MemberListCharacterDBID[Packet.cCount++] = VecMemberList[i];
|
|||
|
|
|
|||
|
|
int nLen = sizeof(Packet) - sizeof(Packet.MemberListCharacterDBID) + sizeof(INT64)*Packet.cCount;
|
|||
|
|
AddSendData(VIMA_DWC_TEAMMEMBERLIST, 0, reinterpret_cast<char*>(&Packet), nLen);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDWCTeamChat(UINT nTeamID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen)
|
|||
|
|
{
|
|||
|
|
MADWCTeamChat Packet;
|
|||
|
|
memset (&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.nTeamID = nTeamID;
|
|||
|
|
Packet.nAccountDBID = nAccountDBID;
|
|||
|
|
Packet.biCharacterDBID = nCharacterDBID;
|
|||
|
|
|
|||
|
|
_wcscpy( Packet.wszChatMsg, _countof(Packet.wszChatMsg), lpwszChatMsg, nLen );
|
|||
|
|
Packet.nLen = nLen;
|
|||
|
|
|
|||
|
|
int iSize = static_cast<int>(sizeof(Packet) - sizeof(Packet.wszChatMsg) + sizeof(Packet.wszChatMsg[0]) * Packet.nLen);
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_DWC_TEAMCHAT, 0, reinterpret_cast<char*>(&Packet), iSize);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|||
|
|
void CDNMasterConnection::SendCreateGambleRoomFlag(bool bFlag)
|
|||
|
|
{
|
|||
|
|
MACreateGambleRoom Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
Packet.bFlag = bFlag;
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GAMBLE_CREATEROOMFLAG, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNMasterConnection::SendDelGambleRoom()
|
|||
|
|
{
|
|||
|
|
MADelGambleRoom Packet;
|
|||
|
|
memset(&Packet, 0, sizeof(Packet));
|
|||
|
|
|
|||
|
|
AddSendData(VIMA_GAMBLE_DELETEROOM, 0, reinterpret_cast<char*>(&Packet), sizeof(Packet));
|
|||
|
|
}
|
|||
|
|
#endif
|