docs(runicnpc): stage 4 decisions D249–D251 #306
@@ -5,7 +5,8 @@
|
||||
decided with it. **Stage 1 measured 2026-09-30** (§9): six answers on both rigs; D231 was decided with it.
|
||||
**Stage 2's design answered 2026-09-30:** D232–D238 (§0), which reshape stage 2 (§9). **Stage 2 built and tested
|
||||
2026-09-30** on both rigs (§9); its API is [API.md](API.md). **Stage 3's design answered 2026-09-30:** D239–D242
|
||||
(§0). **Stage 3 built and tested 2026-09-30** on both rigs (§9); its in-game walk waits for a player.
|
||||
(§0). **Stage 3 built and tested 2026-09-30** on both rigs (§9); its in-game walk waits for a player. **Stage 4's
|
||||
design answered 2026-09-30:** D243–D252 (§0).
|
||||
|
||||
RunicNPC is Runic Gateway's own NPC plugin for Rust servers, in its own repository,
|
||||
[`RunicGateway/runicnpc-rust`](https://gitea.whitlocktech.com/RunicGateway/runicnpc-rust). It runs on Oxide and
|
||||
@@ -63,6 +64,10 @@ architectural or design decision is implemented.
|
||||
| **D246** | **The map's placement form has `/rnpc place`'s options** (D242): profile, count, respawn, each or group, movement and radius. The server names the placement, as in game (D241) (stage 4). | The profile only, everything else edited afterwards. |
|
||||
| **D247** | **Kills are counted by profile name, per server, by default. Each site profile can choose otherwise** with a "kills count" setting: *this server* (the default), *every server with a profile of this name*, or *this profile only* (the site profile, on whichever servers it is pushed to). The org lead's words: "by name per server (default) with options for the server admin to choose different ways" (stage 4, refines D225). | One fixed rule; one site-wide setting; one setting per server. |
|
||||
| **D248** | **Stage 4 is one stage, with a PR in each of its four repositories plus docs, walked once end to end** (stage 4). Its wire changes join protocol 13, which is not yet released. | Split into 4a (wire), 4b (site) and 4c (shipping), each walked before the next. |
|
||||
| **D249** | **RunicNPC gets API 3 in stage 4, a fifth PR, in `runicnpc-rust`**: a call that creates a placement and names it as `/rnpc place` does (D241, D246), puts a map point on the ground and checks it against the navmesh (D245), and a hook raised whenever a placement changes, so an edit made in game reaches the site at once. The bridge only calls it (stage 4). | The bridge copying the naming rule and checking the placements every minute. |
|
||||
| **D250** | **Per-profile kills are shown on the player's public stats ("Warden kills: 3"), in a "kills of a profile" title category, and as a leaderboard the visitor picks a profile for** (stage 4, D225, D247). | The player page and titles only; titles only. |
|
||||
| **D251** | **Where an adopted server profile and a site profile share a name on that server, the site's wins** (stage 4, refines D244). The server's own is still imported, marked "replaced" and kept for an admin to restore, and that server's placements take the site profile's values. | The adopted one winning on its server, with the site's profile skipping it. |
|
||||
| **D252** | **A player's per-profile kills are shown by opening their row in a server's leaderboard** ("Warden 3 · Bandit 12", for the wipe the page shows), and to the player on their own Player → Rust page. The module has no public player page, and stage 4 adds none (stage 4, the "player's public stats" of D250). | A new public player page; the profile leaderboard only. |
|
||||
|
||||
**Borrowing, not copying.** NpcSpawn states no licence at all, so its source grants us nothing and is read only as a
|
||||
description of *what* can be done in Rust. HumanNPC is MIT on uMod, which is GPL-compatible, but §1.2 rules out its
|
||||
@@ -684,8 +689,12 @@ Across four repositories, one PR in each plus docs, walked once end to end (D248
|
||||
2026-09-30 are D243–D248: the event picker shows profiles and Rust's own scientists (D243); a server's own profiles
|
||||
are adopted, not replaced, on the first push (D244); placements are listed, edited and created from the live map
|
||||
with `/rnpc place`'s options (D245, D246); and kills are counted by profile name per server unless a profile says
|
||||
otherwise (D247).
|
||||
otherwise (D247). Three more answers followed the same day: RunicNPC itself gets API 3, a fifth PR (D249); per-profile
|
||||
kills are on the player's public stats, in titles and on a leaderboard (D250), a player's own shown by opening their leaderboard row (D252); and where an adopted profile and a site
|
||||
profile share a name, the site's wins (D251).
|
||||
|
||||
- **RunicNPC (API 3, D249):** a call that creates a placement and names it as in game, from a map point it puts on
|
||||
the ground and checks against the navmesh; rename and respawn as calls; a hook raised whenever a placement changes.
|
||||
- **Rust-Plugins (the bridge):**
|
||||
- hello reports RunicNPC's presence and API version;
|
||||
- `world.place` for an NPC takes a profile, and the placing is RunicNPC's;
|
||||
@@ -705,7 +714,11 @@ otherwise (D247).
|
||||
own scientists in the picker (D243);
|
||||
- triggers `rust.npc.died` and `rust.npc.health`, so a phase can wait for "8 guards died" (waves) or "the boss
|
||||
below 50%";
|
||||
- per-profile stats and titles, counted as each profile says (D247).
|
||||
- per-profile stats and titles, counted as each profile says (D247): on the player's public stats, as a title
|
||||
category, and as a leaderboard ranked by the profile a visitor picks (D250); one player's by opening their
|
||||
leaderboard row, and a player's own on Player → Rust (D252);
|
||||
- an adopted profile whose name a site profile already has on that server is kept as "replaced", restorable
|
||||
(D251).
|
||||
- **Installer and egg:**
|
||||
- RunicNPC becomes a third artefact in the Rust bundle, pinned and checksummed like the plugin and the sidecar
|
||||
(D224);
|
||||
|
||||
Reference in New Issue
Block a user