For example, what "ID" / int do you use for 1 hair. You might be using wrong ids. Because the second command packet that you last posted seems to be fine.
as for this
unsafe public static byte[] Packet(Characters Character)
{
ushort PacketType = 0x3f6;
byte[] Packet = new byte[85 + Character.PlayerName.Length];
fixed (byte* Ptr = Packet)
{
*((ushort*)(Ptr)) = (ushort)Packet.Length;
*((ushort*)(Ptr + 2)) = (ushort)PacketType;
*((uint*)(Ptr + 4)) = (uint)Character.PlayerID;
*((uint*)(Ptr + 8)) = (uint)Character.Model;
*((uint*)(Ptr + 12)) = (uint)Character.Status;
*((ushort*)(Ptr + 20)) = (ushort)Character.Guild.GuildID;
*((byte*)(Ptr + 23)) = (byte)Character.GuildPosition;
if (Character.Equipment[Convert.ToInt32(ItemType.Garment)] != null)
*((uint*)(Ptr + 24)) = (uint)Character.Equipment[Convert.ToInt32(ItemType.Garment)].ItemID;
if (Character.Equipment[Convert.ToInt32(ItemType.Helm)] != null)
*((uint*)(Ptr + 28)) = (uint)Character.Equipment[Convert.ToInt32(ItemType.Helm)].ItemID;
if (Character.Equipment[Convert.ToInt32(ItemType.Armor)] != null)
*((uint*)(Ptr + 32)) = (uint)Character.Equipment[Convert.ToInt32(ItemType.Armor)].ItemID;
if (Character.Equipment[Convert.ToInt32(ItemType.RightHand)] != null)
*((uint*)(Ptr + 36)) = (uint)Character.Equipment[Convert.ToInt32(ItemType.RightHand)].ItemID;
if (Character.Equipment[Convert.ToInt32(ItemType.LeftHand)] != null)
*((uint*)(Ptr + 40)) = (uint)Character.Equipment[Convert.ToInt32(ItemType.LeftHand)].ItemID;
*((ushort*)(Ptr + 52)) = (ushort)Character.PosX;
*((ushort*)(Ptr + 54)) = (ushort)Character.PosY;
*((ushort*)(Ptr + 56)) = (ushort)Character.Hair;
*((byte*)(Ptr + 58)) = (byte)Character.Direction;
*((byte*)(Ptr + 59)) = (byte)Character.Action;
*((byte*)(Ptr + 60)) = (byte)Character.Reborn;
*((byte*)(Ptr + 61)) = 0x00;
*((byte*)(Ptr + 62)) = (byte)Character.Level;
// +17
*((byte*)(Ptr + 80)) = 1;
*((byte*)(Ptr + 81)) = (byte)Character.PlayerName.Length;
for (int i = 0; i < Character.PlayerName.Length; i++)
{
*((byte*)(Ptr + 82 + i)) = Convert.ToByte(Character.PlayerName[i]);
}
}
return Packet;
}
For hair we use like 11 - 41.
For an instance: Hair is used like this: First digit: HairColor, then 2 last digits, hair id.
Might be 835 <- color + hair ID.
If you only want to change your hairstyle your command would look like.
else if (Command[0] == "/hair")
{
if (Command[1] != null || Command[1] != "")
{
Character.Hair = Convert.ToInt32(Convert.ToString(Character.Hair[0]) + Command[1])) ;
Con.Send(SpawnPlayer.Packet(Character));
}
}
Hope this helped?