diff --git a/modules/rust/PLAN_REDESIGNS.md b/modules/rust/PLAN_REDESIGNS.md index eed572a..d716f3a 100644 --- a/modules/rust/PLAN_REDESIGNS.md +++ b/modules/rust/PLAN_REDESIGNS.md @@ -527,7 +527,7 @@ shirt and a weapon; build and repair a wall; bandage and revive another player; destroy an APC; shoot down a helicopter; finish a mission and abandon one. Each count is checked in the tally frame and on the titles screen. -### 5.8 As built (2026-09-28; not yet walked) +### 5.8 As built (2026-09-28/29; compiled on both rigs, not yet walked) Rust-Plugins `feat/title-conditions`, Module-Rust `feat/title-conditions`. The wire is [`PROTOCOL.md`](../../rust-link/PROTOCOL.md) §19.10, and the admin API is the module's swagger fragment @@ -564,9 +564,24 @@ walk database held one such rule. built rather than waiting for the walk, because proving it unnecessary needs a helicopter shot down first. -**Still to do before the walk:** the weapon lists are from knowledge of the game, not yet read off the -rig's item list. A read-only probe that lists every held item's prefab and class is written, and it runs -once the rigs' storage is back (it was unmounted on 2026-09-28, §5.7's walk waits on it too). +**Read off the rig, 2026-09-29.** A read-only probe walked the live server's `ItemManager.itemList` and named +each held entity's prefab and class. The lists in `lists.js` are that output, not memory: the revolvers are +`pistol_revolver`, `python` and `hc_revolver` (there is no `revolver.entity`); the bows include the legacy +bow, the mini crossbow and the bowless crossbow, and leave out the speargun, a crossbow underneath; melee is +every `BaseMelee` except the pies (`Food` is a `BaseMelee` too). C4, the satchel and the beancan are all +`TimedExplosive` subclasses, so §5.1's explosive test holds. The same probe corrected three members the +plan had assumed, each of which would not have compiled or would never have been called: + +- `ItemCraftTask` has no owner; the crafter is `ItemCrafter.owner`. +- A mission's assignee is the hook's third argument (`MissionSuccess(instance, assignee)`); the instance + has no accessor for it. +- `MedicalTool.GiveEffectsTo` now takes an `IMedicalToolTarget`, so `OnHealingItemUse` takes its target as + `object` and counts only a player. + +**Compiled on both rigs, 2026-09-29.** `rust-oxide` (a fresh install on the published egg) and +`rust-carbon`: all 45 hooks bound, and `OnEntityTakeDamage` fires on world damage with nobody on (53 and +109 in the first half-minute), which is the cost the helicopter credit was expected to have. The other nine +new hooks need a player: that is §5.7's walk. --- diff --git a/rust-link/PROTOCOL.md b/rust-link/PROTOCOL.md index 00fb130..83ea443 100644 --- a/rust-link/PROTOCOL.md +++ b/rust-link/PROTOCOL.md @@ -2268,13 +2268,13 @@ frame from an older plugin has none: | `headshots` | the killing blow's `HitInfo.isHeadshot`, any victim | | | `bestPvpM`, `bestPveM` | the killfeed's distance | **This interval's maximum, not a sum.** The site keeps the running best with `GREATEST`. PvE is NPCs and animals | | `apcKills`, `heliKills` | `OnEntityDeath`, victim `BradleyAPC`; `PatrolHelicopter` or `CH47Helicopter` | The killing blow's player (D174). A patrol helicopter usually dies by crashing and its blow names nobody, so **the last player who hurt it within 60 s** is credited instead, recorded by `OnEntityTakeDamage` for those three types only | -| `crafted` | `OnItemCraftFinished`, by `item.info.category` lower-cased | Every category is sent; the site reads `attire` and `weapon`. Counts `item.amount` | +| `crafted` | `OnItemCraftFinished`, by `item.info.category` lower-cased | Every category is sent; the site reads `attire` and `weapon`. Counts `item.amount`. The crafter is `ItemCrafter.owner` (the task carries none) | | `built` | `OnEntityBuilt` placing a `BuildingBlock` | A deployable is not a structure | | `repaired` | `OnStructureRepair` | The hook fires on every hammer hit **before** the game decides there is anything to repair, the resources for it, or no recent attack. So the health is read then and again next tick, and only a hit that raised it counts | -| `healed` | `OnHealingItemUse` on **another** player; `OnPlayerRevive` | Yourself never counts (D174). A syringe on a downed player raises both hooks for one use; it counts once | +| `healed` | `OnHealingItemUse` on **another** player; `OnPlayerRevive` | Yourself never counts (D174). A syringe on a downed player raises both hooks for one use; it counts once. The heal's target is an `IMedicalToolTarget` in current Rust, so the bridge takes it as `object` and counts only a player | | `rockets` | `OnRocketLaunched` | | | `explosives` | `OnExplosiveThrown`, `OnExplosiveDropped` | A `TimedExplosive` that deals damage: a supply signal and a smoke grenade go through the same hooks and do not count | -| `missions` | `OnMissionSucceeded` | Rust's own NPC missions (D173). A failed or abandoned one raises a different hook and never counts | +| `missions` | `OnMissionSucceeded(mission, instance, assignee)` | Rust's own NPC missions (D173), credited to the hook's `assignee`. A failed or abandoned one raises a different hook and never counts | **All ten hooks are `void`** (§8.7). Four of them can veto — `OnStructureRepair`, `OnHealingItemUse`, `OnPlayerRevive`, and `OnEntityTakeDamage`, which cancels the damage — and none returns anything. All ten