add agent manager release decomp

This commit is contained in:
Benjamin Palko 2026-10-15 09:58:24 -04:00
parent 31ff800b2a
commit fac6117145
7019 changed files with 254032 additions and 5 deletions

View file

@ -184,7 +184,12 @@ How these tables relate to the binaries:
with the `Code` as argument, then pushes each row to the server as the
ServerInfo record (`SHARED_FRAMEWORK.md` §3, whose fields line up 1:1 with
`ServerOption` columns).
- To confirm this, decompile AgentManager.
- **Confirmed for AgentManager (O, `AM:0x140002790`)**: at startup it runs
`up_read_agentmanager(@code)`, `up_read_all_serveroption`,
`up_read_serverfile`, `up_read_realtimeevent` on its `db_account`
connection. The `up_read_agentmanager` row whose `Code` equals
`server.code` **overrides** the XML addresses/ports (`AM:0x14002fe40`). The
push to Agents (`PT_SERVER_OPTIONS`/`PT_AGENT_DATA`) is still I.
`ServerOption.Type` uses the **server-kind enum** (D, cross-checked against
`MS:0x140002930`):
@ -209,6 +214,29 @@ How these tables relate to the binaries:
So the "Lobby" kind *is* the GameServer binary.
## 5a. AgentManager option file (`AM:` = AgentManager_Release_x64)
Path: `option\agentmanager_serveroption.xml`, overridable by argv[1]
(`AM:0x140001390`); numeric argv[1] = agent mode (§3). Same per-server schema
(§2, loader `AM:0x140031000`). AgentManager uses:
| Element | Use (O) |
|---|---|
| `server.code` | selects its own `ServerOption` row (`up_read_agentmanager`) |
| `server.private_ip` / `private_port` | Agent listener (`AM:0x140005460`); **overridden by DB row** `PrivateAddress/PrivatePort` |
| `server.public_ip` / `public_port` | AgentMonitor listener (`AM:0x140006380`); **overridden by DB row** `PublicAddress/PublicPort` |
| `db_account.string/timeout` | → `RustyHearts_Auth`: topology reads + `up_auth_agentaccount` |
| `db_game_log.string/timeout` | → `RustyHearts_Log`: `up_insert_log_monitor_*`, `up_create_delete_table` |
A second pass (`AM:0x140032f70`) looks in the same file for
`<db><agentmanager><db_account/><db_game_log/></agentmanager></db>` and, if
present, overrides both strings. If missing it prints `DB PASE ERROR !!!` and
continues. The shipped sample only has flat elements (and a flat `<db string>`),
so the flat values win (I).
AgentManager **writes** `option\patch.xml` before launching the patch server
(`AM:0x140034220`); it does not read it.
## 6. Other files
| File | Status |
@ -216,4 +244,5 @@ So the "Lobby" kind *is* the GameServer binary.
| `server_info.ini` | The string is in DBCServer, but there is no INI API import (`GetPrivateProfile*`) and no code reference was found. It is **probably unused** (I) |
| `agent.xml` | `<server>` list and the agent peer (`MS:0x1400602b0`) |
| `service_control.xml` | per-country `auth_url`, `billing_url`, feature flags (S). Reader not yet traced |
| `patch.xml`, `log_control.xml`, `content_control.xml` | readers unknown |
| `patch.xml` | written by AgentManager for the PatchServer (§5a); reader is the (unshipped) PatchServer (I) |
| `log_control.xml`, `content_control.xml` | readers unknown |