Looking at
they already give you the most basic scenario for this packet. It is prone to errors as it does not check for any types/flags but maybe this helps to begin with.
Code:
public static byte[] Party_DataMember(party p)
{
//Create new packet writer
PacketWriter Writer = new PacketWriter();
//Add opcode
Writer.Create(Systems.SERVER_PARTYMEMBER_DATA);
//Write static byte
Writer.Byte(0xFF);
//Write party id
Writer.DWord(p.ptid);
//Write leader id
Writer.DWord(p.LeaderID);
//Write byte party type
Writer.Byte(p.Type);
//Write total amount of members in party
Writer.Byte(p.Members.Count);
//Repeat for each member in party -1
for (byte b = 0; b <= p.Members.Count -1; b++)
{
//Get player detail information
Systems PartyMemberInfo = Systems.GetPlayer(p.Members[b]);
//Calculate hp and mp
int partyPercentMP = (int)Math.Round((decimal)(PartyMemberInfo.Character.Stat.SecondMP * 10) / PartyMemberInfo.Character.Stat.Mp) << 4;
int partyPercentHP = (int)Math.Round((decimal)(PartyMemberInfo.Character.Stat.SecondHp * 10) / PartyMemberInfo.Character.Stat.Hp);
//Set percent
int partyPercent = partyPercentHP | partyPercentMP;
//Write static byte
Writer.Byte(0xff);
//Write unique member id
Writer.DWord(PartyMemberInfo.Character.Information.UniqueID);
//Write character name
Writer.Text(PartyMemberInfo.Character.Information.Name);
//Write character model
Writer.DWord(PartyMemberInfo.Character.Information.Model);
//Write character level
Writer.Byte(PartyMemberInfo.Character.Information.Level);
//Write stat hp mp information
Writer.Byte((byte)partyPercent);
//Write x and y sector
Writer.Byte(PartyMemberInfo.Character.Position.xSec);
Writer.Byte(PartyMemberInfo.Character.Position.ySec);
//Write x z y
Writer.Word(Formule.packetx(PartyMemberInfo.Character.Position.x, PartyMemberInfo.Character.Position.xSec));
Writer.Word(PartyMemberInfo.Character.Position.z);
Writer.Word(Formule.packety(PartyMemberInfo.Character.Position.y, PartyMemberInfo.Character.Position.ySec));
//Write double word 1
Writer.Word(1);
Writer.Word(1);
//If player has a guild
if (PartyMemberInfo.Character.Network.Guild.Name != null)
//Write guild name
Writer.Text(PartyMemberInfo.Character.Network.Guild.Name);
//If player has no guild
else
//Write word 0 value
Writer.Word(0);
//Write static byte
Writer.Byte(0);
//Write dword
Writer.DWord(0);
Writer.DWord(0);
}
//Return all bytes for sending
return Writer.GetBytes();
}