示例#1
0
        private static void OnCompressedGump(PacketReader p, PacketHandlerEventArgs e)
        {
            p.Seek(7, SeekOrigin.Begin);
            if (p.ReadUInt32() != 0x776CCCC1)
            {
                return;
            }
            p.Seek(19, SeekOrigin.Begin);
            p.Seek(p.ReadInt32(), SeekOrigin.Current);
            int lines = p.ReadInt32(), cLen = p.ReadInt32(), dLen = p.ReadInt32();

            byte[] buffer = new byte[dLen];
            ZLib.uncompress(buffer, ref dLen, p.CopyBytes(p.Position, cLen - 4), cLen - 4);

            for (int i = 0, pos = 0; i < lines; i++)
            {
                int    strLen = (buffer[pos++] << 8) | buffer[pos++];
                string str    = Encoding.BigEndianUnicode.GetString(buffer, pos, strLen * 2);
                if (str.Trim() == "a sea horse")
                {
                    WorldEx.SendMessage("Sea Horse!!! " + World.Player.Position);
                }
                pos += strLen * 2;
            }
        }
示例#2
0
文件: AFK.cs 项目: WildGenie/RazorEx
        private static void OnCompressedGump(PacketReader p, PacketHandlerEventArgs e)
        {
            p.MoveToData();
            uint sender = p.ReadUInt32();
            uint id     = p.ReadUInt32();

            if (id == responseID)
            {
                _responseSender = sender;
            }
            if (id != compressedID)
            {
                return;
            }
            p.Seek(19, SeekOrigin.Begin);
            p.Seek(p.ReadInt32(), SeekOrigin.Current);
            int lines = p.ReadInt32(), cLen = p.ReadInt32(), dLen = p.ReadInt32();

            if (cLen < 5)
            {
                return;
            }
            byte[] buffer = new byte[dLen];
            ZLib.uncompress(buffer, ref dLen, p.CopyBytes(p.Position, cLen - 4), cLen - 4);
            string afk = string.Empty;

            for (int i = 0, pos = 0; i < lines; i++)
            {
                int    strLen = (buffer[pos++] << 8) | buffer[pos++];
                string str    = Encoding.BigEndianUnicode.GetString(buffer, pos, strLen * 2);
                int    index  = str.IndexOf('>');
                if (index != -1 && index < str.Length - 1)
                {
                    afk += str[index + 1].ToString().ToUpper().Normalize(NormalizationForm.FormD)[0];
                }
                pos += strLen * 2;
            }
            afk = afk.Trim();
            if (afk.Length == 5 && _responseSender != 0)
            {
                /*ClientCommunication.SendToClient(new CloseGump(responseID));
                 * WorldEx.SendToServer(new GumpResponse(responseSender, responseID, 0x310, new int[0], new[] { new GumpTextEntry(0x310, afk) }));
                 * responseSender = 0;*/
                WorldEx.OverHeadMessage(afk);
            }
        }
        byte[] ReadPacked(PacketReader reader)
        {
            int packLength = reader.ReadInt32() - 4;

            if (packLength < 0)
            {
                return(new byte[0]);
            }

            int length = reader.ReadInt32();

            byte[] pack   = reader.ReadBytes(packLength);
            byte[] buffer = new byte[length];

            ZLib.uncompress(buffer, ref length, pack, packLength);

            return(buffer);
        }
示例#4
0
        private static void OnCompressedGump(PacketReader p, PacketHandlerEventArgs e)
        {
            p.Seek(7, SeekOrigin.Begin);
            if (p.ReadUInt32() != 0x1105B263)
            {
                return;
            }

            p.Seek(19, SeekOrigin.Begin);
            p.Seek(p.ReadInt32() + 4, SeekOrigin.Current);
            int cLen = p.ReadInt32(), dLen = p.ReadInt32();

            byte[] buffer = new byte[dLen];
            ZLib.uncompress(buffer, ref dLen, p.CopyBytes(p.Position, cLen - 4), cLen - 4);
            int strLen = (buffer[0] << 8) | buffer[1];

            string[] str = Encoding.BigEndianUnicode.GetString(buffer, 2, strLen * 2).Split(',');

            string[] lat    = str[0].Split('°');
            int      yLat   = int.Parse(lat[0]);
            int      yMins  = int.Parse(lat[1].Split('\'')[0]);
            bool     ySouth = lat[1][lat[1].Length - 1] == 'S';

            string[] lon   = str[1].Split('°');
            int      xLong = int.Parse(lon[0]);
            int      xMins = int.Parse(lon[1].Split('\'')[0]);
            bool     xEast = lon[1][lon[1].Length - 1] == 'E';

            const int xWidth  = 5120;
            const int yHeight = 4096;
            const int xCenter = 1323;
            const int yCenter = 1624;

            double absLong = xLong + ((double)xMins / 60);
            double absLat  = yLat + ((double)yMins / 60);

            if (!xEast)
            {
                absLong = 360.0 - absLong;
            }

            if (!ySouth)
            {
                absLat = 360.0 - absLat;
            }

            int x = xCenter + (int)((absLong * xWidth) / 360);
            int y = yCenter + (int)((absLat * yHeight) / 360);

            if (x < 0)
            {
                x += xWidth;
            }
            else if (x >= xWidth)
            {
                x -= xWidth;
            }

            if (y < 0)
            {
                y += yHeight;
            }
            else if (y >= yHeight)
            {
                y -= yHeight;
            }

            onGump(x, y);
        }