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

@ -1051,6 +1051,47 @@ public sealed class EquippedChildProjectionWithdrawalTests
Assert.Single(fixture.Controller.AttachedEntityIds);
}
[Fact]
public void InventoryPutObjectIn3D_DoesNotWithdrawRecoveredWorldProjection()
{
int withdrawals = 0;
ControllerFixture? fixture = null;
fixture = new ControllerFixture((record, positionVersion, projectionVersion) =>
{
withdrawals++;
bool completed = fixture!.Live.WithdrawLiveEntityProjection(
record,
positionVersion,
projectionVersion);
return new(
completed
? ExactProjectionWithdrawalDisposition.Completed
: ExactProjectionWithdrawalDisposition.Superseded,
Failure: null);
});
using (fixture)
{
const uint guid = 0x7000026Au;
const uint player = 0x50000001u;
LiveEntityRecord dropped = fixture.Spawn(guid, generation: 1);
fixture.Objects.AddOrUpdate(new ClientObject
{
ObjectId = guid,
ContainerId = player,
CurrentlyEquippedLocation = EquipMask.None,
});
Assert.True(fixture.Objects.ApplyConfirmedServerMove(
guid,
newContainerId: 0u,
newWielderId: 0u));
Assert.Equal(0, withdrawals);
Assert.True(dropped.IsSpatiallyProjected);
Assert.Equal(LiveEntityProjectionKind.World, dropped.ProjectionKind);
}
}
[Fact]
public void OrphanRollback_PendingFailureRetainsExactRetryOwner()
{