feat(bridge): the faction table and an event's escort, ally and tether (runicnpc stage 5) #23

Merged
whitlocktech merged 1 commits from feat/runicnpc-stage5 into edge 2026-10-05 03:38:57 -05:00
Member

What

The bridge's half of RunicNPC stage 5 (docs runicnpc/PLAN.md, PROTOCOL.md §19.13). Joins protocol 13 (D253); no message changes shape.

  • npc.profiles answers with RunicNPC's faction table; npc.profiles.set takes factions beside profiles and sets it first (RunicNpc_SetFactions). A refused table comes back as factionsRefused, the old one kept (D254).
  • world.place with a profile takes escort (a Steam id; not on the server → escort-offline, retried), ally ({kind: clan|player, id}) and tether (the run's own zone that holds the point, else no-zone), and gives each NPC its orders through RunicNpc_Escort, _Ally and _Tether. All or nothing, as before: a refused order removes every NPC the step placed (D269, D270, D272).
  • Needs RunicNPC API 4: RunicNpcApiNeeded = 4, runicnpc_api = 4 in overlay.toml (checkPlugin.js holds them equal).

Tested

Compiled and loaded on both rigs. Walked from the site: an event's guards on Carbon carried the pushed faction, the ally and the run's own zone as their tether, and were given back at teardown; an escort who was not on the server failed the step with this bridge's sentence. node scripts/checkPlugin.js passes.

Checklist

  • I have read CONTRIBUTING.md.
  • Tested on both rigs.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). The commit carries the Co-Authored-By trailer.
  • I agree that my contribution is licensed under GPL-3.0-or-later.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What The bridge's half of RunicNPC stage 5 (docs `runicnpc/PLAN.md`, PROTOCOL.md §19.13). Joins protocol 13 (D253); no message changes shape. - `npc.profiles` answers with RunicNPC's faction table; `npc.profiles.set` takes `factions` beside `profiles` and sets it first (`RunicNpc_SetFactions`). A refused table comes back as `factionsRefused`, the old one kept (D254). - `world.place` with a `profile` takes `escort` (a Steam id; not on the server → `escort-offline`, retried), `ally` (`{kind: clan|player, id}`) and `tether` (the run's own zone that holds the point, else `no-zone`), and gives each NPC its orders through `RunicNpc_Escort`, `_Ally` and `_Tether`. **All or nothing**, as before: a refused order removes every NPC the step placed (D269, D270, D272). - Needs RunicNPC API 4: `RunicNpcApiNeeded = 4`, `runicnpc_api = 4` in `overlay.toml` (`checkPlugin.js` holds them equal). ## Tested Compiled and loaded on both rigs. Walked from the site: an event's guards on Carbon carried the pushed faction, the ally and the run's own zone as their tether, and were given back at teardown; an escort who was not on the server failed the step with this bridge's sentence. `node scripts/checkPlugin.js` passes. ## Checklist - [x] I have read CONTRIBUTING.md. - [x] Tested on both rigs. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. The commit carries the `Co-Authored-By` trailer. - [x] I agree that my contribution is licensed under GPL-3.0-or-later. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-05 01:17:29 -05:00
feat(bridge): the faction table and an event's escort, ally and tether (runicnpc stage 5)
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 19s
cf26b05abc
- npc.profiles answers with RunicNPC's faction table, and npc.profiles.set
  pushes one beside the profiles (RunicNpc_SetFactions), set first so the
  profiles are checked against it; a refused table comes back as
  factionsRefused and the old one is kept (D254);
- world.place with a profile takes escort (a Steam id; the player must be
  on, else escort-offline), ally ({kind: clan|player, id}) and tether (the
  run's own zone that holds the point, else no-zone), and gives each NPC
  its orders through RunicNpc_Escort, _Ally and _Tether. All or nothing:
  an order RunicNPC refuses removes every NPC the step placed (D269, D270,
  D272);
- the RunicNPC API the bridge needs is 4 (overlay.toml runicnpc_api = 4).

Compiled on the Oxide rig.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 9a3ae47850 into edge 2026-10-05 03:38:57 -05:00
whitlocktech deleted branch feat/runicnpc-stage5 2026-10-05 03:38:58 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Plugins#23
No description provided.