docs(rust): plan fixes — D173 quests are Rust's own missions, D174 title rules

D173: "Quests completed" (Wayfarer) counts the missions Rust's NPCs
already hand out; no quest plugin. uMod's catalogue names no mission
hook and CARBON.md lists none, so the detailed plan starts with a rig
spike: a framework hook if one exists at build time, else reading the
player's mission list at each tally flush, else a D168 helper patch.
D174 adopts §4.6's recommended title rules (best columns for kill
distance, weapon-class kills count every credited kill, killing-blow
credit for APC/heli, heals of others only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
2026-09-26 16:32:38 -05:00
parent 7834ef1a88
commit 7743cec1fb
3 changed files with 34 additions and 16 deletions

View File

@@ -1,7 +1,7 @@
# `module-rust` — plan fixes
**Status:** plan, awaiting the org lead's approval, 2026-09-26; its four open questions were answered the same
day (D169–D172). **Everything in it — fixes and redesigns alike — lands before Module-Rust's cutover
day (D169–D174). **Everything in it — fixes and redesigns alike — lands before Module-Rust's cutover
(phase 19, [`PLAN.md`](PLAN.md) §34, D145; D169).** Everything here comes from the first walk of
[`PLAYER_WALK.md`](../../rust-link/PLAYER_WALK.md) with a real player in the game — the Oxide pass, walked by
the org lead on the `rust-oxide` rig with every frame checked on the console, the sidecar and the site's
@@ -56,6 +56,8 @@ Taken by the org lead during and straight after the walk.
| **D170** | **An expired zone is marked expired on the site.** Once F13 makes `world.expired` recognisable, ingest marks the run's resource row `expired`. This amends D96's "the website maps it to nothing". F14. |
| **D171** | **Steam sign-in belongs to the website's own plan and is part of the base website**, exposed to modules however they need it. It leaves this document (§4.8). |
| **D172** | **Chat titles use all twenty-three conditions the org lead listed, under new names** (§4.6). Rejected: a first subset. |
| **D173** | **"Quests completed" counts Rust's own missions** — the ones the game's NPCs already hand out on the map. No quest plugin. How the bridge detects a completed mission is settled by a spike on the rig (§4.6), because uMod's catalogue names no mission hook and [`CARBON.md`](CARBON.md) lists none among Carbon's own. |
| **D174** | **The title rules §4.6 recommended are adopted:** the two kill-distance titles are *best* columns (the longest single kill), not sums; a weapon-class kill counts any kill the player is credited with (players, NPCs, animals), from weapon lists kept in one place; the APC and the helicopter credit the killing blow; healing counts only other players. |
## 2. Fixes
@@ -288,20 +290,36 @@ path requires (PROTOCOL.md §8.7), and each must be checked on Carbon, whose cat
| Players healed | **Mender** | healing *another* player — `OnHealingItemUse` on someone else, and `OnPlayerRevive` |
| Rockets fired | **Artillerist** | `OnRocketLaunched` |
| Explosives thrown | **Demolitionist** | `OnExplosiveThrown` and `OnExplosiveDropped` |
| Quests completed | **Wayfarer** | a quest plugin — none is installed; choose one, or a D168 helper |
| Quests completed | **Wayfarer** | Rust's own NPC missions (D173) — detection settled by the spike below |
What the detailed plan has to settle before building:
The rules, adopted (D174):
- **Two kinds of column.** Every existing leaderboard column is a sum; the two distance titles need a *best* (the
- **Two kinds of column.** Every existing leaderboard column is a sum; the two distance titles are a *best* (the
largest single value). The tally carries the interval's maximum, and the site keeps the running best.
- **What a weapon-class kill counts.** Recommended: any kill the player is credited with — players, NPCs and
animals — so Fletcher rewards a hunter as well as a raider. The weapon lists (bow, blade, revolver) are named
sets in one place, so a Rust update adds a weapon by editing a list.
- **Credit for a vehicle kill.** The APC and the helicopter are usually killed by several people. Credit the player
who dealt the killing blow (`HitInfo.InitiatorPlayer`) — simple, and the rule the killfeed already uses.
- **Healing someone else**, never yourself — otherwise Mender is earned by bandaging after every fight.
- **A weapon-class kill counts any kill the player is credited with** — players, NPCs and animals — so Fletcher
rewards a hunter as well as a raider. The weapon lists (bow, blade, revolver) are named sets in one place, so a
Rust update adds a weapon by editing a list.
- **A vehicle kill goes to the killing blow.** The APC and the helicopter are usually killed by several people;
credit the player who dealt the last hit (`HitInfo.InitiatorPlayer`) — the rule the killfeed already uses.
- **Healing counts only other players**, never yourself — otherwise Mender is earned by bandaging after every fight.
- **Counters are aggregates** (rule 2): all of these ride on `player.tally`, never one frame per shot, craft or swing.
- **Quests** wait on a quest plugin; the other twenty-two do not.
**Wayfarer: Rust's own missions (D173).** The game already has quests — the missions its NPCs hand out at
monuments — so no quest plugin is installed and none is needed. What is not known is how to see one finish:
**uMod's hook catalogue ([`HOOKS.md`](HOOKS.md)) names no mission hook, and [`CARBON.md`](CARBON.md) lists none
among Carbon's own**, so the detailed plan
starts with a spike on the rig, trying in this order and keeping the first that works on both frameworks:
1. **A framework hook** the catalogues missed — check Oxide's and Carbon's current hook lists at build time, since
both grow with Rust updates.
2. **Read the game's own record.** The player object keeps its missions and their status; at each tally flush the
plugin counts the ones that became *completed* since the last flush. No hook, main thread, public fields only
(R2). The spike confirms the field names and statuses against the live server's assembly.
3. **A D168 helper** that patches mission completion (both frameworks load Harmony) and raises a hook the bridge
subscribes to — the last resort, because a patch breaks when Facepunch changes the method.
The spike's pass condition is a person on the rig taking a mission from an NPC, finishing it, and seeing Wayfarer's
count move by exactly one — and not moving for a mission abandoned or failed.
### 4.7 NPCs
@@ -374,11 +392,11 @@ After step 2 of §6, on both frameworks:
## 9. Answered, and what stays open
The four questions this plan first asked were answered on 2026-09-26: the gate (D169), F14 (D170), Steam sign-in
(D171) and the title conditions (D172).
(D171) and the title conditions (D172) — then quests (D173) and the title rules (D174).
Left for the detailed plans of §6 step 3, none of them blocking the fixes:
1. The quest plugin behind Wayfarer — or a D168 helper.
1. How a completed mission is detected — the spike in §4.6 (D173).
2. Whether the plugin or the site filters monument types (§4.5).
3. The ZoneDomes default type and stack, chosen by looking at each on the rig (§4.4).
4. The NPC route — a plugin, or extending `rust.npc.place` (§4.7).