feat(rust): Guarded Crate — feed, map, Warden, Place a guarded crate (PLAN_REDESIGNS §14.3.5)
Stage 6 of the §14.3 integration plan, on protocol 14. Spec: docs rust-link/PROTOCOL.md §20.9. - gc.started and gc.ended public, gc.failed staff's; guardedCrate.js reads each row per viewer (the clearer's name for the presence audience, Steam id, position and key for staff, `won` for everyone). - Triggers rust.gc.started and rust.gc.ended (a crate a player cleared only). - The step rust.gc.place: an event from rust.options.gc_events and a world call's location; refused at verify for Guarded Crate absent, NpcSpawn missing (D364), console unavailable, or an unknown event. Kept (D373); the run log's success line says so (D380). Budget rust.gc.crates. - Warden (D375): guarded_won, title category guardedwon, Crates cleared column. - Map marker, server settings line, swagger, engagement manifest, bundle, README. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -46,6 +46,10 @@ const COLUMNS = [
|
||||
// rows already count a treasure, so the column is there exactly then.
|
||||
const TREASURES = { key: 'treasuresWon', label: 'Treasures', sort: 'treasuresWon', value: (r) => count(r.treasuresWon) }
|
||||
|
||||
// Warden (PLAN_REDESIGNS §14.3.5, D375): guarded crates cleared, shown on the
|
||||
// same rule from the server's `guardedCrate`.
|
||||
const GUARDED = { key: 'guardedWon', label: 'Crates cleared', sort: 'guardedWon', value: (r) => count(r.guardedWon) }
|
||||
|
||||
const BALANCE = { key: 'balance', label: 'Coins', sort: 'balance', value: (r) => coins(r.balance) }
|
||||
|
||||
export default function Leaderboard({ serverId, wipeId, sort, onSort }) {
|
||||
@@ -104,6 +108,7 @@ function Overall({ serverId, wipeId, sort, onSort }) {
|
||||
const columns = [
|
||||
...COLUMNS,
|
||||
...(data && data.dangerousTreasures ? [TREASURES] : []),
|
||||
...(data && data.guardedCrate ? [GUARDED] : []),
|
||||
...(data && data.economics ? [BALANCE] : []),
|
||||
]
|
||||
// Present on every row or on none — the server decides per request.
|
||||
|
||||
@@ -47,6 +47,7 @@ const COLOURS = {
|
||||
supply: '#66bb6a',
|
||||
crate: '#ffee58',
|
||||
treasure: '#ffab00',
|
||||
guarded: '#ff7043',
|
||||
event: '#ce93d8',
|
||||
boss: '#d500f9',
|
||||
online: '#ffffff',
|
||||
@@ -67,6 +68,8 @@ const WORLD_NAMES = {
|
||||
crate: 'Locked crate',
|
||||
// Dangerous Treasures (§14.3.4): its running chests.
|
||||
treasure: 'Dangerous Treasures chest',
|
||||
// Guarded Crate (§14.3.5): a crate whose guards still stand.
|
||||
guarded: 'Guarded crate',
|
||||
boss: 'Boss',
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user