Esempio n. 1
0
        public static void Handle_StartLoading(ClientConnection Client, PacketReader reader, byte last)
        {
            Account    User     = Client.CurrentAccount;
            NormalRoom room     = Rooms.GetRoom(User.CurrentRoomId);
            int        mapid    = reader.ReadLEInt32(); //mapid
            int        randseed = reader.ReadLEInt32(); //00 92 D1 00  randseed

            reader.ReadByte();                          //00

            //Log.Info("startLoading(randseed = {0})", randseed);
            if (MapHolder.MapInfos.TryGetValue(mapid, out MapInfo mapinfo))
            {
                room.RuleType = mapinfo.RuleType;
                if (!room.is8Player && !room.CheckReadyPlayerNum(out int err))
                {
                    if (err > 0)
                    {
                        Client.SendAsync(new GameRoom_StartError(err, last));
                    }
                    room.isPlaying = false;
                    return;
                }

                if (room.GameMode == 2)
                {
                    List <Account> notReadyPlayers = room.Players.FindAll(p => !p.IsReady && p.RoomPos != room.RoomMasterIndex);
                    foreach (Account notReadyPlayer in notReadyPlayers)
                    {
                        GameRoomEvent.KickPlayer(notReadyPlayer, room, last);
                    }
                }
                else if (room.GameMode == 3)
                {
                    List <Account> notReadyPlayers = room.Players.FindAll(p => !p.IsReady);
                    foreach (Account notReadyPlayer in notReadyPlayers)
                    {
                        GameRoomEvent.KickPlayer(notReadyPlayer, room, last);
                    }
                }
                room.PlayingMapNum = mapid;
                room.BroadcastToAll(new GameRoom_StartLoading(mapid, randseed, last));
                room.StartWaitAllSyncThread();
                room.SetRewardGroupList();
            }
        }