docs(runicnpc): 9e step 1 — dome stack 3 and the PopupNotifications banner (D326-D328)
D326: a blank dome stack is 3 (module only; the wire still defaults to 1). D327: the recommended PopupNotifications banner ships as a paste block (rust-link/INTEGRATION.md §2.4), from the installer (install and update) and from the egg's install. D328: "at the plugin's defaults" is all or nothing. PLAN_REDESIGNS §3's "until it is chosen by eye" closes; rust-link/INSTALL.md says what the installer and the egg write, and that uninstall leaves it. Code: Module-Rust#36, installer#39, Rust-Link#22. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -77,6 +77,12 @@ What a run does:
|
||||
The plugin fills in every other key on its first load. An existing config is never rewritten,
|
||||
and one that names a different server stops the run and says so — the website locks a server's
|
||||
id once it has seen it.
|
||||
It also writes the **recommended PopupNotifications banner** (`PopupNotifications.json` beside it;
|
||||
[`INTEGRATION.md` §2.4](INTEGRATION.md#24-the-recommended-popupnotifications-look-optional)), but
|
||||
only where that file is missing or still exactly the plugin's own defaults. A config with any
|
||||
setting changed is kept whole. `install` and `update` both apply this rule, and the plan names
|
||||
which case it found (`popup look … banner written` or `kept`). PopupNotifications itself stays
|
||||
optional and yours to install. One that is already running shows the banner after its next reload.
|
||||
4. **Installs the sidecar**, writes its config with this server's ports, and registers its service.
|
||||
5. **Places the plugin** in `oxide/plugins/` or `carbon/plugins/`. Both frameworks load a plugin
|
||||
the moment it lands, so on a running server the bridge comes up at once; on a stopped one, at
|
||||
@@ -125,7 +131,10 @@ When you create a server from it:
|
||||
against the bundle's checksum, and only then places them: the sidecar in `rust-link/`, the plugin in
|
||||
`oxide/plugins/` or `carbon/plugins/`. `RunicNPC.cs` goes beside the plugin (its data directory is left for RunicNPC to make); a bundle
|
||||
without RunicNPC is refused. Any mismatch fails the install with the reason, before
|
||||
anything is placed.
|
||||
anything is placed. It then writes the recommended PopupNotifications banner by the installer's
|
||||
rule: only where `PopupNotifications.json` is missing or still the plugin's defaults, so a look
|
||||
you chose survives a reinstall. If that write fails, the console says so and the install still
|
||||
succeeds, because it only affects how popups look.
|
||||
|
||||
**The first boot** prints, in the console, the token the sidecar generated — **once** — and a line
|
||||
with what the website needs:
|
||||
@@ -230,7 +239,7 @@ With the installer:
|
||||
|---|---|
|
||||
| `doctor --game rust [--server-id <id>]` | Per server: the framework; whether the plugin file is still the one deployed; each helper deployed beside it, as a **warning** when missing or edited (the bridge runs without one, and the row says what that costs); RunicNPC as a **failure** when it is missing or was never installed (it is required: without it every NPC an event places is refused), and a warning when edited by hand; that the plugin's config names this server; the required uMod plugins; the service; and `/health` through to **plugin connected**. A stopped server is a warning; a running one whose plugin never connected is a failure, printed with the framework versions the plugin is known good on |
|
||||
| `update --game rust` | Moves the sidecar and every server's plugin to the current bundle, and restarts the sidecars. Always all servers together — they share one binary |
|
||||
| `uninstall --game rust [--server-id <id>] [--purge]` | Removes the service, the plugin file, its helpers and RunicNPC. **Keeps the plugin's config** and RunicNPC's `data/RunicNPC/` (an admin's placements and routes) — it is the website's, and it names the server. `--purge` also removes the sidecar config (the token) and the database. Removing the last server removes the shared binary too |
|
||||
| `uninstall --game rust [--server-id <id>] [--purge]` | Removes the service, the plugin file, its helpers and RunicNPC. **Keeps the plugin's config** and RunicNPC's `data/RunicNPC/` (an admin's placements and routes) — it is the website's, and it names the server. `--purge` also removes the sidecar config (the token) and the database. Removing the last server removes the shared binary too. `PopupNotifications.json` is never touched: it belongs to PopupNotifications |
|
||||
|
||||
With the egg: reinstall to update (above); the console is the diagnosis.
|
||||
|
||||
|
||||
@@ -137,6 +137,50 @@ Then press **Test**, which probes the sidecar and reports what came back:
|
||||
|
||||
Within a poll interval the server appears at `/rust/servers`.
|
||||
|
||||
### 2.4 The recommended PopupNotifications look (optional)
|
||||
|
||||
PopupNotifications is optional (D141). Where it is installed, news, events and zone messages can
|
||||
arrive as popups, and its stock look is a small grey box at the right of the screen, sized for one
|
||||
short line. The look we recommend is a **banner across the top of the screen**: no close button,
|
||||
Roboto Condensed Bold at 18 (chosen in RunicNPC's 9d player session, D327). Paste this over
|
||||
`oxide/config/PopupNotifications.json` (Carbon: `carbon/configs/PopupNotifications.json`), then
|
||||
`oxide.reload PopupNotifications` (Carbon: `c.reload PopupNotifications`):
|
||||
|
||||
```json
|
||||
{
|
||||
"Notification duration (in seconds)": 8,
|
||||
"Maximum notifications shown at any time": 6,
|
||||
"UI Positioning": {
|
||||
"Position of the left side of notification (0.0 - 1.0)": 0.15,
|
||||
"Position of the bottom of noticiation (0.0 - 1.0)": 0.87,
|
||||
"Width (0.0 - 1.0)": 0.7,
|
||||
"Height (0.0 - 1.0)": 0.07,
|
||||
"Space between notification (0.0 - 1.0)": 0.005
|
||||
},
|
||||
"UI Options": {
|
||||
"Show close button": false,
|
||||
"Panel color (hex)": "#2b2b2b",
|
||||
"Panel transparency (0.0 - 1.0)": 0.8,
|
||||
"Close button color (hex)": "#d85540",
|
||||
"Close button transparency (0.0 - 1.0)": 0.5,
|
||||
"Font": "robotocondensed-bold.ttf",
|
||||
"Font size": 18
|
||||
},
|
||||
"Version": {
|
||||
"Major": 0,
|
||||
"Minor": 2,
|
||||
"Patch": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **Keep the `Version` block.** PopupNotifications resets a config with no version (or one below
|
||||
0.2.0) to its defaults when it loads, which would undo the banner.
|
||||
- The key `noticiation` is PopupNotifications' own spelling. Leave it as it is.
|
||||
- **The installer and the Pterodactyl egg write this for you**, but only where the file is missing
|
||||
or is still exactly the plugin's own defaults (D328). A config with any setting changed is kept
|
||||
whole, so a look you chose is never replaced. See [`INSTALL.md`](INSTALL.md).
|
||||
|
||||
---
|
||||
|
||||
## 3. When it does not work
|
||||
|
||||
Reference in New Issue
Block a user