fix(ui): port live experience quality updates (#217)

Parse retail PrivateUpdatePropertyInt64 and route authoritative Total/Available Experience through both local-player projections so Attributes, the level meter, and Skills refresh together. Preserve the existing retail XP curve and right-align the Total XP value.

Close the user-confirmed item-give gate for #216 and record the named-retail/ACE/holtburger conformance evidence.

Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
Erik 2026-07-13 20:43:48 +02:00
parent 30d294506c
commit 84b7d2d7cd
15 changed files with 391 additions and 29 deletions

View file

@ -262,6 +262,22 @@ public sealed class LocalPlayerStateTests
Assert.Equal(1_234_567_890L, s.Properties.GetInt64(1u));
}
[Fact]
public void OnInt64PropertyUpdate_ReplacesValueAndFiresCharacterChanged()
{
var s = new LocalPlayerState();
var props = new PropertyBundle();
props.Int64s[1u] = 100L;
s.OnProperties(props);
int changed = 0;
s.CharacterChanged += () => changed++;
s.OnInt64PropertyUpdate(1u, 1_234_567_890L);
Assert.Equal(1_234_567_890L, s.Properties.GetInt64(1u));
Assert.Equal(1, changed);
}
[Fact]
public void OnSkillUpdate_StoresFormulaAdjustedCurrent()
{