Harden retail character selection recovery
This commit is contained in:
parent
6cfab727f1
commit
aeac874dab
8 changed files with 736 additions and 81 deletions
|
|
@ -23,7 +23,10 @@ The implementation was derived from
|
|||
those four button pointers, the selected row/guid, and four dialog contexts.
|
||||
It declares no viewport, `gmCG3DView`, or preview owner.
|
||||
- `RebuildCharacterList` (`0x004EC3A0`) creates each row through
|
||||
`AddItemFromTemplateList`, retains character identity, displays pending
|
||||
`AddItemFromTemplateList`, then resizes it using signed integer division:
|
||||
`max(listHeight / max(rosterCount, allowedSlots), listHeight / 10)`. Thus a
|
||||
320-pixel list with five allowed slots uses 64-pixel rows, while rosters over
|
||||
ten clamp at 32 pixels. It retains character identity, displays pending
|
||||
deletion in red, sorts by ordinal name, moves greyed entries to the tail,
|
||||
and restores/falls back selection. LA8 preserves the already canonical LA7b
|
||||
display order and identity instead of sorting an App copy.
|
||||
|
|
@ -55,6 +58,8 @@ with `ACDREAM_PROBE_LIVE_MOUNT=1`; it reads the ordinary
|
|||
`%USERPROFILE%/Documents/Asheron's Call` DAT set unless `ACDREAM_DAT_DIR`
|
||||
overrides the location. It uses production `DatCollection`,
|
||||
`RetailDataIdResolver`, and `LayoutImporter`; it does not write the DATs.
|
||||
When the opt-in flag or installed data is absent, discovery records an explicit
|
||||
skip rather than adding a no-op pass to default suite totals.
|
||||
|
||||
The installed September-2013 data proves:
|
||||
|
||||
|
|
@ -89,11 +94,17 @@ The controller instantiates the authored row template in Runtime display
|
|||
order, projects red pending-delete rows and the exact button matrix, and opens
|
||||
the shared retail dialogs. Delete wait survives the opcode-only acknowledgement
|
||||
until the fresh roster arrives. Restore is fire-and-observe: a silent ACE
|
||||
no-reply ends only when Runtime expires its correlation. Entering-world wait
|
||||
opens before the existing synchronous Enter command; error, reset, reconnect,
|
||||
missing/displaced adapter, and disposal close owned contexts without re-entrant
|
||||
commands. A failed transient row-template import leaves the Runtime revision
|
||||
unconsumed and retries on the next frame.
|
||||
no-reply ends only when Runtime expires its correlation; retail's Please Wait
|
||||
opens before the synchronous restore command and closes immediately if that
|
||||
command rejects or throws. Entering-world wait opens before the existing
|
||||
synchronous Enter command; error, reset, reconnect, missing/displaced adapter,
|
||||
and disposal close owned contexts without re-entrant commands. A failed
|
||||
transient row-template import leaves the Runtime revision unconsumed and
|
||||
retries on the next frame. Initial dialog-catalog, character root, and string
|
||||
misses likewise retry on later ticks without mounting a duplicate root or
|
||||
controller. Dialog presenter/catalog failures move their contexts to an
|
||||
internal retry ledger, so UI callbacks do not retain poisoned active/queued
|
||||
entries and the same context can appear after resource recovery.
|
||||
|
||||
There is deliberately no 3D preview and no claimed character-select background
|
||||
scene. The screen root remains neutral with respect to render-loop background
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue