data: name retainer request surface and RetainerEventHandler - #1898
Open
FranFkntastic wants to merge 1 commit into
Open
data: name retainer request surface and RetainerEventHandler#1898FranFkntastic wants to merge 1 commit into
FranFkntastic wants to merge 1 commit into
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 pinned2026.06.18.0000.0000build (Ghidra 12.1.2, SHA-2564236E770E673150E85F8D10BEAB2FC4834C82F86AAB8A555A9175439FC906A6D):Client::Game::Event::RetainerEventHandler(working name — no RTTI name recovered): a0x5F8-byteCustomTalkResidentEventHandlerderivative. Its0x190tail holds twoServerRequestCallbackInterfaceinstances (+0x468,+0x470) and six0x30agent 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 (commits0x339retainer records and0xDDroster metadata before kind 2 completion), andCreateBindRetainerPixie(materializes a local retainer actor for event scenes — it submits no server request). Also documents thatRequestVenturesTimersis the full-roster fetch the client Lua callsRequestRetainerList.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
RequestRetainerList,UpdateRetainerTaskAccept,CreateBindRetainerPixie, etc.) come from the client's own registration strings, so those names are direct evidence rather than guesses.RetainerEventHandleris 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.RetainerManagerbefore the callback resumes the retainer Lua coroutine. Neither establishes an event scene by itself;IsReadyreflects data-operation completion, not selection state.Happy to adjust names, comments, or scope to maintainer preference.