fix: Hair and facial hair "teleporting" when mobile dies several times (#1901)
### Summary * Added World.NewVirtual for creating virtual serial numbers * Reserved range 0x7EEEEEEE to 0x7FFFFFFF for virtual serials * Hair and Facial hair (for mobiles) now use virtual serials instead of FakeSerial() functions * Consolidated virtual hair to a single `VirtualHairInfo` class. Corpse hair and facial hair now persists across save/load and hair and facial hair no longer teleport to newest corpse.
This commit is contained in:
parent
883d873c1c
commit
91e37fb8d4
15 changed files with 548 additions and 357 deletions
24
Projects/Server.Tests/Tests/World/VirtualSerialTests.cs
Normal file
24
Projects/Server.Tests/Tests/World/VirtualSerialTests.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using Xunit;
|
||||
|
||||
namespace Server.Tests;
|
||||
|
||||
[Collection("Sequential Tests")]
|
||||
public class VirtualSerialTests : IClassFixture<ServerFixture>
|
||||
{
|
||||
[Fact]
|
||||
public void TestNewVirtualGetsAndRollover()
|
||||
{
|
||||
// Acquire virtual serials until we hit the max
|
||||
Serial lastSerial = World.NewVirtual;
|
||||
do
|
||||
{
|
||||
Serial virtualSerial = World.NewVirtual;
|
||||
Assert.Equal(lastSerial + 1, virtualSerial);
|
||||
lastSerial = (Serial) (uint) virtualSerial;
|
||||
} while (lastSerial != World.MaxVirtualSerial);
|
||||
|
||||
// Next one should be MaxItemSerial (the first VirtualSerial) due to rollover
|
||||
var nextSerial = World.NewVirtual;
|
||||
Assert.Equal(nextSerial, (Serial)World.ResetVirtualSerial);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue