using PSO2SERVER.Models; using PSO2SERVER.Zone; using System; using System.Collections.Generic; using System.Linq; using System.Text; using static PSO2SERVER.Models.PSOObject; namespace PSO2SERVER.Protocol.Packets { public class EventSpawnPacket : Packet { public readonly PSOObject _obj; public ObjectHeader objHeader { get; set; } = new ObjectHeader(); public PSOLocation objPosition { get; set; } = new PSOLocation(); public ushort unk1 { get; set; } = 0; public string objName { get; set; } = string.Empty; public uint unk3 { get; set; } = 0; public byte[] unk4 { get; set; } = new byte[0x0C]; public ushort unk5 { get; set; } = 0; public ushort unk6 { get; set; } = 0; public uint unk7 { get; set; } = 0; public uint unk8 { get; set; } = 0; public uint unk9 { get; set; } = 0; public uint unk10 { get; set; } = 0; public uint unk11 { get; set; } = 0; public uint unk12 { get; set; } = 0; public uint unk13 { get; set; } = 0; public uint unk14 { get; set; } = 0; public uint flags { get; set; } = 0; /// Event data. public List data { get; set; } = new List(); public EventSpawnPacket(PSOObject obj) { objHeader = obj.Header; objPosition = obj.Position; objName = obj.Name; flags = 4; _obj = obj; } #region implemented abstract members of Packet public override byte[] Build() { var pkt = new PacketWriter(); pkt.WriteStruct(objHeader); pkt.WritePosition(objPosition); pkt.Write(unk1); // Padding? pkt.WriteFixedLengthASCII(objName, 0x20); pkt.Write(unk3); pkt.Write(unk4); pkt.Write(unk5); pkt.Write(unk6); pkt.Write(unk7); pkt.Write(unk8); pkt.Write(unk9); pkt.Write(unk10); pkt.Write(unk11); pkt.Write(unk12); pkt.Write(unk13); pkt.Write(unk14); pkt.Write(flags); pkt.Write(_obj.Things.Length); foreach (PSOObjectThing thing in _obj.Things) { pkt.WriteStruct(thing); } return pkt.ToArray(); } public override PacketHeader GetHeader() { return new PacketHeader(0x08, 0x09, PacketFlags.None); } #endregion } }