diff --git a/book/03-sidecar.md b/book/03-sidecar.md index eb0a467..9cc8872 100644 --- a/book/03-sidecar.md +++ b/book/03-sidecar.md @@ -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-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 -server's own mod framework, hooking the game's events and dialling out to a -sidecar, exactly as the ServUO overlay does. The Rust server is a *binary*, where -ServUO is source a shard owner compiles, so the way in is a published hook API -rather than a file you edit. **The three-part shape survives that unchanged**, -which is the more useful finding: the plugin-dials-out arrangement is not a -property of having source access. +little with Ultima Online — and its answer is an **Oxide plugin**: C# loaded by +the mod framework a modded Rust server already runs, hooking the game's events and +dialling out to a sidecar, exactly as the ServUO overlay does. The Rust server is a +*binary*, where ServUO is source a shard owner compiles, so the way in is a +published hook API rather than a file you edit. **The three-part shape survives +that unchanged**, which is the more useful finding: the plugin-dials-out +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 concluded there should be **no sidecar at all**. It carries both corrections, diff --git a/book/04-game-plugin.md b/book/04-game-plugin.md index 3dc8669..c3bc865 100644 --- a/book/04-game-plugin.md +++ b/book/04-game-plugin.md @@ -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 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. -Every rule in this chapter applies identically to both — they are properties of -being inside a game loop, not of how you got there. +is an **Oxide plugin**, C# loaded by a closed server's own mod framework and +hooking published events. Every rule in this chapter applies identically to both — +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 layer is one file: `overlay/Scripts/Custom/Bridge/BridgeLink.cs`. It is C# against