From e819603432e7669da20066ab5afdb1cd33c7cfe1 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Wed, 4 Oct 2017 10:25:16 -0400 Subject: [PATCH] Added new search packets. --- .../FFXIVClassic Map Server.csproj | 3 + .../send/search/ItemSearchClosePacket.cs | 19 +++++++ .../search/PlayerSearchCommentResultPacket.cs | 56 +++++++++++++++++++ .../search/PlayerSearchInfoResultPacket.cs | 56 +++++++++++++++++++ .../packets/send/search/PlayerSearchResult.cs | 24 ++++++++ .../send/search/RetainerResultBodyPacket.cs | 19 +++++++ .../send/search/RetainerResultEndPacket.cs | 20 +++++++ .../send/search/RetainerResultUpdatePacket.cs | 21 +++++++ 8 files changed, 218 insertions(+) create mode 100644 FFXIVClassic Map Server/packets/send/search/ItemSearchClosePacket.cs create mode 100644 FFXIVClassic Map Server/packets/send/search/PlayerSearchCommentResultPacket.cs create mode 100644 FFXIVClassic Map Server/packets/send/search/PlayerSearchInfoResultPacket.cs create mode 100644 FFXIVClassic Map Server/packets/send/search/PlayerSearchResult.cs create mode 100644 FFXIVClassic Map Server/packets/send/search/RetainerResultBodyPacket.cs create mode 100644 FFXIVClassic Map Server/packets/send/search/RetainerResultEndPacket.cs create mode 100644 FFXIVClassic Map Server/packets/send/search/RetainerResultUpdatePacket.cs diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 8b0184f6..29f7a4af 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -264,7 +264,10 @@ + + + diff --git a/FFXIVClassic Map Server/packets/send/search/ItemSearchClosePacket.cs b/FFXIVClassic Map Server/packets/send/search/ItemSearchClosePacket.cs new file mode 100644 index 00000000..794d1e65 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/ItemSearchClosePacket.cs @@ -0,0 +1,19 @@ +using System.IO; +using System.Text; + +using FFXIVClassic.Common; + +namespace FFXIVClassic_Map_Server.packets.send.social +{ + class ItemSearchClosePacket + { + public const ushort OPCODE = 0x01E1; + public const uint PACKET_SIZE = 0x028; + + public static SubPacket BuildPacket(uint sourceActorId, bool isSuccess, string nameToAdd) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + return new SubPacket(OPCODE, sourceActorId, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/search/PlayerSearchCommentResultPacket.cs b/FFXIVClassic Map Server/packets/send/search/PlayerSearchCommentResultPacket.cs new file mode 100644 index 00000000..5edd045c --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/PlayerSearchCommentResultPacket.cs @@ -0,0 +1,56 @@ +using System.IO; +using System.Text; + +using FFXIVClassic.Common; +using System; +using FFXIVClassic_Map_Server.packets.send.search; + +namespace FFXIVClassic_Map_Server.packets.send.social +{ + class PlayerSearchCommentResultPacket + { + public const ushort OPCODE = 0x01E0; + public const uint PACKET_SIZE = 0x288; + + public static SubPacket BuildPacket(uint sourceActorId, uint searchSessionId, byte resultCode, PlayerSearchResult[] results, ref int offset) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + byte count = 0; + + for (int i = offset; i < results.Length; i++) + { + int size = 3 + (Encoding.ASCII.GetByteCount(results[i].comment) >= 597 ? 596 : Encoding.ASCII.GetByteCount(results[i].comment)); + + if (size >= 600) + break; + + count++; + } + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + for (int i = offset; i < count; i++) + { + binWriter.Write((UInt32)searchSessionId); + binWriter.Write((Byte)count); + binWriter.Seek(1, SeekOrigin.Current); + binWriter.Write((Byte)resultCode); + binWriter.Seek(4, SeekOrigin.Current); + + binWriter.Write((Byte)i); + binWriter.Write((UInt16)(Encoding.ASCII.GetByteCount(results[i].comment) >= 597 ? 596 : Encoding.ASCII.GetByteCount(results[i].comment))); + binWriter.Write(Encoding.ASCII.GetBytes(results[i].comment), 0, Encoding.ASCII.GetByteCount(results[i].comment) >= 597 ? 596 : Encoding.ASCII.GetByteCount(results[i].comment)); + } + } + } + + offset += count; + + return new SubPacket(OPCODE, sourceActorId, data); + } + + } +} diff --git a/FFXIVClassic Map Server/packets/send/search/PlayerSearchInfoResultPacket.cs b/FFXIVClassic Map Server/packets/send/search/PlayerSearchInfoResultPacket.cs new file mode 100644 index 00000000..55e54ed8 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/PlayerSearchInfoResultPacket.cs @@ -0,0 +1,56 @@ +using System.IO; +using System.Text; + +using FFXIVClassic.Common; +using System; +using FFXIVClassic_Map_Server.packets.send.search; + +namespace FFXIVClassic_Map_Server.packets.send.social +{ + class PlayerSearchInfoResultPacket + { + public const ushort OPCODE = 0x01DF; + public const uint PACKET_SIZE = 0x3C8; + + public static SubPacket BuildPacket(uint sourceActorId, uint searchSessionId, byte resultCode, PlayerSearchResult[] results, ref int offset) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + byte count; + + if (results.Length - offset < 8) + count = (byte)(results.Length - offset); + else + count = 8; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + for (int i = offset; i < count; i++) + { + long start = binWriter.BaseStream.Position; + binWriter.Write((Byte)results[i].preferredClass); + binWriter.Write((Byte)0); + binWriter.Write((Byte)results[i].clientLanguage); + binWriter.Write((UInt16)results[i].currentZone); + binWriter.Write((Byte)results[i].initialTown); + binWriter.Write((Byte)0); + binWriter.Write((Byte)results[i].status); + binWriter.Write((Byte)results[i].currentClass); + binWriter.Write((Byte)0); + binWriter.Write(Encoding.ASCII.GetBytes(results[i].name), 0, Encoding.ASCII.GetByteCount(results[i].name) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(results[i].name)); + binWriter.Seek((int)(start + 30), SeekOrigin.Begin); + //classes + binWriter.Seek((int)(start + 30 + 20), SeekOrigin.Begin); + //jobs + } + } + } + + offset += count; + + return new SubPacket(OPCODE, sourceActorId, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/search/PlayerSearchResult.cs b/FFXIVClassic Map Server/packets/send/search/PlayerSearchResult.cs new file mode 100644 index 00000000..9adf6cff --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/PlayerSearchResult.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.search +{ + class PlayerSearchResult + { + public string name; + public string comment; + + public byte preferredClass; + public byte clientLanguage; + public byte initialTown; + public byte status; + public byte currentClass; + public ushort currentZone; + + + + } +} diff --git a/FFXIVClassic Map Server/packets/send/search/RetainerResultBodyPacket.cs b/FFXIVClassic Map Server/packets/send/search/RetainerResultBodyPacket.cs new file mode 100644 index 00000000..4f8fca23 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/RetainerResultBodyPacket.cs @@ -0,0 +1,19 @@ +using System.IO; +using System.Text; + +using FFXIVClassic.Common; + +namespace FFXIVClassic_Map_Server.packets.send.social +{ + class RetainerResultBodyPacket + { + public const ushort OPCODE = 0x01DB; + public const uint PACKET_SIZE = 0x028; + + public static SubPacket BuildPacket(uint sourceActorId, bool isSuccess, string nameToAdd) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + return new SubPacket(OPCODE, sourceActorId, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/search/RetainerResultEndPacket.cs b/FFXIVClassic Map Server/packets/send/search/RetainerResultEndPacket.cs new file mode 100644 index 00000000..d8dabd24 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/RetainerResultEndPacket.cs @@ -0,0 +1,20 @@ +using System.IO; +using System.Text; + +using FFXIVClassic.Common; + +namespace FFXIVClassic_Map_Server.packets.send.social +{ + class RetainerResultEndPacket + { + public const ushort OPCODE = 0x01DA; + public const uint PACKET_SIZE = 0x038; + + public static SubPacket BuildPacket(uint sourceActorId, bool isSuccess) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + data[16] = (byte) (isSuccess ? 1 : 0); + return new SubPacket(OPCODE, sourceActorId, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/search/RetainerResultUpdatePacket.cs b/FFXIVClassic Map Server/packets/send/search/RetainerResultUpdatePacket.cs new file mode 100644 index 00000000..aa7f510a --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/search/RetainerResultUpdatePacket.cs @@ -0,0 +1,21 @@ +using System.IO; +using System.Text; +using System; +using FFXIVClassic.Common; +using FFXIVClassic_Map_Server.packets.send.search; +using System.Collections.Generic; + +namespace FFXIVClassic_Map_Server.packets.send.social +{ + class RetainerResultUpdatePacket + { + public const ushort OPCODE = 0x01DC; + public const uint PACKET_SIZE = 0x028; + + public static SubPacket BuildPacket(uint sourceActorId, bool isSuccess, string nameToAdd) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + return new SubPacket(OPCODE, sourceActorId, data); + } + } +}