One-time bonuses, learn-once items and use limits

Three different "you only get this once" mechanics run off the same record — the player's used-item tally — and the game surfaces them inconsistently.

The first taste

Wine and food carry a one-off permanent bonus on the first use, held in the item's third misc field: entries separated by +, each a flag, a bar, then the same attribute groups the ordinary effect uses. A flag of 0 means "only while this item has never been used" — the use path folds those groups into the normal effect only when the tally has no record of the id (ItemStorage.UseItemAttri).

So a dish that reads 使用后精力回复20,第一次使用时可额外增加1最大精力 is worth eating once for the ceiling and thereafter for the 20. The tooltip mentions the clause for some item classes and not for food or drink, and nothing anywhere says whether you have already taken it.

Learn-once items

Recipes, skill books and 秘法书 are marked 已学习 once used — and only those three classes. The mark is driven by the same tally, so a book you have read shows it in your bag and in a shop row.

A stackable consumable is not one of these. 修为残页 can be used five times; the tally remembers the first, which is not the same as spent. Widening the marked classes by eye gets this wrong.

Use limits

An item can carry conditions of its own (its first misc field), and 限使用次数1次 is one of them. The use path evaluates those conditions before anything else and refuses when they fail. The tooltip shows the rule — 要求:限使用次数1次 — and never whether this character has already spent that one use, which is the half that decides whether to pay for it.

The limit and the count are both known and never shown together. The requirement line prints the limit — it is the second value of the item's own use-count condition — and the tally holds how many you have spent. 已用 3/8 is the number worth reading, and the game puts the two halves on different screens.

Evaluating those conditions is how you tell "spent" from "never touched" without buying it first: AnswerViewNew.IsMatchMultCondition against the item's own condition string, which also reports which sub-condition failed.

Where the game does and does not warn you