#pragma once #include // äÆÃ¹æ Ű °ü¸®¿ë #include class ChatZone; class VillageZone; class User; class PartyManager; typedef STLX_HASH_MAP ZONE_MAP; typedef ZONE_MAP::iterator ZONE_MAP_ITER; typedef std::pair ZONE_MAP_PAIR; typedef STLX_HASH_MAP VILLAGE_MAP; typedef VILLAGE_MAP::iterator VILLAGE_MAP_ITER; typedef std::pair< DWORD, VillageZone * > VILLAGE_MAP_PAIR; typedef STLX_HASH_MAP USER_MAP; typedef USER_MAP::iterator USER_MAP_ITER; typedef std::pair USER_MAP_PAIR; class Channel { public: Channel(void); ~Channel(void); VOID Init(); VOID Release(); VOID Update(); BOOL LoadMap(); BOOL AddShoutLinkedZone( DWORD dwMapCode, ChatZone *pLinkZone ); BOOL AddBattleShoutLinkedZone( DWORD dwMapCode, ChatZone *pLinkZone ); VOID RemoveBattleShoutLinkedZone( ChatZone *pLinkZone ); ChatZone* AddChatZone( eZONETYPE eZoneType, DWORD dwZoneKey, DWORD dwMapCode, ChaosZoneType chaoszone_type ); VOID AddVillage( DWORD dwZoneKey, ChatZone *pVillage ); VOID AddField( DWORD dwZoneKey, ChatZone *pField ); VOID AddDominationField( DWORD dwZoneKey, ChatZone *pField ); #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM VOID AddSpaField(DWORD zone_key, ChatZone* field); #endif //_NA_008069_20150210_ADD_SPA_SYSTEM ChatZone* AddFriendChat( DWORD dwZoneKey ); VOID RemoveChatZone( DWORD dwZoneKey ); VOID RemoveFriendChat( DWORD dwZoneKey ); ChatZone* FindZone( DWORD dwZoneKey ); VillageZone* FindVillage( DWORD dwMapCode ); ChatZone* FindFriendChat( DWORD dwZoneKey ); VOID AddUser( User *pUser, eZONETYPE userStatus, DWORD dwZoneKey ); VOID RemoveUser( User *pUser, BOOL bIterErase = TRUE ); BOOL UserEnterZone( User *pUser, eZONETYPE eZoneType, DWORD dwZoneKey = 0, DWORD dwMapCode = 0, ChaosZoneType chaoszone_type = kChaosZoneTypeNone ); VOID SendToAll( BYTE *pMsg, WORD wSize ); VOID SendToVillages( BYTE *pMsg, WORD wSize ); VOID SendToBattleZones( BYTE *pMsg, WORD wSize ); inline VOID SetChannelID( DWORD dwChannelID ) { m_dwChannelID = dwChannelID; } inline DWORD GetChannelID() { return m_dwChannelID; } VOID DisplayInfo(); VOID UserLeavePrevZone( User *pUser ); inline VOID ClearZoneUserNum() { for( USHORT i = eZONETYPE_LOBBY; i < eZONETYPE_MAX; i++ ) { m_dwZoneUserNum[i] = 0; m_dwZonePCRoomUserNum[i] = 0; } } inline VOID ClearZoneNum() { for( USHORT i = eZONETYPE_LOBBY; i < eZONETYPE_MAX; i++ ) { m_dwZoneNum[i] = 0; } } /* inline VOID IncZoneUserNum( eZONETYPE eZoneType, DWORD dwPCRoomID ) { if( dwPCRoomID ) { m_dwZonePCRoomUserNum[eZoneType]++; } else { m_dwZoneUserNum[eZoneType]++; } } inline VOID DecZoneUserNum( eZONETYPE eZoneType, DWORD dwPCRoomID ) { if( dwPCRoomID ) { if( m_dwZonePCRoomUserNum[eZoneType] > 0 ) { m_dwZonePCRoomUserNum[eZoneType]--; } } else { if( m_dwZoneUserNum[eZoneType] > 0 ) { m_dwZoneUserNum[eZoneType]--; } } } */ inline VOID IncZoneNum( eZONETYPE eZoneType ) { m_dwZoneNum[eZoneType]++; } inline VOID DecZoneNum( eZONETYPE eZoneType ) { if( m_dwZoneNum[eZoneType] > 0 ) m_dwZoneNum[eZoneType]--; } inline DWORD GetTotalUserNum() { return (DWORD)m_mapUsers.size(); } inline DWORD GetZoneUserNum( eZONETYPE eZoneType ) { return m_dwZoneUserNum[eZoneType]; } inline DWORD GetZonePCRoomUserNum( eZONETYPE eZoneType ) { return m_dwZonePCRoomUserNum[eZoneType]; } inline DWORD GetZoneCount( eZONETYPE eZoneType ) { return m_dwZoneNum[eZoneType]; } inline KEYTYPE AllocKey() { return m_ChatRoomKeyGenerator.GetKey(); } inline VOID FreeKey( KEYTYPE Key ) { m_ChatRoomKeyGenerator.RestoreKey(Key); } VOID CreateParty( WORD wPartyKey ); BOOL JoinParty( WORD wPartyKey, User* pJoinUser ); BOOL WithdrawParty( User* pWithdrawUser ); VOID DestroyParty( WORD wPartyKey ); VOID RestoreParty( WORD wPartyKey, User *pUser ); #ifdef _NA_004694_20120412_1202_PARTY_ROOM_KEY VOID SetRoomKey(const WORD party_key, const WORD room_kek); #endif // _NA_004694_20120412_1202_PARTY_ROOM_KEY // À¯Àú ¼ýÀÚ Åë°è °ü·Ã...¾Æµû ±ÍÂú´Ù...-_-; VOID RefreshUserNum(); DWORD GetNumerOfNormalUsers() { return m_dwNormalUserNum; } VOID IncNumberOfNormalUsers() { m_dwNormalUserNum++; } VOID DecNumberOfNormalUsers() { if( m_dwNormalUserNum > 0 ) m_dwNormalUserNum--; } DWORD GetNumerOfPCRoomUsers() { return m_dwPCRoomUserNum; } VOID IncNumberOfPCRoomUsers() { m_dwPCRoomUserNum++; } VOID DecNumberOfPCRoomUsers() { if( m_dwPCRoomUserNum > 0 ) m_dwPCRoomUserNum--; } private: // ZONE_MAP m_mapZones; util::CObjKeyGenerator m_ChatRoomKeyGenerator; // äÆÃ¹æ Ű Á¦Á¶±â ZONE_MAP m_mapFriendChat; // Ä£±¸ äÆÃ¿ë USER_MAP m_mapUsers; DWORD m_dwChannelID; DWORD m_dwZonePCRoomUserNum[eZONETYPE_MAX]; // °¢ Áö¿ªÀÇ PC¹æ À¯Àú ³Ñ¹ö DWORD m_dwZoneUserNum[eZONETYPE_MAX]; DWORD m_dwZoneNum[eZONETYPE_MAX]; DWORD m_dwNormalUserNum; // Á¢¼ÓÁßÀÎ Àüü ÀÏ¹Ý À¯Àú ¼ýÀÚ DWORD m_dwPCRoomUserNum; // Á¢¼ÓÁßÀÎ Àüü PC¹æ À¯Àú ¼ýÀÚ PartyManager *m_pPartyManager; VILLAGE_MAP m_mapVillages; // ¸¶À»/Çʵå Áö¿ª Àӽà ÀúÀå¿ë ¸Ê };