world.monuments, world.zone, world.place, world.revert and world.owned (PLAN.md §28, D86-D96): - Zones through ZoneManager's temporary zones, owned by the bridge, with a required duration the plugin enforces itself (D96) and re-created from the bridge's own registry on every load and every ZoneManager reload (D92), because ZoneManager erases a plugin's zones when that plugin unloads. - Crates and NPCs from a plugin-held allowlist (D88) at a monument by kind and instance, or at raw coordinates (D87, D93), bounded 25/20 per step (D95). - A registry file keyed by the website's idempotency key, since this bridge has no at-most-once store: a repeat answers with the first call's ids. - world.owned LOOKS by net id: crates survive a restart, NPCs do not, so a boot id proves nothing. A wipe drops the registry whole. - EventsEnabled gates every world write; revert, owned and monuments never (D94). Revert refuses only a thing that exists and is not this run's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
58 lines
3.2 KiB
TOML
58 lines
3.2 KiB
TOML
# Release metadata for the deployable overlay.
|
|
#
|
|
# Consumed by the release workflow, which folds these values into the
|
|
# manifest.json shipped inside the overlay tarball. The Runic Gateway installer
|
|
# reads that manifest to decide what it is deploying and whether it is compatible
|
|
# with the sidecar it is about to install.
|
|
#
|
|
# There is deliberately NO version key here. The release version is derived from
|
|
# git tags and conventional commits by the release workflow, so there is no bump
|
|
# commit to keep in sync and no way for this file to disagree with the tag.
|
|
|
|
# ── The loopback wire-protocol version this overlay speaks ───────────────────
|
|
#
|
|
# The plugin half of the compatibility contract. It MUST equal the sidecar's
|
|
# PROTOCOL_VERSION (Rust-Link's sidecar/src/main.rs) for a deployment to work:
|
|
# the sidecar rejects a mismatched WEBSITE with 409, and a mismatched PLUGIN is
|
|
# worse, because the game link has no such check — it would simply mis-parse.
|
|
#
|
|
# That asymmetry is why this file exists. The plugin announces its protocol in
|
|
# `server.hello`, which is only readable after the game server has booted with it
|
|
# loaded — far too late for an installer to refuse a bad pairing. This
|
|
# declaration is what lets the bundle CI check the pair BEFORE an operator
|
|
# installs either half.
|
|
#
|
|
# Keeping it honest is a manual duty: when the protocol changes, bump it here in
|
|
# the same change that alters the emitters, exactly as the sidecar bumps
|
|
# PROTOCOL_VERSION and the module bumps its own constant.
|
|
#
|
|
# Current: 9 — the transport, the read path, identity, the permission mirror,
|
|
# configuration from the site, first-party clans, a raid frame that names who
|
|
# lives there, the event leases, and the world verbs events place and give back
|
|
# (docs/rust-link/PROTOCOL.md §15).
|
|
protocol = 9
|
|
|
|
# ── Oxide compatibility ──────────────────────────────────────────────────────
|
|
#
|
|
# The overlay only ADDS a file — one plugin into `oxide/plugins/` — and patches
|
|
# nothing, so it is expected to work on any reasonably current Oxide. This is the
|
|
# oldest build it is known good on.
|
|
#
|
|
# There is no `patches_verified_against` key, and there is no `patches/` tier:
|
|
# Rust's server is a binary and Oxide's hook API is the supported way in, so
|
|
# there is nothing to diff against. That is the whole reason the Rust payload is
|
|
# simpler than the ServUO one.
|
|
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 a missing reward or zone into a
|
|
# named prerequisite.
|
|
#
|
|
# 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"]
|