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; } }
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); }
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); }