Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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));
                    }
                }
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 private void connectToToolStripMenuItem_Click(object sender, EventArgs e)
 {
     ConnectTo connectTo = new ConnectTo(this);
     connectTo.Show();
 }