feat(rust): NPC profiles and placements pages, the profile leaderboard (runicnpc stage 4)
Admin: Rust NPC profiles (the form RunicNPC reads, per server, shared or fleet, each server's push state and refusals, replaced profiles with Restore) and Rust NPC placements (the live map: click to place, pins for every placement; edit, rename, respawn, remove). The live map takes a pick handler and pins, unchanged for the public page. Public: the leaderboard ranks by a profile's kills (D250), and opening a row shows that player's kills by profile (D252); the killfeed names a RunicNPC NPC by its own name. Player: your own kills by profile. Titles: a rule on a profile's kills picks the profile. npcs.test.js covers the profile checks, adoption, the push, the picker and verb, the triggers, kill crediting, titles and placements (481 server tests). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -27,9 +27,11 @@ import ModConfig from './routes/admin/ModConfig.jsx'
|
||||
import Visibility from './routes/admin/Visibility.jsx'
|
||||
import ServerSettings from './routes/admin/ServerSettings.jsx'
|
||||
import ZonePresets from './routes/admin/ZonePresets.jsx'
|
||||
import NpcProfiles from './routes/admin/NpcProfiles.jsx'
|
||||
import NpcPlacements from './routes/admin/NpcPlacements.jsx'
|
||||
import UserRustSections from './routes/admin/UserRustSections.jsx'
|
||||
import FooterStatus from './components/FooterStatus.jsx'
|
||||
import { IconEye, IconKey, IconLink, IconServer, IconSliders, IconZone } from './icons.jsx'
|
||||
import { IconEye, IconKey, IconLink, IconNpc, IconPlacement, IconServer, IconSliders, IconZone } from './icons.jsx'
|
||||
|
||||
// The module id, exactly as `module.json` spells it. Core keys the registry by it
|
||||
// and prefixes every route path with it.
|
||||
@@ -113,6 +115,10 @@ registry.registerRoutes(ID, {
|
||||
// Zone presets (PLAN_REDESIGNS §3.1, D210). Core's step editor has single-
|
||||
// value fields, so a zone's flags are ticked here and a step copies the set.
|
||||
{ path: 'zones', element: <ZonePresets /> },
|
||||
// RunicNPC (runicnpc stage 4): the site's NPC profiles, pushed to each
|
||||
// server, and each server's placements, created by clicking its live map.
|
||||
{ path: 'npcs', element: <NpcProfiles /> },
|
||||
{ path: 'npcs/placements', element: <NpcPlacements /> },
|
||||
],
|
||||
})
|
||||
|
||||
@@ -164,6 +170,8 @@ registry.registerNav(ID, {
|
||||
{ label: 'Rust visibility', to: '/admin/rust/visibility', icon: IconEye },
|
||||
{ label: 'Rust servers', to: '/admin/rust/servers', icon: IconServer },
|
||||
{ label: 'Rust zone presets', to: '/admin/rust/zones', icon: IconZone },
|
||||
{ label: 'Rust NPC profiles', to: '/admin/rust/npcs', icon: IconNpc },
|
||||
{ label: 'Rust NPC placements', to: '/admin/rust/npcs/placements', icon: IconPlacement },
|
||||
],
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user