mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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.Actor.inventory
 | |
| {
 | |
|     class SetInitialEquipmentPacket
 | |
|     {
 | |
|         public const ushort OPCODE = 0x014E;
 | |
|         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 SetInitialEquipmentPacket()
 | |
|         {
 | |
|             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<SubPacket> BuildPackets(uint playerActorID)
 | |
|         {            
 | |
|             List<SubPacket> packets = new List<SubPacket>();
 | |
|             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++)
 | |
|             {
 | |
|                 if (equipment[i] == UNEQUIPPED)
 | |
|                     continue;
 | |
| 
 | |
|                 binWriter.Write((UInt16)i);
 | |
|                 binWriter.Write((UInt32)equipment[i]);
 | |
| 
 | |
|                 packetCount++;
 | |
|                 runningCount++;
 | |
| 
 | |
|                 //Create another packet
 | |
|                 if (runningCount >= 8)
 | |
|                 {
 | |
|                     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);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             //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;
 | |
|         }
 | |
| 
 | |
|     }
 | |
| }
 |