feat(bridge): protocol 6 — first-party clans, one board and five events
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 12s
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 12s
The `clans` board carries every clan the game will list, with its roster and roles, plus the facts the website needs to trust it: enabled, backend, supported, truncated, and whether the optional uMod Clans plugin is loaded. It is re-sent on connect and on the 60-second cadence, and a few seconds after any membership change. The five events are clan.created, clan.disbanded, clan.member.added, clan.member.left and clan.member.kicked. What the game's assemblies dictated: - The game has no enumerate-all call. The clan leaderboard is the only listing, and the game clamps it to 100 clans. A board at that ceiling says `truncated`, as does one that would not fit in 768 KiB (the sidecar drops lines over 1 MiB). - The local backend is synchronous behind ValueTask. A task that has not completed means another backend (Nexus), which is refused with a reason rather than waited on from the main thread. - A clan id is not an identity, so every frame carries createdMs. - OnClanMemberAdded hands over a bare id before the game's cache refreshes, so the clan is read back, with a fallback to the id alone. - uMod Clans raises OnClanDisbanded(string, List<ulong>), which has the same name and arity as the game's hook, so the bridge types it exactly. A member's LastSeen is never sent: it is presence (PLAN.md §23). overlay.toml moves to protocol 6 and drops Clans from requires_plugins (D47): Teams come from the game's own clans. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
15
overlay.toml
15
overlay.toml
@@ -26,9 +26,9 @@
|
||||
# the same change that alters the emitters, exactly as the sidecar bumps
|
||||
# PROTOCOL_VERSION and the module bumps its own constant.
|
||||
#
|
||||
# Current: 5 — the transport, the read path, identity, the permission mirror, and
|
||||
# configuration from the site (docs/rust-link/PROTOCOL.md §11).
|
||||
protocol = 5
|
||||
# Current: 6 — the transport, the read path, identity, the permission mirror,
|
||||
# configuration from the site, and first-party clans (docs/rust-link/PROTOCOL.md §12).
|
||||
protocol = 6
|
||||
|
||||
# ── Oxide compatibility ──────────────────────────────────────────────────────
|
||||
#
|
||||
@@ -45,6 +45,11 @@ min_oxide_version = "2.0.7585"
|
||||
# The `oxide/plugins/` files this overlay expects to find already installed. They
|
||||
# are not shipped here — they are third-party plugins an operator installs from
|
||||
# uMod — and the installer's `doctor` reports a missing one rather than
|
||||
# installing it. Listing them is what turns "the site shows no clans" into a
|
||||
# installing it. Listing them is what turns a missing reward or zone into a
|
||||
# named prerequisite.
|
||||
requires_plugins = ["Clans", "Kits", "PopupNotifications", "ZoneManager"]
|
||||
#
|
||||
# The uMod **Clans** plugin is deliberately NOT listed (docs/modules/rust/PLAN.md
|
||||
# D47). Teams come from Rust's own clan system, which that plugin never touches,
|
||||
# so requiring it would split a server's players across two unrelated clan
|
||||
# systems. It belongs to phase 17's optional tier.
|
||||
requires_plugins = ["Kits", "PopupNotifications", "ZoneManager"]
|
||||
|
||||
Reference in New Issue
Block a user