docs(runicnpc): example outfits and full durability (D323, D324)

Decisions from the 9d player walk, 2026-10-09: each example profile wears its own
outfit, and the example kits' items are written at full durability read from the
item definitions. API.md's note on the example kits says both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
2026-10-08 23:53:12 -05:00
parent 7e0fff96c3
commit 5c47de8445
2 changed files with 4 additions and 1 deletions

View File

@@ -403,7 +403,8 @@ route is walked back and forth. An NPC joins the route at its nearest point.
- `data/RunicNPC/state.json` (API 5): `examplesWritten`, set on the first load. That load writes the four example
kits (`rnpc_raider`, `rnpc_campguard`, `rnpc_sniper`, `rnpc_juggernaut`) into Kits' own data file, each where
its name is free and each needing the permission `kits.runicnpc` (Kits' prefix, since Kits registers it), which nobody is granted, so no player can
claim one. On a server no site manages it also adds the four example profiles (`raider`, `campguard`, `sniper`,
claim one. Each wears its own outfit (D323), and every item is written at this Rust's full durability for it
(D324). On a server no site manages it also adds the four example profiles (`raider`, `campguard`, `sniper`,
`juggernaut`). Then it reloads Kits, which reloads RunicNPC with it. **Nothing is written again, even if you
delete them** (D280, D284, D289).
- **A Kits reload reloads RunicNPC** on both frameworks, because RunicNPC requires Kits, and the NPCs it had spawned

View File

@@ -145,6 +145,8 @@ architectural or design decision is implemented.
| **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. |
| **D323** | **Each example profile wears its own outfit; the weapons of D289 stay.** The raider wears scrap armour (coffee-can helmet, roadsign jacket and kilt, hoodie, pants, boots, leather gloves); the camp guard metal (metal facemask and chest plate, long-sleeve shirt, pants, boots, roadsign gloves); the sniper hide (boonie hat, balaclava, hide poncho, pants and boots); the Juggernaut heavy plate, as before. Three shared one hoodie, pants and boots, so they read alike in game. Only a first load writes them (D284): no live server has RunicNPC yet, and the test rigs were given them by resetting `examplesWritten` (9d player walk, 2026-10-09). | One outfit for all; replacing a server's kits that still match the old ones. |
| **D324** | **An example kit's items are written at full durability, read from this Rust's item definitions when the kits are written.** Kits sets an item's condition and maximum straight from its file. The writer put 0 on armour (a metal facemask 0 of 320, heavy plate 0 of 1,000, so it barely protected) and 100 on every weapon whatever its real maximum (an M249's is 500). Now an item with a condition gets the definition's maximum and one without gets 0. The harness checks it (`s6.examples.fullCondition`). | A fixed table of maximums, which a Rust update would make stale. |
**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