fix(core): Fixes packet issues with hair/beard (#669)

This commit is contained in:
Kamron Batman 2021-08-01 19:54:04 -07:00 committed by GitHub
parent ebac984543
commit f78a226321
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 37 deletions

View file

@ -2975,6 +2975,20 @@ namespace Server
sendFacialHair = true;
}
var hairSerial = HairInfo.FakeSerial(Serial);
var hairLength = removeHair
? OutgoingVirtualHairPackets.RemovePacketLength
: OutgoingVirtualHairPackets.EquipUpdatePacketLength;
Span<byte> hairPacket = stackalloc byte[hairLength].InitializePacket();
var facialHairSerial = FacialHairInfo.FakeSerial(Serial);
var facialHairLength = removeFacialHair
? OutgoingVirtualHairPackets.RemovePacketLength
: OutgoingVirtualHairPackets.EquipUpdatePacketLength;
Span<byte> facialhairPacket = stackalloc byte[facialHairLength].InitializePacket();
const int cacheLength = OutgoingMobilePackets.MobileMovingPacketCacheByteLength;
const int width = OutgoingMobilePackets.MobileMovingPacketLength;
const int height = OutgoingMobilePackets.MobileMovingPacketCacheHeight;
@ -3060,24 +3074,41 @@ namespace Server
{
if (removeHair)
{
ourState.SendRemoveHairPacket(HairInfo.FakeSerial(Serial));
OutgoingVirtualHairPackets.CreateRemoveHairPacket(hairPacket, hairSerial);
}
else
{
ourState.SendHairEquipUpdatePacket(this, HairInfo.FakeSerial(Serial), Layer.Hair);
OutgoingVirtualHairPackets.CreateHairEquipUpdatePacket(
hairPacket,
this,
hairSerial,
HairItemID,
HairHue,
Layer.Hair
);
}
ourState.Send(hairPacket);
}
if (sendFacialHair)
{
if (removeFacialHair)
{
ourState.SendRemoveHairPacket(FacialHairInfo.FakeSerial(Serial));
OutgoingVirtualHairPackets.CreateRemoveHairPacket(facialhairPacket, facialHairSerial);
}
else
{
ourState.SendHairEquipUpdatePacket(this, FacialHairInfo.FakeSerial(Serial), Layer.FacialHair);
OutgoingVirtualHairPackets.CreateHairEquipUpdatePacket(
facialhairPacket,
this,
facialHairSerial,
FacialHairItemID,
FacialHairHue,
Layer.FacialHair
);
}
ourState.Send(facialhairPacket);
}
if (sendOPLUpdate)
@ -3113,18 +3144,6 @@ namespace Server
Span<byte> removeEntity = stackalloc byte[OutgoingEntityPackets.RemoveEntityLength].InitializePacket();
Span<byte> hitsPacket = stackalloc byte[OutgoingMobilePackets.MobileAttributePacketLength].InitializePacket();
var hairLength = removeHair
? OutgoingVirtualHairPackets.RemovePacketLength
: OutgoingVirtualHairPackets.EquipUpdatePacketLength;
Span<byte> hairPacket = stackalloc byte[hairLength].InitializePacket();
var facialHairLength = removeFacialHair
? OutgoingVirtualHairPackets.RemovePacketLength
: OutgoingVirtualHairPackets.EquipUpdatePacketLength;
Span<byte> facialhairPacket = stackalloc byte[facialHairLength].InitializePacket();
foreach (var state in eable)
{
var beholder = state.Mobile;
@ -3192,7 +3211,6 @@ namespace Server
if (sendHair)
{
var hairSerial = HairInfo.FakeSerial(Serial);
if (removeHair)
{
OutgoingVirtualHairPackets.CreateRemoveHairPacket(hairPacket, hairSerial);
@ -3203,6 +3221,8 @@ namespace Server
hairPacket,
this,
hairSerial,
HairItemID,
HairHue,
Layer.Hair
);
}
@ -3212,17 +3232,18 @@ namespace Server
if (sendFacialHair)
{
var hairSerial = HairInfo.FakeSerial(Serial);
if (removeFacialHair)
{
OutgoingVirtualHairPackets.CreateRemoveHairPacket(facialhairPacket, hairSerial);
OutgoingVirtualHairPackets.CreateRemoveHairPacket(facialhairPacket, facialHairSerial);
}
else
{
OutgoingVirtualHairPackets.CreateHairEquipUpdatePacket(
facialhairPacket,
this,
hairSerial,
facialHairSerial,
FacialHairItemID,
FacialHairHue,
Layer.FacialHair
);
}