public static int GetMaxTeamRoomLimitCount(this LobbyComponent self)
        {
            var configComponent = Game.Scene.GetComponent <ConfigComponent>();
            var mapLimitSetting = (MapLimitSetting)configComponent.Get(typeof(MapLimitSetting), 0);

            return(mapLimitSetting != null ? mapLimitSetting.MaxPartyCount : 150);
        }
        protected override async ETTask Run(Player player, C2L_RoamingGetList message, Action <L2C_RoamingGetList> reply)
        {
            await ETTask.CompletedTask;

            LobbyComponent lobbyComponent = Game.Scene.GetComponent <LobbyComponent>();
            List <Room>    roamingRooms   = lobbyComponent.GetAllByType(RoomType.Roaming);

            L2C_RoamingGetList response = new L2C_RoamingGetList();

            if (roamingRooms != null)
            {
                for (int i = 0; i < roamingRooms.Count; i++)
                {
                    Room room = roamingRooms[i];
                    if (room == null)
                    {
                        continue;
                    }

                    response.Infos.Add(room.info);
                }
            }

            reply(response);
        }
        public static async ETTask <int> LeaveTeam(this LobbyComponent self, long roomId, long uid)
        {
            L2M_TeamLeave l2M_TeamLeave = new L2M_TeamLeave()
            {
                Uid = uid,
            };
            int           mapAppId      = IdGenerater.GetAppId(roomId);
            Session       mapSession    = SessionHelper.GetMapSession(mapAppId);
            M2L_TeamLeave m2L_TeamLeave = (M2L_TeamLeave)await mapSession.Call(l2M_TeamLeave);

            return(m2L_TeamLeave.Error);
        }
        public static async ETTask <bool> DestroyRoom(this LobbyComponent self, long roomId)
        {
            int             mapAppId        = IdGenerater.GetAppId(roomId);
            Session         mapSession      = SessionHelper.GetMapSession(mapAppId);
            M2L_DestroyRoom m2L_DestroyRoom = (M2L_DestroyRoom)await mapSession.Call(new L2M_DestroyRoom
            {
                RoomId = roomId,
            });

            if (m2L_DestroyRoom.Error != ErrorCode.ERR_Success)
            {
                return(false);
            }
            return(true);
        }
        public static async ETTask <bool> SetReservationMember(this LobbyComponent self, long roomId, RepeatedField <ReservationMemberData> reservationMemberDatas)
        {
            int     mapAppId   = IdGenerater.GetAppId(roomId);
            Session mapSession = SessionHelper.GetMapSession(mapAppId);
            M2L_SetReservationMember m2L_SetReservationMember = (M2L_SetReservationMember)await mapSession.Call(new L2M_SetReservationMember
            {
                RoomId = roomId,
                Data   = reservationMemberDatas,
            });

            if (m2L_SetReservationMember.Error != ErrorCode.ERR_Success)
            {
                return(false);
            }
            return(true);
        }
        public static async ETTask <bool> BroadcastTeamLose(this LobbyComponent self, long roomId)
        {
            L2M_TeamLose l2M_TeamLose = new L2M_TeamLose
            {
                RoomId = roomId,
            };
            int          mapAppId     = IdGenerater.GetAppId(roomId);
            Session      mapSession   = SessionHelper.GetMapSession(mapAppId);
            M2L_TeamLose m2L_TeamLose = (M2L_TeamLose)await mapSession.Call(l2M_TeamLose);

            if (m2L_TeamLose.Error != ErrorCode.ERR_Success)
            {
                return(false);
            }
            return(true);
        }
        public static async ETTask <TeamMemberData> GetTeamMember(this LobbyComponent self, long uid, long roomId)
        {
            int               mapAppId          = IdGenerater.GetAppId(roomId);
            Session           mapSession        = SessionHelper.GetMapSession(mapAppId);
            M2L_GetTeamMember m2L_GetTeamMember = (M2L_GetTeamMember)await mapSession.Call(new L2M_GetTeamMember
            {
                Uid    = uid,
                RoomId = roomId,
            });

            if (m2L_GetTeamMember.Error != ErrorCode.ERR_Success)
            {
                return(null);
            }
            return(m2L_GetTeamMember.MemberData);
        }
        public static async ETTask <bool> BroadcastTeamModifyMember(this LobbyComponent self, long uid, long roomId)
        {
            L2M_TeamModifyMember l2M_TeamModifyMember = new L2M_TeamModifyMember
            {
                Uid    = uid,
                RoomId = roomId,
            };
            int     mapAppId   = IdGenerater.GetAppId(roomId);
            Session mapSession = SessionHelper.GetMapSession(mapAppId);
            M2L_TeamModifyMember m2L_TeamModifyMember = (M2L_TeamModifyMember)await mapSession.Call(l2M_TeamModifyMember);

            if (m2L_TeamModifyMember.Error != ErrorCode.ERR_Success)
            {
                return(false);
            }
            return(true);
        }
        public static async ETTask <bool> DestroyMapUnit(this LobbyComponent self, long mapUnitId)
        {
            if (mapUnitId == 0)
            {
                return(false);
            }
            L2M_DestroyMapUnit l2M_DestroyMapUnit = new L2M_DestroyMapUnit
            {
                MapUnitId = mapUnitId,
            };
            int                mapAppId     = IdGenerater.GetAppId(mapUnitId);
            Session            mapSession   = SessionHelper.GetMapSession(mapAppId);
            M2L_DestroyMapUnit m2L_TeamLose = (M2L_DestroyMapUnit)await mapSession.Call(l2M_DestroyMapUnit);

            if (m2L_TeamLose.Error != ErrorCode.ERR_Success)
            {
                return(false);
            }
            return(true);
        }
        public static async ETTask <Room> CreateTeamRoom(this LobbyComponent self, int mapAppId, RoomInfo roomInfo, TeamRoomData teamRoomData)
        {
            // 等候房間創建完成,並且也同步Room到了Lobby
            Session        mapSession     = SessionHelper.GetMapSession(mapAppId);
            M2L_TeamCreate m2L_TeamCreate = (M2L_TeamCreate)await mapSession.Call(new L2M_TeamCreate
            {
                Info = roomInfo,
                Data = teamRoomData,
            });

            if (m2L_TeamCreate.Error != ErrorCode.ERR_Success)
            {
                return(null);
            }

            Room room = BsonSerializer.Deserialize <Room>(m2L_TeamCreate.Json);

            CacheExHelper.WriteInCache(room, out room);

            return(room);
        }
        public static async ETTask <int> LeaveRoom(this LobbyComponent self, long roomId, long uid)
        {
            Room room = self.GetRoom(roomId);

            if (room == null)
            {
                return(ErrorCode.ERR_RoomIdNotFound);
            }

            var roomType = room.Type;

            switch (roomType)
            {
            case RoomType.Roaming:
                return(await self.LeaveRoaming(roomId, uid));

            case RoomType.Team:
                return(await self.LeaveTeam(roomId, uid));

            default:
                return(ErrorCode.ERR_RoomIdNotFound);
            }
        }
        public static async ETTask <RepeatedField <MapUnitInfo> > GetAllMapUnitInfoOnRoom(this LobbyComponent self, long roomId)
        {
            int     mapAppId   = IdGenerater.GetAppId(roomId);
            Session mapSession = SessionHelper.GetMapSession(mapAppId);
            M2L_GetAllMapUnitInfoOnRoom m2L_GetAllMapUnitInfoOnRoom = (M2L_GetAllMapUnitInfoOnRoom)await mapSession.Call(new L2M_GetAllMapUnitInfoOnRoom
            {
                RoomId = roomId,
            });

            if (m2L_GetAllMapUnitInfoOnRoom.Error != ErrorCode.ERR_Success)
            {
                return(new RepeatedField <MapUnitInfo>());
            }
            return(m2L_GetAllMapUnitInfoOnRoom.Data);
        }
        public static async ETTask <Tuple <TeamRoomData, RepeatedField <TeamMemberData>, RepeatedField <ReservationMemberData> > > GetTeamInfo(this LobbyComponent self, long roomId)
        {
            int             mapAppId        = IdGenerater.GetAppId(roomId);
            Session         mapSession      = SessionHelper.GetMapSession(mapAppId);
            M2L_GetTeamData m2L_GetTeamData = (M2L_GetTeamData)await mapSession.Call(new L2M_GetTeamData
            {
                RoomId = roomId,
            });

            if (m2L_GetTeamData.Error != ErrorCode.ERR_Success)
            {
                return(null);
            }
            var room = BsonSerializer.Deserialize <Room>(m2L_GetTeamData.RoomJson);

            CacheExHelper.WriteInCache(room, out _);
            return(new Tuple <TeamRoomData, RepeatedField <TeamMemberData>, RepeatedField <ReservationMemberData> >
                       (m2L_GetTeamData.TeamData, m2L_GetTeamData.TeamMember, m2L_GetTeamData.ReservationTeamData));
        }
 public static int GetTeamRoomCount(this LobbyComponent self)
 {
     return(self.TeamList.Count);
 }