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)); }
public static void Handle_CreateGameRoom(ClientConnection Client, PacketReader reader, byte last) { Account User = Client.CurrentAccount; if (!User.InGame) { if (User.Attribute == 3) { Client.SendAsync(new GameRoom_CreateRoomError(User, 8, last)); return; } byte roomkindid = reader.ReadByte(); byte unk = reader.ReadByte(); int namelength = reader.ReadLEInt32(); string name = reader.ReadBig5StringSafe(namelength); int passwordlength = reader.ReadLEInt32(); string password = string.Empty; if (passwordlength > 0) { password = reader.ReadBig5StringSafe(passwordlength); } int isTeamPlay = reader.ReadLEInt32(); bool isStepOn = reader.ReadBoolean(); int itemtype = reader.ReadLEInt32(); int unk2 = reader.ReadLEInt32(); int unk3 = reader.ReadLEInt32(); //byte footer = binaryReader.ReadByte(); NormalRoom room = new NormalRoom(); room.setID(Rooms.RoomID); room.setName(name); room.setPassword(password); room.setItemType(itemtype); room.setIsStepOn(isStepOn); room.setRoomKindID(roomkindid); room.setIsTeamPlay(isTeamPlay); room.Players.Add(User); Console.WriteLine("fdRoomKindID={0}", roomkindid); if (RoomHolder.RoomKindInfos.TryGetValue(roomkindid, out int GameMode)) { room.setGameMode(GameMode); } else { room.setGameMode(1); } /*if (!DBHelp.CheckTable(string.Format("select * from essenroomkindid where fdRoomKindID={0}", roomkindid))) * { * Log.Error("DataBase沒有此RoomKind: {0}", roomkindid); * return; * } * * if (DBHelp.CheckTable(string.Format("select * from essenroomkindid where fdRoomKindID={0} and fdGameMode=1", roomkindid))) * { * room.setMaxPlayersCount(8); * room.setPosList(8); * } * else if (DBHelp.CheckTable(string.Format("select * from essenroomkindid where fdRoomKindID={0} and fdGameMode=2", roomkindid))) * { * room.setMaxPlayersCount(30); * room.setPosList(30); * room.is8Player = false; * } * else if (DBHelp.CheckTable(string.Format("select * from essenroomkindid where fdRoomKindID={0} and fdGameMode=3", roomkindid))) * { * room.setMaxPlayersCount(20); * room.setPosList(20); * room.is8Player = false; * }*/ //取得第一個位置 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; Log.Info("Room name: {0}, isTeamPlay={1}, isStepOn={2}, ItemType={3}, HasPassword={4}, RoomKindID={5}", name, isTeamPlay, isStepOn, itemtype, passwordlength > 0 ? true : false, roomkindid); //Client.SendAsync(new GameRoom_Hex(User, "FF5805FFFFFFFFFFFFFFFF000000000000000D01", last)); Client.SendAsync(new GameRoom_GoodsInfo(User, room, last)); Client.SendAsync(new GameRoom_Hex(User, "A3", last)); Client.SendAsync(new GameRoom_SendRoomInfo(User, room, last)); Client.SendAsync(new GameRoom_SendPlayerInfo(User, last)); Client.SendAsync(new GameRoom_GetRoomMaster(User, room.RoomMasterIndex, last)); //場主位置 //Client.SendAsync(new GameRoom_Hex(User, "FFB9010100000000", last)); //Client.SendAsync(new GameRoom_SendRoomMaster(User, room.RoomMasterIndex, last)); Client.SendAsync(new GameRoom_SendRoomMaster(User, room.MapNum, room.RoomMasterIndex, last)); Client.SendAsync(new GameRoom_Hex(User, "FF6405F70300000000000000000000", last)); Client.SendAsync(new GameRoom_Hex(User, "FF660501000000", last)); if (isTeamPlay == 2) { User.Team = 1; Client.SendAsync(new GameRoom_RoomPosTeam(User, last)); } /*Client.SendAsync(new GameRoom_Hex(User, "FF6405F70300000000000000000000", last)); * Client.SendAsync(new GameRoom_Hex(User, "FF660501000000", last));*/ Rooms.NormalRoomList.Add(room); } }