fix: trade gate round 1 - the Use-on-player route, authored grid cells,
and [trade] seam probes - Use on a selected player did nothing: the world Use path (SelectionInteractionController.RequestUse) dispatches 0x0036 directly and NEVER consults DetermineUseResult - lane C's "both paths already classified" claim described the POLICY's capability, not a live caller (the verify-subagent-claims lesson, again). Retail's CPlayerSystem::UsingItem @0x00562F70 consults it and routes result 5 (another PLAYER) to AttemptToOpenTradeNegotiations @0x0056DEE0, peace mode only, with no Use send. Ported as ItemInteractionController.TryOpenSecureTradeWithPlayer, called at RequestUse entry. - The broken window: both grids rendered their raw authored strip art with no cell layout (the gold-ring tile was the naked track). They now get the vendor strips' exact single-row 32px config + the authored empty-slot art resolved through ItemListCellTemplate (cell-template attr 0x1000000E -> 0x1000033A). - Drag-onto-player "nothing happens": the policy chain reads correct end-to-end in code (pick -> PlaceIn3D -> StartSecureTrade -> event -> cmd), so TEMPORARY [trade] probe lines now bracket every seam (drag-release pick, policy arm, controller request, use-on-player) - the next gate log pinpoints the break if it persists. Stripped once the two-client gate passes. App suite 4,990/3 skips. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
067cbea8a5
commit
22f30f291d
4 changed files with 103 additions and 2 deletions
|
|
@ -3489,6 +3489,8 @@ public sealed class RetailUiRuntime : IDisposable
|
|||
}
|
||||
|
||||
ImportedLayout? layout;
|
||||
uint selfEmptySlotSprite;
|
||||
uint partnerEmptySlotSprite;
|
||||
lock (_bindings.Assets.DatLock)
|
||||
{
|
||||
layout = LayoutImporter.Import(
|
||||
|
|
@ -3498,6 +3500,16 @@ public sealed class RetailUiRuntime : IDisposable
|
|||
_bindings.Assets.ResolveSprite,
|
||||
_bindings.Assets.DefaultFont,
|
||||
_bindings.Assets.ResolveFont);
|
||||
// The authored empty-slot art for each grid (cell-template attr
|
||||
// 0x1000000E → 0x1000033A) — same resolution the vendor uses.
|
||||
selfEmptySlotSprite = ItemListCellTemplate.ResolveEmptySprite(
|
||||
_bindings.Assets.Dats,
|
||||
Layout.SecureTradeUiController.LayoutId,
|
||||
Layout.SecureTradeUiController.SelfListId);
|
||||
partnerEmptySlotSprite = ItemListCellTemplate.ResolveEmptySprite(
|
||||
_bindings.Assets.Dats,
|
||||
Layout.SecureTradeUiController.LayoutId,
|
||||
Layout.SecureTradeUiController.PartnerListId);
|
||||
}
|
||||
if (layout is null)
|
||||
{
|
||||
|
|
@ -3529,7 +3541,9 @@ public sealed class RetailUiRuntime : IDisposable
|
|||
{
|
||||
if (visible) Host.ShowWindow(WindowNames.SecureTrade);
|
||||
else Host.HideWindow(WindowNames.SecureTrade);
|
||||
}));
|
||||
},
|
||||
SelfEmptySlotSprite: selfEmptySlotSprite,
|
||||
PartnerEmptySlotSprite: partnerEmptySlotSprite));
|
||||
if (controller is null)
|
||||
{
|
||||
Console.WriteLine("[M4] secure trade: required authored grids are missing.");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue