fix(core): Converts death animation (#356)
- [X] Converts death animation - [X] Fixes tests for movement packets
This commit is contained in:
parent
77ce2e1980
commit
90393fea2a
8 changed files with 65 additions and 89 deletions
|
|
@ -13,19 +13,13 @@ namespace Server.Tests.Network
|
|||
Serial killed = 0x1;
|
||||
Serial corpse = 0x1000;
|
||||
|
||||
var data = new DeathAnimation(killed, corpse).Compile();
|
||||
var expected = new DeathAnimation(killed, corpse).Compile();
|
||||
|
||||
Span<byte> expectedData = stackalloc byte[13];
|
||||
var pos = 0;
|
||||
using var ns = PacketTestUtilities.CreateTestNetState();
|
||||
ns.SendDeathAnimation(killed, corpse);
|
||||
|
||||
expectedData.Write(ref pos, (byte)0xAF); // Packet ID
|
||||
expectedData.Write(ref pos, killed);
|
||||
expectedData.Write(ref pos, corpse);
|
||||
#if NO_LOCAL_INIT
|
||||
expectedData.Write(ref pos, 0);
|
||||
#endif
|
||||
|
||||
AssertThat.Equal(data, expectedData);
|
||||
var result = ns.SendPipe.Reader.TryRead();
|
||||
AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Buffers;
|
||||
using Server.Network;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -7,35 +6,32 @@ namespace Server.Tests.Network
|
|||
{
|
||||
public class MovementPacketTests : IClassFixture<ServerFixture>
|
||||
{
|
||||
[Theory, InlineData(0), InlineData(1), InlineData(2)]
|
||||
[Theory]
|
||||
[InlineData(0)]
|
||||
[InlineData(1)]
|
||||
[InlineData(2)]
|
||||
public void TestSpeedControl(byte speedControl)
|
||||
{
|
||||
var data = new SpeedControl(speedControl).Compile();
|
||||
var expected = new SpeedControl(speedControl).Compile();
|
||||
|
||||
Span<byte> expectedData = stackalloc byte[6];
|
||||
var pos = 0;
|
||||
using var ns = PacketTestUtilities.CreateTestNetState();
|
||||
ns.SendSpeedControl((SpeedControlSetting)speedControl);
|
||||
|
||||
expectedData.Write(ref pos, (byte)0xBF); // Packet ID
|
||||
expectedData.Write(ref pos, (ushort)6); // Length
|
||||
expectedData.Write(ref pos, (ushort)0x26); // Command
|
||||
expectedData.Write(ref pos, speedControl);
|
||||
|
||||
AssertThat.Equal(data, expectedData);
|
||||
var result = ns.SendPipe.Reader.TryRead();
|
||||
AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestMovePlayer()
|
||||
{
|
||||
const Direction d = Direction.Left;
|
||||
var data = new MovePlayer(d).Compile();
|
||||
var expected = new MovePlayer(d).Compile();
|
||||
|
||||
Span<byte> expectedData = stackalloc byte[2];
|
||||
var pos = 0;
|
||||
using var ns = PacketTestUtilities.CreateTestNetState();
|
||||
ns.SendMovePlayer(d);
|
||||
|
||||
expectedData.Write(ref pos, (byte)0x97); // Packet ID
|
||||
expectedData.Write(ref pos, (byte)d);
|
||||
|
||||
AssertThat.Equal(data, expectedData);
|
||||
var result = ns.SendPipe.Reader.TryRead();
|
||||
AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -46,19 +42,13 @@ namespace Server.Tests.Network
|
|||
|
||||
const byte seq = 100;
|
||||
|
||||
var data = new MovementRej(seq, m).Compile();
|
||||
var expected = new MovementRej(seq, m).Compile();
|
||||
|
||||
Span<byte> expectedData = stackalloc byte[8];
|
||||
var pos = 0;
|
||||
using var ns = PacketTestUtilities.CreateTestNetState();
|
||||
ns.SendMovementRej(seq, m);
|
||||
|
||||
expectedData.Write(ref pos, (byte)0x21); // Packet ID
|
||||
expectedData.Write(ref pos, seq);
|
||||
expectedData.Write(ref pos, (short)m.X);
|
||||
expectedData.Write(ref pos, (short)m.Y);
|
||||
expectedData.Write(ref pos, (byte)m.Direction);
|
||||
expectedData.Write(ref pos, (byte)m.Z);
|
||||
|
||||
AssertThat.Equal(data, expectedData);
|
||||
var result = ns.SendPipe.Reader.TryRead();
|
||||
AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -68,42 +58,26 @@ namespace Server.Tests.Network
|
|||
m.DefaultMobileInit();
|
||||
|
||||
const byte seq = 100;
|
||||
var noto = Notoriety.Compute(m, m);
|
||||
|
||||
var data = MovementAck.Instantiate(seq, m).Compile();
|
||||
var expected = MovementAck.Instantiate(seq, m).Compile();
|
||||
|
||||
Span<byte> expectedData = stackalloc byte[3];
|
||||
var pos = 0;
|
||||
using var ns = PacketTestUtilities.CreateTestNetState();
|
||||
ns.SendMovementAck(seq, m);
|
||||
|
||||
expectedData.Write(ref pos, (byte)0x22); // Packet ID
|
||||
expectedData.Write(ref pos, seq);
|
||||
expectedData.Write(ref pos, (byte)noto);
|
||||
|
||||
AssertThat.Equal(data, expectedData);
|
||||
var result = ns.SendPipe.Reader.TryRead();
|
||||
AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestNullFastwalkStack()
|
||||
{
|
||||
var data = new NullFastwalkStack().Compile();
|
||||
var expected = new NullFastwalkStack().Compile();
|
||||
|
||||
Span<byte> expectedData = stackalloc byte[29];
|
||||
var pos = 0;
|
||||
using var ns = PacketTestUtilities.CreateTestNetState();
|
||||
ns.SendInitialFastwalkStack(new uint[]{ 0, 0, 0, 0, 0, 0 });
|
||||
|
||||
expectedData.Write(ref pos, (byte)0xBF); // Packet ID
|
||||
expectedData.Write(ref pos, (ushort)29); // Length
|
||||
expectedData.Write(ref pos, (short)0x1); // Sub-packet
|
||||
|
||||
#if NO_LOCAL_INIT
|
||||
expectedData.Write(ref pos, 0); // Key 1
|
||||
expectedData.Write(ref pos, 0); // Key 2
|
||||
expectedData.Write(ref pos, 0); // Key 3
|
||||
expectedData.Write(ref pos, 0); // Key 4
|
||||
expectedData.Write(ref pos, 0); // Key 5
|
||||
expectedData.Write(ref pos, 0); // Key 6
|
||||
#endif
|
||||
|
||||
AssertThat.Equal(data, expectedData);
|
||||
var result = ns.SendPipe.Reader.TryRead();
|
||||
AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Buffers;
|
||||
using Server.Network;
|
||||
using Server.Targeting;
|
||||
using Xunit;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
using System;
|
||||
using System.Buffers;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using Server.Items;
|
||||
using Server.Network;
|
||||
using Xunit;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using Xunit;
|
||||
|
||||
|
|
|
|||
|
|
@ -5072,21 +5072,13 @@ namespace Server
|
|||
|
||||
var c = CreateCorpseHandler?.Invoke(this, hair, facialhair, content, equip);
|
||||
|
||||
/*m_Corpse = c;
|
||||
|
||||
for ( int i = 0; c != null && i < content.Count; ++i )
|
||||
c.DropItem( (Item)content[i] );
|
||||
|
||||
if (c != null)
|
||||
c.MoveToWorld( this.Location, this.Map );*/
|
||||
|
||||
if (m_Map != null)
|
||||
{
|
||||
Packet animPacket = null;
|
||||
|
||||
var eable = m_Map.GetClientsInRange(m_Location);
|
||||
var corpseSerial = c?.Serial ?? Serial.Zero;
|
||||
|
||||
Span<byte> deathAnimation = stackalloc byte[OutgoingMobilePackets.DeathAnimationPacketLength];
|
||||
OutgoingMobilePackets.CreateDeathAnimation(ref deathAnimation, Serial, corpseSerial);
|
||||
Span<byte> removeEntity = stackalloc byte[OutgoingEntityPackets.RemoveEntityLength];
|
||||
OutgoingEntityPackets.CreateRemoveEntity(ref removeEntity, Serial);
|
||||
|
||||
|
|
@ -5094,9 +5086,7 @@ namespace Server
|
|||
{
|
||||
if (state != m_NetState)
|
||||
{
|
||||
animPacket ??= Packet.Acquire(new DeathAnimation(Serial, corpseSerial));
|
||||
|
||||
state.Send(animPacket);
|
||||
state.Send(deathAnimation);
|
||||
|
||||
if (!state.Mobile.CanSee(this))
|
||||
{
|
||||
|
|
@ -5105,8 +5095,6 @@ namespace Server
|
|||
}
|
||||
}
|
||||
|
||||
Packet.Release(animPacket);
|
||||
|
||||
eable.Free();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ namespace Server.Network
|
|||
public static class OutgoingMobilePackets
|
||||
{
|
||||
public const int BondedStatusPacketLength = 11;
|
||||
public const int DeathAnimationPacketLength = 13;
|
||||
|
||||
public static void CreateBondedStatus(ref Span<byte> buffer, Serial serial, bool bonded)
|
||||
{
|
||||
|
|
@ -41,14 +42,35 @@ namespace Server.Network
|
|||
}
|
||||
|
||||
var writer = new CircularBufferWriter(buffer);
|
||||
writer.Write((byte)0xBF); // Packet ID
|
||||
writer.Write((ushort)11); // Length
|
||||
writer.Write((byte)0xBF); // Packet ID
|
||||
writer.Write((ushort)11); // Length
|
||||
writer.Write((ushort)0x19); // Subpacket ID
|
||||
writer.Write((byte)0); // Command
|
||||
writer.Write((byte)0); // Command
|
||||
writer.Write(serial);
|
||||
writer.Write(bonded);
|
||||
|
||||
ns.Send(ref buffer, writer.Position);
|
||||
}
|
||||
|
||||
public static void CreateDeathAnimation(ref Span<byte> buffer, Serial killed, Serial corpse)
|
||||
{
|
||||
var writer = new SpanWriter(buffer);
|
||||
writer.Write((byte)0xAF); // Packet ID
|
||||
writer.Write(killed);
|
||||
writer.Write(corpse);
|
||||
writer.Write(0); // ??
|
||||
}
|
||||
|
||||
public static void SendDeathAnimation(this NetState ns, Serial killed, Serial corpse)
|
||||
{
|
||||
if (ns == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Span<byte> span = stackalloc byte[DeathAnimationPacketLength];
|
||||
CreateDeathAnimation(ref span, killed, corpse);
|
||||
ns.Send(span);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
*************************************************************************/
|
||||
|
||||
using System.Buffers;
|
||||
using System.IO;
|
||||
|
||||
namespace Server.Network
|
||||
{
|
||||
|
|
@ -99,6 +100,7 @@ namespace Server.Network
|
|||
|
||||
var writer = new CircularBufferWriter(buffer);
|
||||
writer.Write((byte)0xBF); // Packet ID
|
||||
writer.Seek(2, SeekOrigin.Current);
|
||||
writer.Write((ushort)0x1); // Subpacket
|
||||
writer.Write(keys[0]);
|
||||
writer.Write(keys[1]);
|
||||
|
|
@ -107,6 +109,7 @@ namespace Server.Network
|
|||
writer.Write(keys[4]);
|
||||
writer.Write(keys[5]);
|
||||
|
||||
writer.WritePacketLength();
|
||||
ns.Send(ref buffer, writer.Position);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue