2024-12-21 10:04:04 +08:00
# 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 ) ;
} ;