diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 0b02bf82..423b3b74 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -21,6 +21,7 @@ using FFXIVClassic_Map_Server; using FFXIVClassic_Map_Server.packets.send.script; using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.dataobjects.chara; +using FFXIVClassic_Map_Server.packets.send.supportdesk; namespace FFXIVClassic_Lobby_Server { @@ -334,7 +335,32 @@ namespace FFXIVClassic_Lobby_Server break; case 0x012F: subpacket.debugPrintSubPacket(); - + break; + /* SUPPORT DESK STUFF */ + //Request for FAQ/Info List + case 0x01D0: + subpacket.debugPrintSubPacket(); + client.queuePacket(BasePacket.createPacket(FaqListResponsePacket.buildPacket(player.actorID, new string[]{"Testing FAQ1", "Coded style!"}), true, false)); + break; + //Request for body of a faq/info selection + case 0x01D1: + client.queuePacket(BasePacket.createPacket(FaqBodyResponsePacket.buildPacket(player.actorID, "HERE IS A GIANT BODY. Nothing else to say!"), true, false)); + subpacket.debugPrintSubPacket(); + break; + //Request issue list + case 0x01D2: + client.queuePacket(BasePacket.createPacket(IssueListResponsePacket.buildPacket(player.actorID, new string[] { "Test1", "Test2", "Test3", "Test4", "Test5"}), true, false)); + subpacket.debugPrintSubPacket(); + break; + //Request for GM response message + case 0x01D4: + client.queuePacket(BasePacket.createPacket(GMTicketPacket.buildPacket(player.actorID, "This is a GM Ticket Title", "This is a GM Ticket Body."), true, false)); + subpacket.debugPrintSubPacket(); + break; + //Request to end ticket + case 0x01D6: + client.queuePacket(BasePacket.createPacket(EndGMTicketPacket.buildPacket(player.actorID), true, false)); + subpacket.debugPrintSubPacket(); break; default: Log.debug(String.Format("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode)); diff --git a/FFXIVClassic Map Server/packets/send/supportdesk/EndGMTicketPacket.cs b/FFXIVClassic Map Server/packets/send/supportdesk/EndGMTicketPacket.cs index 0f61edc4..676f53f9 100644 --- a/FFXIVClassic Map Server/packets/send/supportdesk/EndGMTicketPacket.cs +++ b/FFXIVClassic Map Server/packets/send/supportdesk/EndGMTicketPacket.cs @@ -12,9 +12,10 @@ namespace FFXIVClassic_Map_Server.packets.send.supportdesk public const ushort OPCODE = 0x01D6; public const uint PACKET_SIZE = 0x28; - public static SubPacket buildPacket(uint playerActorID, bool wasSent) + public static SubPacket buildPacket(uint playerActorID) { byte[] data = new byte[PACKET_SIZE - 0x20]; + data[0] = 1; return new SubPacket(OPCODE, playerActorID, playerActorID, data); } } diff --git a/FFXIVClassic Map Server/packets/send/supportdesk/IssueListResponsePacket.cs b/FFXIVClassic Map Server/packets/send/supportdesk/IssueListResponsePacket.cs new file mode 100644 index 00000000..fad44d70 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/supportdesk/IssueListResponsePacket.cs @@ -0,0 +1,35 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.supportdesk +{ + class IssueListResponsePacket + { + public const ushort OPCODE = 0x01D2; + public const uint PACKET_SIZE = 0x160; + + public static SubPacket buildPacket(uint playerActorID, string[] issueStrings) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + for (int i = 0; i < (issueStrings.Length <= 5 ? issueStrings.Length : 5); i++) + { + binWriter.Seek(0x40 * i, SeekOrigin.Begin); + binWriter.Write(Encoding.ASCII.GetBytes(issueStrings[i]), 0, Encoding.ASCII.GetByteCount(issueStrings[i]) >= 0x40 ? 0x40 : Encoding.ASCII.GetByteCount(issueStrings[i])); + } + } + } + + return new SubPacket(OPCODE, playerActorID, playerActorID, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/supportdesk/StartGMTicketPacket.cs b/FFXIVClassic Map Server/packets/send/supportdesk/StartGMTicketPacket.cs new file mode 100644 index 00000000..d9b05131 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/supportdesk/StartGMTicketPacket.cs @@ -0,0 +1,22 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.supportdesk +{ + class StartGMTicketPacket + { + public const ushort OPCODE = 0x01D3; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + data[0] = 1; + return new SubPacket(OPCODE, playerActorID, playerActorID, data); + } + } +}