DragonNest/Server/DNVillageServer/DNMasterConnection.h
2024-12-19 09:48:26 +08:00

331 lines
21 KiB
C++

#pragma once
#include "Connection.h"
#include "DNParty.h"
//----------------------------------------------------------------------------------
// CDNMasterConnection
//
// Master에 보내는 유저관련 패킷들은 SessionID 대신에 AccountDBID으로 보내줘야한다.
// 중복체크를 막기위해 AccountDBID으로 유저를 찾고있다.
//----------------------------------------------------------------------------------
class CDNPeriodQuest;
class CDNUserSession;
namespace LadderSystem
{
class CRoom;
};
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
class CDNPvPRoom;
#endif
class CDNMasterConnection: public CConnection
{
public:
std::vector < std::pair < int, sChannelInfo > > m_vChannelList;
public:
CDNMasterConnection(void);
virtual ~CDNMasterConnection(void);
void Reconnect();
int MessageProcess(int iMainCmd, int iSubCmd, char *pData, int iLen);
//Monitor Process Elapsed Tick
void SendProcessDelayed(UINT nDelayedTick);
//Master <-> Village Connect Flow
void SendVIllageRegistInfo(int nManagedID, const char * pszIP, short nPort);
void SendEndofVillageInfo();
void SendAddUserList(CDNUserSession *pUserObj);
//User Connections
void SendDelUser(UINT nAccountDBID, UINT nSessionID);
void SendCheckUser(UINT nSessionID);
void SendEnterVillage(UINT nAccountDBID, int nChannelID);
void SendCheckReconnectLogin(UINT nAccountDBID);
//Move Server
#if defined( PRE_PARTY_DB )
void SendVillageToVillage(BYTE cReqType, INT64 biID, int nMapIndex, int nEnteredGateIndex = -1, int nMoveChannel = -1, CDNParty * pParty = NULL, INT64 nItemSerial = 0);
#else
void SendVillageToVillage(BYTE cReqType, UINT nID, int nMapIndex, int nEnteredGateIndex = -1, int nMoveChannel = -1, CDNParty * pParty = NULL, INT64 nItemSerial = 0);
#endif // #if defined( PRE_PARTY_DB )
void SendReqGameID( GameTaskType::eType GameTaskType, BYTE cReqGameIDType, TINSTANCEID InstanceID, USHORT unVillageChannelID, int nRandomSeed, int nMapIndex, char cGateNo, TDUNGEONDIFFICULTY Difficulty, bool bDirectConnect = false, CDNParty * pParty = NULL, UINT nFarmDBID = 0, char cGateSelect = 0 );
void SendPvPLadderEnterChannel( UINT uiAccountDBID, LadderSystem::MatchType::eCode MatchType );
void SendReqLadderGameID( LadderSystem::CRoom* pLadderRoom, LadderSystem::CRoom* pLadderRoom2, USHORT unVillageChannelID, int iRandomSeed, int iMapIndex );
void SendLadderObserver( INT64 biCharacterDBID, int iGameServerID, int iGameRoomID );
void SendLoginState(UINT nSessionID);
//Village ChannelUser Count
void SendVillageUserReport();
//Party
#if defined( PRE_PARTY_DB )
void SendReqPartyInvite( CDNUserSession* pReqSession, const WCHAR* pwszInviteCharName, CDNParty* pParty );
void SendResPartyInvite( int iRet, UINT uiReqAccountDBID );
void SendPartyInviteDenied( const WCHAR* pwszReqCharName, TPARTYID PartyID, const WCHAR* pwszInviteCharName, BYTE cIsOpenBlind );
#else
void 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 = 0, bool bUseVoice = false);
#endif // #if defined( PRE_PARTY_DB )
void SendInvitePartyResult(int nGameServerID, const WCHAR * pwszInviterName, const WCHAR * pwszInvitedName, int nRetCode);
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
void SendGetPartyID( UINT nSenderAccountDBID , const WCHAR* pwszCharName);
void SendGetPartyIDResult( UINT nSenderAccountDBID , TPARTYID PartyID );
void SendReqPartyAskJoin(CDNUserSession* pReqSession, const WCHAR* pwszTargetCharName);
void SendResPartyAskJoin(int iRet, UINT uiReqAccountDBID, const WCHAR* pwszReqChracterName = NULL );
void SendAskJoinAgreeInfo(const WCHAR* pwszAskerCharName, TPARTYID PartyID, int iPassword);
#endif
//Guild
void SendInviteGuildMember(TGuildUID GuildUID, UINT nAccountDBID, UINT nSessionID, INT64 nCharacterDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, LPCWSTR lpwszGuildName);
void SendInviteGuildResult(UINT nAccountDBID, int nRetCode, bool bAck = false, LPCWSTR lpwszToCharacterName=NULL);
void SendGuildWareInfo (TGuildUID GuildUID);
void SendGuildWareInfoResult (MAGuildWareInfoResult& result);
void SendChangeGuildInfo(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, BYTE btGuildUpdate, int iInt1 = 0, int iInt2 = 0, int iInt3 = 0, int iInt4 = 0, INT64 biInt64 = 0, LPCWSTR pText = NULL);
void SendGuildMemberLevelUp (TGuildUID GuildUID, INT64 nCharacterDBID, char cLevel);
void SendRefreshGuildItem (const TGuildUID pGuildUID, char cType, INT64 biSrcSerial, INT64 biDestSerial, const TItemInfo *pSrcInfo, const TItemInfo *pDestInfo, __time64_t VersionDate);
void SendRefreshGuildCoin (const TGuildUID pGuildUID, INT64 biTotalCoin);
void SendExtendGuildWareSize (const TGuildUID pGuildUID, short wSize);
void SendDismissGuild(const TGuildUID pGuildUID);
void SendAddGuildMember(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszFromCharacterName, TP_JOB nJob, char cLevel, __time64_t pJoinDate);
void SendDelGuildMember(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, bool bIsExiled);
void SendChangeGuildMemberInfo(const TGuildUID pGuildUID, UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nChgAccountDBID, INT64 nChgCharacterDBID, BYTE btGuildMemberUpdate, int iInt1 = 0, int iInt2 = 0, INT64 biInt64 = 0, LPCWSTR pText = NULL, bool bReturn = false);
void SendGuildChat(const TGuildUID pGuildUID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen);
void SendGuildChangeName(const TGuildUID pGuildUID, LPCWSTR lpwszGuildName);
void SendGuildChangeMark(const TGuildUID pGuildUID, short wMark, short wMarkBG, short wMarkBorder);
void SendEnrollGuildWar(const TGuildUID pGuildUID, short wScheduleID, BYTE cTeamColorCode);
void SendSetGuildWarFinalSchedule(TGuildWarEventInfo* pFinalSchedule);
void SendSetGuildWarPoint(int nResultCode, int nBlueTeamPoint, int nRedTeamPoint);
void SendAddGuildWarPoint(char cTeamType, TGuildUID GuildUID, int nAddPoint);
void SendSetGuildWarTournamentInfo(TAGetGuildWarFinalResults* pGuildWarFinalResults);
void SendSetGuildWarFinalTeam(TAGetGuildWarPointGuildTotal* pGuildWarPointGuildTotal);
void SendAddGuildPoint(TGuildUID GuildUID, int nAddPoint);
void SendSetGuilldWarPreWinSkillCoolTime(int nManagedID, DWORD dwSkillCoolTime);
void SendAddJobReserve(int nResultCode, char cJobType, int nJobSeq);
void SendGetJobReserve(int nResultCode, int nJobSeq, char cJobStatus);
void SendMatchListSaveResult(int nResultCode);
void SendSetGuildWarPointRunning(TAGetGuildWarPointRunningTotal* pGuildWarPointRunningTotal );
void SendSetGuildWarPreWinGuild(TGuildUID GuildUID, short wScheduleID);
void SendSetGuildWarPreWinReward();
void SendSetGuildWarSchedule(int nResultCode, short wSchdeduleID, short wWinersWeightRate, TGuildWarEventInfo* pEventInfo, bool bForce, bool bFinalProgress, __time64_t tRewardExpireDate);
void SendGuildWarRefreshGuildPoint(TAGetGuildWarPointFinalRewards* pPointFinalRewards );
void SendGuildWarScheduleReload();
void SendUpdateGuildExp(const TGuildUID, const TAModGuildExp* pPacket);
void SendGuildRecruitMemberResult( const TGuildUID pGuildUID, WCHAR* wszCharacterName, INT64 nCharacterDBID, TGuildView GuildView, GuildRecruitSystem::AcceptType::eType type ); // 가입된 캐릭터에게 통보
void SendAddGuildRewardItem( const TGuildUID pGuildUID, TAAddGuildRewardItem* GuildRewardItem ); // 길드 효과 알림
void SendExtendGuildSize ( const TGuildUID pGuildUID, short wSize );
// MasterSystem
void SendCheckMasterApplication( const INT64 biMasterCharacterDBID, const INT64 biPupilCharacterDBID );
void SendMasterSystemSyncSimpleInfo( const INT64 biCharacterDBID, MasterSystem::EventType::eCode Type );
void SendMasterSystemSyncJoin( const INT64 biCharacterDBID, bool bIsAddPupil );
void SendMasterSystemSyncLeave( const INT64 biCharacterDBID, bool bIsDelPupil );
void SendMasterSystemSyncGraduate( const INT64 biCharacterDBID, WCHAR* pwszCharName );
void SendMasterSystemSyncConnect( const bool bIsConnect, WCHAR* pwszCharName, const TMasterSystemData* pMasterSystemData );
void SendMasterSystemCheckLeave( UINT uiAccountDBID, const INT64 biDestCharacterDBID, bool bIsMaster );
void SendMasterSystemRecallMaster( UINT uiPupilAccountDBID, WCHAR* pwszPupilCharName, WCHAR* pwszMasterCharName, const TMasterSystemData* pMasterSystemData );
void SendMasterSystemBreakInto( int iRet, UINT uiMasterAccountDBID, WCHAR* pwszPupilCharName, const TMasterSystemData* pMasterSystemData );
void SendMasterSystemJoinConfirm( const INT64 biMasterCharacterDBID, const BYTE cLevel, const BYTE cJob, WCHAR* pwszPupilCharName);
void SendMasterSystemJoinConfirmResult( const int iRet, const bool bIsAccept, const INT64 biMasterCharacterDBID, WCHAR* pwszPupilCharName);
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
void SendSyncSystemMail( TASendSystemMail* pMail );
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
//Friend
void SendFriendAddNotify(UINT nAddedAccountDBID, const WCHAR * pAddName);
// chat
#ifdef PRE_ADD_DOORS
void SendPrivateChat(UINT nFromAccountDBID, WCHAR *pwszToCharacterName, char cType, WCHAR *pwszChatMsg, short wChatLen, INT64 biDestCharacterDBID = 0);
#else //#ifdef PRE_ADD_DOORS
void SendPrivateChat(UINT nFromAccountDBID, WCHAR *pwszToCharacterName, char cType, WCHAR *pwszChatMsg, short wChatLen);
#endif //#ifdef PRE_ADD_DOORS
void SendChat(char cType, UINT nFromAccountDBID, const WCHAR *pwszChatMsg, short wChatLen, int nMapIdx = -1);
void SendWorldSystemMsg(UINT nFromAccountDBID, char cType, int nID, int nValue, const WCHAR *pwszToCharacterName = NULL);
void SendWorldSystemMsg888(UINT nFromAccountDBID, char cType, int nID, int nValue, const WCHAR *pwszToCharacterName = NULL);
#if defined( PRE_PRIVATECHAT_CHANNEL )
void SendPrivateChannelChat(char cType, UINT nFromAccountDBID, const WCHAR *pwszChatMsg, short wChatLen, INT64 nChannelID);
#endif
// VoiceChat
void SendReqVoiceChannelID( TINSTANCEID InstanceID, int nChannelType, int nPvPLobbyChannelID = 0);
// PvP
void SendMovePvPLobbyToPvPVillage(UINT nAccountDBID );
#if defined(PRE_ADD_PVP_TOURNAMENT)
#if defined( PRE_PVP_GAMBLEROOM )
void SendPvPCreateRoom( const UINT uiCreateAccountDBID, const BYTE cGameMode, const USHORT unVillageChannelID, const UINT uiVillageMapIndex, const CSPVP_CREATEROOM* pPacket, TEvent* pEvent=NULL, BYTE cJob=0, TPvPGambleRoomData* GambleData=NULL );
#else // #if defined( PRE_PVP_GAMBLEROOM )
void SendPvPCreateRoom( const UINT uiCreateAccountDBID, const BYTE cGameMode, const USHORT unVillageChannelID, const UINT uiVillageMapIndex, const CSPVP_CREATEROOM* pPacket, TEvent* pEvent=NULL, BYTE cJob=0 );
#endif // #if defined( PRE_PVP_GAMBLEROOM )
#else // #if defined(PRE_ADD_PVP_TOURNAMENT)
void SendPvPCreateRoom( const UINT uiCreateAccountDBID, const BYTE cGameMode, const USHORT unVillageChannelID, const UINT uiVillageMapIndex, const CSPVP_CREATEROOM* pPacket, TEvent* pEvent=NULL );
#endif // #if defined(PRE_ADD_PVP_TOURNAMENT)
void SendPvPModifyRoom( const UINT uiAccountDBID, const BYTE cGameMode, const CSPVP_MODIFYROOM* pPacket );
void SendPvPLeaveRoom( const UINT uiLeaveAccountDBID );
void SendPvPChangeCaptain( const UINT uiAccountDBID, const CSPVP_CHANGECAPTAIN* pPacket );
void SendPvPRoomList( const UINT uiAccountDBID, const USHORT unVillageChannelID, const CSPVP_ROOMLIST* pPacket );
void SendPvPWaitUserList( const UINT uiAccountDBID, const USHORT unVillageChannelID, const CSPVP_WAITUSERLIST* pPacket );
void SendPvPJoinRoom( const UINT uiAccountDBID, BYTE cUserLevel, const CSPVP_JOINROOM* pPacket, CDNUserSession * pSession );
void SendPvPRandomJoinRoom( const UINT uiAccountDBID, BYTE cUserLevel );
void SendPvPReady( const UINT uiAccountDBID, const CSPVP_READY* pPacket );
void SendPvPStart( const UINT uiAccountDBID, const CSPVP_START* pPacket );
void SendPvPChangeTeam( const UINT uiAccountDBID, BYTE cLevel, const CSPVP_CHANGETEAM* pPacket );
void SendPvPBan( const UINT uiAccountDBID, const CSPVP_BAN* pPacket );
void SendPvPEnterLobby( const UINT uiAccountDBID, const USHORT unVillageChannelID );
void SendPvPLadderInviteUser( UINT uiAccountDBID, const WCHAR* pwszCharName );
void SendPvPLadderInviteConfirm( UINT uiAccountDBID, const WCHAR* pwszConfirmCharName, const LadderSystem::CS_INVITE_CONFIRM* pPacket );
#if defined( PRE_ADD_PVP_VILLAGE_ACCESS)
void SendPvPRoomListRelay( const BYTE cVIllageID, const UINT uiAccountDBID, const short nRetCode, std::vector<CDNPvPRoom*>& vPvPRoom, const UINT uiMaxPage);
#endif
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
void SendPvPChangeChannel(UINT nAccountDBID, BYTE cType, BYTE cPvPLevel, BYTE cSeperateLevel, bool bSend = true);
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
//
void SendPvPFatigueOption( const UINT uiAccountDBID, bool bFatigueOption);
void SendPvPSwapMemberIndex(UINT nAccountDBID, BYTE cCount, const TSwapMemberIndex * pIndex);
void SendPvPChangeMemberGrade(UINT nAccountDBID, USHORT nType, UINT nSessionID, bool bAsign);
void SendNotifyMail(UINT nToAccountDBID, INT64 biToCharacterDBID, short wTotalMailCount, short wNotReadMailCount, short w7DaysLeftCount, bool bNewMail);
void SendNotifyMarket(UINT nSellerAccountDBID, INT64 biSellerCharacterDBID, int nItemID, short wCalculationCount);
void SendNotifyGift(UINT nToAccountDBID, INT64 biToCharacterDBID, bool bNew, int nGiftCount);
#if defined(PRE_ADD_PVP_TOURNAMENT)
void SendPvPSwapTournamentIndex(UINT nAccountDBID, char cSourceIndex, char cDestIndex);
#endif
#if defined( PRE_WORLDCOMBINE_PVP )
void SendWorldPvPCreateRoom( int nRoomIndex, TWorldPvPMissionRoom Data, UINT nAccountDBID = 0 );
void SendWorldPvPJoinRoom( UINT nAccountDBID, INT64 biCharacterDBID, int nRoomIndex, TWorldPvPRoomDBData *Data, UINT uiTeam, bool bPvPLobby );
#endif
//Farm
void SendFarmListGot(TFarmItemFromDB * pFarm, BYTE cCount);
//Cheat Notice
void SendNoticeFromClient(const WCHAR * pMsg, int nLen);
void SendZoneNoticeFromClient(int nMapIndex, const WCHAR * pMsg, int nLen);
// 치트관련
#if defined(PRE_ADD_MULTILANGUAGE)
void SendTraceBreakInto(int nType, const UINT uiAccountDBID, const WCHAR* pwszCharacterName, char cSelectedLang );
void SendReqRecall( const UINT uiAccountDBID, const UINT uiRecallChannelID, const WCHAR* pwszCharacterName, char cSelectedLang );
void SendBanUser(UINT nAccountDBID, const WCHAR * pCharacterName, char cSelectedLang);
#else //#if defined(PRE_ADD_MULTILANGUAGE)
void SendTraceBreakInto(int nType, const UINT uiAccountDBID, const WCHAR* pwszCharacterName );
void SendReqRecall( const UINT uiAccountDBID, const UINT uiRecallChannelID, const WCHAR* pwszCharacterName );
void SendBanUser(UINT nAccountDBID, const WCHAR * pCharacterName);
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
void SendForceDestroyPvP(UINT nAccountDBID, int nPvPIndex, const WCHAR * pForceWinGuildName);
#if defined(PRE_ADD_QUICK_PVP)
void SendMakeQuickPvPRoom(UINT nMasterAccountDBID, UINT nSlaveAccountDBID);
#endif
//
bool VerifyChannelID(int nChannelID, int nMapIdx);
int GetChannelIndex(int nChannelID);
const sChannelInfo* GetChannelInfo( const int nChannelID );
const sChannelInfo* GetChannelInfoFromMapIndex( const int nMapIndex );
const sChannelInfo* GetChannelInfoFromAttr( const int iAttr );
int GetChannelMapIndex(int nChannelID);
int GetMeritBonusID(int nChannelID);
//Connection Verify
void SetInComplete() { m_bConnectCompleted = false; }
bool GetActive();
void SendUpdateChannelShowInfo( USHORT unChannelID, bool bShow, int nServerID, BYTE cThreadID );
#if defined(_KR) || defined(_TH) || defined(_ID)
void SendPCBangResult(UINT nAccountDBID);
#endif // _KR
void SendChangeCharacterName( const TGuildUID pGuildUID, char cWorldSetID, UINT uiAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszOriginName, LPCWSTR lpwszCharacterName, INT64 biBFCharacterDBID=0 );
void SendSaveUserTempData(CDNUserSession* pSession);
void SendLoadUserTempData(UINT uiAccountDBID);
void SendDuplicateLogin(UINT nAccountDBID, bool bIsDetach, UINT nSessionID);
// Quest
void SendWorldEventCounter (char cWorldSetID, int nScheduleID, int nCount);
void SendCheckLastDungeonInfo( CDNUserSession* pSession, INT64 biValue );
#if defined( PRE_PARTY_DB )
void SendConfirmLastDungeonInfo( CDNUserSession* pSession, INT64 biValue, BreakInto::Type::eCode BreakIntoType=BreakInto::Type::PartyRestore, bool bIsOK=true );
#else
void SendConfirmLastDungeonInfo( CDNUserSession* pSession, INT64 biValue, bool bIsOK=true );
#endif // #if defined( PRE_PARTY_DB )
#if defined (PRE_ADD_BESTFRIEND)
void SendSearchBestFriend(UINT nAccountDBID, int nRet, bool bAck, LPCWSTR lpwszCharacterName, char cLevel = 0, char cJob = 0);
void SendRegistBestFriend(UINT nAccountDBID, INT64 biCharacterDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, int nRegistItemID);
void SendRegistBestFriendResult(UINT nAccountDBID, int nRetCode, bool bAck, INT64 biFromCharacterDBID, LPCWSTR lpwszFromCharacterName, UINT nToAccountDBID, INT64 biToCharacterDBID, LPCWSTR lpwszToCharacterName);
void SendCompleteBestFriend(UINT nFromAccountDBID, UINT nToAccountDBID, INT64 biCharacterDBID, LPCWSTR lpwszCharacterName, int nItemID);
void SendEditBestFriendMemo(UINT nFromAccountDBID, INT64 biToCharacterDBID, LPCWSTR lpwszToMemo);
void SendCancelBestFriend(LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, bool bCancel);
void SendCloseBestFriend(LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName);
void SendLevelUpBestFriend(BYTE cLevel, LPCWSTR lpwszCharacterName);
#endif // #if defined (PRE_ADD_BESTFRIEND)
#if defined( PRE_WORLDCOMBINE_PARTY )
void SendGetWorldPartyMember(UINT nAccountDBID, INT64 biToCharacterDBID, const Party::Data &PartyData);
#endif
#if defined( PRE_PRIVATECHAT_CHANNEL )
void SendAddPrivateChatChannel(TPrivateChatChannelInfo tPrivateChatChannel);
void SendAddPrivateChatChannelMember(INT64 nChannelID, TPrivateChatChannelMember Member);
void SendInvitePrivateChatChannel(INT64 nChannelID, UINT nAccountDBID, WCHAR* wszInviteCharacterName);
void SendInvitePrivateChatChannelResult(int nRet, UINT nAccountDBID);
void SendDelPrivateChatChannelMember(PrivateChatChannel::Common::eModType eType, INT64 nChannelID, INT64 biCharacterDBID, const WCHAR* wszName);
void SendKickPrivateChatChannelMemberResult(INT64 biCharacterDBID);
void SendModPrivateChatChannelInfo(INT64 nChannelID, PrivateChatChannel::Common::eModType eModType, int nPassWord, INT64 biCharacterDBID);
void SendModPrivateChatChannelMemberName(INT64 nChannelID, INT64 biCharacterDBID, const WCHAR* wszName );
#endif
#if defined( PRE_ADD_MUTE_USERCHATTING )
#if defined(PRE_ADD_MULTILANGUAGE)
void SendMuteUserFind(UINT uiAccountDBID, char cWorldSetID, const WCHAR * pMuteCharacterName, int nMuteMinute, char cSelectLanguage );
#else // #if defined(PRE_ADD_MULTILANGUAGE)
void SendMuteUserFind(UINT uiAccountDBID, char cWorldSetID, const WCHAR * pMuteCharacterName, int nMuteMinute );
#endif // #if defined(PRE_ADD_MULTILANGUAGE)
#endif // #if defined( PRE_ADD_MUTE_USERCHATTING )
#if defined( PRE_ALTEIAWORLD_EXPLORE )
void SendAddAlteiaWorldSendTicket( char cWorldSetID, const WCHAR* wszRecvCharacterName, INT64 biSendCharacterDBID, WCHAR* wszSendCharacterName);
void SendAddAlteiaWorldSendTicketResult( int nRetCode, INT64 biSendCharacterDBID );
#endif
#if defined(PRE_ADD_CHNC2C)
void SendC2CCoinBalanceResult( int nRetCode, Int64 biCoinBalance, const char* szSeqID);
void SendC2CAddCoinResult( int nRetCode, const char* szSeqID);
void SendC2CReduceCoinResult( int nRetCode, const char* szSeqID);
#endif //#if defined(PRE_ADD_CHNC2C)
#if defined( PRE_DRAGONBUFF )
void SendApplyWorldBuff( WCHAR *wszCharacterName, int nItemID, int nMapIdx );
#endif
#if defined(PRE_ADD_DWC)
void SendInviteDWCTeamMember(UINT nTeamID, UINT nAccountDBID, LPCWSTR lpwszFromCharacterName, LPCWSTR lpwszToCharacterName, LPCWSTR lpwszTeamName);
void SendInviteDWCTeamMemberACK(UINT nAccountDBID, int nRetCode, bool bAck, LPCWSTR pwszToCharacterName);
void SendAddDWCTeamMember(UINT nTargetUserAccountDBID, UINT nTeamID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszFromCharacterName, TP_JOB nJob, TCommunityLocation* pLocation, bool bAlredySentByVillage);
void SendDismissDWCTeam(UINT nTargetUserAccountDBID, UINT nTeamID, int nRet, bool bAlredySentByVillage);
void SendLeaveDWCTeamMember(UINT nTargetUserAccountDBID, UINT nTeamID, INT64 biLeaveUserCharacterDBID, LPCWSTR pwszCharacterName, int nRet, bool bAlredySentByVillage);
void SendChangeDWCTeamMemberState(UINT nTargetUserAccountDBID, UINT nTeamID, INT64 biCharacterDBID, TCommunityLocation* pLocation, bool bLogin);
void SendDWCTeamMemberList(UINT nAccountDBID, UINT nTeamID, std::vector<INT64> &VecMemberList);
void SendDWCTeamChat(UINT nTeamID, UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen);
#endif
#if defined( PRE_PVP_GAMBLEROOM )
void SendCreateGambleRoomFlag(bool bFlag);
void SendDelGambleRoom();
#endif
private:
bool _CmdRecall( MAVIResRecall* pPacket );
bool _CmdVillageTrace( MAVIVillageTrace* pPacket );
bool m_bConnectCompleted;
};
extern CDNMasterConnection* g_pMasterConnection;