#pragma once // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #include class GameServerSession; class InstanceDungeon; struct BattleGroundMemberInfo; typedef STLX_VECTOR BattleGroundMemberList; enum MatchinGroupState { kStateNone = 0, kWaitCreateRoom, kCreatedRoom, kStartBattleGround }; struct MatchingGroup { MatchinGroupState matching_state; CTime matching_time; KEYTYPE group_key; BattleGroundMemberList matching_group_list; // struct { MAPCODE map_code; KEYTYPE zone_key; }; }; //_NA_007065_20140217_BATTLEGROUND_REFACTORYING class BattleGroundMatchingSystem { public: BattleGroundMatchingSystem() {} ~BattleGroundMatchingSystem() {} void Init(); void Release(); void Update(); bool ProcessMatching(const MAPCODE map_code); // ¸ÅĪ ±×·ì »ý¼º bool RemoveMatchigGroup(const KEYTYPE group_key); // ¸ÅĪ ±×·ì Á¦°Å MatchingGroup* FindMatchingGroup(const KEYTYPE group_key); // ¸ÅĪ ±×·ì ã±â MatchingGroup* FindMatchingGroupByZoneKey(const KEYTYPE zone_key); // ¸ÅĪ ±×·ì ã±â bool CreateInstanceRoom(const KEYTYPE group_key, const MAPCODE map_code); // ÀüÀå(ÀνºÅÏÆ® ·ë) »ý¼º bool OnTeamMatching(MatchingGroup* const matching_group); // team¸ÅĪ(2Â÷¸ÅĪ) bool SendMembersToBattleGround(MatchingGroup* const matching_group); // ÀüÀå(ÀνºÅÏÆ® ·ë)À¸·Î À̵¿ bool OnCreateParty(MatchingGroup* const matching_group); // °­Á¦ ÆÄƼ »ý¼º bool EnterTeam(const BattleGroundMemberList member_list); // GameServer¿¡ ÆÀÁ¤º¸ ¼ÂÆÃ bool MatchingGroupCancel(const KEYTYPE group_key); // ¸ÅĪ Ãë¼Ò bool ReturnUserInsertStandbyGroupList(MatchingGroup* const matching_group); // ÀüÀå ´ë±â¿­·Î À̵¿ bool RemoveMemberMatchingGroup(const BattleGroundMemberInfo* member); // ¸ÅĪ±×·ì³» ¸â¹ö Á¦°Å //bool CheckMatching(const MAPCODE map_code); //¸ÅĪ È®ÀÎ #ifdef _NA_008679_20160202_REWORK_BATTLEGROUND BOOL StartBattleGround(); private: BOOL _ProcessMatching(const MAPCODE map_code,BattleGroundMemberList* member_list); // ¸ÅĪ(1Â÷¸ÅĪ) BOOL _CreateMatchingGroups(const MAPCODE& map_code, BattleGroundMemberList* member_list); BOOL _CreateFailedGroup(const MAPCODE& map_code, const BattleGroundMemberList* member_list); VOID _RequestMismatchingReward(); #else bool CanCreateMatchingGroup(const MAPCODE map_code); // ¸ÅĪ Á¶°Ç È®ÀÎ private: MatchingGroup* _ProcessMatching(const MAPCODE map_code,const BattleGroundMemberList* member_list); // ¸ÅĪ(1Â÷¸ÅĪ) #endif //_NA_008679_20160202_REWORK_BATTLEGROUND VOID _CreateBattlegroundParty(InstanceDungeon* instance_dungeon, BattleGroundMemberList& team_list); private: inline KEYTYPE _AllocKey() { return static_cast(ObjKeyGender::Instance()->GetKey(OBJKEYTYPE_BATTLE_GROUND_ROOM_KEY)); } inline void _FreeKey(KEYTYPE Key) { ObjKeyGender::Instance()->RestoreKey(OBJKEYTYPE_BATTLE_GROUND_ROOM_KEY, Key); } private: typedef STLX_HASH_MAP MatchingGroupMap; typedef util::CMemoryPoolFactory MatchingGroupPool; private: MatchingGroupPool* matching_group_pool_; MatchingGroupMap matching_groups_map_; // ¸ÅĪ ±×·ì ¸®½ºÆ® #ifdef _NA_008679_20160202_REWORK_BATTLEGROUND BattleGroundMemberList failed_members_list_; // ¸ÅĪ ½ÇÆÐÇÑ ¸â¹öµéÀÇ ±×·ì #endif //_NA_008679_20160202_REWORK_BATTLEGROUND ITimerBase update_timer_; };