public void SendConnectToInstance(ConnectToSerial serial) { var instanceAddress = Global.WorldMgr.GetRealm().GetAddressForClient(System.Net.IPAddress.Parse(GetRemoteAddress())); _instanceConnectKey.AccountId = GetAccountId(); _instanceConnectKey.connectionType = ConnectionType.Instance; _instanceConnectKey.Key = RandomHelper.URand(0, 0x7FFFFFFF); ConnectTo connectTo = new ConnectTo(); connectTo.Key = _instanceConnectKey.Raw; connectTo.Serial = serial; connectTo.Payload.Port = (ushort)WorldConfig.GetIntValue(WorldCfg.PortInstance); connectTo.Con = (byte)ConnectionType.Instance; if (instanceAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { connectTo.Payload.Where.IPv4 = instanceAddress.Address.GetAddressBytes(); connectTo.Payload.Where.Type = ConnectTo.AddressType.IPv4; } else { connectTo.Payload.Where.IPv6 = instanceAddress.Address.GetAddressBytes(); connectTo.Payload.Where.Type = ConnectTo.AddressType.IPv6; } SendPacket(connectTo); }
public TileConnection GetTileConnection(Level level, Coordinates pos) { TileConnection cache = level.GetTileConnection(pos); if ((cache != null && cache.Tile == Tile)) { return(cache); } var Up = false; var Down = false; var Left = false; var Right = false; var UpLeft = false; var UpRight = false; var DownLeft = false; var DownRight = false; if (ConnectTo.Count > 0) { Up |= ConnectTo.Contains(level.GetTile(pos.X, pos.Y - 1)); Down |= ConnectTo.Contains(level.GetTile(pos.X, pos.Y + 1)); Left |= ConnectTo.Contains(level.GetTile(pos.X - 1, pos.Y)); Right |= ConnectTo.Contains(level.GetTile(pos.X + 1, pos.Y)); UpLeft |= ConnectTo.Contains(level.GetTile(pos.X - 1, pos.Y - 1)); UpRight |= ConnectTo.Contains(level.GetTile(pos.X + 1, pos.Y - 1)); DownLeft |= ConnectTo.Contains(level.GetTile(pos.X - 1, pos.Y + 1)); DownRight |= ConnectTo.Contains(level.GetTile(pos.X + 1, pos.Y + 1)); } if (!DoNotConnectToMe || (Up || Down || Left || Right || UpLeft || UpRight || DownLeft || DownRight)) { Up |= level.GetTile(pos.X, pos.Y - 1) == Tile; Down |= level.GetTile(pos.X, pos.Y + 1) == Tile; Left |= level.GetTile(pos.X - 1, pos.Y) == Tile; Right |= level.GetTile(pos.X + 1, pos.Y) == Tile; UpLeft |= level.GetTile(pos.X - 1, pos.Y - 1) == Tile; UpRight |= level.GetTile(pos.X + 1, pos.Y - 1) == Tile; DownLeft |= level.GetTile(pos.X - 1, pos.Y + 1) == Tile; DownRight |= level.GetTile(pos.X + 1, pos.Y + 1) == Tile; } var connections = new TileConnection(Tile, Up, Down, Left, Right, UpLeft, UpRight, DownLeft, DownRight); level.SetTileConnection(pos, connections); return(connections); }
public void SendConnectToInstance(ConnectToSerial serial) { var instanceAddress = Global.WorldMgr.GetRealm().GetAddressForClient(System.Net.IPAddress.Parse(GetRemoteAddress())); instanceAddress.Port = WorldConfig.GetIntValue(WorldCfg.PortInstance); _instanceConnectKey.AccountId = GetAccountId(); _instanceConnectKey.connectionType = ConnectionType.Instance; _instanceConnectKey.Key = RandomHelper.URand(0, 0x7FFFFFFF); ConnectTo connectTo = new ConnectTo(); connectTo.Key = _instanceConnectKey.Raw; connectTo.Serial = serial; connectTo.Payload.Where = instanceAddress; connectTo.Con = (byte)ConnectionType.Instance; SendPacket(connectTo); }
public void _Connect(ZYNetServer Server, ReadBytes read, ZYNetSession session) { long ToId; if (read.ReadInt64(out ToId)) { if (Server.SessionDiy.ContainsKey(ToId) && !string.IsNullOrEmpty(session.WANIP) && session.WANPort != 0) { ZYNetSession toUser = Server.SessionDiy[ToId]; if (toUser.Group != session.Group) { return; } if (!session.WANIP.Equals(toUser.WANIP)) //如果不再一个局域网内 { ConnectTo tmp = new ConnectTo() { Id = session.Id, Host = session.WANIP, Port = session.WANPort, IsSuccess = true }; Server.Send(toUser, BufferFormat.FormatFCA(tmp)); } else //同局域网内 { ConnectTo tmp = new ConnectTo() { Id = session.Id, Host = session.LANIP, Port = session.NatNextPort, IsSuccess = true }; Server.Send(toUser, BufferFormat.FormatFCA(tmp)); } } } }
public static async void SendConnectTo(CharacterSession session, string ip, ushort port, byte connection = 0) { var connectTo = new ConnectTo { Key = Manager.Redirect.CreateRedirectKey(session.GameAccount.Id), Serial = 0xE, Con = connection }; // Fail if (connectTo.Key == 0) { session.Dispose(); return; } var payloadData = new byte[0xFF]; var ipBytes = IPAddress.Parse(ip).GetAddressBytes(); // 0 - 15, Address, IPv6 not supported for now payloadData[0] = ipBytes[0]; payloadData[1] = ipBytes[1]; payloadData[2] = ipBytes[2]; payloadData[3] = ipBytes[3]; // 16 payloadData[16] = 0x01; // 17 - 20, adler32, changes with compression seed. // Let's use a static one for now payloadData[17] = 0x43; payloadData[18] = 0xfd; payloadData[19] = 0xb8; payloadData[20] = 0x22; // 21 payloadData[21] = 0x2A; var portBytes = BitConverter.GetBytes(port); // 22 - 23, Port payloadData[22] = portBytes[0]; payloadData[23] = portBytes[1]; var msg = "Blossom opens above\nSpines rising to the air\nArctium grows stronger\n\0\0\0\0"; // 24 - 94, Haiku Array.Copy(Encoding.ASCII.GetBytes(msg), 0, payloadData, 24, 71); // 94 - 125, static for now... Array.Copy(new byte[] { 0xD6, 0xAC, 0x21, 0xE6, 0xB2, 0x7B, 0x06, 0x3D, 0xA9, 0x9C, 0x09, 0x4B, 0xC7, 0x30, 0x48, 0x34, 0xD4, 0xF0, 0x55, 0x3B, 0x1B, 0x1D, 0xC9, 0x5B, 0xFD, 0x3C, 0xB9, 0x30, 0x9D, 0xF5, 0x40, 0xC0 }, 0, payloadData, 94, 32); // 126 - 233, 0 for now Array.Copy(new byte[108], 0, payloadData, 126, 108); // 234 - 253, ranodm for now Array.Copy(new byte[0].GenerateRandomKey(20), 0, payloadData, 234, 20); var dataOrder = new byte[payloadData.Length]; for (var i = 0; i < payloadData.Length; i++) { dataOrder[i] = payloadData[ConnectTo.PayloadOrder[i]]; } var encrypted = Manager.Redirect.Crypt.Encrypt(dataOrder); Array.Copy(encrypted, connectTo.Where, 0x100); await session.Send(connectTo); }
private void connectToToolStripMenuItem_Click(object sender, EventArgs e) { ConnectTo connectTo = new ConnectTo(this); connectTo.Show(); }