Пример #1
0
        public static void GameMode_MiniGame_RoundThread(long RoundTime, NormalRoom room)
        {
            while (Utility.CurrentTimeMilliseconds() < RoundTime)
            {
                if (room.Survival == 0) //next round
                {
                    break;
                }
                //wait all gameover or time
            }

            int point = 100 + 50 * room.Round;

            if (room.PlayingMapNum != 40006)
            {
                room.Players.Where(w => w.Attribute != 3 && !w.GameOver)
                .Join(room.DropItem, p => p.UserNum, d => d.UserNum, (p, d) => new { p, d })
                .ToList().ForEach(f => f.d.MiniGamePoint += point);
            }

            int isnextround = 1;

            foreach (Account RoomPlayer in room.Players)
            {
                RoomPlayer.Connection.SendAsync(new GameRoom_MiniGame_RoundTime(RoomPlayer, room.Round, isnextround, 1, 0x1));
                RoomPlayer.Connection.SendAsync(new GameRoom_MiniGame_UpdatePoint(room, 0x1));
            }

            int nextround = room.Round + 1;
            int maxround  = room.PlayingMapNum == 40003 ? 1 : 3;

            if (nextround == maxround) //endgame
            {
                int laptime = 100;

                foreach (var p in room.Players.Where(p => p.Attribute != 3)
                         .Join(room.DropItem, p => p.UserNum, d => d.UserNum, (p, d) => new { p, d })
                         .OrderByDescending(o => o.d.MiniGamePoint).ThenBy(o => o.p.RoomPos))
                {
                    if (p.d.MiniGamePoint > 0)
                    {
                        p.d.Rank = room.Rank++;
                        int mylabtime = laptime++;
                        p.p.ServerLapTime     = mylabtime;
                        p.p.LapTime           = mylabtime;
                        p.d.MiniGameStarPoint = (int)Math.Round(p.d.MiniGamePoint / 4.5, MidpointRounding.AwayFromZero);
                        UpdateUserPoint(p.p.UserNum, 2400, p.d.MiniGameStarPoint);
                    }
                    else
                    {
                        p.d.Rank          = 98;
                        p.p.ServerLapTime = 100000;
                        p.p.LapTime       = 100000;
                    }
                }

                room.Result = GenResult_ForMiniGameMode(room, 0x1);
                room.RegisterItem(-1, -1, 2, 0x1049F00C, true);

                foreach (Account RoomPlayer in room.Players)
                {
                    RoomPlayer.Connection.SendAsync(new GameRoom_GameUpdateEXP(RoomPlayer, 0x1));
                }
                foreach (Account RoomPlayer in room.Players)
                {
                    RoomPlayer.Connection.SendAsync(new GameRoom_GameResult2(RoomPlayer, room.Result));
                    RoomPlayer.Connection.SendAsync(new GameRoom_Hex("FF0102", 0x1));
                    foreach (Account Player in room.Players)
                    {
                        RoomPlayer.Connection.SendAsync(new GameRoom_RoomPosReady(Player.RoomPos, false, 0x1));
                    }
                    RoomPlayer.Connection.SendAsync(new GameRoom_GoodsInfo(room, 0x1));
                }
                foreach (Account RoomPlayer in room.Players)
                {
                    //FF2D02A3220000C4C11400CB110000DB0800000E0C00001E0F0000
                    RoomPlayer.Connection.SendAsync(new GameRoom_UpdateIndividualGameRecord(RoomPlayer, 0x1));
                }
                Thread.Sleep(5000);
                foreach (Account RoomPlayer in room.Players)
                {
                    //MoveToGameRoom
                    RoomPlayer.Connection.SendAsync(new MoveToGameRoom(0x1)); //9704
                }

                room.GameEndSetNewRoomMaster();
                room.addMatchTime();
                room.StartAutoChangeRoomMaster();
                //reset
                room.GameEndReset();
            }
        }
Пример #2
0
        public static void Handle_EnterFarm(ClientConnection Client, PacketReader packetReader, byte last)
        {
            //FF D1 01 00 13 EA 25 00 00 00 00 00 04
            Account User      = Client.CurrentAccount;
            byte    subopcode = packetReader.ReadByte();
            int     farmindex = packetReader.ReadLEInt32();//13 EA 25 00 id??

            bool       existRoom = Rooms.RoomList.Values.Any(rm => rm.FarmIndex == farmindex);
            NormalRoom room;

            if (!existRoom)
            {
                string FarmName = string.Empty;
                string Password = string.Empty;
                int    RoomServerNum, RoomHandle;

                using (var con = new MySqlConnection(Conf.Connstr))
                {
                    con.Open();
                    var cmd = new MySqlCommand(string.Empty, con);
                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "usp_Farm_GetRoomInfo";
                    cmd.Parameters.Add("pFarmUniqueNum", MySqlDbType.Int32).Value = farmindex;
                    MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
                    if (reader.HasRows)
                    {
                        reader.Read();
                        FarmName      = reader["FarmName"].ToString();
                        Password      = reader["Password"].ToString();
                        RoomServerNum = Convert.ToInt32(reader["RoomServerNum"]);
                        RoomHandle    = Convert.ToInt32(reader["RoomHandle"]);
                    }
                    cmd.Dispose();
                    reader.Close();
                    con.Close();
                }

                room = new NormalRoom();
                room.setID(Rooms.RoomID);
                room.setName(FarmName);
                room.setPassword(Password);
                room.setItemType(0);
                room.setIsStepOn(false);
                room.setRoomKindID(75);
                room.setIsTeamPlay(0);
                room.FarmIndex = farmindex;
                room.Players.Add(User);
                if (RoomHolder.RoomKindInfos.TryGetValue(75, out var roomkindinfo))
                {
                    room.setGameMode(roomkindinfo);
                }

                //取得第一個位置 0
                User.RoomPos = (byte)(User.Attribute == 3 ? 100 : room.PosList.First());
                room.PosList.Remove(User.RoomPos);
                room.setRoomMasterIndex(User.RoomPos);


                //User.IsRoomMaster = true;
                User.InGame        = true;
                User.CurrentRoomId = Rooms.RoomID;
                Rooms.RoomID      += 1;

                room.StartAutoChangeRoomMaster();
                Rooms.AddRoom(room.ID, room);
            }
            else
            {
                room = Rooms.RoomList.Values.Where(rm => rm.FarmIndex == farmindex).FirstOrDefault();
                room.EnterRoom(Client, string.Empty, last);
            }
            Client.SendAsync(new GameRoom_Hex("A3", last));
            if (!existRoom)
            {
                Client.SendAsync(new SendFarmInfo(User, room, farmindex, last));
            }
            Client.SendAsync(new GameRoom_SendPlayerInfo(User, last));
            Client.SendAsync(new EnterFarm_0x2DD(last));
            Client.SendAsync(new EnterFarm_0x646(last));
        }