fix(client): restore retail interaction parity
All checks were successful
CI / linux-portable (push) Successful in 3m27s
CI / windows-gate (push) Successful in 6m42s
CI / release (push) Successful in 2m12s

Harden keyboard and camera routing, inventory and vendor interactions, chat/emotes, relog portal flow, and paperdoll rendering. Add retail research, connected gate coverage, and release-gate validation.
This commit is contained in:
Erik 2026-08-26 20:45:11 +02:00
parent 0c699240e0
commit f6fe0f2a4f
151 changed files with 10162 additions and 1211 deletions

View file

@ -94,6 +94,40 @@ public sealed class ExternalContainerStateTests
Assert.Equal(2, delivered);
}
[Fact]
public void OpenedCorpseHistoryMatchesRetailSetAndDeleteLifetime()
{
var state = new ExternalContainerState();
const uint corpse = 0x70000010u;
Assert.True(state.RequestOpen(corpse, isCorpse: true));
Assert.True(state.HasCorpseBeenOpened(corpse));
Assert.Equal(1, state.OpenedCorpseCount);
state.ApplyViewContents(corpse);
state.ApplyClose(corpse);
Assert.True(state.HasCorpseBeenOpened(corpse));
Assert.True(state.SetCorpseDeleted(corpse));
Assert.False(state.HasCorpseBeenOpened(corpse));
state.RequestOpen(corpse, isCorpse: true);
Assert.True(state.Reset());
Assert.False(state.HasCorpseBeenOpened(corpse));
Assert.Equal(0, state.OpenedCorpseCount);
}
[Fact]
public void RepeatedGroundObjectRequestStillRecordsCorpseIdentity()
{
var state = new ExternalContainerState();
const uint corpse = 0x70000011u;
Assert.True(state.RequestOpen(corpse));
Assert.False(state.RequestOpen(corpse, isCorpse: true));
Assert.True(state.HasCorpseBeenOpened(corpse));
}
private static ExternalContainerState Open(uint id)
{
var state = new ExternalContainerState();