diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index f6f00e66..119442b4 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -65,6 +65,7 @@
+
diff --git a/FFXIVClassic Map Server/actors/chara/player/Equipment.cs b/FFXIVClassic Map Server/actors/chara/player/Equipment.cs
new file mode 100644
index 00000000..a3dbd470
--- /dev/null
+++ b/FFXIVClassic Map Server/actors/chara/player/Equipment.cs
@@ -0,0 +1,113 @@
+using FFXIVClassic_Map_Server.Actors;
+using FFXIVClassic_Map_Server.dataobjects;
+using FFXIVClassic_Map_Server.packets.send.Actor.inventory;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FFXIVClassic_Map_Server.actors.chara.player
+{
+ class Equipment
+ {
+ public const int SLOT_MAINHAND = 0x00;
+ public const int SLOT_OFFHAND = 0x01;
+ public const int SLOT_THROWINGWEAPON = 0x04;
+ public const int SLOT_PACK = 0x05;
+ public const int SLOT_POUCH = 0x06;
+ public const int SLOT_HEAD = 0x08;
+ public const int SLOT_UNDERSHIRT = 0x09;
+ public const int SLOT_BODY = 0x0A;
+ public const int SLOT_UNDERGARMENT = 0x0B;
+ public const int SLOT_LEGS = 0x0C;
+ public const int SLOT_HANDS = 0x0D;
+ public const int SLOT_BOOTS = 0x0E;
+ public const int SLOT_WAIST = 0x0F;
+ public const int SLOT_NECK = 0x10;
+ public const int SLOT_EARS = 0x11;
+ public const int SLOT_WRISTS = 0x13;
+ public const int SLOT_RIGHTFINGER = 0x15;
+ public const int SLOT_LEFTFINGER = 0x16;
+
+ private Player owner;
+ private ushort inventoryCapacity;
+ private ushort inventoryCode;
+ private Item[] list;
+
+ public Equipment(Player ownerPlayer, ushort capacity, ushort code)
+ {
+ owner = ownerPlayer;
+ inventoryCapacity = capacity;
+ inventoryCode = code;
+ }
+
+ public Item GetItemAtSlot(ushort slot)
+ {
+ if (slot < list.Length)
+ return list[slot];
+ else
+ return null;
+ }
+
+ public void SetEquipment(List> toEquip)
+ {
+ List slotsToUpdate = new List();
+ for (int i = 0; i < toEquip.Count; i++)
+ {
+ slotsToUpdate.Add(toEquip[i].Item1);
+ list[toEquip[i].Item1] = toEquip[i].Item2;
+ }
+
+ SendEquipmentPackets(slotsToUpdate);
+ }
+
+ public void Equip(ushort slot, Item item)
+ {
+ if (slot < list.Length)
+ list[slot] = item;
+ SendEquipmentPackets(slot, item);
+ }
+
+ public void Unequip(ushort slot)
+ {
+ if (slot < list.Length)
+ list[slot] = null;
+ SendEquipmentPackets(slot, null);
+ }
+
+ private void SendEquipmentPackets(ushort equipSlot, Item item)
+ {
+ if (item == null)
+ owner.queuePacket(EquipmentListX01Packet.buildPacket(owner.actorId, equipSlot, 0));
+ else
+ owner.queuePacket(EquipmentListX01Packet.buildPacket(owner.actorId, equipSlot, item.slot));
+ }
+
+ private void SendEquipmentPackets(List slotsToUpdate)
+ {
+ int currentIndex = 0;
+
+ while (true)
+ {
+ if (list.Length - currentIndex >= 64)
+ owner.queuePacket(EquipmentListX64Packet.buildPacket(owner.actorId, list, slotsToUpdate, ref currentIndex));
+ else if (list.Length - currentIndex >= 32)
+ owner.queuePacket(EquipmentListX32Packet.buildPacket(owner.actorId, list, slotsToUpdate, ref currentIndex));
+ else if (list.Length - currentIndex >= 16)
+ owner.queuePacket(EquipmentListX16Packet.buildPacket(owner.actorId, list, slotsToUpdate, ref currentIndex));
+ else if (list.Length - currentIndex > 1)
+ owner.queuePacket(EquipmentListX08Packet.buildPacket(owner.actorId, list, slotsToUpdate, ref currentIndex));
+ else if (list.Length - currentIndex == 1)
+ {
+ owner.queuePacket(EquipmentListX01Packet.buildPacket(owner.actorId, slotsToUpdate[currentIndex], list[currentIndex].slot));
+ currentIndex++;
+ }
+ else
+ break;
+ }
+
+ }
+
+ }
+}
diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs
index 9a606dd9..7e43dc79 100644
--- a/FFXIVClassic Map Server/actors/chara/player/Player.cs
+++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs
@@ -581,12 +581,12 @@ namespace FFXIVClassic_Map_Server.Actors
public void sendChocoboAppearance()
{
- queuePacket(SetCurrentMountChocoboPacket.buildPacket(actorId, chocoboAppearance));
+ broadcastPacket(SetCurrentMountChocoboPacket.buildPacket(actorId, chocoboAppearance), true);
}
public void sendGoobbueAppearance()
{
- queuePacket(SetCurrentMountGoobbuePacket.buildPacket(actorId, 1));
+ broadcastPacket(SetCurrentMountGoobbuePacket.buildPacket(actorId, 1), true);
}
public void setMountState(byte mountState)
diff --git a/FFXIVClassic Map Server/packets/BasePacket.cs b/FFXIVClassic Map Server/packets/BasePacket.cs
index a56f9768..9e9c9c48 100644
--- a/FFXIVClassic Map Server/packets/BasePacket.cs
+++ b/FFXIVClassic Map Server/packets/BasePacket.cs
@@ -163,7 +163,7 @@ namespace FFXIVClassic_Lobby_Server.packets
while (binreader.BaseStream.Position + 4 < data.Length)
{
uint read = binreader.ReadUInt32();
- if (read == 0x029B2941 || read == 0x02977DC7 || read == 0x0297D2C8 || read == 0x0230d573 || read == 0x23317df || read == 0x23344a3 || read == 0x1730bdb) //Original ID
+ if (read == 0x029B2941 || read == 0x02977DC7 || read == 0x0297D2C8 || read == 0x0230d573 || read == 0x23317df || read == 0x23344a3 || read == 0x1730bdb || read == 0x6c) //Original ID
{
binWriter.BaseStream.Seek(binreader.BaseStream.Position - 0x4, SeekOrigin.Begin);
binWriter.Write(actorID);
diff --git a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX01Packet.cs b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX01Packet.cs
index ec40f23a..44422757 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX01Packet.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX01Packet.cs
@@ -13,7 +13,7 @@ namespace FFXIVClassic_Map_Server.packets.send.Actor.inventory
public const ushort OPCODE = 0x014D;
public const uint PACKET_SIZE = 0x28;
- public static SubPacket buildPacket(uint playerActorID, ushort slot, uint itemSlot)
+ public static SubPacket buildPacket(uint playerActorID, ushort equipSlot, uint itemSlot)
{
byte[] data = new byte[PACKET_SIZE - 0x20];
@@ -21,7 +21,7 @@ namespace FFXIVClassic_Map_Server.packets.send.Actor.inventory
{
using (BinaryWriter binWriter = new BinaryWriter(mem))
{
- binWriter.Write((UInt16)slot);
+ binWriter.Write((UInt16)equipSlot);
binWriter.Write((UInt32)itemSlot);
}
}
diff --git a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX08Packet.cs b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX08Packet.cs
index 81b0c635..a2e71b73 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX08Packet.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX08Packet.cs
@@ -1,4 +1,5 @@
using FFXIVClassic_Lobby_Server.packets;
+using FFXIVClassic_Map_Server.dataobjects;
using System;
using System.Collections.Generic;
using System.IO;
@@ -13,85 +14,33 @@ namespace FFXIVClassic_Map_Server.packets.send.Actor.inventory
public const ushort OPCODE = 0x14E;
public const uint PACKET_SIZE = 0x58;
- public const uint UNEQUIPPED = 0xFFFFFFFF;
-
- public const int SLOT_MAINHAND = 0x00;
- public const int SLOT_OFFHAND = 0x01;
- public const int SLOT_THROWINGWEAPON = 0x04;
- public const int SLOT_PACK = 0x05;
- public const int SLOT_POUCH = 0x06;
- public const int SLOT_HEAD = 0x08;
- public const int SLOT_UNDERSHIRT = 0x09;
- public const int SLOT_BODY = 0x0A;
- public const int SLOT_UNDERGARMENT = 0x0B;
- public const int SLOT_LEGS = 0x0C;
- public const int SLOT_HANDS = 0x0D;
- public const int SLOT_BOOTS = 0x0E;
- public const int SLOT_WAIST = 0x0F;
- public const int SLOT_NECK = 0x10;
- public const int SLOT_EARS = 0x11;
- public const int SLOT_WRISTS = 0x13;
- public const int SLOT_RIGHTFINGER = 0x15;
- public const int SLOT_LEFTFINGER = 0x16;
-
- private uint[] equipment = new uint[0x17];
-
- public EquipmentListX08Packet()
+ public static SubPacket buildPacket(uint playerActorId, Item[] equipment, List slotsToUpdate, ref int listOffset)
{
- for (int i = 0; i < equipment.Length; i++)
- equipment[i] = UNEQUIPPED; //We will use this as "Unequipped"
- }
-
- public void setItem(int slot, uint itemSlot)
- {
- if (slot >= equipment.Length)
- return;
-
- equipment[slot] = itemSlot;
- }
-
- public List buildPackets(uint playerActorID)
- {
- List packets = new List();
- int packetCount = 0;
- int runningCount = 0;
byte[] data = new byte[PACKET_SIZE - 0x20];
- MemoryStream mem = new MemoryStream(data);
- BinaryWriter binWriter = new BinaryWriter(mem);
- for (int i = 0; i < equipment.Length; i++)
+ using (MemoryStream mem = new MemoryStream(data))
{
- if (equipment[i] == UNEQUIPPED)
- continue;
-
- binWriter.Write((UInt16)i);
- binWriter.Write((UInt32)equipment[i]);
-
- packetCount++;
- runningCount++;
-
- //Create another packet
- if (runningCount >= 8)
+ using (BinaryWriter binWriter = new BinaryWriter(mem))
{
- packetCount = 0;
- binWriter.Write((UInt32)8);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
- data = new byte[PACKET_SIZE - 0x20];
- mem = new MemoryStream(data);
- binWriter = new BinaryWriter(mem);
+ int max;
+ if (slotsToUpdate.Count - listOffset <= 8)
+ max = slotsToUpdate.Count - listOffset;
+ else
+ max = 8;
+
+ for (int i = 0; i < max; i++)
+ {
+ binWriter.Write((UInt16)slotsToUpdate[i]);
+ binWriter.Write((UInt32)equipment[slotsToUpdate[i]].slot);
+ listOffset++;
+ }
+
+ binWriter.Seek(0x30, SeekOrigin.Begin);
+ binWriter.Write((UInt32)max);
}
}
- //Create any leftover subpacket
- binWriter.BaseStream.Seek(0x30, SeekOrigin.Begin);
- binWriter.Write((UInt32)packetCount);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
-
- return packets;
+ return new SubPacket(OPCODE, playerActorId, playerActorId, data);
}
}
diff --git a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX16Packet.cs b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX16Packet.cs
index 40d254e0..e0fb3d16 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX16Packet.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX16Packet.cs
@@ -1,4 +1,5 @@
using FFXIVClassic_Lobby_Server.packets;
+using FFXIVClassic_Map_Server.dataobjects;
using System;
using System.Collections.Generic;
using System.IO;
@@ -13,85 +14,31 @@ namespace FFXIVClassic_Map_Server.packets.send.Actor.inventory
public const ushort OPCODE = 0x14F;
public const uint PACKET_SIZE = 0x80;
- public const uint UNEQUIPPED = 0xFFFFFFFF;
-
- public const int SLOT_MAINHAND = 0x00;
- public const int SLOT_OFFHAND = 0x01;
- public const int SLOT_THROWINGWEAPON = 0x04;
- public const int SLOT_PACK = 0x05;
- public const int SLOT_POUCH = 0x06;
- public const int SLOT_HEAD = 0x08;
- public const int SLOT_UNDERSHIRT = 0x09;
- public const int SLOT_BODY = 0x0A;
- public const int SLOT_UNDERGARMENT = 0x0B;
- public const int SLOT_LEGS = 0x0C;
- public const int SLOT_HANDS = 0x0D;
- public const int SLOT_BOOTS = 0x0E;
- public const int SLOT_WAIST = 0x0F;
- public const int SLOT_NECK = 0x10;
- public const int SLOT_EARS = 0x11;
- public const int SLOT_WRISTS = 0x13;
- public const int SLOT_RIGHTFINGER = 0x15;
- public const int SLOT_LEFTFINGER = 0x16;
-
- private uint[] equipment = new uint[0x17];
-
- public EquipmentListX16Packet()
+ public static SubPacket buildPacket(uint playerActorId, Item[] equipment, List slotsToUpdate, ref int listOffset)
{
- for (int i = 0; i < equipment.Length; i++)
- equipment[i] = UNEQUIPPED; //We will use this as "Unequipped"
- }
-
- public void setItem(int slot, uint itemSlot)
- {
- if (slot >= equipment.Length)
- return;
-
- equipment[slot] = itemSlot;
- }
-
- public List buildPackets(uint playerActorID)
- {
- List packets = new List();
- int packetCount = 0;
- int runningCount = 0;
byte[] data = new byte[PACKET_SIZE - 0x20];
- MemoryStream mem = new MemoryStream(data);
- BinaryWriter binWriter = new BinaryWriter(mem);
- for (int i = 0; i < equipment.Length; i++)
+ using (MemoryStream mem = new MemoryStream(data))
{
- if (equipment[i] == UNEQUIPPED)
- continue;
-
- binWriter.Write((UInt16)i);
- binWriter.Write((UInt32)equipment[i]);
-
- packetCount++;
- runningCount++;
-
- //Create another packet
- if (runningCount >= 16)
+ using (BinaryWriter binWriter = new BinaryWriter(mem))
{
- packetCount = 0;
- binWriter.Write((UInt32)8);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
- data = new byte[PACKET_SIZE - 0x20];
- mem = new MemoryStream(data);
- binWriter = new BinaryWriter(mem);
+ int max;
+ if (slotsToUpdate.Count - listOffset <= 16)
+ max = slotsToUpdate.Count - listOffset;
+ else
+ max = 16;
+
+ for (int i = 0; i < max; i++)
+ {
+ binWriter.Write((UInt16)slotsToUpdate[i]);
+ binWriter.Write((UInt32)equipment[slotsToUpdate[i]].slot);
+ listOffset++;
+ }
+
}
}
- //Create any leftover subpacket
- binWriter.BaseStream.Seek(0x30, SeekOrigin.Begin);
- binWriter.Write((UInt32)packetCount);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
-
- return packets;
+ return new SubPacket(OPCODE, playerActorId, playerActorId, data);
}
}
diff --git a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX32Packet.cs b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX32Packet.cs
index 81350a15..d7b0eba6 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX32Packet.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX32Packet.cs
@@ -1,4 +1,5 @@
using FFXIVClassic_Lobby_Server.packets;
+using FFXIVClassic_Map_Server.dataobjects;
using System;
using System.Collections.Generic;
using System.IO;
@@ -13,86 +14,32 @@ namespace FFXIVClassic_Map_Server.packets.send.Actor.inventory
public const ushort OPCODE = 0x150;
public const uint PACKET_SIZE = 0xE0;
- public const uint UNEQUIPPED = 0xFFFFFFFF;
-
- public const int SLOT_MAINHAND = 0x00;
- public const int SLOT_OFFHAND = 0x01;
- public const int SLOT_THROWINGWEAPON = 0x04;
- public const int SLOT_PACK = 0x05;
- public const int SLOT_POUCH = 0x06;
- public const int SLOT_HEAD = 0x08;
- public const int SLOT_UNDERSHIRT = 0x09;
- public const int SLOT_BODY = 0x0A;
- public const int SLOT_UNDERGARMENT = 0x0B;
- public const int SLOT_LEGS = 0x0C;
- public const int SLOT_HANDS = 0x0D;
- public const int SLOT_BOOTS = 0x0E;
- public const int SLOT_WAIST = 0x0F;
- public const int SLOT_NECK = 0x10;
- public const int SLOT_EARS = 0x11;
- public const int SLOT_WRISTS = 0x13;
- public const int SLOT_RIGHTFINGER = 0x15;
- public const int SLOT_LEFTFINGER = 0x16;
-
- private uint[] equipment = new uint[0x17];
-
- public EquipmentListX32Packet()
+ public static SubPacket buildPacket(uint playerActorId, Item[] equipment, List slotsToUpdate, ref int listOffset)
{
- for (int i = 0; i < equipment.Length; i++)
- equipment[i] = UNEQUIPPED; //We will use this as "Unequipped"
- }
-
- public void setItem(int slot, uint itemSlot)
- {
- if (slot >= equipment.Length)
- return;
-
- equipment[slot] = itemSlot;
- }
-
- public List buildPackets(uint playerActorID)
- {
- List packets = new List();
- int packetCount = 0;
- int runningCount = 0;
byte[] data = new byte[PACKET_SIZE - 0x20];
- MemoryStream mem = new MemoryStream(data);
- BinaryWriter binWriter = new BinaryWriter(mem);
- for (int i = 0; i < equipment.Length; i++)
+ using (MemoryStream mem = new MemoryStream(data))
{
- if (equipment[i] == UNEQUIPPED)
- continue;
-
- binWriter.Write((UInt16)i);
- binWriter.Write((UInt32)equipment[i]);
-
- packetCount++;
- runningCount++;
-
- //Create another packet
- if (runningCount >= 32)
+ using (BinaryWriter binWriter = new BinaryWriter(mem))
{
- packetCount = 0;
- binWriter.Write((UInt32)8);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
- data = new byte[PACKET_SIZE - 0x20];
- mem = new MemoryStream(data);
- binWriter = new BinaryWriter(mem);
+ int max;
+ if (slotsToUpdate.Count - listOffset <= 32)
+ max = slotsToUpdate.Count - listOffset;
+ else
+ max = 32;
+
+ for (int i = 0; i < max; i++)
+ {
+ binWriter.Write((UInt16)slotsToUpdate[i]);
+ binWriter.Write((UInt32)equipment[slotsToUpdate[i]].slot);
+ listOffset++;
+ }
+
}
}
- //Create any leftover subpacket
- binWriter.BaseStream.Seek(0x30, SeekOrigin.Begin);
- binWriter.Write((UInt32)packetCount);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
-
- return packets;
- }
+ return new SubPacket(OPCODE, playerActorId, playerActorId, data);
+ }
}
}
diff --git a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX64Packet.cs b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX64Packet.cs
index ed1e8b2e..88a34f4f 100644
--- a/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX64Packet.cs
+++ b/FFXIVClassic Map Server/packets/send/Actor/inventory/EquipmentListX64Packet.cs
@@ -1,4 +1,5 @@
using FFXIVClassic_Lobby_Server.packets;
+using FFXIVClassic_Map_Server.dataobjects;
using System;
using System.Collections.Generic;
using System.IO;
@@ -13,85 +14,31 @@ namespace FFXIVClassic_Map_Server.packets.send.Actor.inventory
public const ushort OPCODE = 0x151;
public const uint PACKET_SIZE = 0x194;
- public const uint UNEQUIPPED = 0xFFFFFFFF;
-
- public const int SLOT_MAINHAND = 0x00;
- public const int SLOT_OFFHAND = 0x01;
- public const int SLOT_THROWINGWEAPON = 0x04;
- public const int SLOT_PACK = 0x05;
- public const int SLOT_POUCH = 0x06;
- public const int SLOT_HEAD = 0x08;
- public const int SLOT_UNDERSHIRT = 0x09;
- public const int SLOT_BODY = 0x0A;
- public const int SLOT_UNDERGARMENT = 0x0B;
- public const int SLOT_LEGS = 0x0C;
- public const int SLOT_HANDS = 0x0D;
- public const int SLOT_BOOTS = 0x0E;
- public const int SLOT_WAIST = 0x0F;
- public const int SLOT_NECK = 0x10;
- public const int SLOT_EARS = 0x11;
- public const int SLOT_WRISTS = 0x13;
- public const int SLOT_RIGHTFINGER = 0x15;
- public const int SLOT_LEFTFINGER = 0x16;
-
- private uint[] equipment = new uint[0x17];
-
- public EquipmentListX64Packet()
+ public static SubPacket buildPacket(uint playerActorId, Item[] equipment, List slotsToUpdate, ref int listOffset)
{
- for (int i = 0; i < equipment.Length; i++)
- equipment[i] = UNEQUIPPED; //We will use this as "Unequipped"
- }
-
- public void setItem(int slot, uint itemSlot)
- {
- if (slot >= equipment.Length)
- return;
-
- equipment[slot] = itemSlot;
- }
-
- public List buildPackets(uint playerActorID)
- {
- List packets = new List();
- int packetCount = 0;
- int runningCount = 0;
byte[] data = new byte[PACKET_SIZE - 0x20];
- MemoryStream mem = new MemoryStream(data);
- BinaryWriter binWriter = new BinaryWriter(mem);
- for (int i = 0; i < equipment.Length; i++)
+ using (MemoryStream mem = new MemoryStream(data))
{
- if (equipment[i] == UNEQUIPPED)
- continue;
-
- binWriter.Write((UInt16)i);
- binWriter.Write((UInt32)equipment[i]);
-
- packetCount++;
- runningCount++;
-
- //Create another packet
- if (runningCount >= 64)
+ using (BinaryWriter binWriter = new BinaryWriter(mem))
{
- packetCount = 0;
- binWriter.Write((UInt32)8);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
- data = new byte[PACKET_SIZE - 0x20];
- mem = new MemoryStream(data);
- binWriter = new BinaryWriter(mem);
+ int max;
+ if (slotsToUpdate.Count - listOffset <= 64)
+ max = slotsToUpdate.Count - listOffset;
+ else
+ max = 64;
+
+ for (int i = 0; i < max; i++)
+ {
+ binWriter.Write((UInt16)slotsToUpdate[i]);
+ binWriter.Write((UInt32)equipment[slotsToUpdate[i]].slot);
+ listOffset++;
+ }
+
}
}
- //Create any leftover subpacket
- binWriter.BaseStream.Seek(0x30, SeekOrigin.Begin);
- binWriter.Write((UInt32)packetCount);
- binWriter.Dispose();
- mem.Dispose();
- packets.Add(new SubPacket(OPCODE, playerActorID, playerActorID, data));
-
- return packets;
+ return new SubPacket(OPCODE, playerActorId, playerActorId, data);
}
}