An interaction menu is built from a per-character table of rows, filtered by two conditions in a fixed
order (RoleInteract.GetNpcInteracts):
condition2 hides the row while it matches.condition must match for the row to appear at all.So "he wrote to me and there is nothing here" is always one of three things: no row of that kind on that character, a hide-condition that is currently true, or a show-condition that is not. The game never says which, and the rows carry a 锁 description for some of the third case.
The three or four buttons you first see — 交谈, 交互, 交易, 行为 — are a row of buttons. Choosing one opens a different kind of thing:
Both are reversed by the same call — RoleInteract.ActivateInteracts(true) — which is what the form's
own backdrop is wired to on a first press. Anything that reverses only one of them will appear to work
until you take the other route.
InteractWithNpc keeps the interaction alive for a short list of types — 赠送, 传送, 情分索要, 厨事,
巧取, 谈论, 地会 — and calls DisableInteract for everything else, 交谈 included. So after a chat there
is no menu behind it to step back to: the game took it down when you chose.
The picker is InteractOther, and its 容我再想想 calls RoleInteract.DisableInteract — it leaves the
conversation outright rather than stepping back a layer. The pane describing the item you hover is a
third view again, held by a field on the picker, which is why hiding the picker alone can leave a page
of item text standing over the world.
Not in a panel of its own: it is drawn inside the world HUD's form. Anything that reasons about "the top form" will conclude that no panel is open while you are standing in a conversation.