feat(ui): House tab ownership text — DisplayPurchaseTimeText + RuntimeHouseState
Derived the mechanism from the decomp before writing code: neither gmHouseUI::PostInit @0x004a2710 nor gmMapUI::PostInit @0x004a1c70 sends a HouseQuery, and six of gmHouseUI's seven Display* builders early-return on m_pHouseData == 0. The only text a houseless character's House tab shows is gmHouseUI::DisplayPurchaseTimeText @0x004a3110's expired branch (it doesn't gate on m_pHouseData) — the local player's PropertyInt.HousePurchaseTimestamp plus HouseSystem::HasPurchaseWaitPeriodExpired renders exactly "You may buy another house immediately." for a fresh character. Exhaustive search of the 2013 EoR decomp, ACE, and the live DAT found zero support for a second "You do not currently own a house." line the task brief described — this commit ports what the decomp actually shows. Ships: - RuntimeHouseState: a minimal (no disposal, no construction-transaction Fault() point) Runtime owner per ISSUES #413's own sizing note, wired through GameEventWiring's existing HouseData/HouseStatus delegate holes, LiveSessionEventRouter, and GameRuntime.HouseOwner. Participates in RuntimeGenerationReset (new House stage) since a fresh login must not show a stale character's house state. - HousePageController.Bindings.Lines/OnShown wired to real data; OnShown fires WorldSession.SendHouseQuery() on tab-open (AD-107: an acdream trigger, not a ported retail call site — filed in the divergence register). - Fixed a real bug found along the way: HousePageController.Bind never wired UiTemplateListBox.TemplateResolver, so no row could ever render regardless of Lines content. Now reuses the Map tab's generic hotspot resolver. Live-verified against a real local ACE server and the +Acdream character (--session-config auto-select + a UI automation script): screenshot and structural UI-tree dump both confirm the House tab renders exactly "You may buy another house immediately." Graceful logout confirmed both launches. ISSUES #413 narrowed to its one remaining piece: the six owned-house-only Display* builders (DisplayBuyPayment/RentPayment/BuyTime/RentTimes/ Location/WarningText), unexercisable without a test character that owns a house. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
eb6f3bd8c8
commit
06512f0957
13 changed files with 601 additions and 99 deletions
|
|
@ -978,14 +978,22 @@ internal sealed class RetailInteractionRetainedUiCompositionFactory
|
|||
AllegianceSetUpdateSubscription: on =>
|
||||
late.GameRuntime.AllegianceSetUpdateSubscription(on),
|
||||
Trade: d.Runtime.Trade),
|
||||
// Batch C (overnight hover/UI round): HousePosition/
|
||||
// HouseLines/HouseShown are left unwired (their bindings
|
||||
// default to "no house"/empty/no-op) — the House wire
|
||||
// groundwork (RuntimeHouseState) lands separately; the
|
||||
// panel mounts and the Map tab works standalone either way.
|
||||
// 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.
|
||||
MapHouse: new MapHouseRuntimeBindings(
|
||||
CurrentCalendar: d.CurrentCalendar,
|
||||
PlayerCellId: () => d.PlayerController.Controller?.CellId ?? 0u),
|
||||
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()),
|
||||
StackSplitQuantity: d.StackSplitQuantity,
|
||||
Plugins: d.UiRegistry,
|
||||
Persistence: persistence,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue