docs(rust): the last fixes' docs (N1 N2 W20 W22 W23) and stage 4's core docs
Stage 5 of PLAN_LAST_FIXES (docs#366). - OPERATING.md: a RaidableBases section. Change its config with a restart, never a reload (N2); switching to the free edition rewrites a paid pack's profiles (N1). - PLAN_REDESIGNS 14.3.4: no manual retry for Dangerous Treasures (Q39, W20); 11.4: which hook rbevent setowner raises (W23); 9.1 status. - PLAYER_WALK: rows 2.2, 2.8 and 2.9, Before you start item 8 (BetterChat and the four title rules), Carbon's share trimmed to 2.11 (W22, W23). - PROTOCOL: 20.5 world.error already-out (W3), 20.12 the rollback's log is RaidableBases' own (W9) and setowner's two hooks (W23). - Core, from website#219: MODULE_SYSTEM 2.5 and MODULE_API 4.2 (one module at boot, W19), MODULE_API and EVENTS L (a resource's until read at reconcile, W1), EVENTS D/I/K and BACKEND_DESIGN (a draft's dry run carried by fingerprint, W5), EVENTS observability (W2's words). - PLAN_LAST_FIXES: status, Q37-Q40 answers, 7 updated, 8 what was built. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -451,6 +451,12 @@ live walk ([`STEAM_SIGNIN.md`](../website/STEAM_SIGNIN.md) §6) comes first beca
|
||||
the rest. Linking A's Steam account on the site makes it A's Rust link (D392), and every reward row
|
||||
below needs a linked account.
|
||||
|
||||
> **Walked 2026-10-21** with A, on Rust 25902425, Oxide 2.0.7830 and Carbon 2.0.262. The rows A could walk
|
||||
> alone passed, except that 4.1 stopped at steamcommunity.com by choice and 4.4 was not run. The results, and
|
||||
> what is still owed with B, are in
|
||||
> [`PLAN_LAST_FIXES.md`](../modules/rust/PLAN_LAST_FIXES.md) §1 and §6. Rows 2.2, 2.8 and 2.9 and *Before you
|
||||
> start* item 8 were corrected afterwards (W22, W23), so they read as the game behaves.
|
||||
|
||||
**Before you start:**
|
||||
|
||||
1. **Both rigs on the latest builds.** Rust, Oxide and Carbon production builds are checked and
|
||||
@@ -475,6 +481,11 @@ below needs a linked account.
|
||||
`127.0.0.1`).
|
||||
7. **For row 2.5:** A's Steam name changed for the length of that row to one with a space and a quote, such as
|
||||
`Walk "Q" A`. Rust reads the name at connect, so A rejoins after changing it.
|
||||
8. **Titles in chat, for rows 2.1, 2.4, 2.12 and 2.13.** **BetterChat** 5.2.15 on both rigs, because titles
|
||||
reach chat only through it (PROTOCOL §18). On the walk site, a title rule on each server for the four columns
|
||||
those rows read: raids (*Warlord*), the richest (*Magnate*), `treasureswon` (*Treasure Hunter*) and
|
||||
`guardedwon` (*Warden*). *(Added 2026-10-22, W22: the first copy of this list named neither, and the Oxide
|
||||
rig's BetterChat and the title rules were set up during the walk.)*
|
||||
|
||||
### Part 1 — Steam sign-in, on the web
|
||||
|
||||
@@ -493,14 +504,14 @@ below needs a linked account.
|
||||
| # | Do this | You should see |
|
||||
|---|---|---|
|
||||
| 2.1 | **RaidableBases.** Staff spawn a raid base from a run near A. A raids it to completion | The feed names A, the raids column counts it, and *Warlord* is earned |
|
||||
| 2.2 | A buys a base with RaidableBases' buy command, then staff lock one to A (`rbevent setowner A`) | A feed line for the purchase and one for the lock (D390) |
|
||||
| 2.2 | A buys a base with RaidableBases' buy command, then staff lock one to A (`rbevent setowner A lockout`) | A feed line for the purchase and one for the lock (D390). Without `lockout`, `rbevent setowner A` reads as a second purchase, not a lock (W23) |
|
||||
| 2.3 | Staff spawn a base from a run with PvP off, a set NPC count, and locked to A. A raids it | Each setting holds in the game: no PvP damage, that many NPCs, and nobody but A can raid it |
|
||||
| 2.4 | **Economics.** A pay step pays the top three of a tally. A is one of the three (the other two are stand-ins) and is **offline** at the payout. A then joins | A popup on waking with the amount. A's balance shows on the Rust account page. Once A is the richest above the starting balance, *Magnate* shows in chat |
|
||||
| 2.5 | **Command reward**, online: a *Reward by console command* step with `{steamid}` and `{name}` to A, under the name from item 7 | The command runs with A's id and the whole name, quote included, and A gets the reward |
|
||||
| 2.6 | **Backpacks.** A fills a backpack and a second page. Staff open the staff view | Both pages, full |
|
||||
| 2.7 | A opens their own backpack on the Rust account page, then requests a stand-in's | A's own shows. Another player's is refused |
|
||||
| 2.8 | A *Bigger backpack* step for A. A puts items on the extra page, and the run ends. Repeat with A's inventory full | First the items move to A's inventory, then they land on the ground |
|
||||
| 2.9 | **Permission rewards (§12.9, D333).** A *Permissions until the event ends* step with `autodoors.use`, A online. Repeat with A offline at the grant, then A joins | The message in chat and as a popup, online and on the next wake. Doors close by themselves while the run lasts and stop when it ends |
|
||||
| 2.8 | A *Bigger backpack* step for A. A puts items on the extra page, and the run ends. Repeat with A's inventory full | Backpacks first moves the items into free slots on the pages A keeps. Only what does not fit there goes to A's inventory, and with the inventory full it lands on the ground. To see the inventory and the ground, fill the pages A keeps first (W22) |
|
||||
| 2.9 | **Permission rewards (§12.9, D333).** A *Permissions until the event ends* step with `autodoors.use`, A online. Repeat with A offline at the grant, then A joins | The message, online and on the next wake. It comes in chat **or** as a popup, whichever the step chose, not both (W22); run it once each way to see both. Doors close by themselves while the run lasts and stop when it ends |
|
||||
| 2.10 | Staff grant A `autodoors.use` for good first, then repeat 2.9 | At the run's end A **keeps** it (one already held is kept) |
|
||||
| 2.11 | **Carbon:** A joins the Carbon rig once, then a *Bigger backpack* step and a §12.9 lend and give to A | All three **land** in the game. A Steam id Carbon has never seen cannot get them (§29.8, W17), which is why stand-ins could not prove this |
|
||||
| 2.12 | **Dangerous Treasures:** a chest started from a run, and A wins it | The feed line, the `treasureswon` column, *Treasure Hunter* |
|
||||
@@ -528,9 +539,11 @@ below needs a linked account.
|
||||
|
||||
### Carbon's share of the first player walks
|
||||
|
||||
[`PLAN_FIXES.md`](../modules/rust/PLAN_FIXES.md) §8 asks for the Carbon subset of the walks above. What RunicNPC's
|
||||
9d and the step-2 walk already covered is left out. That leaves: the events walk's steps 1–5, and the rewards walk's
|
||||
steps 1, 3 and 6, on Carbon with A. The map walk's Carbon steps are in 3.4.
|
||||
**On Carbon, only row 2.11 is walked** (the org lead, 2026-10-21). The bridge file is the same on both
|
||||
frameworks, and Carbon's halves of every integration passed without a player on 2026-10-19
|
||||
([`PLAN_REDESIGNS.md`](../modules/rust/PLAN_REDESIGNS.md) §9.1), so the rest of the Carbon subset that
|
||||
[`PLAN_FIXES.md`](../modules/rust/PLAN_FIXES.md) §8 asked for (the events walk's steps 1–5 and the rewards walk's
|
||||
steps 1, 3 and 6) was dropped. The map walk's Carbon steps are still in 3.4, which needs B.
|
||||
|
||||
**What counts as a pass:** a Steam account linked on the site signs its owner in and is their Rust link, an
|
||||
unlinked one signs nobody in, and someone else's Rust link cannot be taken. A real player is paid, rewarded,
|
||||
|
||||
@@ -2989,8 +2989,12 @@ credit block. A protocol-13 plugin still sends them, and the site still adds the
|
||||
**`EventsMaxWorldCalls`** (config, default and ceiling 10) world events per run, counted over every call the
|
||||
run made; behind `EventsEnabled`. A count the game partly ran answers `called` below `count`.
|
||||
- Refusals are `world.error`: `not-ready`, `events-disabled`, `malformed` (no key or run, or a key over 128
|
||||
characters), `bad-event`, `bad-count`, `not-placeable`, `too-many`, §15's location refusals, and `refused`
|
||||
(the game had nothing to run).
|
||||
characters), `bad-event`, `bad-count`, `not-placeable`, `too-many`, §15's location refusals, `refused`
|
||||
(the game had nothing to run), and **`already-out`**: a `travelling_vendor` call while a Travelling Vendor is
|
||||
already out. The game runs one at a time, so nothing is called, counted toward `EventsMaxWorldCalls` or kept
|
||||
(W3, Rust PLAN_LAST_FIXES; before, the call answered `called: 1` and spawned nothing). Module-Rust reads it as
|
||||
a success that called 0, and the step's note says *"a Travelling Vendor is already out on Main, and the game
|
||||
runs one at a time; nothing new was called"*.
|
||||
- `world.monuments` gains `maxWorldCalls`.
|
||||
|
||||
**Hello and status gain `console`: `{ "plugins": true | false }` (D363).** Whether this framework runs a plugin's
|
||||
@@ -3568,8 +3572,11 @@ the old assembly, and the helper patches again. `rgr.status` prints its state.
|
||||
- **The unload trap (§11.4.2):** a RaidableBases unload raises `Completed` for every live base with no owner
|
||||
and no raiders. **Such a completion is neither sent nor counted.**
|
||||
- `raid.purchased` and `raid.locked` come from the paid edition's `OnRaidableBasePurchased` and
|
||||
`OnRaidableBaseLocked`: a player bought a base, or an admin ran `rbevent setowner` (D390). **Lockouts have no
|
||||
hook in either edition and are not sent.**
|
||||
`OnRaidableBaseLocked` (D390). A player buying a base raises `raid.purchased`. An admin's
|
||||
**`rbevent setowner <player> lockout`** raises `raid.locked`. **The plain `rbevent setowner <player>` raises
|
||||
`raid.purchased`**, as if the player had bought it, because RaidableBases' `TrySetPayLock` takes
|
||||
`paylock = !args.Contains("lockout")` (W23, found in the end walk). **Lockouts** (the per-player cooldown
|
||||
after a raid) **have no hook in either edition and are not sent.**
|
||||
- `despawnAt` is the plugin's despawn time, in unix milliseconds.
|
||||
- **None is sent while the world is not live** (§20.5's rule). A completion is still counted.
|
||||
|
||||
@@ -3666,7 +3673,12 @@ reloads the profiles as `rb.reloadprofiles` does**, and the reply is `pending` a
|
||||
(§19.1). The `config.outcome` (`reload: "RaidableBases"`) settles when the helper's reload finishes: every
|
||||
written profile in the plugin's table is `reloaded`; one that is not is **rolled back** and the old file
|
||||
reloaded. Thirty seconds without a finished reload rolls back too. RaidableBases rewrites every profile file as
|
||||
it reloads, so the outcome carries each file's version as it is on disk afterwards.
|
||||
it reloads, so the outcome carries each file's version as it is on disk afterwards. **A rollback's log is
|
||||
RaidableBases' own** (W9, Rust PLAN_LAST_FIXES): the bridge marks the server log's position when the job
|
||||
starts, and reads back only RaidableBases' entries written since (tagged `[RaidableBases]`, which is how it
|
||||
logs on both frameworks, or its title), without their stacks. When the failed profiles are named, only the
|
||||
entries that name them are kept. When RaidableBases said nothing, there is no log, and the reason line stands
|
||||
alone. Before, the outcome carried the tail of the server log, which is mostly other plugins' lines.
|
||||
|
||||
**Hooks.** `OnRaidableBaseStarted`, `OnRaidableBaseEnded`, `OnRaidableBaseCompleted`, `OnRaidableBasePurchased`
|
||||
and `OnRaidableBaseLocked` join `rg.hooks`' list.
|
||||
|
||||
Reference in New Issue
Block a user