public static void GuildOperation(GameServerConnection con, PacketReader packet) { int cid = packet.ReadInt(); int gid = packet.ReadInt(); var guild = Database.GetGuild(gid); con.mSession.SendPacket(CenterServerPacketDefinitions.GuildOperation(cid, guild)); }
public static void HandleMigrate(CenterServer serv, PacketReader packet) { int accid = packet.ReadInt(); int cid = packet.ReadInt(); byte[] ip = packet.ReadBytes(4); ushort port = (ushort)packet.ReadShort(); if (port == 0) Program.mServer.GetClientByAccountId(accid).SendPacket(PacketDefinitions.SelectCharacter(0x0C, 0x1F, ip, port, cid)); else Program.mServer.GetClientByAccountId(accid).SendPacket(PacketDefinitions.SelectCharacter(0x00, 0x00, ip, port, cid)); }
public void handlePacket(Client c, PacketReader packet) { int tickCount = packet.ReadInt(); byte inventoryType = packet.ReadByte(); c.SendPacket(CWvsContext.BroadcastMessage(5, string.Format("InventorySort {0},{1}", tickCount, inventoryType))); c.SendPacket(CUser.UpdatePrimaryStat(PrimaryStat.Null)); }
public void handlePacket(Client c, PacketReader packet) { int cid = packet.ReadInt(); byte[] mac = packet.ReadBytes(6); byte[] hwid = packet.ReadBytes(4); packet.Skip(8); long sessionID = packet.ReadLong(); c.mAccount = new Account(); c.mAccount.Load(cid); Logger.Write(Logger.LogTypes.정보, "SESSIONID;\r\n\t CID={0},\r\n\t CMAC={1},\r\n\t CHWID={2},\r\n\t CSESSIONID={3},\r\n\t SMAC={4},\r\n\t SHWID={5},\r\n\t SSESSIONID={6}", cid, mac.ToString2s(), hwid.ToString2s(), sessionID, c.mAccount.MacAddress.ToString2s(), c.mAccount.HDDSerial.ToString2s(), c.mAccount.SessionID); if (c.mAccount.SessionID != sessionID) { Logger.Write(Logger.LogTypes.경고, "UNEQUAL SESSIONID !"); return; // TODO: Autoban } c.validated = true; c.mCharacter = Database.GetCharacter(cid); Program.mServer.center.mCenterConnection.mSession.SendPacket(CenterServerPacketDefinitions.GuildInfo(c.mCharacter.mID, c.mCharacter.mGuild.GuildID)); System.Threading.Thread.Sleep(500); // should be enough c.mCharacter.mPosition = Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].GetPortal(c.mCharacter.mFieldPosition).mPosition; c.mCharacter.mClient = c; Console.WriteLine("Character: {0}:{1}", c.mCharacter.mID, c.mCharacter.mGuild.Name); c.SendPacket(CStage.SetField(c, true)); Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].AddCharacter(c.mCharacter); }
public static void HandleIdentify(PacketReader packet) { int id = packet.ReadInt(); Program.mServer.ServerId = id; Program.mServer.Acceptor = new ClientAcceptor(); Program.mServer.Acceptor.mGameServer = Program.mServer; Program.mServer.Acceptor.Listen(); }
public static void ClientCount(GameServerConnection con, PacketReader packet) { byte serverid = packet.ReadByte(); int count = packet.ReadInt(); foreach (GameServer serv in Program.mServer.gameServers.Values) if (serv.ID == serverid) serv.ClientCount = count; }
public void handlePacket(Client c, PacketReader packet) { int tickCount = packet.ReadInt(); byte inventoryType = packet.ReadByte(); short src = packet.ReadShort(); short dst = packet.ReadShort(); short quantity = packet.ReadShort(); c.SendPacket(CWvsContext.BroadcastMessage(5, string.Format("InventoryOperation {0},{1} {2},{3},{4}", tickCount, inventoryType, src, dst, quantity))); c.SendPacket(CUser.UpdatePrimaryStat(PrimaryStat.Null)); }
public static void HandleChannelLoad(PacketReader packet, CenterServer serv) { byte channels = packet.ReadByte(); var ret = new Dictionary<int, int>(); for (int i = 0; i < channels; ++i) { ret.Add(packet.ReadByte(), packet.ReadInt()); } serv.channels = ret; }
public void handlePacket(Client c, PacketReader packet) { packet.ReadInt(); // timestamp...a client sided timestamp. string message = packet.ReadMapleString(); if (message.StartsWith("@")) { string[] splitted = message.Replace("@", "").Split(' '); int status = CommandProcessing.HandlePlayerCommand(c, splitted); if (status == 0) c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Player Command " + message)); else if (status == 1) c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Player Command " + message)); else if (status == 2) c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Player Command " + message)); } else if (message.StartsWith("!") && c.mAccount.Admin == 1) { string[] splitted = message.Replace("!", "").Split(' '); int status = CommandProcessing.HandleMasterCommand(c, splitted); /*if (status == 0) c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Master Command " + message)); else */if (status == 1) c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Master Command " + message)); else if (status == 2) c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Master Command " + message)); } else if (message.StartsWith("/") && c.mAccount.Admin == 1) { string[] splitted = message.Replace("/", "").Split(' '); int status = CommandProcessing.HandleAdminCommand(c, splitted); /*if (status == 0) c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Admin Command " + message)); else */if (status == 1) c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Admin Ccommand " + message)); else if (status == 2) c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Admin Command " + message)); } else { Program.mServer.Fields[c.mCharacter.mField][0].SendPacket( CUserPool.PublicChatMessage(c.mCharacter.mID, message, c.mAccount.Admin == 1, true)); Program.mServer.Fields[c.mCharacter.mField][0].SendPacket( CField.ChatMessage( (short) (c.mChatColor >= 0 ? c.mChatColor : c.mAccount.Admin == 1 ? 0x0B : 0x00), "★" + c.mCharacter. mName + "★ : " + message)); } }
public void handlePacket(Client c, PacketReader packet) { int portalCount = packet.ReadByte(); int crc = packet.ReadInt(); int tickcount = packet.ReadInt(); c.mCharacter.mPosition = new System.Drawing.Point(packet.ReadShort(), packet.ReadShort()); Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position))); //Console.WriteLine("UH....PACKET?\r\n{0}", CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position)).ToString2s()); /* int portalCount = packet.ReadByte(); int crc = packet.ReadInt(); int tickcount = packet.ReadInt(); short x = packet.ReadShort(); short y = packet.ReadShort(); c.mCharacter.mPosition = new System.Drawing.Point(x, y); byte[] movement = packet.ReadBytes(packet.Length - packet.Position); packet.ReadBytes(4); int tickcount = packet.ReadInt(); c.mCharacter.mPosition = new System.Drawing.Point(packet.ReadShort(), packet.ReadShort()); packet.ReadBytes(4); - c.mCharacter.ParseMovementPath(packet);*/ //c.mCharacter.ParseMovementPath(packet); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, MovementParser.ParseMovementPath(packet))); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position))); //if (x < Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].WzData //c.mCharacter.ParseMovementPath(packet); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, MovementParser.ParseMovementPath(packet))); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, movement)); //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, c.mCharacter.ParseMovementPath(packet))); /*[9/12/2012 12:40:34 AM][대타] 받은 패킷 * 49 00 * 01 AC 7E BC BC 80 15 FC 05 BA 02 12 01 00 00 00 00 03 00 BA 02 12 01 00 00 00 00 61 00 00 00 00 00 * 04 4A 01 00 C8 02 12 01 96 00 00 00 61 00 00 00 00 00 02 96 00 00 CC 02 12 01 7E 00 00 00 61 00 00 * 00 00 00 04 1E 00 11 00 00 00 00 00 40 44 44 00 BA 02 12 01 CC 02 12 01 * */ }
public void handlePacket(Client c, PacketReader packet) { string pic = Database.MySqlEscape(packet.ReadMapleString()); int cid = packet.ReadInt(); string macs = packet.ReadMapleString(); // i should probably do something with these lol string HWID = packet.ReadMapleString(); // ?_hdd serial if (pic != c.Pic) c.SendPacket(PacketDefinitions.BadPic()); else { c.Migrate = true; Program.mServer.GetCenterServerById(c.RecentWorld).mCenterConnection.mSession.SendPacket(CenterServerPacketDefinitions.RequestMigrate(c.AccountId, cid, c.RecentChannel)); } }
public void handlePacket(Client c, PacketReader packet) { string pic = packet.ReadMapleString(); int cid = packet.ReadInt(); if (pic != c.Pic) c.SendPacket(PacketDefinitions.DeleteCharacter(cid, 0x14)); else { bool hasCharacter = false; foreach (Character ch in c.Characters) if (ch.mID == cid) hasCharacter = true; if (!hasCharacter) return; // TODO: AUTOBAN Database.DeleteCharacter(cid); c.SendPacket(PacketDefinitions.DeleteCharacter(cid, 0)); } }
public static void HandleGuildOperation(PacketReader packet) { int cid = packet.ReadInt(); int gid = packet.ReadInt(); string name = packet.ReadMapleString(); int point = packet.ReadInt(); int membercap = packet.ReadInt(); int emblemBG = packet.ReadShort(); int emblemBGC = packet.ReadShort(); int emblem = packet.ReadShort(); int emblemC = packet.ReadShort(); int membercount = packet.ReadInt(); List<GuildMember> mems = new List<GuildMember>(); for (int i = 0; i < membercount; ++i) { var member = new GuildMember(); member.CharacterID = packet.ReadInt(); member.Grade = packet.ReadInt(); member.GuildID = gid; mems.Add(member); } if (membercap == 0) ++membercap; var guild = new Guild(); guild.Name = name; guild.GuildID = gid; guild.Point = point; guild.MemberCap = membercap; guild.EmblemBG = emblemBG; guild.EmblemBGColour = emblemBGC; guild.Emblem = emblem; guild.EmblemColour = emblemC; guild.Members = mems.ToArray(); Program.mServer.GetClient(cid).mCharacter.mGuild = guild; }
public static void Migrate(GameServerConnection con, PacketReader packet) { int accountid = packet.ReadInt(); int cid = packet.ReadInt(); int channel = packet.ReadInt(); GameServer serv = Program.mServer.GetGameServerById(channel); if (serv == null) con.mSession.SendPacket(CenterServerPacketDefinitions.Migrate(accountid, cid, new byte[4], 0)); else con.mSession.SendPacket(CenterServerPacketDefinitions.Migrate(accountid, cid, System.Net.IPAddress.Parse(serv.PublicIP).GetAddressBytes(), serv.port)); }
/// <summary> /// Data received event handler /// </summary> /// <param name="iar">IAsyncResult of the data received event</param> private void OnDataReceived(IAsyncResult iar) { SocketInfo socketInfo = (SocketInfo)iar.AsyncState; try { int received = socketInfo.Socket.EndReceive(iar); if (received == 0) { if (OnClientDisconnected != null) { OnClientDisconnected(this); } return; } socketInfo.Index += received; if (socketInfo.Index == socketInfo.DataBuffer.Length) { switch (socketInfo.State) { case SocketInfo.StateEnum.Header: if (socketInfo.NoEncryption) { PacketReader headerReader = new PacketReader(socketInfo.DataBuffer); short packetHeader = headerReader.ReadShort(); socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetHeader]; socketInfo.Index = 0; WaitForData(socketInfo); } else { PacketReader headerReader = new PacketReader(socketInfo.DataBuffer); byte[] packetHeaderB = headerReader.ToArray(); int packetHeader = headerReader.ReadInt(); short packetLength = (short)MapleCrypto.getPacketLength(packetHeader); if (_type == SessionType.SERVER_TO_CLIENT && !_RIV.checkPacketToServer(BitConverter.GetBytes(packetHeader))) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Packet check failed. Disconnecting client."); //this.Socket.Close(); } socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetLength]; socketInfo.Index = 0; WaitForData(socketInfo); } break; case SocketInfo.StateEnum.Content: byte[] data = socketInfo.DataBuffer; if (socketInfo.NoEncryption) { socketInfo.NoEncryption = false; PacketReader reader = new PacketReader(data); short version = reader.ReadShort(); string unknown = reader.ReadMapleString(); _SIV = new MapleCrypto(reader.ReadBytes(4), version); _RIV = new MapleCrypto(reader.ReadBytes(4), version); byte serverType = reader.ReadByte(); if (_type == SessionType.CLIENT_TO_SERVER) { OnInitPacketReceived(version, serverType); } OnPacketReceived(new PacketReader(data), true); WaitForData(); } else { _RIV.crypt(data); MapleCustomEncryption.Decrypt(data); if (data.Length != 0 && OnPacketReceived != null) { OnPacketReceived(new PacketReader(data), false); } WaitForData(); } break; } } else { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Warning] Not enough data"); WaitForData(socketInfo); } } catch (ObjectDisposedException) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: Socket has been closed"); } catch (SocketException se) { if (se.ErrorCode != 10054) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + se); } } catch (Exception e) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + e); } }
/// <summary> /// Data received event handler /// </summary> /// <param name="iar">IAsyncResult of the data received event</param> private void OnDataReceived(IAsyncResult iar) { var socketInfo = (SocketInfo)iar.AsyncState; try { var received = socketInfo.Socket.EndReceive(iar); if (received == 0) { OnClientDisconnected?.Invoke(this); return; } socketInfo.Index += received; if (socketInfo.Index == socketInfo.DataBuffer.Length) { switch (socketInfo.State) { case SocketInfo.StateEnum.Header: if (socketInfo.IsNoEncryption) { var headerReader = new PacketReader(socketInfo.DataBuffer); var packetHeader = headerReader.ReadShort(); socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetHeader]; socketInfo.Index = 0; WaitForData(socketInfo); } else { var headerReader = new PacketReader(socketInfo.DataBuffer); var packetHeaderB = headerReader.ToArray(); var packetHeader = headerReader.ReadInt(); var packetLength = (short)MapleCrypto.GetPacketLength(packetHeader); if (Type == SessionType.SERVER_TO_CLIENT && !RIV.CheckPacketToServer(BitConverter.GetBytes(packetHeader))) { Log.LogError("Packet check failed. Disconnecting client"); Socket.Close(); } socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetLength]; socketInfo.Index = 0; WaitForData(socketInfo); } break; case SocketInfo.StateEnum.Content: var data = socketInfo.DataBuffer; if (socketInfo.IsNoEncryption) { socketInfo.IsNoEncryption = false; var reader = new PacketReader(data); var version = reader.ReadShort(); var unknown = reader.ReadMapleString(); SIV = new MapleCrypto(reader.ReadBytes(4), version); RIV = new MapleCrypto(reader.ReadBytes(4), version); var serverType = reader.ReadByte(); if (Type == SessionType.CLIENT_TO_SERVER) { OnInitPacketReceived(version, serverType); } OnPacketReceived(new PacketReader(data), true); WaitForData(); } else { RIV.Crypt(data); MapleCustomEncryption.Decrypt(data); if (data.Length != 0) { OnPacketReceived?.Invoke(new PacketReader(data), false); } WaitForData(); } break; } } else { Log.LogWarning("Not enough data"); WaitForData(socketInfo); } } catch (ObjectDisposedException e) { Log.LogError("Socket has been closed", e); } catch (SocketException se) { if (se.ErrorCode != 10054) { Log.LogError("Session.OnDataReceived", se); } } catch (Exception e) { Log.LogError("Session.OnDataReceived", e); } }
/// <summary> /// Data received event handler /// </summary> /// <param name="iar">IAsyncResult of the data received event</param> private void OnDataReceived(IAsyncResult iar) { SocketInfo socketInfo = (SocketInfo)iar.AsyncState; try { int received = socketInfo.Socket.EndReceive(iar); if (received == 0) { if (OnClientDisconnected != null) { OnClientDisconnected(this); } return; } socketInfo.Index += received; if (socketInfo.Index == socketInfo.DataBuffer.Length) { switch (socketInfo.State) { case SocketInfo.StateEnum.Header: if (socketInfo.NoEncryption) { PacketReader headerReader = new PacketReader(socketInfo.DataBuffer); short packetHeader = headerReader.ReadShort(); socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetHeader]; socketInfo.Index = 0; WaitForData(socketInfo); } else { PacketReader headerReader = new PacketReader(socketInfo.DataBuffer); byte[] packetHeaderB = headerReader.ToArray(); int packetHeader = headerReader.ReadInt(); short packetLength = (short)MapleCrypto.GetPacketLength(packetHeader); if (_type == SessionType.SERVER_TO_CLIENT && !_RIV.CheckPacketToServer(BitConverter.GetBytes(packetHeader))) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Packet check failed. Disconnecting client."); //this.Socket.Close(); } socketInfo.State = SocketInfo.StateEnum.Content; socketInfo.DataBuffer = new byte[packetLength]; socketInfo.Index = 0; WaitForData(socketInfo); } break; case SocketInfo.StateEnum.Content: byte[] data = socketInfo.DataBuffer; if (socketInfo.NoEncryption) { socketInfo.NoEncryption = false; PacketReader reader = new PacketReader(data); short version = reader.ReadShort(); string unknown = reader.ReadMapleString(); _SIV = new MapleCrypto(reader.ReadBytes(4), version); _RIV = new MapleCrypto(reader.ReadBytes(4), version); byte serverType = reader.ReadByte(); if (_type == SessionType.CLIENT_TO_SERVER) { OnInitPacketReceived(version, serverType); } OnPacketReceived(new PacketReader(data), true); WaitForData(); } else { _RIV.Crypt(data); MapleCustomEncryption.Decrypt(data); if (data.Length != 0 && OnPacketReceived != null) { OnPacketReceived(new PacketReader(data), false); } WaitForData(); } break; } } else { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Warning] Not enough data"); WaitForData(socketInfo); } } catch (ObjectDisposedException) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: Socket has been closed"); } catch (SocketException se) { if (se.ErrorCode != 10054) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + se); } } catch (Exception e) { Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + e); } }
public void handlePacket(Client c, PacketReader packet) { string charname = Database.MySqlEscape(packet.ReadMapleString()); int jobtype = packet.ReadInt(); short specialjobtype = packet.ReadShort(); byte gender = packet.ReadByte(); packet.Skip(2); int face = packet.ReadInt(); int hair = packet.ReadInt(); int haircolor = packet.ReadInt(); int skin = packet.ReadInt(); int top = packet.ReadInt(); int bottom = 0; if (jobtype < 5) bottom = packet.ReadInt(); int shoes = packet.ReadInt(); int weapon = packet.ReadInt(); int shield = 0; if (jobtype == 6) shield = packet.ReadInt(); Character newchr = new Character(); newchr.mName = charname; if (jobtype == 0) { newchr.mPrimaryStats.Job = (short)Job.Citizen; } else if (jobtype == 1) { newchr.mPrimaryStats.Job = (short)Job.Beginner; } else if (jobtype == 2) { newchr.mPrimaryStats.Job = (short)Job.Noblesse; } else if (jobtype == 3) { newchr.mPrimaryStats.Job = (short)Job.Legend; } else if (jobtype == 4) { newchr.mPrimaryStats.Job = (short)Job.Evan1; } else if (jobtype == 5) { newchr.mPrimaryStats.Job = (short)Job.Mercedes; } else if (jobtype == 6) { newchr.mPrimaryStats.Job = (short)Job.DemonSlayer; } newchr.mMap = 100000000; newchr.mClient = c; newchr.mHair = hair + haircolor; newchr.mFace = face; newchr.mSkin = (byte)skin; newchr.mGender = gender; newchr.mPrimaryStats.Level = 1; newchr.mPrimaryStats.HP = 50; newchr.mPrimaryStats.MaxHP = 50; newchr.mPrimaryStats.MP = 50; newchr.mPrimaryStats.MaxMP = 50; newchr.mPrimaryStats.Str = 4; newchr.mPrimaryStats.Dex = 4; newchr.mPrimaryStats.Int = 4; newchr.mPrimaryStats.Luk = 4; Equip eweapon = new Equip(weapon, "Character creation (JobId " + jobtype + ")"); eweapon.Watk = 17; eweapon.Position = -11; newchr.mInventory[0].Add(eweapon.Position, eweapon); if (shield > 0) { Equip eshield = new Equip(shield, "Character creation (JobId " + jobtype + ")"); eshield.Position = -10; newchr.mInventory[0].Add(eshield.Position, eshield); } Equip etop = new Equip(top, "Character creation (JobId " + jobtype + ")"); etop.Position = -5; newchr.mInventory[0].Add(etop.Position, etop); if (bottom > 0) { Equip ebottom = new Equip(bottom, "Character creation (JobId " + jobtype + ")"); ebottom.Position = -6; newchr.mInventory[0].Add(ebottom.Position, ebottom); } Equip eshoes = new Equip(shoes, "Character creation (JobId " + jobtype + ")"); eshoes.Position = -7; newchr.mInventory[0].Add(eshoes.Position, eshoes); Database.SaveCharacter(newchr, true); c.SendPacket(PacketDefinitions.NewCharacter(newchr)); }
public void handlePacket(Client c, PacketReader packet) { packet.ReadByte(); int portalId = packet.ReadInt(); int timestamp = packet.ReadInt(); }