docs(runicnpc): stage 9d server-side walk; animals, heals and zone flags fixed (D320-D322)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -142,6 +142,9 @@ architectural or design decision is implemented.
|
||||
| **D317** | **While Oxide's staging build is behind Rust's, the drill waits for it, for up to three days, opening nothing; after that it reports "Oxide has not caught up".** Oxide's build carries its own patched `Assembly-CSharp.dll`, the plugin compiles only against it, and a server on a pair that does not match dies at boot. "Behind" is measured, not guessed from dates: a type or member Rust's own assembly declares that Oxide's lacks (stage 9c; the org lead, from a concrete Monday-to-Wednesday example). | Running anyway and saying so; a publicizer step so the compile never depends on Oxide. |
|
||||
| **D318** | **The drill works only in the seven days before each monthly forced wipe (the first Thursday), not every day.** Rust changes on the forced wipe, so a week ahead leaves time to fix what breaks. In that week it checks each new staging build once, and D317's wait applies inside it; it is scheduled daily and stops at its first step outside the week. A run by hand always goes ahead. Narrows D308 (stage 9c; the org lead: "we can run the staging test pipeline like once a month about a week ahead to give lead time to fix it if it breaks but don't need it nightly"). | Nightly, as D308 had it. |
|
||||
| **D319** | **The staging rig is a 3500 map (seed 1234) with 8 GB, not 2000 at 6 GB.** Stage 5's five simultaneous fights need a 280 m line of open navmesh 300 m from every monument. Measured on built navmesh (20000 samples, the harness's own search), spots with that line at 300 / 250 / 200 m: 2000/1234 0 / 53 / 70; 3000/1234 0 / 0 / 8; 3000/981448696 0 / 0 / 6; **3500/1234 5 / 14 / 26**. Every other harness check passed on the 2000 map (226 of 227). The org lead first chose 3000, then, on those numbers, "bump it to 3500 … or drop to like 250m": 3500 has room at 300 m, so the clearance stays. A new 3500 map takes about 18 minutes to generate and build its navmesh; it peaked at 5.3 GB. Amends D307 (stage 9c). | A 200 or 250 m clearance on small maps; more seeds; skipping the check on small maps. |
|
||||
| **D320** | **Rust's own animals count as animal kills again.** They are now `Rust.Ai.Gen2.BaseNPC2` (stag, boar, wolf, bears, big cats, crocodile, farm animals, critters, sea life), not the `BaseNpc` the bridge tested, so no animal kill counted as an animal or an NPC kill. Every `BaseNPC2` but `ScientistNPC2` is an animal; `ScientistNPC2`, the one person among them, is a human NPC kill. Found by the 9d server-side walk (stage 9d; the org lead: "Fix the animal kill things"). | Leaving it for later. |
|
||||
| **D321** | **A heal on another player counts again.** `OnHealingItemUse` is `(tool, fromPlayer, toTarget)`; the bridge's two-parameter handler read the healer as the target and dropped every heal as healing yourself, so "Players healed" counted revives only. The bridge reads the target, and one act of help counts once whichever of its two hooks comes first (a syringe revive raises the heal first) (stage 9d; the org lead chose the fix from an example). | Only revives count; dropping the title. |
|
||||
| **D322** | **An event's zone enforces its flags.** ZoneManager 3.1.14 subscribes the hooks behind its flags only for the zones it had when it loaded, so a zone opened later through its API enforced none of them: the walk shot a player dead in a PvpGod zone and built in a NoBuild one. RunicGatewayZones 0.2.0 has ZoneManager run its own `UpdateHookSubscriptions` a tick after any zone is made, the same moment it already enters the players inside (stage 9d; the org lead asked for the ZoneManager patch). | Patching ZoneManager's file; asking ZoneManager's author. |
|
||||
|
||||
**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
|
||||
@@ -1745,6 +1748,33 @@ far:
|
||||
- Stage 9's own: an event on a server without RunicNPC refused with its reason, and the installer's RunicNPC path
|
||||
from a real bundle.
|
||||
|
||||
**9d, the server side (2026-10-07).** The org lead asked for everything a server can prove to be done without
|
||||
him, leaving the minimum to play. Rust 25681086, Oxide 2.0.7801, Carbon 2.0.262, the edge code; the walk site at
|
||||
website `main` with module-rust `edge`. A rig-only plugin (never shipped) made **stand-in players** with
|
||||
Steam-shaped ids that act through Rust's own code: a weapon's `ServerUse` or a player's hit report, a craft
|
||||
finished, `Planner.DoBuild`, `DoRepair`, a medical tool's `GiveEffectsTo`, a mission's `MissionSuccess` and
|
||||
abandon, an APC and a patrol helicopter brought down, `/link` through the bridge, and an NPC's hit landing on a
|
||||
stand-in. Each result was then read on the site, in the browser and in the app.
|
||||
|
||||
- **Passed, both rigs unless noted:** every §5.7 title condition but rockets and grenades (their hooks fire only
|
||||
from a client); the death screen named by the profile (`AttackerInfo`); the killfeed's NPC and profile; a
|
||||
stand-in linked through `/link`, its NPC kills on Player → Rust; the harness's commands, placements and floors,
|
||||
with placements back after a restart; escort; a real clan as an ally, defended against a raider (Oxide); the
|
||||
four example profiles on a fresh first boot (the staging rig); named markers and a bigger boss marker, and the
|
||||
event page's lines in the browser and the app; an event on a server without RunicNPC refused with its reason.
|
||||
- **Found and fixed:** D320 (animals), D321 (heals), D322 (an event zone's flags). Each was retested on both rigs:
|
||||
two animal kills and a bandage and a syringe revive moved npcKills, animalKills and healed by exactly two each,
|
||||
and an event's Arena zone, without the helper, let a player die and a foundation stand; with 0.2.0, the player
|
||||
took no damage in forty hits and the foundation was removed. With the exemption the flags step aside (PvpGod by
|
||||
ZoneManager's design needs both players exempt; NoBuild the builder).
|
||||
- **Walk artifacts, not faults:** Rust's senses and `BasePlayer.FindByID` know only connected players, so a
|
||||
stand-in is placed on the active list for a repair or helicopter credit, and an NPC's hit is landed for it; the
|
||||
walk site's profile pushes replace the harness's set, so the harness runs with the site stopped.
|
||||
- **Left for the player, one session per rig:** the death screen's portrait, the `/rnpc` replies in chat, the boss
|
||||
bar and its lines, press E (Oxide), a locked crate's timer below zero, one rocket and one grenade, the zone
|
||||
messages and the dome by day and night, and a chat title (Carbon, which has BetterChat). The installer's path
|
||||
waits for the release (9e).
|
||||
|
||||
**9e. The cutover and release (D311, D313).** Only after the walk passes. In order: `runicnpc-rust` `edge` → `main`
|
||||
as v1.0.0 (its Gitea release is the only download); `rust-plugins`, `rust-link` and `installer` `edge` → `main`,
|
||||
and the bundle that pins all four; `module-rust` `edge` → `main` with RunicNPC required. Each release is checked
|
||||
|
||||
Reference in New Issue
Block a user