Skip to content

data: name retainer request surface and RetainerEventHandler - #1898

Open
FranFkntastic wants to merge 1 commit into
aers:mainfrom
FranFkntastic:data/retainer-request-surface
Open

data: name retainer request surface and RetainerEventHandler#1898
FranFkntastic wants to merge 1 commit into
aers:mainfrom
FranFkntastic:data/retainer-request-surface

Conversation

@FranFkntastic

Copy link
Copy Markdown

Disclosure: this pull request was prepared and submitted by an AI agent acting on behalf of the account owner, who reviewed and approved the change. The underlying analysis was performed with the owner's tooling and direction.

What this adds

Names for the undocumented retainer script handler family in ida/data.yml, recovered by static analysis of the pinned 2026.06.18.0000.0000 build (Ghidra 12.1.2, SHA-256 4236E770E673150E85F8D10BEAB2FC4834C82F86AAB8A555A9175439FC906A6D):

  • Client::Game::Event::RetainerEventHandler (working name — no RTTI name recovered): a 0x5F8-byte CustomTalkResidentEventHandler derivative. Its 0x190 tail holds two ServerRequestCallbackInterface instances (+0x468, +0x470) and six 0x30 agent result bridges (+0x478..+0x590). Entries cover the factory, ctor/dtor, the Lua registration function, all Lua-registered request wrappers (request kinds 2–9, named from their embedded Lua registration strings), the binding/depop/context setters, and both callback receivers.
  • Client::Game::RetainerManager: RequestRetainerSingleData (kind 3, splits the 64-bit retainer ID into two 32-bit args), the grouped response processor (commits 0x339 retainer records and 0xDD roster metadata before kind 2 completion), and CreateBindRetainerPixie (materializes a local retainer actor for event scenes — it submits no server request). Also documents that RequestVenturesTimers is the full-roster fetch the client Lua calls RequestRetainerList.
  • Client::Game::ServerRequestCallbackManager: callback registration and both dispatch paths. The manager stores raw callback pointers in the first free vector slot with no refcounting and clears the slot before invoking vfunc 1 — useful contract knowledge for anyone modeling the interface.

Evidence notes

  • The Lua binding names (RequestRetainerList, UpdateRetainerTaskAccept, CreateBindRetainerPixie, etc.) come from the client's own registration strings, so those names are direct evidence rather than guesses.
  • RetainerEventHandler is explicitly marked as a working name; the class comment records the recovered size and tail layout so the entry is useful even if renamed later.
  • Kinds 2 and 3 are asynchronous cache operations: response data is committed to RetainerManager before the callback resumes the retainer Lua coroutine. Neither establishes an event scene by itself; IsReady reflects data-operation completion, not selection state.

Happy to adjust names, comments, or scope to maintainer preference.

Static analysis (Ghidra 12.1.2) of the pinned 2026.06.18.0000.0000 build
recovers the retainer script handler family:

- New RetainerEventHandler class (working name, no RTTI recovered): a
  0x5F8-byte CustomTalkResidentEventHandler derivative with a 0x190 tail
  holding two ServerRequestCallbackInterface instances and six agent
  result bridges. Names its factory, ctor/dtor, the Lua-registered
  request wrappers (kinds 2-9), binding/depop/context setters, and both
  callback receivers.
- RetainerManager: RequestRetainerSingleData, the grouped response
  processor, and CreateBindRetainerPixie (local event-scene actor
  materialization, not a server request). Notes that RequestVenturesTimers
  is the roster-wide RequestRetainerList under its Lua name.
- ServerRequestCallbackManager: callback registration and both dispatch
  paths; slots are raw borrowed storage, cleared before invocation.
@wolfcomp wolfcomp added AI This PR has been created with an AI summary and/or AI commits. outdated New patches have been released since this pr and it could be wrong labels Jul 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI This PR has been created with an AI summary and/or AI commits. outdated New patches have been released since this pr and it could be wrong

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants