fix(ui): night-round review — F2 HouseQuery fires at login, not tab-open
CM_House::Event_QueryHouse @0x006aaa00 (opcode 0x21e) tail-calls
unconditionally from the end of CPlayerSystem::InitializePlayer
@0x00563570 — the same once-per-session function
AttemptSendLoginCompleteNotification lives in (both guarded by the
player_initialized flag), right after that notification. Retail never
sends it from gmHouseUI::PostInit or gmMapUI::PostInit on House-tab
activation.
Moved WorldSession.SendHouseQuery() to the direct (non-portal)
first-entry completion edges — the same places acdream already sends
the analogous "initial session bootstrap" LoginComplete:
- graphical: LiveSessionRuntimeFactory's RuntimeFirstEntryDriveController
localPlayerCompleted callback
- headless: HeadlessSessionHost's equivalent callback
- headless content-less direct host: RuntimeLiveEntitySessionController.OnSpawned
Portal-space re-entries (LocalPlayerTeleportController's F751 path,
RuntimeLiveEntitySessionController.TryAdvancePortalCompletion) do NOT
resend it, matching retail's single-shot guard.
Removed the invented House-tab-open -> SendHouseQuery trigger
(InteractionRetainedUiComposition's HouseShown binding) and retired
register row AD-107, which had documented that adaptation.
Updated RuntimeLiveEntitySessionControllerTests' exact game-action
assertions for the content-less path, which now also captures the
HouseQuery send alongside LoginComplete.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
6ee3d88863
commit
353ae3bb0c
8 changed files with 89 additions and 35 deletions
|
|
@ -978,22 +978,24 @@ internal sealed class RetailInteractionRetainedUiCompositionFactory
|
|||
AllegianceSetUpdateSubscription: on =>
|
||||
late.GameRuntime.AllegianceSetUpdateSubscription(on),
|
||||
Trade: d.Runtime.Trade),
|
||||
// Batch C (overnight hover/UI round, 2026-08-17): HouseLines/
|
||||
// HouseShown now wired to the minimal RuntimeHouseState
|
||||
// owner (see its class doc) — HousePosition (the Map tab's
|
||||
// house marker) is deferred to #413's remaining owned-house
|
||||
// work, since it needs HouseData's Position field, not yet
|
||||
// consumed here.
|
||||
// Batch C (overnight hover/UI round, 2026-08-17): HouseLines
|
||||
// now wired to the minimal RuntimeHouseState owner (see its
|
||||
// class doc) — HousePosition (the Map tab's house marker) is
|
||||
// deferred to #413's remaining owned-house work, since it
|
||||
// needs HouseData's Position field, not yet consumed here.
|
||||
// Night-round review F2: the tab-open HouseShown ->
|
||||
// SendHouseQuery trigger (former AD-107) is REMOVED — retail
|
||||
// sends HouseQuery once, unconditionally, at
|
||||
// CM_House::Event_QueryHouse @0x006aaa00 (tail-called from
|
||||
// CPlayerSystem::InitializePlayer's login-complete path), not
|
||||
// on House-tab activation; neither gmHouseUI::PostInit nor
|
||||
// gmMapUI::PostInit sends one on tab-open. HouseShown now
|
||||
// defaults to null (HousePageController.OnShown's
|
||||
// _bindings.OnShown?.Invoke() no-ops).
|
||||
MapHouse: new MapHouseRuntimeBindings(
|
||||
CurrentCalendar: d.CurrentCalendar,
|
||||
PlayerCellId: () => d.PlayerController.Controller?.CellId ?? 0u,
|
||||
HouseLines: () => d.Runtime.HouseOwner.Lines,
|
||||
// Not a ported retail call site — neither gmHouseUI::
|
||||
// PostInit nor gmMapUI::PostInit sends an outbound
|
||||
// HouseQuery; this is the acdream "fire when the House
|
||||
// tab is shown" convenience HousePageController.Bindings.
|
||||
// OnShown's own doc already documents.
|
||||
HouseShown: () => late.Session.CurrentSession?.SendHouseQuery()),
|
||||
HouseLines: () => d.Runtime.HouseOwner.Lines),
|
||||
StackSplitQuantity: d.StackSplitQuantity,
|
||||
Plugins: d.UiRegistry,
|
||||
Persistence: persistence,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue