docs(book): a mod is a plugin too, and RCON is not the Rust answer #7

Merged
whitlocktech merged 2 commits from docs/no-rcon-example into main 2026-08-19 11:15:34 +00:00
2 changed files with 19 additions and 10 deletions
Showing only changes of commit d497a3b09a - Show all commits

View File

@@ -151,13 +151,22 @@ shape. That is what thin means: less code, the same architecture.
**Rust is the worked example, and it is not that case.** The dry run in **Rust is the worked example, and it is not that case.** The dry run in
[`rust-dryrun.md`][dryrun] designs a module for it precisely because it shares so [`rust-dryrun.md`][dryrun] designs a module for it precisely because it shares so
little with Ultima Online — and its answer is a **mod**: a plugin loaded by the little with Ultima Online — and its answer is an **Oxide plugin**: C# loaded by
server's own mod framework, hooking the game's events and dialling out to a the mod framework a modded Rust server already runs, hooking the game's events and
sidecar, exactly as the ServUO overlay does. The Rust server is a *binary*, where dialling out to a sidecar, exactly as the ServUO overlay does. The Rust server is a
ServUO is source a shard owner compiles, so the way in is a published hook API *binary*, where ServUO is source a shard owner compiles, so the way in is a
rather than a file you edit. **The three-part shape survives that unchanged**, published hook API rather than a file you edit. **The three-part shape survives
which is the more useful finding: the plugin-dials-out arrangement is not a that unchanged**, which is the more useful finding: the plugin-dials-out
property of having source access. arrangement is not a property of having source access.
It also pairs **one sidecar to one game server**, on that server's own host,
rather than one sidecar fronting a community's several — because those servers sit
on separate machines, and a shared sidecar would be reached across a network by
plugins that are supposed to talk to it over loopback. Worth knowing before you
design yours: if your game runs as a fleet, the question "how many sidecars" is
answered by where the loopback boundary is, not by how many processes you would
rather run. Your module holding several clients is the cheaper end of that trade,
and core never learns there is more than one.
That document reached the game over RCON until 2026-08-19, and before that That document reached the game over RCON until 2026-08-19, and before that
concluded there should be **no sidecar at all**. It carries both corrections, concluded there should be **no sidecar at all**. It carries both corrections,

View File

@@ -12,9 +12,9 @@ rules below are what keep that something from being the reason the server froze.
**That something does not have to be source you compile.** The worked example **That something does not have to be source you compile.** The worked example
below is an overlay built into a server whose code you have; the dry run for Rust below is an overlay built into a server whose code you have; the dry run for Rust
is a **mod** loaded by a closed server's own framework, hooking published events. is an **Oxide plugin**, C# loaded by a closed server's own mod framework and
Every rule in this chapter applies identically to both — they are properties of hooking published events. Every rule in this chapter applies identically to both —
being inside a game loop, not of how you got there. they are properties of being inside a game loop, not of how you got there.
The worked example is `servuo-plugins`, the Ultima Online shard plugin, whose link The worked example is `servuo-plugins`, the Ultima Online shard plugin, whose link
layer is one file: `overlay/Scripts/Custom/Bridge/BridgeLink.cs`. It is C# against layer is one file: `overlay/Scripts/Custom/Bridge/BridgeLink.cs`. It is C# against