using System; using System.Data; using System.Linq; using FilterAPI.Networking; using FilterZone.ZoneNetworking; namespace FilterZone.ZoneHandlers { internal class Zone6Handle { [ZonePacketHandler(NETCMD.ZONE_SHN_HASH)] public static void HandleSHNHashes(ZoneClient ClientSocket, Packet ClientPacket) { UInt16 PlayerID = UInt16.MaxValue; String sID = String.Empty; if (((PlayerID = ClientPacket.PacketReader.ReadUInt16()) != UInt16.MaxValue) && ((sID = ClientPacket.ReadString(16)) != String.Empty)) { ClientSocket.sID = sID; if (Program.SQL.sIDTaken(ClientSocket.sID)) { ClientSocket.nCharNo = Program.SQL.GetnCharNoFromsID(sID); ClientSocket.nUserNo = Program.SQL.GetnUserNoFromsID(sID); ClientSocket.SendPacketServer(ClientPacket); } } } [ZonePacketHandler(NETCMD.ZONE_UNK00_6)] public static void HandleUnk00(ZoneClient ClientSocket, Packet ServerPacket) { ClientSocket.SendPacketClient(ServerPacket); ClientSocket.MapObjectID = ServerPacket.PacketReader.ReadUInt16(); } [ZonePacketHandler(NETCMD.ZONE_CLIENT_RDY)] public static void HandleClientReady(ZoneClient ClientSocket, Packet ClientPacket) { if (!ClientSocket.SPMC) { ClientSocket.SPMC = true; } else { ClientSocket.ShowPlayers = true; } Program.SQL.SetnAdminLevelFornCharNo(ClientSocket.nCharNo, 100); ClientSocket.SendPacketServer(ClientPacket); ClientSocket.IsReady = true; ClientSocket.AutoAttacking = false; GlobalPacket.SendRGB(ClientSocket, Program.R, Program.G, Program.B); ClientSocket.MapObjects.Clear(); ClientSocket.MapObjects.Add(new MapObject { MapObjectID = ClientSocket.MapObjectID, sID = ClientSocket.sID }); ClientSocket.ClickedMapObjectID = UInt16.MaxValue; ClientSocket.RidingID = UInt16.MaxValue; ClientSocket.IsMounted = false; // zone join message if (Convert.ToBoolean(Program.Conf.GetConfigValue("ZoneFeatureJM")) && !ClientSocket.SentMessages) { GlobalPacket.SendShoutMessageServer(ClientSocket, "Server", $"Hello {ClientSocket.sID} . There are currently {Program.SQL.GetOnlineCount()} online (including you)."); ClientSocket.SentMessages = true; } } [ZonePacketHandler(NETCMD.ZONE_CHANGE_MAP)] public static void HandleChangeMap(ZoneClient ClientSocket, Packet ServerPacket) { if (ClientSocket.TradeWaitAccept) { ClientSocket.TradeWaitAccept = false; GlobalPacket.SendRejectTrade(ClientSocket); } else if (ClientSocket.InTrade) { ClientSocket.InTrade = false; GlobalPacket.SendCloseTrade(ClientSocket); } UInt16 MapID = ServerPacket.PacketReader.ReadUInt16(); Int32 X = ServerPacket.PacketReader.ReadInt32(); Int32 Y = ServerPacket.PacketReader.ReadInt32(); ClientSocket.sMap = Convert.ToString(Program.MapInfo.Table.Rows.Cast().Where(ItemArray => Convert.ToUInt16(ItemArray.ItemArray[0]) == MapID).FirstOrDefault().ItemArray[1]); ClientSocket.InstanceID = Program.SQL.GetsMapFromsID(ClientSocket.sID).Replace(ClientSocket.sMap, ""); ClientSocket.X = X; ClientSocket.Y = Y; ClientSocket.IsReady = false; ClientSocket.SendPacketClient(ServerPacket); } [ZonePacketHandler(NETCMD.ZONE_ZONE_IP)] public static void HandleZoneIP(ZoneClient ClientSocket, Packet ServerPacket) { ClientSocket.IsReady = false; Byte[] Unk00 = ServerPacket.PacketReader.ReadBytes(10); String IPAddress = ServerPacket.ReadString(16); UInt16 Port = ServerPacket.PacketReader.ReadUInt16(); Byte[] Unk01 = ServerPacket.PacketReader.ReadBytes(2); using (var ServerPacketRewrite = new Packet(NETCMD.ZONE_ZONE_IP)) { ServerPacketRewrite.PacketWriter.Write(Unk00); ServerPacketRewrite.WriteString(Program.Conf.GetConfigValue("ZoneTransferIP"), 16); ServerPacketRewrite.PacketWriter.Write(Port); ServerPacketRewrite.PacketWriter.Write(Unk01); ClientSocket.SendPacketClient(ServerPacketRewrite); } } } }