DragonNest/Server/DNMasterServer/DNGameConnection.h
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

255 lines
12 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 );
};