fix(interaction): restore retail loot placement and world-drop projection

This commit is contained in:
Erik 2026-07-27 00:03:15 +02:00
parent 4d095be286
commit 921712f412
24 changed files with 1581 additions and 34 deletions

View file

@ -159,6 +159,8 @@ public sealed class LiveEntityInboundAuthorityGateTests
out AcceptedPositionNetworkUpdate accepted));
Assert.Equal(PositionTimestampDisposition.Apply, accepted.TimestampDisposition);
Assert.Equal((ulong)2, accepted.PositionAuthorityVersion);
Assert.True(runtime.TryGetCanonical(Guid, out RuntimeEntityRecord canonical));
Assert.Same(canonical, accepted.Canonical);
Assert.Equal(1, publishCount);
gate.ResetSessionState();
@ -197,6 +199,33 @@ public sealed class LiveEntityInboundAuthorityGateTests
out _));
}
[Fact]
public void Position_CanonicalInventoryObjectIsAcceptedBeforeProjectionExists()
{
LiveEntityRuntime runtime = Runtime();
LiveEntityRegistrationResult registration =
runtime.RegisterLiveEntity(Spawn(Guid, instance: 5, position: 1));
Assert.NotNull(registration.Canonical);
Assert.False(runtime.TryGetRecord(Guid, out _));
int publishCount = 0;
var gate = new LiveEntityInboundAuthorityGate(
runtime,
(_, _) => publishCount++);
Assert.True(gate.TryAcceptPosition(
Position(Guid, 5, 2, 0x01010002u),
localPlayerGuid: 0u,
forcePositionRotation: null,
currentLocalVelocity: null,
payloadIsValid: true,
out AcceptedPositionNetworkUpdate accepted));
Assert.Same(registration.Canonical, accepted.Canonical);
Assert.Equal((ulong)2, accepted.PositionAuthorityVersion);
Assert.Equal(1, publishCount);
Assert.False(runtime.TryGetRecord(Guid, out _));
}
[Fact]
public void Vector_NewerSameIncarnationPacketInvalidatesCapturedAuthority()
{
@ -308,10 +337,10 @@ public sealed class LiveEntityInboundAuthorityGateTests
payloadIsValid: true,
out AcceptedPositionNetworkUpdate accepted));
Assert.True(runtime.IsCurrentPositionAuthority(
accepted.Record,
accepted.Canonical,
accepted.PositionAuthorityVersion));
Assert.False(runtime.IsCurrentVelocityAuthority(
accepted.Record,
accepted.Canonical,
accepted.VelocityAuthorityVersion));
}