DragonNest/Server/DNVillageServer/DNMasterConnection.cpp

6386 lines
227 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#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