What the rigs' stage 5 runs found in the plugin:
- an escort whose charge was destroyed was never released: Unity's ==
says a destroyed entity is null, so CheckEscort returned before it
looked. It now tests the reference itself (D269);
- our own fight's line of sight no longer uses Rust's CanSeeTarget for an
NPC target: its rays are unbounded, so on open ground they run past the
target into the terrain behind it. A bounded linecast to the target's
centre, which counts the target's own collider as seen;
- a rocket's line of sight: Rust's sensed one for a real player, ours for
an NPC or an animal, which are never in Rust's player memory.
tools/RunicNpcTest.cs 0.5.0 adds `rnt.run s5`: 52 checks of the faction
table and its refusals, faction fights, the leash, shooting back, the alarm,
allies spared and defended (players and buildings), escort, the guard,
the tether, PVE, turrets (`ignore` through the hook, `always` on the map's
own sentries with the org lead's condition: no stock scientist or bandit
guard ever targeted), and the kit's extras used up. Also `rnt.duel`,
`rnt.kitprobe`, `rnt.rocketprobe` and `rnt.list`, for looking.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
Stage 5's behaviour (docs runicnpc/PLAN.md, D253-D272):
- profiles gain faction, relations (exceptions), alertRadius, turrets,
hurtByPlayers, hurtsPlayers and kitUse, and the guard role; the faction
table rides in profiles.json, one row per pair, both ways (D254, D268);
- our own sensing and fight beside Rust's design: only the factions a
profile hunts, within its leash of its anchor (D263), the target made
Horror for the length of our own shot, and Rust's attack routine;
- shooting back at whoever hurt it (D268), the alert radius (D256), clan,
team or player allies that are never targeted and are defended with
what they own (D257), escort as an order that walks home when its
charge is gone (D269), and a placement's tether through ZoneManager
(D272);
- turrets: ignore through CanBeTargeted, and always through a Harmony
patch on the safe-zone sentries for our always NPCs only (D267);
- the kit's extras, each opted into and used up: heal, melee,
flamethrower, grenades and rockets (D260, D265);
- TruePVE/NextGenPVE answered both ways unless a profile turns a direction
off, and the opt-out enforced by RunicNPC itself (D261, D271);
- API 4: RunicNpc_Factions, _SetFactions, _Escort, _Ally, _Tether and the
OnRunicNpcEscortEnded hook; rnpc follow, rnpc.faction and tether=.
Compiled and loaded on both rigs (Oxide and Carbon); the sentry patch
applies on both.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY