acdream/tests/AcDream.Core.Tests/Items
Erik 67fe754dd6 fix: social gate round 2, part 2 - confirmation-dialog sentences + the
refused-drop yellow notice

Item 4 (confirmation dialogs missing text + names): the missing retail
mechanism was StringTable template substitution - an entry is N+1 literal
fragments interleaved with N named variables, composed by
StringTable::GetString @0x004300D0 (no-metalanguage branch @0x004303B7).
ACE sends the bare player name for types 1/4; retail's OWN CLIENT wraps
it. Ported as DatStringResolver.ResolveTemplate (PLAYER hash 0x05506DA2,
the exact compute_str_hash space; Chorizite stores the variable hashes
directly):

- Server-driven type 4 -> ID_Fellowship_FellowshipRequest, type 1 ->
  ID_Allegiance_AcceptSwearConfirmation, injected into
  GameplayConfirmationController; null resolve falls back to the bare
  wire message, never invented English. The 2/3/5/6 " Continue?" family
  never consults the composer.
- Local Swear/Break/Kick: the bind-time fragment-0 latch (which showed
  the dangling "Do you wish to swear to ") is replaced by click-time
  ResolveTemplate with the target's name.

All five templates verified token-free in the installed DAT - this is
NOT a StringTableMetaLanguage port (AD-81's engine caveat stands).

Item 5 (refused drop shows nothing; retail shows yellow top-center
text): the prevRequest latch was ALREADY ported (InventoryTransactionState);
what was missing was the consumer. InventoryTransactionState now raises
RequestFailed(request, weenieError) when a 0x00A0 clears the latch;
ItemInteractionController composes ServerSaysAttemptFailed @0x0058EAE0's
"The <item> can't be <verb>" (verb table + suffix map ported verbatim in
Core's InventoryFailureMessages, NAME_PLURAL for merge/split) and routes
it as LogTextType 0x1A ClientLocal -> the SpewBox, retail's yellow
top-center line. The dispatcher's second leg (@0x0055B342) also runs:
outside the 7-code exclusion set, WeenieErrorMessages resolves per-code
text/destination; 0x426 AttunedItem has no row in either place beyond
the verb line - faithful single-line output.

Register: AD-85 narrowed to its numeric-field item, AD-81 amended (the
token-free interleave is now ported; meta-token engine + FormatName
remain), AD-93 filed (wire-guid-match vs retail's latched-guid
preference; no Move/Wield latch kinds).

Tests: +2 InventoryTransactionState failure-latch, +5 ResolveTemplate
(constructed StringTable fixtures), +1 composer injection, +1 end-to-end
refused-drop line. Core 4,697/1 skip, App 4,983/3 skips.

Research: docs/research/2026-08-13-confirm-and-weenie-error-display.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 21:10:42 +02:00
..
AetheriaUnlockStateTests.cs fix(paperdoll): port quest-gated Aetheria slots 2026-07-13 09:55:20 +02:00
BurdenMathTests.cs fix(ui): match retail vitae and character info 2026-07-17 12:06:14 +02:00
ClientObjectNameTests.cs fix(ui): finish retail stack selector polish 2026-07-11 10:22:11 +02:00
ClientObjectTableBurdenTests.cs feat(core): D.2b-B — ClientObjectTable.SumCarriedBurden (carried-Burden fallback) 2026-06-21 08:55:35 +02:00
ClientObjectTableTests.cs fix(vendor): grand-gate findings — wire-truth container counts, the live split bar, arrival-gated use, prepend-order race 2026-08-08 14:03:57 +02:00
ClientObjectTableUpdateTests.cs feat(core): D.2b-B B-Wire — ClientObjectTable.UpdateStackSize 2026-06-21 18:48:54 +02:00
EquipMaskTests.cs fix(D.2b): correct EquipMask to canonical retail INVENTORY_LOC + numeric-pin test 2026-06-22 21:56:06 +02:00
ExternalContainerStateTests.cs refactor(net): converge live session state reset 2026-07-21 12:00:48 +02:00
InventoryTransactionStateTests.cs fix: social gate round 2, part 2 - confirmation-dialog sentences + the 2026-08-13 21:10:42 +02:00
ItemCooldownDisplayTests.cs feat(items): port retail shared cooldown overlays 2026-07-23 10:41:16 +02:00
ItemInteractionPolicyTests.cs fix(items): port retail useability and autowear rejection 2026-07-23 08:33:31 +02:00
ItemManaStateTests.cs feat(ui): port retail selected-item mana 2026-07-11 11:16:21 +02:00
ItemUseabilityTests.cs fix(items): port retail useability and autowear rejection 2026-07-23 08:33:31 +02:00
PaperdollSelectionPolicyTests.cs fix(ui): port exact paperdoll body selection 2026-07-11 11:56:26 +02:00
PlayerKillerStatusBitfieldTests.cs fix(physics): #297 — keep the PWD bitfield live so PK status reaches the client 2026-08-03 20:59:01 +02:00
ShortcutDropPlannerTests.cs feat(ui): complete retail item drop branches 2026-07-11 09:46:32 +02:00
ShortcutStoreTests.cs refactor(runtime): close canonical gameplay ownership 2026-07-26 09:48:51 +02:00
StackMergePlannerTests.cs feat(ui): complete retail item drop branches 2026-07-11 09:46:32 +02:00
StackSplitQuantityStateTests.cs fix(ui): port retail partial stack transfers 2026-07-11 10:34:13 +02:00
ToolbarAmmoPolicyTests.cs feat(ui): port retail toolbar ammo count 2026-07-11 12:29:51 +02:00
VendorPricingTests.cs fix(runtime/core): Slice 5.3 review corrections — retirement/transit close, per-unit pricing, guarded auto-close dispatch 2026-08-07 16:15:57 +02:00
VendorSellAcceptabilityTests.cs fix(vendor): 6b/6c review corrections — pre-send guards, accumulating staging, trade-note exemption, drag-over tab switch, full-stack sells 2026-08-08 12:50:28 +02:00
VendorStagingListTests.cs fix(vendor): 6b/6c review corrections — pre-send guards, accumulating staging, trade-note exemption, drag-over tab switch, full-stack sells 2026-08-08 12:50:28 +02:00
VendorStateTests.cs fix(ui): Slice 5.4 review corrections — the dropdown renders from its authored popup, retail cost semantics, auto-select, icon overlays 2026-08-07 18:26:17 +02:00