diff --git a/FFXIVClassic Map Server/packets/receive/EndScriptPacket.cs b/FFXIVClassic Map Server/packets/receive/EndScriptPacket.cs index 9c028e4f..60e71365 100644 --- a/FFXIVClassic Map Server/packets/receive/EndScriptPacket.cs +++ b/FFXIVClassic Map Server/packets/receive/EndScriptPacket.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace FFXIVClassic_Map_Server.packets.send.script { - class EndScriptPacket + class ScriptEndPacket { } } diff --git a/FFXIVClassic Map Server/packets/receive/script/CommandStartRequestPacket.cs b/FFXIVClassic Map Server/packets/receive/script/CommandStartRequestPacket.cs new file mode 100644 index 00000000..3d61322c --- /dev/null +++ b/FFXIVClassic Map Server/packets/receive/script/CommandStartRequestPacket.cs @@ -0,0 +1,49 @@ +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.script +{ + class CommandStartRequestPacket + { + bool invalidPacket = false; + + public uint actorID; + public uint scriptOwnerActorID; + public uint val1; + public uint val2; + public string callbackName; + + public CommandStartRequestPacket(byte[] data) + { + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryReader binReader = new BinaryReader(mem)) + { + try{ + actorID = binReader.ReadUInt32(); + scriptOwnerActorID = binReader.ReadUInt32(); + val1 = binReader.ReadUInt32(); + val2 = binReader.ReadUInt32(); + binReader.ReadByte(); + + while (true) + { + byte inByte = binReader.ReadByte(); + if (inByte == 0) + break; + callbackName += (char)inByte; + } + + } + catch (Exception){ + invalidPacket = true; + } + } + } + } + } +} diff --git a/FFXIVClassic Map Server/packets/receive/script/ScriptResultPacket.cs b/FFXIVClassic Map Server/packets/receive/script/ScriptResultPacket.cs new file mode 100644 index 00000000..2f0ce8a1 --- /dev/null +++ b/FFXIVClassic Map Server/packets/receive/script/ScriptResultPacket.cs @@ -0,0 +1,42 @@ +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.script +{ + class ScriptResultPacket + { + bool invalidPacket = false; + + public uint actorID; + public uint val1; + public uint val2; + public uint val3; + public uint val4; + public uint val5; + + public ScriptResultPacket(byte[] data) + { + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryReader binReader = new BinaryReader(mem)) + { + try{ + actorID = binReader.ReadUInt32(); + val1 = binReader.ReadUInt32(); + val2 = binReader.ReadUInt32(); + val3 = binReader.ReadUInt32(); + val4 = binReader.ReadUInt32(); + val5 = binReader.ReadUInt32(); + } + catch (Exception){ + invalidPacket = true; + } + } + } + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/script/ScriptEndPacket.cs b/FFXIVClassic Map Server/packets/send/script/ScriptEndPacket.cs new file mode 100644 index 00000000..d08cac0d --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/script/ScriptEndPacket.cs @@ -0,0 +1,34 @@ +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.script +{ + class ScriptEndPacket + { + public const ushort OPCODE = 0x0131; + public const uint PACKET_SIZE = 0x50; + + public static SubPacket buildPacket(uint playerActorID, string startName) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + binWriter.Write((uint)playerActorID); + binWriter.Write((uint)0); + binWriter.Write((byte)0); + binWriter.Write(Encoding.Unicode.GetBytes(startName)); + } + } + + return new SubPacket(OPCODE, playerActorID, playerActorID, data); + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/script/ScriptStartPacket.cs b/FFXIVClassic Map Server/packets/send/script/ScriptStartPacket.cs new file mode 100644 index 00000000..31a1680a --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/script/ScriptStartPacket.cs @@ -0,0 +1,52 @@ +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.script +{ + class ScriptStartPacket + { + public const ushort OPCODE = 0x0130; + public const uint PACKET_SIZE = 0xB0; + + //Known types + public const byte TYPE_END = 0xF; + public const byte TYPE_UINT = 0x6; + public const byte TYPE_BYTE = 0x5; + public const byte TYPE_STRING = 0x2; + public const byte TYPE_STRING_20B = 0x1; + public const byte TYPE_STRING_NULLTERM = 0x0; + + public static SubPacket buildPacket(uint playerActorID, uint scriptOwnerActorID, string startName, string scriptName) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + binWriter.Write((uint)playerActorID); + binWriter.Write((uint)scriptOwnerActorID); + binWriter.Write((byte)1); + binWriter.Write(Encoding.Unicode.GetBytes(startName)); + binWriter.Seek(0x29, SeekOrigin.Begin); + binWriter.Write(Encoding.Unicode.GetBytes(scriptName)); + binWriter.Seek(0x29 + 0x20, SeekOrigin.Begin); + binWriter.Write((byte)6); + + byte[] actorID = BitConverter.GetBytes(playerActorID); + Array.Reverse(actorID); + binWriter.Write(actorID); + + binWriter.Write((byte)0x0F); + } + } + + return new SubPacket(OPCODE, playerActorID, playerActorID, data); + } + } +}