fix(ui): retail target-cursor shape (pending over UI, world-object driven) + visible UseDone refusals
Visual gate round 2 (user, retail oracle): the target cursor over UI must be the 0x27 four-arrows PENDING cursor — retail's UpdateCursorState (0x00564630) keys valid/invalid solely off the SmartBox found object, i.e. the WORLD entity under the cursor. And "can't heal myself" turned out to be TWO stacked causes, both fixed: - Cursor: UI hover no longer forces TargetInvalid (that arm was a non-retail invention) and the doll/status-bar hover providers are gone (UiElement.UseTargetGuidProvider deleted). Valid/invalid now come from (a) a hovered occupied item slot's own item, or (b) the world entity under the cursor via a new worldTargetProvider — the B.4b screen-rect picker extracted into GameWindow.PickWorldGuidAtCursor and shared by click + hover. - Self-heal: the world picker always skipped the local player (skipServerGuid), so clicking your own toon in target mode could never acquire self. Target-use picks now include self (retail lets you kit-heal yourself by clicking your character); plain selection keeps the exclusion. The doll click still self-targets. - Silent refusals: the [use-target] log proved the UseWithTarget action WAS sent (kit 0x00220008 / TargetType 0x10, target self) — ACE refused with WeenieError.YouArentTrainedInHealing (0x04FC) and we never parsed UseDone (0x01C7). Now dispatched + surfaced as a chat line via WeenieErrorText (interim subset map, register AP-74, #166 ports the retail String-table lookup). Full suite green (3,295). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
047410ccc9
commit
769ebef30d
10 changed files with 151 additions and 61 deletions
23
src/AcDream.Core.Net/Messages/WeenieErrorText.cs
Normal file
23
src/AcDream.Core.Net/Messages/WeenieErrorText.cs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
namespace AcDream.Core.Net.Messages;
|
||||
|
||||
/// <summary>
|
||||
/// Interim WeenieError → display text. Retail resolves error codes through
|
||||
/// the portal String tables into lines like "You are not trained in
|
||||
/// healing!"; porting that lookup is #166 — until then this map (codes from
|
||||
/// ACE's <c>WeenieError</c> enum, texts phrased after the retail messages the
|
||||
/// enum names encode) covers the errors our current use/heal flows can
|
||||
/// produce. Register row AP-74. Unknown codes fall back to a generic line
|
||||
/// carrying the code so nothing is ever silently dropped again (the
|
||||
/// 2026-07-03 "kit did nothing" session was an unsurfaced 0x04FC).
|
||||
/// </summary>
|
||||
public static class WeenieErrorText
|
||||
{
|
||||
public static string For(uint error) => error switch
|
||||
{
|
||||
0x001Du => "You're too busy!", // YoureTooBusy
|
||||
0x04EBu => "You can't do that while in the air!", // YouCantDoThatWhileInTheAir
|
||||
0x04FCu => "You are not trained in healing!", // YouArentTrainedInHealing
|
||||
0x04FEu => "You can't heal that!", // YouCantHealThat
|
||||
_ => $"You can't do that. (error 0x{error:X4})",
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue