548 lines
No EOL
25 KiB
C++
548 lines
No EOL
25 KiB
C++
#pragma once
|
|
|
|
//Synchronize Rule
|
|
//Process Thread call에 의한 Process Thread Cursor만을 이용하므로 논리적으로 싱글쓰레드와 같이 자유롭게 사용이 가능합니다.
|
|
//Exception Rule이 존재 합니다. 컨넥션관련 내용과 IdleProcess()에 의한 호출부분은 다른 쓰레드커서를 통한 호출이므로
|
|
//동시에 중복억세스가 가능하게 됩니다. 그러므로 IdleProcess()에 의한 호출이 필요한 경우(주기적인 먼가) 동기화객체로
|
|
//동기를 맞추어 주시면 됩니다.
|
|
//- 2hogi
|
|
|
|
#include "Util.h"
|
|
|
|
class CDNDataManager;
|
|
class CConnection;
|
|
class CDNLoginConnection;
|
|
class CDNGameConnection;
|
|
class CDNVillageConnection;
|
|
class CDNUser;
|
|
class CDNPvP;
|
|
class CDNFarm;
|
|
|
|
class CDivisionManager
|
|
{
|
|
public:
|
|
typedef struct RESETAUTHINFO
|
|
{
|
|
public:
|
|
RESETAUTHINFO(UINT uiAccountDBID, UINT nSessionID, int nCurServerID, int nOldServerID, char cWorldSetID, INT64 nCharacterDBID) : m_uiAccountDBID(uiAccountDBID), m_nSessionID(nSessionID), m_uiSetTick(0), m_uiCurTick(0), m_nCurServerID(nCurServerID), m_nOldServerID(nOldServerID), m_cWorldSetID(cWorldSetID), m_nCharacterDBID(nCharacterDBID) { }
|
|
public:
|
|
UINT m_uiAccountDBID;
|
|
UINT m_nSessionID;
|
|
UINT m_uiSetTick;
|
|
UINT m_uiCurTick;
|
|
int m_nCurServerID; // LO 만 사용 (최초 요청한 LO 의 사용자를 종료시키지 않기 위함 ?)
|
|
int m_nOldServerID; // 용도 미정 ?
|
|
char m_cWorldSetID; // LO 와 GA / VI 를 구분하기 위함
|
|
INT64 m_nCharacterDBID; // LO 와 GA / VI 를 구분하기 위함
|
|
} *LPRESETAUTHINFO;
|
|
|
|
typedef std::map<UINT, RESETAUTHINFO> TP_RESETAUTHLIST; // 인증정보 초기화 캐싱 목록 타입 (계정 DBID / 마지막 접근시간 (단위 : ms))
|
|
typedef TP_RESETAUTHLIST::iterator TP_RESETAUTHLIST_ITR;
|
|
typedef TP_RESETAUTHLIST::const_iterator TP_RESETAUTHLIST_CTR;
|
|
typedef std::vector<RESETAUTHINFO> TP_RESETAUTHAUTO;
|
|
typedef TP_RESETAUTHAUTO::iterator TP_RESETAUTHAUTO_ITR;
|
|
typedef TP_RESETAUTHAUTO::const_iterator TP_RESETAUTHAUTO_CTR;
|
|
|
|
public:
|
|
enum eTick
|
|
{
|
|
eTickSortLoginServerList, // 로그인 서버 세션을 정렬
|
|
eTickCnt,
|
|
};
|
|
|
|
private:
|
|
CSyncLock m_Sync;
|
|
|
|
// Tick
|
|
mutable DWORD m_dwTick[eTickCnt+1]; // 틱 카운트 (각 개체의 특정 동작의 시간범위를 관리할 경우가 발생 시 여기에 공통적으로 등록하여 사용할 목적)
|
|
|
|
//Connection List
|
|
mutable CDNLoginConnection * m_pLoginConnection; // 로그인 서버 연결 현재
|
|
CDNLoginConnection * m_pLoginConnectionList[LOGINCOUNTMAX+1]; // 로그인 서버 연결 목록
|
|
std::vector <CDNGameConnection*> m_GameServerConList;
|
|
std::vector <CDNVillageConnection*> m_VillageServerConList;
|
|
|
|
//UserData List
|
|
std::map <UINT, CDNUser*> m_AccountDBIDList; // first:AccountDBID
|
|
std::map <UINT, CDNUser*> m_SessionIDList; // first:SessionID
|
|
std::map <INT64,CDNUser*> m_CharacterDBIDList; // first:CharacterDBID
|
|
std::map <std::wstring, CDNUser*> m_UserNameList;
|
|
|
|
int m_nProcessCount;
|
|
|
|
//PvP
|
|
typedef std::map<UINT,CDNPvP*> _TPvPMap;
|
|
_TPvPMap m_mPvP;
|
|
std::list<UINT> m_listPvPIndex;
|
|
BYTE m_cPvPLobbyVillageID;
|
|
USHORT m_unPvPLobbyChannelID;
|
|
int m_nPvPLobbyMapIndex;
|
|
|
|
#if defined(PRE_FIX_DELAY_MASTER_CHECKVILLAGECHANNEL)
|
|
DWORD m_dwCheckVillageChannelStartTick;
|
|
#endif
|
|
DWORD m_dwCheckVillageChannelTick;
|
|
void CheckVillageChannel( DWORD dwCurTick );
|
|
|
|
//Farm
|
|
int m_nFarmGameindex;
|
|
bool m_bDestroyFarm;
|
|
std::vector <TFarmItemFromDB> m_vFarmCreateSync;
|
|
std::map <UINT, CDNFarm*> m_mFarmList;
|
|
#ifdef PRE_MOD_OPERATINGFARM
|
|
DWORD m_dwFarmDataCreateTick;
|
|
#endif //#ifdef PRE_MOD_OPERATINGFARM
|
|
|
|
int _CheckVillageToPvPVillage( CDNVillageConnection* pVillageCon, CDNUser* pUser, char cReqType, const BYTE cNextVillageID, const int nNextVillageChannelID );
|
|
void _CheckPvPVillageToPvPLobby( VIMAVillageToVillage* pPacket, CDNUser* pUser, const BYTE cNextVillageID, const int nNextChannelIndex );
|
|
void _CheckVillageToPvPLobby( VIMAVillageToVillage* pPacket, CDNUser* pUser, const BYTE cNextVillageID, const int nNextChannelIndex );
|
|
|
|
//Select Server
|
|
struct TSelectJoin
|
|
{
|
|
int nSID;
|
|
WCHAR wszCharacterName[NAMELENMAX];
|
|
};
|
|
std::vector <TSelectJoin> m_SelectJoinList;
|
|
|
|
#if defined(PRE_MOD_SELECT_CHAR)
|
|
void _AddUserList(CDNUser *pUser);
|
|
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
|
|
|
#ifdef PRE_ADD_STEAM_USERCOUNT
|
|
UINT m_nSteamUserCount;
|
|
#endif //#ifdef PRE_ADD_STEAM_USERCOUNT
|
|
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|
bool m_bGambleRoomFlag;
|
|
DWORD m_dwGambleRoomSendTick;
|
|
#endif
|
|
|
|
public:
|
|
CDivisionManager();
|
|
~CDivisionManager();
|
|
|
|
#if !defined (__COVERITY__)
|
|
FRIEND_TEST( PvP_unittest, DeleteGameRoom );
|
|
#endif
|
|
|
|
#ifdef _WORK
|
|
void ReloadExt();
|
|
void ReloadAct();
|
|
#endif //#ifdef _WORK
|
|
|
|
//IdleProcess
|
|
void InternalIdleProcess(ULONG nCurTick);
|
|
void ExternalIdleProcess(ULONG nCurTick);
|
|
void UpdatePvPRoom( const UINT uiCurTick );
|
|
|
|
//SelectJoin
|
|
bool AddSelectJoin(int nSID, const WCHAR * pwszCharacterName);
|
|
void ClearSelectJoin();
|
|
bool IsSelectJoin(const WCHAR * pwszCharacterName, int &nSID);
|
|
|
|
// Tick
|
|
DWORD GetTick(eTick pTick) const;
|
|
void SetTick(eTick pTick) const;
|
|
void SetTick(eTick pTick, DWORD dwVal) const;
|
|
void ResetTick(eTick pTick) const;
|
|
BOOL IsTick(eTick pTick) const;
|
|
|
|
//Connections
|
|
bool DelConnection(CConnection * pCon, eConnectionKey eConType);
|
|
CDNLoginConnection * GetLoginConnection() { return m_pLoginConnection; }
|
|
CDNLoginConnection * FindLoginConnection(const char* pIp, const int nPort);
|
|
void SortLoginConnectionList() const;
|
|
CDNGameConnection * GameServerConnected(const char * pIP, USHORT nPort);
|
|
void GameServerRegist(CDNGameConnection * pCon);
|
|
|
|
#if defined(PRE_FIX_LIVE_CONNECT)
|
|
void AddGameServerConnection(CDNGameConnection* pCon);
|
|
void AddVillageServerConnection(CDNVillageConnection* pCon);
|
|
#endif
|
|
|
|
CDNVillageConnection * VillageServerConnected(const char * pIP, USHORT nPort);
|
|
void SendWorldUserStateList(CDNVillageConnection * pCon);
|
|
CDNVillageConnection * GetFirstVillageServer();
|
|
CDNVillageConnection* GetFirstEnableVillageServer();
|
|
|
|
int GetGameConnectionCount();
|
|
CDNGameConnection * GetFreeGameConnection(int * pExpServerID, int nReqRoomType);
|
|
CDNGameConnection * GetGameConnectionByGameID(int nGameID);
|
|
CDNGameConnection * GetGameConnectionByManagedID(int nSID );
|
|
CDNVillageConnection * GetVillageConnectionByVillageID(int nVillageID);
|
|
#ifdef PRE_MOD_OPERATINGFARM
|
|
bool IsFarmGameConnectionAvailable(DWORD dwCurTick);
|
|
CDNGameConnection * GetFarmGameConnection(int * pExpServerID);
|
|
#endif //#ifdef PRE_MOD_OPERATINGFARM
|
|
#if defined( PRE_FIX_WORLDCOMBINEPARTY )
|
|
CDNGameConnection * GetWorldCombineGameConnection();
|
|
#endif
|
|
|
|
void SendLoginServer(const int iMainCmd, const int iSubCmd, const char *cBuf, const unsigned short uLen);
|
|
void SendAllLoginServer(const int iMainCmd, const int iSubCmd, const char *cBuf, const unsigned short uLen);
|
|
void SendAllVillageServer(const int iMainCmd, const int iSubCmd, const char *cBuf, const unsigned short uLen);
|
|
void SendAllGameServer(const int iMainCmd, const int iSubCmd, const char *cBuf, const unsigned short uLen);
|
|
|
|
// Login Server
|
|
CDNLoginConnection* GetFirstEnableLoginServer();
|
|
|
|
void SendAllLoginServerDetachUser(UINT nAccountDBID);
|
|
void SendAllLoginServerVillageInfo(UINT nUserCnt, UINT nMaxUserCount, std::vector<TVillageInfo> * vList);
|
|
void SendAllLoginServerVillageInfoDelete(int nVillageID);
|
|
|
|
//Server Operator
|
|
bool GetVillageServerInfo(std::vector <TVillageInfo> * vList);
|
|
bool GetVillageServerInfo(int nVillageID, TVillageInfo * pVillageInfo, const char * pszIP, short nPort);
|
|
const TChannelInfo * GetChannelInfo( const int nVillageID, const int nChannelID );
|
|
const TChannelInfo * GetChannelInfo(int nChannelID);
|
|
|
|
bool ChannelControl(int nChannelID, bool bVisibility, int nChannelPopulation);
|
|
bool PopulationControl(int nServerType, int nManagedID, bool bZeroPopulation);
|
|
void SetGameConAffinityType(int nManagedID, BYTE cAffinityType);
|
|
void UpdateUserRestraint(UINT nAccountDBID);
|
|
|
|
bool GetGameInfoByID(int nGameID, int nGameServerID, char * pIP, USHORT * pPort, USHORT * pTcpPort);
|
|
bool GetVillageInfo(int nMapIdx, int nOriginChannelId, int &nChannelId, BYTE &cVillageID, char * pIP, USHORT &pPort);
|
|
|
|
void CheckPvPLobbyChannel( CDNVillageConnection* pVillageCon );
|
|
|
|
//WaitUser Process
|
|
void SendWaitProcess(int nServerID, MALOWaitUserProcess * pProcess);
|
|
|
|
void SendChangeCharacterName(MAChangeCharacterName* pPacket);
|
|
|
|
//User State
|
|
void AddUserState(const WCHAR * pName, INT64 biChracterDBID);
|
|
void DelUserState(const WCHAR * pName, INT64 biChracterDBID);
|
|
void UpdateUserState(const WCHAR * pName, INT64 biChracterDBID, int nLocationState, int nCommunityState, int nChannelID = -1, int nMapIdx = -1, CDNGameConnection * pCon = NULL);
|
|
|
|
//UserData
|
|
UINT GetCurUserCount();
|
|
#if defined(PRE_MOD_SELECT_CHAR)
|
|
int AddUser(LOMAAddUser *pPacket, int nServerID);
|
|
bool AddUser(GAMAAddUserList *pPacket, int nGameID, bool bIsForceAdd = false);
|
|
bool AddUser(VIMAAddUserList *pPacket, int nVillageID, bool bIsForceAdd = false);
|
|
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
|
int AddUser(int nServerID, UINT nAccountDBID, const BYTE * pMachineID, DWORD dwGRC, const char * pszIP, char cSelectedLanguage, BYTE cAccountLevel = 0, bool bForce=false );
|
|
bool SetUserInfo(LOMAUserInfo *pUserInfo, int nGameID, int nGameThreadIdx, BYTE * pMachineID, DWORD &dwGRC);
|
|
bool AddUser(int nVillageID, int nChannelID, int nGameID, int nGameThreadIdx, UINT nAccountDBID, UINT nSessionID, INT64 biCharacterDBID, WCHAR *pwszCharacterName, WCHAR *pwszAccountName,
|
|
#if defined(PRE_ADD_DWC)
|
|
BYTE cAccountLevel,
|
|
#endif
|
|
bool bAdult, char *pszIp, char *pszVirtualIp, TPARTYID PartyID, const BYTE * pMachineID, DWORD dwGRC, BYTE cPcBangGrade, char cSelectedLanguage, bool bIsForceAdd = false);
|
|
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
|
bool DelUser(UINT nAccountDBID, bool bIsReconnectLogin = false, UINT nSessionID=0);
|
|
|
|
#if defined (_JP) && defined (WIN64)
|
|
bool SetNHNNetCafeInfo(UINT nAccountDBID, bool bNetCafe, const char * pszNetCafeCode, const char * pszProdectCode);
|
|
#endif
|
|
|
|
bool IsExistUser(UINT nAccountDBID);
|
|
CDNUser * GetUserByAccountDBID(UINT nAccountDBID);
|
|
CDNUser * GetUserBySessionID(UINT nSessionID);
|
|
CDNUser * GetUserByCharacterDBID( INT64 biCharacterDBID );
|
|
CDNUser * GetUserByName(const WCHAR * pName);
|
|
CDNUser * GetUserByAccountName(const WCHAR *pAccountName);
|
|
#if defined(_KR)
|
|
CDNUser * GetUserByNexonSessionNo(INT64 biSessionNo);
|
|
#endif // #if defined(_KR)
|
|
|
|
void DetachUserloginID(int nServerID);
|
|
void DetachUserByVillageID(BYTE cVillageID);
|
|
void DetachUserByGameID(USHORT wGameID);
|
|
void EraseUserListExceptAccountDBList(CDNUser *pUser); // m_AccountDBIDList만 빼고 m_SessionIDList, m_UserNameList, m_PartyList 에 해당되는 유저들 삭제하는 함수 (여러번쓰기 귀찮아서 몰기)
|
|
void ReplaceCharacterName(CDNUser* pUser, WCHAR* wszCharacterName);
|
|
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
|
bool DetachUserByIP(const char * pszIP);
|
|
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
|
|
#ifdef PRE_ADD_STEAM_USERCOUNT
|
|
void IncreaseSteamUser();
|
|
void DecreaseSteamUser();
|
|
#endif //#ifdef PRE_ADD_STEAM_USERCOUNT
|
|
|
|
//User Check
|
|
bool VillageCheckUser(CDNVillageConnection * pCon, UINT nSessionID);
|
|
void CheckZombie(ULONG nCurTick);
|
|
|
|
//Move
|
|
void MovePvPLobbyToVillage( CDNVillageConnection* pCon, VIMAPVP_MOVELOBBYTOVILLAGE* pPacket );
|
|
void MoveVillageToVillage(CDNVillageConnection * pCon, VIMAVillageToVillage * pPacket);
|
|
void MoveGameToVillage(CDNGameConnection * pCon, GAMARequestNextVillageInfo * pPacket);
|
|
|
|
//Trace User Location
|
|
bool VillageToVillage(CDNVillageConnection * pCon, UINT nAccountDBID, int nVillageID, int nChanneID, TPARTYID PartyID);
|
|
bool GameToVillage(CDNGameConnection * pCon, UINT nAccouDBID, int nVillageID, int nChannelID);
|
|
bool VillageToGame(CDNVillageConnection * pCon, UINT nAccountDBID, int nGameID, int nRoomID, int nServerIdx);
|
|
|
|
bool EnterVillage(UINT nAccountDBID, int nVillageID, int nChannelID);
|
|
bool EnterGame(UINT nAccountDBID, int nGameID, int nRoomID, int nServerIdx);
|
|
bool ReconnectLogin(UINT nAccountDBID);
|
|
|
|
CDNPvP * GetPvPRoomByIdx( UINT uiIndex );
|
|
|
|
//Guild
|
|
bool SendInviteGuildMember(MAInviteGuildMember* pPacket);
|
|
void SendInviteGuildMemberResult(VIMAInviteGuildMemberResult* pPacket);
|
|
void SendGuildWareInfo(MAGuildWareInfo* pPacket);
|
|
void SendGuildWareInfoResult(MAGuildWareInfoResult* pPacket);
|
|
void SendGuildMemberLevelUp(MAGuildMemberLevelUp* pPacket);
|
|
void SendRefreshGuildItem(MARefreshGuildItem* pPacket);
|
|
void SendRefreshGuildCoin(MARefreshGuildCoin* pPacket);
|
|
void SendExtendGuildWareSize(MAExtendGuildWare* pPacket);
|
|
void SendDismissGuild(MADismissGuild* pPacket);
|
|
void SendAddGuildMember(MAAddGuildMember* pPacket);
|
|
void SendDelGuildMember(MADelGuildMember* pPacket);
|
|
void SendChangeGuildInfo(MAChangeGuildInfo* pPacket);
|
|
void SendChangeGuildMemberInfo(MAChangeGuildMemberInfo* pPacket);
|
|
void SendGuildChat(MAGuildChat* 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);
|
|
#if defined(PRE_FIX_75807)
|
|
void SendSetGuildWarPreWinGuildGameServer(MAGuildWarPreWinGuild* pPacket);
|
|
#endif //#if defined(PRE_FIX_75807)
|
|
void SendSetGuildWarPreWinGuild(MAGuildWarPreWinGuild* pPacket);
|
|
|
|
void SendAddGuildWarPoint(MAAddGuildWarPoint* pPacket);
|
|
void SendGuildWarInfoToVillage(CDNVillageConnection* pCon);
|
|
void SendGuildWarInfoToGame(CDNGameConnection* pCon);
|
|
void SendGetGuildWarTrialStats();
|
|
void SendSetGuildWarTournamentInfo(SGuildTournamentInfo* pGuildTournamentInfo);
|
|
void SendSetGuildwarFinalProcess(char cGuildFinalPart, __time64_t tBeginTime);
|
|
void SendSetGuildWarSecretMission(MASetGuildWarSecretMission * pPacket);
|
|
void SendSetGuildWarFinalResult(MAVISetGuildWarFinalResult* pPacket);
|
|
void SendSetGuildWarPreWinSkillCoolTime(MAGuildWarPreWinSkillCoolTime* pPacket);
|
|
void SendSetGuildWarSchedule(MASetGuildWarEventTime* pPacket);
|
|
void SendSetGuildWarTournamentWin(MASetGuildWarTournamentWin* pPacket);
|
|
void SendResetGuildWarBuyedItemCount();
|
|
void SendGuildWarAllStop();
|
|
|
|
void SendGuildRecruitMember(MAGuildRecruitMember* pPacket);
|
|
void SendAddGuildRewardItem(MAGuildRewardItem* pPacket);
|
|
void SendExtendGuildSize(MAExtendGuildSize* pPacket);
|
|
|
|
void SendSetGuildWarTrialRanking(MASetGuildWarPointRunningTotal* pPacket);
|
|
void SendGuildWarRefreshGuildPoint(MAGuildWarRefreshGuildPoint* pPacket);
|
|
void SendUpdateGuildWare(int nGuildID);
|
|
|
|
//Friend
|
|
void SendFriendAddNotice(UINT nAddedAccountDBID, const WCHAR * pAddName);
|
|
|
|
//GameRoom
|
|
bool RequestGameRoom(BYTE cReqGameIDType, UINT uiIndex, int nRandomSeed, int nMapIndex, char cGateNo, char cStageConstructionLevel, bool bDirectConnect, bool bTutorial, int nServerID /* 튜토리얼일 경우만 LO ID 입력 */);
|
|
bool RequestGameRoom(VIMAReqGameID * pPacket);
|
|
bool RequestGameRoom( VIMALadderReqGameID* pPacket );
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PVP )
|
|
bool RequestGameRoom( VIMACreateWorldPvPRoom* pPacket, BYTE cVillageID );
|
|
#endif
|
|
|
|
#if defined( PRE_ADD_FARM_DOWNSCALE )
|
|
bool RequestFarmGameRoom(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, int &nServerID, int iAttr );
|
|
#elif defined( PRE_ADD_VIP_FARM )
|
|
bool RequestFarmGameRoom(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, int &nServerID, Farm::Attr::eType Attr );
|
|
#else
|
|
bool RequestFarmGameRoom(UINT nFarmDBID, int nMapID, int nMaxUser, bool bStart, int &nServerID);
|
|
#endif // #if defined( PRE_ADD_FARM_DOWNSCALE )
|
|
bool SetGameRoom(CDNGameConnection * pGameCon, GAMASetRoomID * pMsg);
|
|
bool SetTutorialGameRoom(int nLocalGameID, UINT nAccountDBID, int nGameID, int nServerIdx, int nRoomID, int nLoginServerID);
|
|
void ExceptionPvPRoom(GAMASetRoomID* pMsg, USHORT& unVillageChannelID);
|
|
|
|
//Chat
|
|
#ifdef PRE_ADD_DOORS
|
|
int PrivateChat(UINT nSenderAccountDBID, const WCHAR * pRecieverName, char cType, const WCHAR * pChatMsg, int nLen, INT64 biDoorDestCharacterDBID);
|
|
#else //#ifdef PRE_ADD_DOORS
|
|
int PrivateChat(UINT nSenderAccountDBID, const WCHAR * pRecieverName, char cType, const WCHAR * pChatMsg, int nLen);
|
|
#endif //#ifdef PRE_ADD_DOORS
|
|
int ZoneChat(UINT nSenderAccountDBID, const WCHAR * pChatMsg, int nLen, int nMapIdx);
|
|
#if defined(PRE_ADD_WORLD_MSG_RED)
|
|
int WorldChat(UINT nSenderAccountDBID, const WCHAR * pChatMsg, int nLen, char cChatType = CHATTYPE_WORLD);
|
|
#else // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|
int WorldChat(UINT nSenderAccountDBID, const WCHAR * pChatMsg, int nLen);
|
|
#endif // #if defined(PRE_ADD_WORLD_MSG_RED)
|
|
int WorldSystemMsg(UINT nSenderAccountDBID, char cType, int nID, int nValue, WCHAR* pwszToCharacterName);
|
|
#ifdef PRE_ADD_DOORS
|
|
int DoorsChat(const WCHAR * pSenderName, INT64 biCharacterID, const WCHAR * pMessage, int nLen);
|
|
#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
|
int DoorsGuildChat(INT64 biCharacterID, int nGuildID, const WCHAR * pMessage, int nLen);
|
|
#endif //#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
|
|
#endif //#ifdef PRE_ADD_DOORS
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|
int PrivateChannelChat(UINT nSenderAccountDBID, const WCHAR * pChatMsg, int nLen, INT64 nChannelID);
|
|
#endif
|
|
|
|
//PvP
|
|
CDNPvP* GetPvPRoom( const UINT uiAccountDBID );
|
|
|
|
void PushPvPIndex( const UINT uiIndex ){ m_listPvPIndex.push_back(uiIndex); }
|
|
short CreatePvPRoom( CDNVillageConnection* pVillageCon, const VIMAPVP_CREATEROOM* pPacket, UINT* nOutPvPIndex=NULL );
|
|
bool DestroyPvPGameRoom(const UINT uiPvPIndex);
|
|
short ModifyPvPRoom( CDNVillageConnection* pVillageCon, const VIMAPVP_MODIFYROOM* pPacket );
|
|
void LeavePvPRoom( const UINT unAccountDBID, const bool bReq );
|
|
short JoinPvPRoom( CDNVillageConnection* pVillageCon, const VIMAPVP_JOINROOM* pPacket );
|
|
short RandomJoinPvPRoom( CDNVillageConnection* pVillageCon, const VIMAPVP_RANDOMJOINROOM* pPacket );
|
|
void ChangePvPTeam( CDNVillageConnection* pVillageCon, const VIMAPVP_CHANGETEAM* pPacket );
|
|
void BanPvPRoom( CDNVillageConnection* pVillageCon, const VIMAPVP_BAN* pPacket );
|
|
void EnterLobby( CDNVillageConnection* pVillageCon, const VIMAPVP_ENTERLOBBY* pPacket );
|
|
void ChangePvPRoomCaptain( CDNVillageConnection* pVillageCon, const VIMAPVP_CHANGECAPTAIN* pPacket );
|
|
void ReadyPvP( CDNVillageConnection* pVillageCon, VIMAPVP_READY* pPacket );
|
|
short StartPvP( CDNVillageConnection* pVillageCon, VIMAPVP_START* pPacket, bool bFromUser = false );
|
|
bool ForceStopPvP(const UINT uiPvPIndex, const WCHAR * pGuildName = NULL);
|
|
void SetPvPRoomState( const UINT uiPvPIndex, const UINT uiRoomState );
|
|
void SetPvPRoomSyncOK( const UINT uiPvPIndex );
|
|
void SetPvPBreakIntoOK( const GAMAPVP_BREAKINTOOK* pPacket );
|
|
void SetPvPFinishGameMode( const UINT uiPvPIndex, const UINT uiRoomIndex );
|
|
void SetDestroyPvPGameRoom( const UINT uiPvPIndex, const UINT uiRoomIndex );
|
|
void SetPvPNoMoreBreakInto( const UINT uiPvPIndex, const UINT uiRoomIndex );
|
|
void SetPvPFatigueOption(const VIMAPVP_FATIGUE_OPTION* pPacket );
|
|
bool SetGuildWarMemberGrade(UINT nAccountDBID, bool bAsign, USHORT nType, UINT nTargetSessionID, USHORT &nOutUserState, USHORT &nTeam);
|
|
bool SetPvPMemberIndex(UINT nAccountDBID, BYTE cCount, const TSwapMemberIndex * pIndex, USHORT &nTeam);
|
|
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|
void SetPvPChangeChannel(CDNVillageConnection * pVillageCon, const PVP_CHANGECHANNEL * pChange);
|
|
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
|
|
#if defined(PRE_ADD_PVP_TOURNAMENT)
|
|
bool SwapTournamentIndex(UINT nAccountDBID, char cSourceIndex, char cDestIndex);
|
|
#endif // #if defined(PRE_ADD_PVP_TOURNAMENT)
|
|
|
|
BYTE GetPvPLobbyVillageID(){ return m_cPvPLobbyVillageID; }
|
|
USHORT GetPvPLobbyChannelID(){ return m_unPvPLobbyChannelID; }
|
|
int GetPvPLobbyMapIndex() { return m_nPvPLobbyMapIndex; }
|
|
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|
void DeletePvPGambleRoom();
|
|
#endif
|
|
//Farm
|
|
//process
|
|
void CheckProcessFarm();
|
|
#ifdef PRE_MOD_OPERATINGFARM
|
|
void CheckFarmSync(DWORD dwCurTick);
|
|
#else //#ifdef PRE_MOD_OPERATINGFARM
|
|
void CheckFarmSync();
|
|
#endif //#ifdef PRE_MOD_OPERATINGFARM
|
|
|
|
//
|
|
#ifdef PRE_MOD_OPERATINGFARM
|
|
bool IsFarmConnectionWatingTime(DWORD dwCurTick);
|
|
void SetCreateFarmDataTick(DWORD dwTick) { m_dwFarmDataCreateTick = dwTick; }
|
|
CDNFarm * CreateFarm(TFarmItemFromDB &FarmItem, DWORD dwCurTick);
|
|
#else //#ifdef PRE_MOD_OPERATINGFARM
|
|
CDNFarm * CreateFarm(TFarmItemFromDB &FarmItem);
|
|
#endif //#ifdef PRE_MOD_OPERATINGFARM
|
|
CDNFarm * GetFarm(UINT nFarmDBID);
|
|
bool DestroyFarm(UINT nFarmDBID);
|
|
|
|
bool SetFarmDataLoaded(UINT nFarmDBID, int nGameServerID, int nGameServerIdx, UINT nRoomID, int nMapID, int nFarmMaxUser);
|
|
bool SetFarmUpdateUserCount(UINT nFarmDBID, UINT nRoomID, int nCurUserCount, bool bStarted, int nManagedID);
|
|
|
|
// LadderSystem
|
|
void LeaveLadderSystem( UINT uiAccountDBID );
|
|
|
|
//notice
|
|
void Notice(const WCHAR * pMsg, const int nLen, int nShowSec);
|
|
void NoticeZone(int nMapIndex, const WCHAR * pMsg, const int nLen, int nShowSec);
|
|
void NoticeChannel(int nChannelID, const WCHAR * pMsg, const int nLen, int nShowSec);
|
|
void NoticeServer(int nManagedID, const WCHAR * pMsg, const int nLen, int nShowSec); //서버 공지는 ServiceManager를 통해서만 가능합니다.
|
|
void NoticeCancel();
|
|
|
|
int SendInvitePartyMember(int nGameServerID, const GAMAInvitePartyMember * pInvitePartyMember);
|
|
bool SendInvitePartyMemberResult(int nGameServerID, const WCHAR * pwszInviterName, const WCHAR * pwszInvitedName, int nRetCode);
|
|
bool SendInvitedPartyMemberReturn(UINT nAccountDBID, int nRetCode);
|
|
|
|
//Net Func
|
|
bool SendDetachUser(UINT nAccountDBID, bool bIsReconnectLogin = false, bool bIsDuplicate = false, UINT nSessionID = 0);
|
|
|
|
bool SendDetachUserAllVillage(UINT nAccountDBID, INT nSessionID, BYTE cCurVillageID, bool bIsDuplicate );
|
|
bool SendDetachUserAllGame(UINT nAccountDBID, INT nSessionID, INT nGameID, bool bIsDuplicate);
|
|
|
|
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);
|
|
// void SendLoginDelUser(UINT nAccountDBID); // login 한테 deluser를 날린다
|
|
void SendVillageInfo();
|
|
void SendVillageChannelShowInfo( USHORT unChannelID, bool bShow );
|
|
void SendFarmInfo();
|
|
void GetFarmInfo(TServiceReportMaster * pData);
|
|
void SendUpdateWorldEventCounter( MAUpdateWorldEventCounter* pPacket );
|
|
void SendPCBangResult(CDNUser *pUser);
|
|
|
|
// Common
|
|
void OnDisconnectServer( const int iConnectionKey, const int iServerID, int nManagedID );
|
|
|
|
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|
void SyncSystemMail( VIMASyncSystemMail* pMail );
|
|
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
|
|
void SyncMasterSystemSimpleInfo( MasterSystem::VIMASyncSimpleInfo* pPacket );
|
|
void SyncMasterSystemGraduate( MasterSystem::VIMASyncGraduate* pPacket );
|
|
void SyncMasterSystemConnect( MasterSystem::VIMASyncConnect* pPacket );
|
|
void SyncFarm( GAMAFarmSync* pPacket );
|
|
void SyncFarmAddWater( GAMAFarmSyncAddWater* pPacket );
|
|
|
|
void SendLoginUserDetach(UINT nAccountDBID, int nLoginServerID);
|
|
#ifdef _WORK
|
|
void Parse(const char * pMsg);
|
|
#endif
|
|
#if defined(PRE_ADD_QUICK_PVP)
|
|
int MakeQuickPvPRoom(UINT nMasterAccountDBID, UINT nSlaveAccountDBID);
|
|
#endif
|
|
#if defined (PRE_ADD_BESTFRIEND)
|
|
bool SendSearchBestFriend(MASearchBestFriend* pPacket);
|
|
bool SendRegistBestFriend(MARegistBestFriend* pPacket);
|
|
void SendRegistBestFriendResult(MARegistBestFriendResult* pPacket);
|
|
void SendCompleteBestFriend(MACompleteBestFriend* pPacket);
|
|
void SendEditBestFriendMemo(MAEditBestFriendMemo* pPacket);
|
|
void SendCancelBestFriend(MACancelBestFriend* pPacket);
|
|
void SendCloseBestFriend(MACloseBestFriend* pPacket);
|
|
void SendLevelBestFriend(MALevelUpBestFriend* pPacket);
|
|
#endif
|
|
|
|
#if defined( PRE_WORLDCOMBINE_PARTY )
|
|
int GetWorldPartyMember( MAGetWorldPartyMember* pPacket );
|
|
#endif
|
|
|
|
#if defined( PRE_PRIVATECHAT_CHANNEL )
|
|
int AddPrivateChatChannel( MAAddPrivateChannel* pPacket );
|
|
int AddPrivateChatChannelMember( MAAddPrivateChannelMember* pPacket );
|
|
int InvitePrivateChatChannelMember( MAInvitePrivateChannelMember* pPacket );
|
|
int InviteResultPrivateChatChannelMember( MAInvitePrivateChannelMemberResult* pPacket );
|
|
int DelPrivateChatChannelMember( MADelPrivateChannelMember* pPacket );
|
|
int KickPrivateChatChannelMemberResult( MAKickPrivateChannelMemberResult* pPacket );
|
|
int ModPrivateChatChannel( MAModPrivateChannel* pPacket );
|
|
int ModPrivateChatChannelMemberName( MAModPrivateChannelMemberName* pPacket );
|
|
#endif
|
|
|
|
#if defined( PRE_ALTEIAWORLD_EXPLORE )
|
|
int AlteiaSendTicket( MAAlteiaWorldSendTicket* pPacket );
|
|
int AlteiaSendTicketResult( MAAlteiaWorldSendTicketResult* pPacket );
|
|
#endif
|
|
#if defined( PRE_DRAGONBUFF )
|
|
int SendApplyWorldBuff( MAApplyWorldBuff* pPacket );
|
|
#endif
|
|
|
|
#if defined(PRE_ADD_DWC)
|
|
bool SendInviteDWCTeamMember(MAInviteDWCTeamMember* pPacket);
|
|
bool SendInviteDWCTeamMemberAck(MAInviteDWCTeamMemberAck* pPacket);
|
|
bool SendChangeDWCTeamMemberState(MAChangeDWCTeamMemberState* pPacket);
|
|
void SetDWCTeamMemberList(VIMADWCTeamMemberList *pPacket);
|
|
void SendDWCTeamChat(MADWCTeamChat *pPacket);
|
|
void SendUpdateDWCScore(MADWCUpdateScore *pPacket);
|
|
|
|
bool _RecvAddDWCTeamMember(MAAddDWCTeamMember* pPacket);
|
|
bool _RecvLeaveDWCTeamMember(MALeaveDWCTeamMember* pPacket);
|
|
bool _RecvDismissDWCTeam(MADismissDWCTeam* pPacket);
|
|
bool SendAddDWCTeamMember(MAAddDWCTeamMember* pPacket, CDNUser * pUser);
|
|
bool SendLeaveDWCTeamMember(MALeaveDWCTeamMember* pPacket, CDNUser * pUser);
|
|
bool SendDismissDWCTeam(MADismissDWCTeam* pPacket, CDNUser * pUser);
|
|
|
|
#endif
|
|
|
|
#if defined( PRE_PVP_GAMBLEROOM )
|
|
void SetGambleRoomFlag( bool bFlag ) { m_bGambleRoomFlag = bFlag;}
|
|
#endif
|
|
|
|
};
|
|
|
|
extern CDivisionManager * g_pDivisionManager; |