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

266 lines
10 KiB
C++

#pragma once
class CDNVillageConnection;
class CDNGameConnection;
class CDNUser
{
private:
UINT m_nSessionID;
UINT m_nAccountDBID;
INT64 m_biCharacterDBID;
WCHAR m_wszAccountName[IDLENMAX];
char m_szAccountName[IDLENMAX]; // 피로도 때문에 char형으로 한개더 만듬 081211
WCHAR m_wszCharacterName[NAMELENMAX];
char m_szCharacterName[NAMELENMAX]; // 피로도 때문에 char형으로 한개더 만듬 081211
int m_nLoginServerID; //
BYTE m_cPreVillageID; // STATE_CHECKVILLAGE 일때 옮기기전 VillageID 찾기
BYTE m_cVillageID; // village찾을때 쓰임
USHORT m_nChannelID; // channel은 village와 Set~
USHORT m_wGameID; // Game Con찾을때
short m_nGameServerIdx; // ThreadIdx는 Game과 Set~
eUserState m_eUserState; // 상태값 (gameid, villageid 세팅할때 상태값도 같이 바뀐다)
ULONG m_nCheckStateTick;
char m_szIp[IPLENMAX]; // 피로도때 필요한 접속 ip 081211
char m_szVirtualIp[IPLENMAX]; // 피로도때 필요한 접속 ip 081211
bool m_bAdult; // 어른인지 아닌지 (피로도 체크때문에)
bool m_bPCBang; // 왠지 pcroom보다는 pcbang이 좋다! ㅋㅋㅋ
char m_cPCBangGrade;
int m_nAccountLevel;
#if defined(PRE_ADD_DWC)
BYTE m_cCharacterAccountLevel;
UINT m_nDWCTeamID;
std::vector<INT64> m_VecDWCMemberCharacterDBIDList; //빌리지에서 전송해준 정보를 들고 있음
#endif
// PvP
UINT m_uiPvPIndex;
USHORT m_usPvPTeam;
UINT m_uiPvPUserState;
BYTE m_cPvPVillageID; // PvP빌리지로 돌아올때 돌아올 PvPVillage정보
USHORT m_nPvPVillageChannelID;
bool m_bPvPFatigue; // 피로도 소모 On,Off
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
LadderSystem::MatchType::eCode m_MatchType; // 래더 매치타입 저장..
#endif
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
PvPCommon::RoomType::eRoomType m_ePvPChannelType;
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
#if defined(_CH)
int m_nFCMOnlineMin; // online 시간(분)
#endif // #if defined(_CH)
#if defined(PRE_ADD_PVP_TOURNAMENT)
BYTE m_cJob;
#endif
#if defined(PRE_ADD_GAMEQUIT_REWARD)
GameQuitReward::RewardType::eType m_eUserGameQuitRewardType;
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
public:
UINT m_nNexonUserNo;
#if defined(_KR)
INT64 m_biNexonSessionNo;
char m_cPCBangResult; // eAuthResult
char m_cPCBangAuthorizeType; // 사용자 ip에 대한 인증결과
char m_cPCBangOption; // 사용자에게 보여주는 메시지
int m_nPCBangArgument; // 기타 더 필요한 데이터를 여기에 첨부 (ex. 시간제의 경우 남은시간, 정액제인 경우 만료날짜 등등)
bool m_bShutdowned;
char m_cPolicyError;
BYTE m_szMID[MACHINEIDMAX];
DWORD m_dwGRC;
int m_nShutdownTime;
#endif // #if defined(_KR)
#if defined (_JP) && defined (WIN64)
char m_szNHNNetCafeCode[NHNNETCAFECODEMAX]; // NetCafe의 코드라고 합니다. 필요가 생길거 같아서 저장해둠
char m_szNHNProdectCode[NHNNETCAFECODEMAX]; // NetCafe의 Product코드 라고 합니다.
#endif // #if defined (_JP) && defined (WIN64)
#if defined(_KRAZ)
TShutdownData m_ShutdownData;
#endif // #if defined(_KRAZ)
#if defined(PRE_ADD_SENDLOGOUT)
bool m_bSendLogOut;
CSyncLock m_SendLogOutLock;
#endif
#ifdef PRE_ADD_STEAM_USERCOUNT
bool m_bSteamUser;
#endif //#ifdef PRE_ADD_STEAM_USERCOUNT
ULONG m_nCreateTick; ///테스트
int m_nRoomID;
TPARTYID m_VillageCheckPartyID; //마스터에서 파티는 없습니다. 게임에서 빌리지 이동시 임시적으로 유지합니다.(체크유저시 필요)
int m_nRandomSeed;
int m_nMapIndex;
BYTE m_cGateNo;
BYTE m_cGateSelect;
int m_nDungeonClearCount;
#if defined(PRE_ADD_MULTILANGUAGE)
MultiLanguage::SupportLanguage::eSupportLanguage m_eSelectedLanguage;
#endif //#if defined(PRE_ADD_MULTILANGUAGE)
#ifdef PRE_ADD_COMEBACK
bool m_bComebackUser;
#endif //#ifdef PRE_ADD_COMEBACK
#if defined(PRE_ADD_GAMEQUIT_REWARD)
bool m_bReConnectNewbieReward;
void SetUserGameQuitRewardType(GameQuitReward::RewardType::eType eType){ m_eUserGameQuitRewardType = eType;}
GameQuitReward::RewardType::eType GetUserGameQuitRewardType(){ return m_eUserGameQuitRewardType; }
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
#if defined(_ID)
bool m_bBlockPcCafe; // 블럭된 PC카페
char m_szMacAddress[MACADDRLENMAX];
char m_szKey[KREONKEYMAX];
DWORD m_dwKreonCN;
#endif
#if defined(PRE_ADD_REMOTE_QUEST)
std::vector<int> m_AcceptWaitRemoteQuestList;
#endif
public:
CDNUser(void);
~CDNUser(void);
#if defined(PRE_MOD_SELECT_CHAR)
bool InitUser(LOMAAddUser *pPacket, int nServerID);
bool InitUser(GAMAAddUserList *pPacket);
bool InitUser(VIMAAddUserList *pPacket);
#else // #if defined(PRE_MOD_SELECT_CHAR)
void PreInit(int nServerID, UINT nAccountDBID, int nAccountLevel, const char * pszIP);
void Init(UINT nAccountDBID, UINT nSessionID, INT64 biCharacterDBID, WCHAR *pwszCharacterName, WCHAR *pwszAccountName, USHORT nChannelID, bool bAdult, char *pszIp, char *pszVirtualIp);
#endif // #if defined(PRE_MOD_SELECT_CHAR)
bool SetCheckVillageInfo(BYTE cVillageID, USHORT nChannelID);
bool SetCheckGameInfo(USHORT nGameID, short nServerIdx);
bool SetVillageInfo(BYTE cVillageID, USHORT nChannelID, bool bForce);
bool SetGameInfo(USHORT nGameID, USHORT nServerIdx, bool bForce);
void SetCheckReconnectLogin();
CDNVillageConnection* GetCurrentVillageConnection();
CDNGameConnection* GetCurrentGameConnection();
#if defined(_CH) && defined(_FINAL_BUILD)
void FCMIDOnline();
void FCMIDOffline();
void SetFCMOnlineMin(int nOnlineMin); // online 시간(분)
inline int GetFCMOnlineMin() { return m_nFCMOnlineMin; }
#endif
void SetSessionID(UINT nSessionID) { m_nSessionID = nSessionID; }
UINT GetSessionID() { return m_nSessionID; }
void SetAccountDBID(UINT nAccountDBID) { m_nAccountDBID = nAccountDBID; }
UINT GetAccountDBID() { return m_nAccountDBID; }
void SetCharacterDBID(INT64 biCharacterDBID) { m_biCharacterDBID = biCharacterDBID; }
INT64 GetCharacterDBID() { return m_biCharacterDBID; }
void SetCharacterName(const WCHAR *pwszCharacterName);
WCHAR* GetCharacterName() { return m_wszCharacterName; }
const char *GetChracterNameA() { return m_szCharacterName; }
void SetAccountName(const WCHAR *pwszAccountName);
WCHAR* GetAccountName() { return m_wszAccountName; }
const char* GetAccountNameA() { return m_szAccountName; }
void SetAdult(bool bAdult) { m_bAdult = bAdult; }
bool IsAdult() { return m_bAdult; }
void SetIp(char *pszIp);
char* GetIp() { return m_szIp; }
void SetVirtualIp(char *pszIp);
char* GetVirtualIp() { return m_szVirtualIp; }
void SetMapIndex(int nMapIndex) { m_nMapIndex = nMapIndex; }
int GetMapIndex(){ return m_nMapIndex; }
void SetLoginServerID(int nLoginID) { m_nLoginServerID = nLoginID; }
int GetLoginServerID() { return m_nLoginServerID; }
BYTE GetVillageID() { return m_cVillageID; }
BYTE GetPreVillageID() { return m_cPreVillageID; }
USHORT GetGameID() { return m_wGameID; }
void SetChannelID(USHORT wChannelID) { m_nChannelID = wChannelID; }
USHORT GetChannelID() { return m_nChannelID; }
USHORT GetGameServerIdx() { return m_nGameServerIdx; }
void SetUserState(eUserState eState) { m_eUserState = eState; }
eUserState GetUserState() { return m_eUserState; }
ULONG GetCheckStateTick() { return m_nCheckStateTick; }
eLocationState GetLocationState();
void SetPCGrade(char cGrade);
void SetPCBang(bool bFlag);
char GetPCBangGrade();
inline bool IsPCBang() { return m_bPCBang; }
inline int GetAccountLevel() { return m_nAccountLevel; }
#if defined(PRE_ADD_DWC)
void SetCharacterAccountLevel(BYTE cAccountLevel) { m_cCharacterAccountLevel = cAccountLevel; }
inline BYTE GetCharacterAccountLevel() { return m_cCharacterAccountLevel; }
UINT GetDWCTeamID(){return m_nDWCTeamID;}
void SetDWCTeamInfo(VIMADWCTeamMemberList *pPacket);
void GetDWCMemberList(std::vector<INT64> &vecMemberList);
bool AddDWCMemberList(INT64 biCharacterDBID);
bool DelDWCMemberList(INT64 biCharacterDBID);
void ResetDWCInfo();
#endif
#if defined(_KR)
void SetMachineID(BYTE *pszMID, DWORD dwGRC);
#endif // #if defined(_KR)
#if defined(_KRAZ)
void SetShutdownData(TShutdownData &ShutdownData);
#endif // #if defined(_KRAZ)
// PvP
bool bIsPvPVillage();
bool bIsPvPLobby();
bool bIsPvPGroupCaptain(){ return GetPvPUserState()&PvPCommon::UserState::GroupCaptain ? true : false; }
BYTE GetPvPVillageID(){ return m_cPvPVillageID; }
USHORT GetPvPVillageChannelID(){ return m_nPvPVillageChannelID; }
void SetPvPVillageInfo(){ m_cPvPVillageID=m_cVillageID; m_nPvPVillageChannelID=m_nChannelID; }
void SetPvPVillageInfo( const BYTE cVillageID, const USHORT unChannelID ){ m_cPvPVillageID=cVillageID; m_nPvPVillageChannelID=unChannelID; }
UINT GetPvPIndex(){ return m_uiPvPIndex; }
USHORT GetPvPTeam(){ return m_usPvPTeam; }
UINT GetPvPUserState(){ return m_uiPvPUserState; }
void SetPvPIndex( const UINT uiIndex ){ m_uiPvPIndex = uiIndex; }
void SetPvPTeam( const USHORT usTeam ){ m_usPvPTeam = usTeam; }
void SetPvPUserState( const UINT uiState ){ m_uiPvPUserState = uiState; }
bool bIsObserver(){ return m_usPvPTeam == PvPCommon::Team::Observer; }
int GetDungeonClearCount() {return m_nDungeonClearCount;}
void SetDungeonClearCount(const int nCount) {m_nDungeonClearCount = nCount;}
void SetPvPFatigue(bool bFatigue) { m_bPvPFatigue = bFatigue;};
bool GetPvPFatiue() { return m_bPvPFatigue;};
#if defined(PRE_ADD_PVP_VILLAGE_ACCESS)
void SetLadderMatchType(LadderSystem::MatchType::eCode MatchType) { m_MatchType = MatchType; };
LadderSystem::MatchType::eCode GetLadderMatchType() { return m_MatchType;};
#endif
#ifdef PRE_ADD_COLOSSEUM_BEGINNER
void SetPvPChannelType(BYTE cType) { m_ePvPChannelType = static_cast<PvPCommon::RoomType::eRoomType>(cType); }
PvPCommon::RoomType::eRoomType GetPvPChannelType() { return m_ePvPChannelType; }
#endif //#ifdef PRE_ADD_COLOSSEUM_BEGINNER
#if defined(PRE_ADD_REMOTE_QUEST)
void SetAcceptWaitRemoteQuest(int nAcceptWaitRemoteQuestCount, int *AcceptWaitRemoteQuestList);
void GetAcceptWaitRemoteQuest(int *nAcceptWaitRemoteQuestCount, int *AcceptWaitRemoteQuestList);
#endif
#if defined(PRE_ADD_PVP_TOURNAMENT)
void SetUserJob(BYTE cJob) { m_cJob = cJob; }
BYTE GetUserJob() { return m_cJob; }
#endif
#if defined(PRE_ADD_GAMEQUIT_REWARD)
void SetGameQuitUserReward(GameQuitReward::RewardType::eType eRewardType){ m_eUserGameQuitRewardType = eRewardType; }
GameQuitReward::RewardType::eType GetGameQuitUserReward() { return m_eUserGameQuitRewardType; }
#endif
};