From 67ee70e7c5211c5c8d96cd194fa18c5162e32f8f Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sat, 2 Jan 2016 14:03:28 -0500 Subject: [PATCH] Packet for instantiating actor in lua engine implemented, though first value unknown. --- .../send/Actor/ActorInstantiatePacket.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 FFXIVClassic Map Server/packets/send/Actor/ActorInstantiatePacket.cs diff --git a/FFXIVClassic Map Server/packets/send/Actor/ActorInstantiatePacket.cs b/FFXIVClassic Map Server/packets/send/Actor/ActorInstantiatePacket.cs new file mode 100644 index 00000000..61b1c5a8 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/Actor/ActorInstantiatePacket.cs @@ -0,0 +1,39 @@ +using FFXIVClassic_Lobby_Server.packets; +using FFXIVClassic_Map_Server.lua; +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.actor +{ + class ActorInstantiatePacket + { + public const ushort OPCODE = 0x00CC; + public const uint PACKET_SIZE = 0x128; + + public static SubPacket buildPacket(uint sourceActorID, uint targetActorID, string objectName, string className, List initParams) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + int value = 0; + binWriter.Write((Int32)value); + binWriter.Write(Encoding.ASCII.GetBytes(objectName), 0, Encoding.ASCII.GetByteCount(objectName) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(objectName)); + binWriter.BaseStream.Seek(0x24, SeekOrigin.Begin); + binWriter.Write(Encoding.ASCII.GetBytes(className), 0, Encoding.ASCII.GetByteCount(className) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(className)); + binWriter.BaseStream.Seek(0x44, SeekOrigin.Begin); + LuaUtils.writeLuaParams(binWriter, initParams); + } + } + + return new SubPacket(OPCODE, sourceActorID, targetActorID, data); + } + + } +}