72 lines
2.5 KiB
C#
72 lines
2.5 KiB
C#
using PSO2SERVER.Models;
|
|
|
|
namespace PSO2SERVER.Packets.PSOPackets
|
|
{
|
|
public class CharacterSpawnPacket : Packet
|
|
{
|
|
private readonly Character _character;
|
|
public bool IsItMe = true;
|
|
public PSOLocation Position;
|
|
|
|
public CharacterSpawnPacket(Character character, PSOLocation locatiion)
|
|
{
|
|
_character = character;
|
|
Position = locatiion;
|
|
}
|
|
|
|
public CharacterSpawnPacket(Character character, PSOLocation locatiion, bool isme)
|
|
{
|
|
_character = character;
|
|
IsItMe = isme;
|
|
Position = locatiion;
|
|
}
|
|
|
|
#region implemented abstract members of Packet
|
|
|
|
public override byte[] Build()
|
|
{
|
|
var writer = new PacketWriter();
|
|
|
|
// Player header
|
|
writer.WritePlayerHeader((uint) _character.Player.PlayerId);
|
|
|
|
// Spawn position
|
|
writer.Write(Position);
|
|
|
|
writer.Write((ushort) 0); // padding?
|
|
writer.WriteFixedLengthASCII("Character", 32);
|
|
writer.Write((ushort) 1); // 0x44
|
|
writer.Write((ushort) 0); // 0x46
|
|
writer.Write((uint) 602); // 0x48
|
|
writer.Write((uint) 1); // 0x4C
|
|
writer.Write((uint) 53); // 0x50
|
|
writer.Write((uint) 0); // 0x54
|
|
writer.Write((uint) (IsItMe ? 47 : 39)); // 0x58
|
|
writer.Write((ushort) 559); // 0x5C
|
|
writer.Write((ushort) 306); // 0x5E
|
|
writer.Write((uint) _character.Player.PlayerId); // player ID copy
|
|
writer.Write((uint) 0); // "char array ugggghhhhh" according to PolarisLegacy
|
|
writer.Write((uint) 0); // "voiceParam_unknown4"
|
|
writer.Write((uint) 0); // "voiceParam_unknown8"
|
|
writer.WriteFixedLengthUtf16(_character.Name, 16);
|
|
writer.Write((uint) 0); // 0x90
|
|
writer.WriteStruct(_character.Looks);
|
|
writer.WriteStruct(_character.Jobs);
|
|
writer.WriteFixedLengthUtf16("", 32); // title?
|
|
writer.Write((uint) 0); // 0x204
|
|
writer.Write((uint) 0); // gmflag?
|
|
writer.WriteFixedLengthUtf16(_character.Player.Nickname, 16); // nickname, maybe not 16 chars?
|
|
for (var i = 0; i < 64; i++)
|
|
writer.Write((byte) 0);
|
|
|
|
return writer.ToArray();
|
|
}
|
|
|
|
public override PacketHeader GetHeader()
|
|
{
|
|
return new PacketHeader(0x08, 0x04);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |