255 lines
12 KiB
C++
255 lines
12 KiB
C++
#pragma once
|
||
|
||
#include "Connection.h"
|
||
|
||
class CDNUser;
|
||
//class CDNParty;
|
||
class CDNPvP;
|
||
|
||
class CDNGameConnection: public CConnection
|
||
{
|
||
private:
|
||
std::vector <TGameInfo*> m_GameServerInfoList;
|
||
USHORT m_wGameID;
|
||
int m_nRoomCnt;
|
||
int m_nUserCnt;
|
||
|
||
volatile bool m_bZeroPopulation;
|
||
BYTE m_cAffinityType; //eGameServerAffinityType
|
||
int m_nManagedID;
|
||
bool m_bConnectComplete;
|
||
|
||
UINT m_uiLastReqEnterGameTick;
|
||
UINT m_uiLastEnterGameTick ;
|
||
#if defined( PRE_FIX_WORLDCOMBINEPARTY )
|
||
bool m_bWorldCombineGameServer;
|
||
#endif
|
||
|
||
public:
|
||
|
||
CDNGameConnection(void);
|
||
virtual ~CDNGameConnection(void);
|
||
|
||
bool GetConnectionCompleted() { return m_bConnectComplete; }
|
||
|
||
int MessageProcess(int iMainCmd, int iSubCmd, char * pData, int iLen);
|
||
|
||
inline void SetGameID(int id) { m_wGameID = id; }
|
||
inline USHORT GetGameID() { return m_wGameID; }
|
||
inline void SetZeroPopulation(bool bPopulation) { m_bZeroPopulation = bPopulation; }
|
||
inline bool GetZeroPopulation() { return m_bZeroPopulation; }
|
||
inline void SetAffinityType(BYTE cAffinity) { m_cAffinityType = cAffinity; }
|
||
inline BYTE GetAffinityType() { return m_cAffinityType; }
|
||
inline void SetManagedID(int nManagedID) { m_nManagedID = nManagedID; }
|
||
inline int GetManagedID() { return m_nManagedID; }
|
||
|
||
#ifdef _WORK
|
||
//For _WORK
|
||
void SendReloadExt();
|
||
void SendReloadAct();
|
||
#endif //#ifdef _WORK
|
||
|
||
//GameConnection Game Registration
|
||
void SendRegistWorldID();
|
||
void SendReqUserList(short nRetCode);
|
||
void SendGameRegistComplete();
|
||
|
||
void SetLastReqEnterGameTick();
|
||
|
||
//UserState
|
||
void SendAddUserState(const WCHAR * pName, INT64 biChracterDBID, int nLocationState = -1, int nCommunityState = -1, int nChannelID = -1, int nMapIdx = -1);
|
||
void SendDelUserState(const WCHAR * pName, INT64 biChracterDBID);
|
||
void SendUpdateUserState(const WCHAR * pName, INT64 biChracterDBID, int nLocationState, int nCommunityState, int nChannelID, int nMapIdx);
|
||
void SendChangeCharacterName(MAChangeCharacterName* pPacket);
|
||
|
||
//GameRoom
|
||
void SendReqTutorialRoomID(CDNUser * pUser, int nLoginServerID);
|
||
bool SendReqRoomID( GameTaskType::eType GameTaskType, CDNUser* pUser, TDUNGEONDIFFICULTY StageDifficulty, int nMeritBonusID, bool bDirectConnect = false ); // Single Room
|
||
void SendReqRoomID(VIMAReqGameID * pPacket, int nMeritBonusID); // Party Room
|
||
void SendLadderReqRoomID( VIMALadderReqGameID* pPacket ); // Ladder Room
|
||
bool SendReqRoomID( CDNPvP* pPvPRoom, bool bDirectConnect = false ); // PvP Room
|
||
#if defined( PRE_ADD_FARM_DOWNSCALE )
|
||
bool SendReqFarmRoomID(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, int iAttr );
|
||
#elif defined( PRE_ADD_VIP_FARM )
|
||
bool SendReqFarmRoomID(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, Farm::Attr::eType Attr );
|
||
#else
|
||
bool SendReqFarmRoomID(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart);
|
||
#endif // #if defined( PRE_ADD_FARM_DOWNSCALE )
|
||
bool SendForceStopPvP(int nGameRoomID, UINT nForceWinGuildDBID);
|
||
void SendGuildWarAllStop();
|
||
#if defined( PRE_WORLDCOMBINE_PVP )
|
||
void SendWorldPvPReqRoomID( VIMACreateWorldPvPRoom* pPacket, BYTE cVillageID );
|
||
#endif
|
||
//Party
|
||
void SendInivitePartyMemberResult(UINT nAccountDBID, const WCHAR * pwszInvitedName, int nRetCode);
|
||
#if defined(PRE_MOD_REQ_JOIN_PARTY_ANSWER_MSG_APP)
|
||
void SendGetPartyID( UINT nAccountDBID, UINT nSenderAccountDBID );
|
||
void SendReqPartyAskJoin( UINT nAccountDBID, const VIMAReqPartyAskJoin* pPacket );
|
||
void SendAskJoinAgreeInfo( UINT uiAccountDBID , TPARTYID PartyID, int iPassword );
|
||
#endif
|
||
|
||
//Each GameServer
|
||
bool GetHasMargin();
|
||
int GetIdleGameServer(int nCnt);
|
||
int GetIdleGameServerByAtt(int Att);
|
||
bool GetGameServerInfoByID(int nGameServerID, USHORT * pPort, char * pIP, USHORT * pTcpPort);
|
||
|
||
void SendNextVillageServerInfo(UINT nAccountDBID, int nMapIdx, int nNextMapIdx, int nNextGateIdx, const char * pIP, USHORT nPort, short nRet, INT64 nItemSerial = 0);
|
||
void SendRebirthVillageInfo(UINT nAccountDBID, int nVillageID, int nChannelID, const char *pIp, USHORT nPort, short nRet);
|
||
void SendMovePvPGameToPvPLobby( const UINT uiAccountDBID, const char* pszIP, const USHORT unPort, const short nRet );
|
||
|
||
void SendLoginState(UINT nAccountDBID, short nRet);
|
||
void SendVillageState(UINT nAccountDBID, int nRoomID, int nMapIndex, short nRet);
|
||
|
||
void SendBreakintoRoom( int iGameRoomID, CDNUser* pJoinUser, BreakInto::Type::eCode BreakIntoType, char cTeamSlotIndex = -1 );
|
||
|
||
void SendLadderObserver( int iGameRoomID, CDNUser* pUser );
|
||
void SendPopulationZero(bool bZero);
|
||
|
||
//Friend
|
||
void SendFriendAddNotice(UINT nAddedAccountDBID, const WCHAR * pName);
|
||
|
||
// party
|
||
//void SendDelPartyMember(int nRoomID, UINT nLeaderAccountDBID, UINT nMemberSessionID, UINT nLeaderSessionID, char cKickKind);
|
||
|
||
// chat
|
||
void SendPrivateChat(UINT nToAccountDBID, const WCHAR *pwszFromCharacterName, char cType, const WCHAR *pwszChatMsg, short wChatLen, int nRet = ERROR_NONE);
|
||
void SendChat(char cType, UINT nToAccountDBID, const WCHAR *pwszFromCharacterName, const WCHAR *pwszChatMsg, short wChatLen);
|
||
void SendWorldSystemMsg(const WCHAR *pwszFromCharacterName, char cType, int nID, int nValue, WCHAR* pwszToCharacterName);
|
||
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
||
void SendPrivateChannelChat( const WCHAR *pwszFromCharacterName, const WCHAR *pwszChatMsg, short wChatLen, INT64 nChannelID);
|
||
#endif
|
||
|
||
//notice
|
||
void SendNotice(const WCHAR * pMsg, const int nLen, int nShowSec);
|
||
void SendNoticeServer(int nManagedID, const WCHAR * pMsg, int nLen, int nShowSec);
|
||
void SendNoticeCancel();
|
||
|
||
// Cheat <20><><EFBFBD><EFBFBD>
|
||
void SendResRecall( CDNUser* pRecallUser, const VIMAReqRecall* pPacket, const int iRecallMapIndex );
|
||
void SendUserRestraint(UINT nAccountDBID);
|
||
|
||
// PvP
|
||
void SendPvPGameMode( const CDNPvP* pPvPRoom );
|
||
void SendPvPLadderGameMode( GAMASetRoomID* pPacket, const TPvPGameModeTable* pGameModeTable );
|
||
void SendPvPMemberGrade(UINT nAccountDBID, USHORT nTeam, UINT uiUserState, UINT nChangedSessionID, int nRetCode);
|
||
void SendPvPMemberIndex(USHORT nTeam, const VIMAPVPSwapMemberIndex * pIndex, int nRetCode);
|
||
void SendPvPChangeUserState( const UINT nRoomID, const UINT uiAccountDBID, const UINT uiUserState );
|
||
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
||
void SendPvPTournamentUserInfo( CDNPvP* pPvPRoom );
|
||
#endif
|
||
|
||
void SendDetachUser(UINT nAccountDBID, bool bIsDuplicate=false, UINT nSessionID=0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
|
||
#if defined(_CH)
|
||
void SendFCMState(UINT nAccountDBID, int nOnline, bool bSend); // <20>Ƿε<C7B7> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD>
|
||
#endif // _CH
|
||
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);
|
||
|
||
//Guild
|
||
void SendDismissGuild(MADismissGuild* pPacket);
|
||
void SendAddGuildMember(MAAddGuildMember* pPacket);
|
||
void SendDelGuildMember(MADelGuildMember* pPacket);
|
||
void SendChangeGuildInfo(MAChangeGuildInfo* pPacket);
|
||
void SendChangeGuildMemberInfo(MAChangeGuildMemberInfo* pPacket);
|
||
void SendGuildChat(MAGuildChat* pPacket);
|
||
#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
||
void SendDoorsGuildChat(MADoorsGuildChat* pPacket);
|
||
#endif //#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
||
void SendGuildMemberLevelUp(MAGuildMemberLevelUp* pPacket);
|
||
void SendChangeGuildName(MAGuildChangeName* pPacket);
|
||
void SendChangeGuildMark(MAGuildChangeMark* pPacket);
|
||
void SendUpdateGuildExp(MAUpdateGuildExp* pPacket);
|
||
void SendEnrollGuildWar(MAEnrollGuildWar* pPacket);
|
||
void SendChangeGuildWarStep(MAChangeGuildWarStep* pPacket);
|
||
void SendSetGuildWarPoint(MASetGuildWarPoint* pPacket);
|
||
void SendAddGuildWarPoint(MAAddGuildWarPoint* pPacket);
|
||
void SendSetGuildWarSecretMission(MASetGuildWarSecretMission* pPacket);
|
||
void SendSetGuildwarFinalProcess(char cGuildFinalPart, __time64_t tBeginTime);
|
||
void SendSetGuildWarPreWinGuild(MAGuildWarPreWinGuild* pPacket);
|
||
void SendSetGuildWarTournamentWin(MASetGuildWarTournamentWin* pPacket);
|
||
void SendSetGuildWarSchedule(MASetGuildWarEventTime* pPacket);
|
||
void SendGuildRecruitMember(MAGuildRecruitMember* pPacket);
|
||
void SendAddGuildRewardItem(MAGuildRewardItem* pPacket);
|
||
void SendExtendGuildSize(MAExtendGuildSize* pPacket);
|
||
void SendUpdateGuildWare(int nGuildID);
|
||
|
||
// MasterSystem
|
||
void SendMasterSystemSyncSimpleInfo( UINT uiAccountDBID, INT64 biCharacterDBID, MasterSystem::EventType::eCode EventCode );
|
||
void SendMasterSystemSyncJoin( UINT uiAccountDBID, INT64 biCharacterDBID, bool bIsAddPupil );
|
||
void SendMasterSystemSyncLeave( UINT uiAccountDBID, INT64 biCharacterDBID, bool bIsDelPupil );
|
||
void SendMasterSystemSyncGraduate( UINT uiAccountDBID, MasterSystem::VIMASyncGraduate* pPacket );
|
||
void SendMasterSystemSyncConnect( UINT uiAccountDBID, bool bIsConnect, WCHAR* pwszCharName );
|
||
|
||
void SendFarmSync( UINT uiAccountDBID, INT64 biCharacterDBID, Farm::ServerSyncType::eType Type );
|
||
void SendFarmSyncAddWater( UINT uiAccountDBID, WCHAR* pwszCharName, int iAddWaterPoint );
|
||
|
||
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
||
void SendSyncSystemMail( UINT uiAccountDBID, VIMASyncSystemMail* pMail );
|
||
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
||
|
||
void SendPCBangResult(UINT nAccountDBID, CDNUser *pUser);
|
||
#if defined(PRE_ADD_REMOTE_QUEST)
|
||
void SendUserTempDataResult(UINT uiAccountDBID, CDNUser *pUser);
|
||
#else
|
||
#if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
void SendUserTempDataResult(UINT uiAccountDBID, int nDungeonClearCount, GameQuitReward::RewardType::eType eUserGameQuitRewardType);
|
||
#else // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
void SendUserTempDataResult(UINT uiAccountDBID, int nDungeonClearCount);
|
||
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
|
||
#endif //#if defined(PRE_ADD_REMOTE_QUEST)
|
||
|
||
void SendCheckLastDungeonInfo( char cWorldSetID, const VIMACheckLastDungeonInfo* pPacket );
|
||
void SendDeleteBackupDungeonInfo( UINT uiAccountDBID, INT64 biCharacterDBID, int iRoomID );
|
||
|
||
#if defined( PRE_WORLDCOMBINE_PARTY )
|
||
void SendGetWorldPartyMember( MAGetWorldPartyMember *Packet);
|
||
#if defined( PRE_FIX_WORLDCOMBINEPARTY )
|
||
void SetWorldCombineGameServer( bool bFlag ) { m_bWorldCombineGameServer = bFlag; }
|
||
bool GetWorldCombineGameServer() { return m_bWorldCombineGameServer; }
|
||
#endif
|
||
#endif
|
||
#if defined( PRE_ADD_BESTFRIEND )
|
||
void SendCancelBestFriend(MACancelBestFriend* pPacket);
|
||
void SendCloseBestFriend(MACloseBestFriend* pPacket);
|
||
void SendLevelBestFriend(MALevelUpBestFriend* pPacket);
|
||
#endif
|
||
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
||
void SendPrivateChatChannelAdd(MAAddPrivateChannel* pPacket);
|
||
void SendPrivateChatChannelMemberAdd(MAAddPrivateChannelMember* pPacket);
|
||
void SendPrivateChatChannelMemberInvite(MAInvitePrivateChannelMember* pPacket);
|
||
void SendPrivateChatChannelMemberInviteResult(MAInvitePrivateChannelMemberResult* pPacket);
|
||
void SendPrivateChatChannelMemberDel(MADelPrivateChannelMember* pPacket);
|
||
void SendPrivateChatChannelMemberKickResult(MAKickPrivateChannelMemberResult* pPacket);
|
||
void SendPrivateChatChannelMod(MAModPrivateChannel* pPacket);
|
||
void SendPrivateChatChannelModMemberName(MAModPrivateChannelMemberName* pPacket);
|
||
#endif
|
||
#if defined(PRE_ADD_MUTE_USERCHATTING)
|
||
void SendMuteUserChatting(MAMuteUserChat* pData);
|
||
#endif // #if defined(PRE_ADD_MUTE_USERCHATTING)
|
||
#if defined( PRE_ADD_PVP_COMBOEXERCISE )
|
||
void SendChangeRoomMaster( UINT uiRoomID, INT64 biRoomMasterCharacterDBID, UINT uiRoomMasterSessionID );
|
||
#endif // #if defined( PRE_ADD_PVP_COMBOEXERCISE )
|
||
|
||
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
||
void SendAlteiaWorldSendTicket( MAAlteiaWorldSendTicket *pPacket );
|
||
void SendAlteiaWorldSendTicketResult( MAAlteiaWorldSendTicketResult *pPacket );
|
||
#endif
|
||
#if defined(PRE_ADD_CHNC2C)
|
||
void SendC2CAddCoin( UINT uiAccountDBID,INT64 biCharacterDBID, INT64 biAddCoin, const char* szSeqID, const char* szBookID );
|
||
void SendC2CReduceCoin( UINT uiAccountDBID,INT64 biCharacterDBID, INT64 biReduceCoin, const char* szSeqID, const char* szBookID );
|
||
#endif //#if defined(PRE_ADD_CHNC2C)
|
||
#if defined(PRE_ADD_DWC)
|
||
void SendAddDWCTeamMember(MAAddDWCTeamMember* pPacket);
|
||
void SendLeaveDWCTeamMember(MALeaveDWCTeamMember* pPacket);
|
||
void SendDismissDWCTeam(MADismissDWCTeam* pPacket);
|
||
void SendChangeDWCTeamMemberState(MAChangeDWCTeamMemberState* pPacket);
|
||
void SendDWCTeamChat(char cType, UINT nToAccountDBID, const WCHAR *pwszFromCharacterName, const WCHAR *pwszChatMsg, short wChatLen);
|
||
#endif
|
||
|
||
// Common
|
||
private:
|
||
int _ProcessRebirthVillage( CDNUser* pUser, const int iLastVillageMapIndex );
|
||
};
|