#pragma once #include #include // Ä£±¸ °ü¸® À§ÇØ include #include // ¾Ïȣȭ ó¸® À§ÇØ include #include #include #include #include "GroupManager.h" // typedef struct { ServerSNKey m_SNKey; CryptManager m_CryptManager; BYTE GetCryptAlgorithmInfo( BYTE bySNKey, BYTE* cryptInfo, DWORD _dwUserKey ) { return m_CryptManager.GetCryptAlgorithmInfo( bySNKey, cryptInfo, _dwUserKey ); } VOID InitCryptInfo( DWORD dwUserKey, BYTE byProtoMajorVer, BYTE byProtoMinorVer ) { m_SNKey.Initialize( dwUserKey, byProtoMajorVer, byProtoMinorVer ); /*C2S_HIGH_VERSION_NO, C2S_MIDDLE_VERSION_NO*/ m_CryptManager.Initialize( CryptManager::bServerSession ); }; // About SNKey VOID NextRoundSNKey4Send() { m_SNKey.NextRoundSNKey4Send(); }; VOID NextRoundSNKey4Recv() { m_SNKey.NextRoundSNKey4Recv(); }; BYTE GetSendSNKey() { return m_SNKey.GetSendSNKey( RandomSNKey::c_dwBaseKey ); }; BYTE GetSendPairSNKey() { return m_SNKey.GetSendSNKey( RandomSNKey::c_dwPairKey ); }; BYTE GetRecvSNKey() { return m_SNKey.GetRecvSNKey( RandomSNKey::c_dwBaseKey ); }; BYTE GetRecvPairSNKey() { return m_SNKey.GetRecvSNKey( RandomSNKey::c_dwPairKey ); }; }STRUCT_CRYPT; struct STRUCT_FRIEND_INFO; struct STRUCT_BLOCK_INFO; struct STRUCT_REVENGE_INFO; struct STRUCT_GROUP_MEMBER_INFO; //#define _WHATTHEHELL_CHANGE_FRIENDCHECK_20060802 class User; //class Party; class ChatZone; class CommChatZone; #ifdef _NA_0_20091104_FIRENDMAP_REFACTORYING #include "FriendMap.h" #else typedef STLX_MAP FRIEND_INFO_MAP; typedef FRIEND_INFO_MAP::iterator FRIEND_INFO_MAP_ITER; typedef std::pair< DWORD, STRUCT_FRIEND_INFO* > FRIEND_INFO_MAP_PAIR; #endif typedef STLX_MAP BLOCK_INFO_MAP; typedef BLOCK_INFO_MAP::iterator BLOCK_INFO_MAP_ITER; typedef std::pair< DWORD, STRUCT_BLOCK_INFO* > BLOCK_INFO_MAP_PAIR; typedef STLX_MAP REVENGE_INFO_MAP; typedef REVENGE_INFO_MAP::iterator REVENGE_INFO_MAP_ITER; typedef std::pair< DWORD, STRUCT_REVENGE_INFO* > REVENGE_INFO_MAP_PAIR; typedef STLX_MAP FRIEND_ONLINE_MAP; typedef FRIEND_ONLINE_MAP::iterator FRIEND_ONLINE_MAP_ITER; typedef std::pair< DWORD, User* > FRIEND_ONLINE_MAP_PAIR; enum eUSER_TYPE { INVALID_USER, TEMP_USER, ACTIVE_USER }; class BaseZone; class User : public NetworkObject { friend class UserManager; friend class GroupManager; enum { WAITING_TICK = 1000 * 100 }; enum { FRIEND_STAT_LOGIN = 0, FRIEND_STAT_LOGOUT = 1, REVENGE_STAT_LOGIN = 2, REVENGE_STAT_LOGOUT = 3, }; #ifdef _NA_0_20091104_FIRENDMAP_REFACTORYING public: enum FRIEND_TYPE {FRIEND_NORMAL = 1, FRIEND_INVIATE = 5, FRIEND_BEINVIATED = 6}; #endif protected: // Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÇÒ ¶§´Â ¹Ýµå½Ã ¾Ïȣȭ ¿©ºÎ¸¦ üũÇÏ´Â SendPacket()À» ½á¾ß ÇϹǷΠprotected ¸â¹ö·Î »°´Ù. BOOL Send( BYTE *pMsg, WORD wSize ) { return NetworkObject::Send( pMsg, wSize ); } public: User(); virtual ~User(); virtual VOID Init(); virtual VOID Release(); virtual VOID Update(); virtual VOID OnRedirect() {} VOID Logout(); VOID OnEnterZone( BaseZone *pZone ); VOID OnLeaveZone( BaseZone *pZone ); VOID OnEnterSector( BaseZone *pZone ); VOID OnLeaveSector( BaseZone *pZone ); VOID ProcessLogout(); VOID ProcessCharLogout(); inline VOID SetNetworkIndex( DWORD index ) { m_dwNetworkIndex = index; } inline DWORD GetNetworkIndex() { return m_dwNetworkIndex; } inline VOID SetGUID( DWORD dwGUID ) { m_dwGUID = dwGUID; } inline DWORD GetGUID() const { return m_dwGUID; } inline VOID SetCharGuid( DWORD CharGuid ) { m_CharGuid = CharGuid; } inline DWORD GetCharGuid() { return m_CharGuid; } VOID SetAccountID( const TCHAR* ptszAccountID ); inline TCHAR * GetAccountID() { return m_ptszAccountID; } inline VOID SetCharName( std::string charName ) { m_strCharName = charName; } inline std::string& GetCharName() { return m_strCharName; } #ifdef _NA_008679_20160202_REWORK_BATTLEGROUND VOID SetBattleGroundFalseName(TCHAR* _false_name); inline TCHAR* GetBattleGroundFalseName() {return battleground_false_name;} VOID ClearBattleGroundFalseName(); #endif //_NA_008679_20160202_REWORK_BATTLEGROUND // CHANGES: f110524.2L, fixed invalid freed problem to pool virtual eUSER_TYPE GetUserType() const = 0; inline VOID StartTimeCheck() { m_dwTimeoutTick = GetTickCount() + WAITING_TICK; } inline BOOL IsTimeout() { return GetTickCount() > m_dwTimeoutTick; } inline VOID SetAuthIP( const char *pszIP ) { strncpy(m_szAuthIP, pszIP, _countof(m_szAuthIP)); m_szAuthIP[_countof(m_szAuthIP) - 1] = '\0'; } inline char* GetAuthIP() { return m_szAuthIP; } inline VOID SetAuthID( DWORD dwAuthID ) { m_dwAuthID = dwAuthID; } inline DWORD GetAuthID() { return m_dwAuthID; } inline VOID SetChannelID( DWORD channelID ) { m_dwChannelID = channelID; } inline DWORD GetChannelID() { return m_dwChannelID; } inline VOID SetZoneKey( DWORD dwZoneKey ) { m_dwZoneKey = dwZoneKey; } inline DWORD GetZoneKey() { return m_dwZoneKey; } inline VOID SetStatus( eZONETYPE status ) { m_status = status; } inline eZONETYPE GetStatus() const { return m_status; } inline VOID SetWhisper(BOOL bWhisper) { m_bWhisper = bWhisper; } // ±Ó¸» ¹ÞÀ» °ÍÀÎÁö ¼¼Æ®. ±âº» °ªÀº TRUE(Çã¿ë) inline BOOL CanWhisper() { return m_bWhisper; } // ±Ó¸» ¹Þ´Â »óÅÂÀÎÁö(TRUE), ¾Æ´ÑÁö(FALSE) void OnLogString(char *pszLog); // »ó¼Ó inline BaseZone* GetNormalChatZone() { return m_pNormalChatZone; } inline VOID SetNormalChatZone( BaseZone *pZone ) { m_pNormalChatZone = pZone; } VOID SendNormalChat( BYTE *pMsg, WORD nSize ); VOID SendNomalChatToAll( BYTE *pMsg, WORD wSize ); inline VOID SetMapCode(MAPCODE wMapCode) { m_MapCode = wMapCode; } inline MAPCODE GetMapCode() { return m_MapCode; } inline VOID SetFieldCode(DWORD dwFieldCode) { m_dwFieldCode = dwFieldCode; } inline DWORD GetFieldCode() { return m_dwFieldCode; } inline VOID SetSectorIndex(int dwSectorIndex) { m_nSectorIndex = dwSectorIndex; } inline int GetSectorIndex() { return m_nSectorIndex; } VOID SendWorldChatToAll(BYTE *pMsg, WORD wSize, BOOL bNow = TRUE); // Ä£±¸ Á¤º¸ °ü¸® BOOL CheckFriendList(); VOID InitFriendListInit(); #ifdef _NA_0_20091104_FIRENDMAP_REFACTORYING FriendMap* GetFriendMap(FRIEND_TYPE type = FRIEND_NORMAL); #else inline BYTE GetFriendNum() { return (BYTE)m_mapFriend.size(); } STRUCT_FRIEND_INFO* GetFirstFriend(); STRUCT_FRIEND_INFO* GetNextFriend(); BOOL AddFriendInfo( STRUCT_FRIEND_INFO* pFriend ); STRUCT_FRIEND_INFO* FindFriend( DWORD dwCharGuid ); STRUCT_FRIEND_INFO* FindFriend( TCHAR* ptszFriendName ); VOID RemoveFriend( DWORD dwGuid ); #endif inline BOOL GetFriendChatBlock() { return m_bFriendChatBlock; } inline VOID SetFriendChatBlock(BOOL bBlock) { m_bFriendChatBlock = bBlock; } // Ä£±¸ °ü·Ã VOID AddOnlineFriend( User *pUser, BOOL bLoggedIn = TRUE ); VOID RemoveOnlineFriend( User *pUser ); User* FindOnlineFriend( DWORD CharGuid ); VOID AlarmFriendStatChange( int nFlag, User *pUser ); inline VOID SetFriendTransaction( BOOL bTrans ) { m_bFriendTrans = bTrans; } inline BOOL IsFriendTransaction() { return m_bFriendTrans; } //_NA_0_20100527_ADD_CHAR_RELATION_MEMO RC::eFRIEND_RESULT CheckConditionAccessFriendInfo(CHARGUID friendguid); // implemented by __KR_001355_20090608_GROUPINGSYSTEM_DATA = { //À¯Àú DBÀÛ¾÷ Æ®·£Á§¼Ç inline BOOL IsGroupTransaction() { return m_bGroupTrans; } //Æ®·£Á§¼Ç ¼¼ÆÃ inline VOID SetGroupTransaction( BOOL bTrans ) { m_bGroupTrans = bTrans; } BYTE GetGroupMemberCount(); //ÇØ´ç Äɸ¯ÅÍ Å¬·¹½º ¼¼ÆÃ inline VOID SetCharClass( BYTE charClass ){ m_CharClass = charClass; } //ÇØ´ç Äɸ¯ÅÍ Å¬·¹½º °¡Á®¿À±â inline BYTE GetCharClass( ){ return m_CharClass; } //ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º ÇÏÀÓ¼¼ÆÃ inline VOID SetCurBonusMoney( MONEY curBonusMoney ){ m_curBonusMoney = curBonusMoney; } //ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º ÇÏÀÓ ¾ò±â inline MONEY GetCurBonusMoney(){ return m_curBonusMoney; } //ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º °æÇèÄ¡ ¼¼ÆÃ inline VOID SetCurBonusEXP( EXPTYPE curBonusEXP ){ m_curBonusEXP = curBonusEXP; } //ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º °æÇèÄ¡ ¾ò±â inline EXPTYPE GetCurBonusEXP(){ return m_curBonusEXP; } //¸É¹ö Ãß°¡ °ÅºÎ Åä±Û ¼¼ÆÃ inline VOID SetAddBlock( BOOL bAddBlock ) { m_bAddBlock = bAddBlock; } //¸É¹ö Ãß°¡ °ÅºÎ Åä±Û Á¤º¸ °¡Á®¿À±â inline BOOL GetAddBlockInfo() { return m_bAddBlock; } //ÃàÀû ÀúÀå °æÇèÄ¡ ¼¼ÆÃ inline VOID SetCurAccumEXP( EXPTYPE curAccumEXP ) { m_curAccumEXP = curAccumEXP; } //ÃàÀû ÀúÀå °æÇèÄ¡ °¡Á®¿À±â ÃÖ´ë ÃàÀû °æÇèÄ¡´Â 500¸¸ÀÌ´Ù. inline EXPTYPE GetCurAccumEXP( ) { return ( m_curAccumEXP > MAX_GROUP_EXP)? MAX_GROUP_EXP : m_curAccumEXP; } inline VOID AddCurAccumEXP( EXPTYPE curAccumEXP ) { m_curAccumEXP += curAccumEXP; } //±×·ì ¸®½ºÆ®¸¦ ¿äûÇÑÀû ÀÖ³ª? BOOL CheckGroupList(); VOID InitGroupInfo(); //Àӽà ¸É¹ö Á¤º¸ ÀúÀå¼Ò¿¡ ÇØ´çÇÏ´Â À¯Àú Á¤º¸ ¼¼ÆÃ VOID SetStructMemberInfo( User* pUser, eGROUP_STAT eMemberStat ); //Àӽà ¸â¹ö Á¤º¸ ÀúÀå¼Ò °¡Á®¿À±â inline STRUCT_GROUP_MEMBER_INFO* GetStructMemberInfo() { return &m_tempMemberInfo; } #ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY inline VOID SetCharGender( BYTE gender ){ gender_ = gender; } //ÇØ´ç Äɸ¯ÅÍ Å¬·¹½º °¡Á®¿À±â inline BYTE GetCharGender( ){ return gender_; } #endif // _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY // }; end of '__KR_001355_20090608_GROUPINGSYSTEM_DATA' VOID SendOnlineFriendAll( BYTE* pMsg, WORD wSize ); // ¸®º¥Áö Á¤º¸ °ü¸® inline BYTE GetRevengeNum() { return (BYTE)m_mapRevenge.size(); } STRUCT_REVENGE_INFO* GetFirstRevenge(); STRUCT_REVENGE_INFO* GetNextRevenge(); BOOL AddRevengeInfo( STRUCT_REVENGE_INFO* pRevenge ); STRUCT_REVENGE_INFO* FindRevenge( DWORD dwCharGuid ); STRUCT_REVENGE_INFO* FindRevenge( TCHAR* ptszRevengeName ); VOID RemoveRevenge( DWORD dwGuid ); // ¸®º¥Áö ¸®½ºÆ® °ü·Ã inline VOID SetRevengePoint( BYTE byPoint ) { m_byRevengePoint = byPoint; } inline BYTE GetRevengePoint() { return m_byRevengePoint; } inline VOID IncRevengePoint() { if( m_byRevengePoint == UCHAR_MAX ) m_byRevengePoint++; } inline BOOL DecRevengePoint() { if( m_byRevengePoint == 0 ) return FALSE; m_byRevengePoint--; return TRUE; } VOID AddOnlineRevenge( User *pUser, BOOL bLoggedIn = TRUE ); VOID RemoveOnlineRevenge( User *pUser ); User* FindOnlineRevenge( DWORD CharGuid ); VOID AlarmRevengeStatChange( int nFlag, User *pUser ); // inline VOID SetRevengeTransaction( BOOL bTrans ) { m_bRevengeTrans = bTrans; } // inline BOOL IsRevengeTransaction() { return m_bRevengeTrans; } VOID SendOnlineRevengeAll( BYTE* pMsg, WORD wSize ); inline VOID SetOnlineLevel( LEVELTYPE &CharLevel ) { m_OnlineLevel = CharLevel; } inline VOID CheckOnlineLevel( LEVELTYPE &CharLevel ) { if( m_OnlineLevel != 0 && CharLevel != m_OnlineLevel ) { CharLevel = m_OnlineLevel; } } // Â÷´Ü Á¤º¸ °ü¸® inline BYTE GetBlockNum() { return (BYTE)m_mapBlock.size(); } STRUCT_BLOCK_INFO* GetFirstBlock(); STRUCT_BLOCK_INFO* GetNextBlock(); BOOL AddBlockInfo( STRUCT_BLOCK_INFO* pBlock ); STRUCT_BLOCK_INFO* FindBlock( DWORD dwGuid ); STRUCT_BLOCK_INFO* FindBlock( TCHAR* ptszBlockName ); VOID RemoveBlock( DWORD dwGuid ); VOID RemoveBlock( TCHAR* ptszBlockedName ); // ±æµå Á¤º¸ °ü¸® // inline BOOL CheckGuildList() { return m_bGuildList; } BOOL CheckGuildList(); inline VOID SetGuildList( BOOL bGuildList = TRUE ) { m_bGuildList = bGuildList; } inline VOID SetGuildGuid( GUILDGUID GuildGuid ) { m_GuildGuid = GuildGuid; } inline GUILDGUID GetGuildGuid() { return m_GuildGuid; } // GMÁ¤º¸ °ü¸® inline VOID SetGMGrade(BYTE byGMGrade) { m_byGMGrade = byGMGrade; } inline BYTE GetGMGrade() { return m_byGMGrade; } //{__CN_000001_20090513_ADD_FRIEND_CHECK_GM inline BOOL IsGM() const { return (m_byGMGrade > eGM_GRADE_BASE) && (m_byGMGrade < eGM_GRADE_MAX); } INT CopyBlockInfo( STRUCT_BLOCK_INFO* pDstBlockInfo, const int size ); INT CopyFriendInfo( STRUCT_FRIEND_INFO* pDstFriendInfo, const int size ); INT CopyRevengeInfo( STRUCT_REVENGE_INFO* pDstRevengeInfo, const int size ); // »èÁ¦ _NA_0_20100527_ADD_CHAR_RELATION_MEMO INT CopyRevengeInfo( STRUCT_REVENGE_PACKET_INFO* pDstRevengeInfo, const int size ); //} BOOL CheckChatTime(); // ÆÄƼ °ü·Ã inline VOID JoinParty( CommChatZone *pParty ) { m_pParty = pParty; } inline VOID RemoveParty() { m_pParty = NULL; } inline CommChatZone* GetParty() { return m_pParty; } VOID SendParty( BYTE* pMsg, WORD wSize ); // À½¼ºÃ¤ÆÃ inline DWORD GetVoiceChatRequestGUID() { return m_dwRequestGUID; } inline VOID RequestVoiceChat(DWORD dwGUID) { m_dwRequestGUID = dwGUID; } inline VOID ClearVoiceChatRequest() { m_dwRequestGUID = 0; } inline BOOL IsVoiceChatOn() { return m_bVoiceOn; } inline VOID SetVoiceChat( BOOL bOn ) { m_bVoiceOn = bOn; } // PC¹æ Á¤º¸ inline DWORD GetPCRoomID() { return m_dwPCRoomID; } VOID SetPCRoomID( DWORD dwPCRoomID ) { m_dwPCRoomID = dwPCRoomID; } //!~ _NA_006413_20130201_PREMIUMSERVICE_ITEM bool CanApplyPCBangBenefit(); void SetPremiumService(DWORD premiumservice); DWORD GetPremiumService(); //~! _NA_006413_20130201_PREMIUMSERVICE_ITEM // äÆÃ±ÝÁö Á¤º¸ inline BOOL IsChatBlocked() { return m_bChatBlock; } VOID SetChatBlock( DWORD dwTime ); VOID FreeChatBlock(); inline DWORD GetBlockTime() { return m_dwBlockTime; } //__NA_000313_20070223_REALTIME_CHAT_BLOCK BOOL UpdateBlockTime(); // ä³ÎäÆÃ Á¤º¸ inline CommChatZone* GetChannelChatRoom() { return m_pChannelChatRoom; } inline VOID JoinChannelChatRoom( CommChatZone *pZone ) { m_pChannelChatRoom = pZone; } inline VOID OutChannelChatRoom() { m_pChannelChatRoom = NULL; } BOOL SendChannelChat( BYTE* pMsg, WORD wSize ); BOOL CheckMemoList(); inline VOID SetMemoTransaction( BOOL bTrans ) { m_bMemoTrans = bTrans; } inline BOOL IsMemoTransaction() { return m_bMemoTrans; } ItemOwnFlag& GetItemOwnFlag(){ return m_ItemOwnFlag; } VOID SendChatBlock(); VOID SendChatBlock(RC::eCHAT_RESULT result); inline VOID SetCharLevel(LEVELTYPE Level){ m_CharLevel = Level;} inline LEVELTYPE GetCharLevel(){ return m_CharLevel; } //__NA_000313_20070223_REALTIME_CHAT_BLOCK VOID SendUseDecreeItem(); inline VOID SetTmpDecreeMsg(TCHAR* ptszMsg){ _tcsncpy(m_tszTmpDecreeMsg, ptszMsg, sizeof(TCHAR) * MAX_SHOUT_LEN); } inline TCHAR* GetTmpDecreeMsg(){ return m_tszTmpDecreeMsg; } BOOL SetInterceptionOption(eINTERCEPTION_TYPE eCode, BOOL bFlag); protected: virtual VOID OnAccept( DWORD dwNetworkIndex ); virtual VOID OnDisconnect(); virtual VOID OnRecv( BYTE *pMsg, WORD wSize ); // // Cryptography & Sequence Number public: BOOL GetCryptography() { return m_bUseCryptography; } BOOL SetCryptography( BOOL bInited ) { return m_sCrypt.m_CryptManager.StartLogic( m_bUseCryptography = bInited ); } VOID NextRoundSNKey4Send() { m_sCryptBack.NextRoundSNKey4Send(); }; // Cryptography BOOL SendPacket( BYTE *pMsg, WORD wSize ); BYTE InitCrypt( BYTE byProtoMajorVer, BYTE byProtoMinorVer ) { m_sCryptBack.InitCryptInfo( GetGUID(), byProtoMajorVer, byProtoMinorVer ); return m_sCryptBack.GetSendSNKey(); }; BYTE GetCryptAlgorithmInfo( BYTE *pCryptInfo ) { return m_sCryptBack.GetCryptAlgorithmInfo( m_sCryptBack.GetSendPairSNKey(), pCryptInfo, GetGUID() ); } inline VOID SetCrypt() { m_sCrypt = m_sCryptBack; SetCryptography(TRUE); m_bCrypting = FALSE; } inline BOOL IsCrypting() { return m_bCrypting; } inline DWORD ISCryptTimeOut( DWORD dwNowTime ) { __UNUSED(dwNowTime); return FALSE; } //return dwNowTime > m_dwCryptTime; } inline VOID SetCryptTime( DWORD dwTime ) { m_bCrypting = TRUE; m_dwCryptTime = dwTime + 100000; } inline VOID EndCrypt() { m_bCrypting = FALSE; } inline VOID CopyCrypt( const STRUCT_CRYPT &sCrypt ) { m_sCrypt.m_CryptManager.Release(); m_sCryptBack = sCrypt; } VOID SetChatTimer( DWORD dwTimer ){ m_ChatTimer.SetTimer( dwTimer ); } BOOL IsExpiredChatTimer(){ return m_ChatTimer.IsExpired(); } char* GetLastChatMsg(){ return m_szLastChatMsg; } VOID SetLastChatMsg( const char* szMsg ); protected: BOOL Encrypt( BYTE* IN OUT pEncryptMsg, const int size, BYTE& OUT crc ) { return m_sCrypt.m_CryptManager.Encrypt( pEncryptMsg, size, crc ); } BOOL Decrypt( BYTE* IN OUT pEncryptMsg, const int size, BYTE IN crc ) { return m_sCrypt.m_CryptManager.Decrypt( pEncryptMsg, size, crc ); } protected: STRUCT_CRYPT m_sCrypt; // ACK ¶³¾îÁö¸é ¼¼ÆÃ STRUCT_CRYPT m_sCryptBack; // CMD º¸³¾ ¶§ ¼¼ÆÃ BOOL m_bUseCryptography; // FALSE·Î ¼³Á¤ÇÒ °Í BOOL m_bCrypting; // ¾Ïȣȭ Ű º¯°æ ÁßÀΰ¡? DWORD m_dwCryptTime; // ¾Ïȣȭ °áÁ¤ÇÑ ½Ã°¢(KEY º¸³½ ½Ã°¢) private: BOOL m_bLogoutProcessed; eUSER_TYPE m_userType; DWORD m_dwNetworkIndex; DWORD m_dwGUID; DWORD m_CharGuid; std::string m_strCharName; DWORD m_dwTimeoutTick; TCHAR m_ptszAccountID[ID_MAX_LEN+1]; // °èÁ¤ ID char m_szAuthIP[MAX_IP_STRING_LEN + 1]; DWORD m_dwChannelID; DWORD m_dwZoneKey; eZONETYPE m_status; DWORD m_dwAuthID; //±Ó¸» ÄÔ/²û »óÅ BOOL m_bWhisper; // TRUE¸é ±Ó¸» ÄÔ, FALSE¸é ±Ó¸» ²û MAPCODE m_MapCode; DWORD m_dwFieldCode; // ÇöÀç ¼ÓÇØ ÀÖ´Â Çʵå ÄÚµå DWORD m_nSectorIndex; // ÇöÀç ¼ÓÇØ ÀÖ´Â ¼½ÅÍ À妽º BaseZone *m_pNormalChatZone; #ifdef _NA_0_20091104_FIRENDMAP_REFACTORYING FriendMap m_mapFriend; // used by _KR_0_20091021_FIRENDINVITATION_EXTEND = { FriendMap m_mapInvitateFriend; FriendMap m_mapBeInvitatedFriend; // } #else // Ä£±¸ Á¤º¸ °ü¸® FRIEND_INFO_MAP m_mapFriend; // Ä£±¸ °ü¸®¿ë ¸Ê FRIEND_INFO_MAP_ITER m_iterNowFriend; // GetFirst...(), GetNext...() ¿¡¼­ »ç¿ë. #endif BOOL m_bFriendChatBlock; // Ä£±¸ äÆÃ Â÷´Ü ¿©ºÎ(0: Çã¿ë 1: °ÅºÎ) BOOL m_bFriendTrans; // Ä£±¸ °ü·Ã DB ÀÛ¾÷ÁßÀΰ¡?(0: ¾Æ´Ï¿À 1: ¿¹) LEVELTYPE m_OnlineLevel; // Á¢¼Ó Áß ·¹º§¾÷ ÇßÀ» ¶§ Ä£±¸ Á¤º¸¿¡ °»½Å ¾È µÇ´Â ¹®Á¦ ÇØ°á¿ë(·¹º§¾÷ ¾øÀ¸¸é 0) #ifndef _WHATTHEHELL_CHANGE_FRIENDCHECK_20060802 BOOL m_bFriendList; // Ä£±¸ ¸®½ºÆ® ¹Þ¾Ò¾ú³ª?(TRUE: ¹Þ¾ÒÀ½, FALSE: ¾È ¹Þ¾ÒÀ½) #else DWORD m_dwLastFriendTick; // ¸¶Áö¸·À¸·Î Ä£±¸ ¸®½ºÆ® ¿äûÇÑ ½Ã°¢ - È®ÀÎ Çʼö #endif FRIEND_ONLINE_MAP m_mapOnlineFriend; // ¿Â¶óÀΠ챏 °ü¸®¿ë ¸Ê // Â÷´Ü Á¤º¸ °ü¸® BLOCK_INFO_MAP m_mapBlock; // Â÷´Ü °ü¸®¿ë ¸Ê BLOCK_INFO_MAP_ITER m_iterNowBlock; // GetFirst...(), GetNext...() ¿¡¼­ »ç¿ë. //¸®º¥Áö Á¤º¸ °ü¸® REVENGE_INFO_MAP m_mapRevenge; // ºú ¹Þ¾Æ¾ß ÇÒ À¯Àúµé °ü¸®¿ë ¸Ê REVENGE_INFO_MAP_ITER m_iterNowRevenge; // GetFirst...(), GetNext...() ¿¡¼­ »ç¿ë. BYTE m_byRevengePoint; // ¸®º¥Áö Æ÷ÀÎÆ® FRIEND_ONLINE_MAP m_mapOnlineRevenge; // ¿Â¶óÀÎÀÎ ºúÀïÀÌµé °ü¸®¿ë ¸Ê // ±æµå °ü·Ã BOOL m_bGuildList; // ±æµå ¸®½ºÆ® ¹Þ¾Ò¾ú³ª?(TRUE:¹Þ¾ÒÀ½, FALSE: ¾È ¹Þ¾ÒÀ½) GUILDGUID m_GuildGuid; // ¼Ò¼Ó ±æµå guid DWORD m_dwLastGuildTick; // ¸¶Áö¸·À¸·Î ±æµå ¸®½ºÆ® ¿äûÇÑ ½Ã°¢ // ¾îºäÁî üũ BYTE m_byChatCount; // ÀÏÁ¤ ½Ã°£ ¾È¿¡ äÆÃÀ» ¸î ¹ø ³¯·È³Ä? DWORD m_dwLastChatTime; // ¸¶Áö¸·À¸·Î äÆÃ ³¯¸° ½Ã°¢ // GM Check BYTE m_byGMGrade; // GM¸Â³Ä? // ÆÄƼ °ü·Ã CommChatZone* m_pParty; // À½¼ºÃ¤ÆÃ Á¤º¸ DWORD m_dwRequestGUID; // äÆÃÀ» ¿äûÇÑ »ó´ëÀÇ GUID BOOL m_bVoiceOn; // À½¼º äÆÃ Çã¿ë ¿©ºÎ(TRUE: Çã¿ë FALSE: ±ÝÁö) // PC¹æ »ç¿ëÀÚ Á¤º¸ DWORD m_dwPCRoomID; // 0À̸é ÀÏ¹Ý »ç¿ëÀÚ. 1 ÀÌ»óÀ̸é PC¹æ ID DWORD m_dwPremiumService; // _NA_006413_20130201_PREMIUMSERVICE_ITEM // äÆÃ±ÝÁö ¿©ºÎ BOOL m_bChatBlock; // äÆÃ±ÝÁö ¿©ºÎ(TRUE: ±ÝÁö FALSE: Çã¿ë) DWORD m_dwBlockTime; // äÆÃ±ÝÁö ³²Àº ½Ã°£(ms ´ÜÀ§ - DB ÀúÀåÇÒ ¶§³ª ¿äû ¹ÞÀ» ¶§´Â ºÐ´ÜÀ§À̹ǷΠÁÖÀÇ) DWORD m_dwBlockLastTime; // ½Ã°£ Â÷°¨ÀÇ ±âÁØ ½Ã°¢ //__NA_000313_20070223_REALTIME_CHAT_BLOCK DWORD m_dwLastShoutTime; // ¸¶Áö¸· ¿ÜÄ£ ½Ã°¢ // ä³Î äÆÃ Á¤º¸ CommChatZone* m_pChannelChatRoom; // ÇöÀç µé¾î°¡ Àִ ä³Î äÆÃ¹æ(NULLÀÌ¸é ¾øÀ½) DWORD m_dwLastMemoTick; // ÂÊÁö ¸ñ·Ï ¸¶Áö¸·À¸·Î ¿äûÇÑ ½Ã°¢ BOOL m_bMemoTrans; // ¸Þ¸ð Æ®·£Àè¼ÇÁß ItemOwnFlag m_ItemOwnFlag; LEVELTYPE m_CharLevel; util::Timer m_ChatTimer; char m_szLastChatMsg[MAX_CHATMSG_SIZE+1]; TCHAR m_tszTmpDecreeMsg[MAX_SHOUT_LEN + 1]; #ifdef _NA_008679_20160202_REWORK_BATTLEGROUND TCHAR battleground_false_name[MAX_CHARNAME_LENGTH+1]; #endif //_NA_008679_20160202_REWORK_BATTLEGROUND //±×·ì ½Ã½ºÅÛ Á¤º¸ __KR_001355_20090608_GROUPINGSYSTEM_DATA = { private : eGROUP_STAT m_eHighMember; //»óÀ§ ¸É¹öÀÇ »óÅ eGROUP_STAT m_eLowMember; //ÇÏÀ§ ¸É¹öÀÇ »óÅ GROUP_MEMBER_MAP m_GroupMemberMap; //±×·ì¿ø Map GROUP_MEMBER_MAP_ITER m_curGroupMemberiter; //±×·ì ¸É¹ö¸¦ °¡¸®Å°´Â iter STRUCT_GROUP_MEMBER_INFO m_tempMemberInfo; //¸É¹ö Á¤º¸¸¦ Àӽ÷ΠÀúÀåÇÏ´Â º¯¼ö BYTE m_CharClass; //ÇØ´ç Äɸ¯ÅÍ Å¬·¹½º(Á÷¾÷) BOOL m_bGroupTrans; //DBÀÛ¾÷ Æ®·» Á§¼Ç ¿ë BOOL m_bAddBlock; //ÇöÀç ±×·ì ¸É¹ö Ãß°¡ Åä±ÛÀÌ ÄÑÀִ°¡? MONEY m_curBonusMoney; //°¡Àå ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º Money EXPTYPE m_curBonusEXP; //°¡Àå ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º EXP EXPTYPE m_curAccumEXP; //ÃÖ±Ù¿¡ ¹ÞÀº º¸³Ê½º AccumEXP #ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY BYTE gender_; //ÇØ´ç ij¸¯ÅÍÀÇ ¼ºº° #endif // _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY // }; end of '__KR_001355_20090608_GROUPINGSYSTEM_DATA' };