feat(rust): RunicNPC is required for every Place NPCs step (runicnpc stage 9, D310)
A Place NPCs step on a server without RunicNPC, or with one older than the
bridge needs, is refused before it is sent: "<server> needs RunicNPC to place
NPCs, Rust's own scientists included: <why>". Rust's own scientists were the
fallback until now (D243); they need RunicNPC too. Crates are unaffected.
- npcs.model: API_NEEDED rises from 4 to 6, the bridge's RunicNpcApiNeeded, so a
server the site calls ready is one the bridge will not refuse as runicnpc-old.
The profile push follows the same floor.
- eventWorld: profileMissing becomes npcMissing, asked for every NPC step.
- Admin → Rust → Servers: each server carries `runicNpc` ({ready, absence,
version, api}) and a server without one that will do reads "Incomplete" with
the reason. Swagger documents the field.
The event picker is unchanged in this commit (an open question on the PR).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -61,6 +61,15 @@ const ZONES = (() => {
|
||||
})()
|
||||
|
||||
/** An ISO instant as the value a `datetime-local` input takes, in the browser's clock. */
|
||||
/**
|
||||
* Why the server's RunicNPC will not do (runicnpc stage 9, D310), or null when it
|
||||
* does. RunicNPC is required, so a server without it is shown as incomplete.
|
||||
*/
|
||||
export function runicNpcNote(npc) {
|
||||
if (!npc || npc.ready) return null
|
||||
return `Incomplete: ${npc.absence || 'RunicNPC is not loaded on it'}. RunicNPC is required — without it every Place NPCs step is refused, Rust’s own scientists included. Runic Gateway’s installer and egg put it in place.`
|
||||
}
|
||||
|
||||
/**
|
||||
* What the missing ZoneManager helper costs this server (PLAN_FIXES F12, D182), or
|
||||
* null when there is nothing to say — the helper patched, or a plugin that
|
||||
@@ -252,6 +261,9 @@ export default function ServerSettings() {
|
||||
: 'No wipe schedule set.'}
|
||||
</div>
|
||||
<div className="dim" style={{ fontSize: '0.76rem', marginTop: 2 }}>{titlesSummary(s.titles, s.titlePush, categories)}</div>
|
||||
{runicNpcNote(s.runicNpc) && (
|
||||
<div style={{ fontSize: '0.76rem', marginTop: 2, color: 'var(--warn, #d9c184)' }}>{runicNpcNote(s.runicNpc)}</div>
|
||||
)}
|
||||
{zoneHelperNote(s.zoneHelper) && (
|
||||
<div style={{ fontSize: '0.76rem', marginTop: 2, color: 'var(--warn, #d9c184)' }}>{zoneHelperNote(s.zoneHelper)}</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user