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(); } }
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)); }