feat(bridge): Dynamic PVP's zones on protocol 14 (PLAN_REDESIGNS §14.3.3) #37

Merged
whitlocktech merged 1 commits from feat/dynamic-pvp into edge 2026-10-15 06:17:47 -05:00
Member

Stage 4 of the §14.3 integration plan. Spec: docs rust-link/PROTOCOL.md §20.7 and §17.3 (docs PR alongside). Record: modules/rust/PLAN_REDESIGNS.md §14.3.17.

  • Two events from Dynamic PVP's own hooks:

    • pvp.zone.created { zoneId, event, x, z, radius, shape, durationSec }, from OnCreatedDynamicPVP
    • pvp.zone.deleted { zoneId, event }, from OnDeletedDynamicPVP

    Neither is sent while the world is not live, because a boot or a shutdown opens or closes every monument zone at once.

  • Size and position come from ZoneManager:

    • a sphere's Radius, or half a cube's longer side (cargo's zone is a cube)
    • the position is the zone's transform, read through GetZoneByID as a Component, so cargo's zone moves with the ship
  • map.live gains a pvp layer of the live zones. The two hooks keep it up to date. It is seeded from Dynamic PVP's own AllDynamicPVPZones() / GetEventName() when the world is ready and when Dynamic PVP loads. A zone ZoneManager no longer holds is dropped.

  • Hello gains integrations.dynamicPvp, sent again when Dynamic PVP loads or unloads. rg.world prints dynamicPvp= and pvpZones=. Both hooks join rg.hooks.

  • The bridge never makes, maps or erases one of Dynamic PVP's zones. README lists Dynamic PVP among the optional plugins.

Tested: compiled and loaded on both rigs (Rust 25902425, Oxide 2.0.7830, Carbon 2.0.262). rg.world read dynamicPvp=False pvpZones=0, then both rigs went back on the protocol-13 bridge. Dynamic PVP itself is not on the rigs; its hooks are exercised by §14.3.3's walk rows at the end walk (D331, D359).

AI-assisted: written with Claude Code (disclosed per org policy).

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

Stage 4 of the §14.3 integration plan. Spec: docs `rust-link/PROTOCOL.md` §20.7 and §17.3 (docs PR alongside). Record: `modules/rust/PLAN_REDESIGNS.md` §14.3.17. - **Two events from Dynamic PVP's own hooks:** - `pvp.zone.created` `{ zoneId, event, x, z, radius, shape, durationSec }`, from `OnCreatedDynamicPVP` - `pvp.zone.deleted` `{ zoneId, event }`, from `OnDeletedDynamicPVP` Neither is sent while the world is not live, because a boot or a shutdown opens or closes every monument zone at once. - **Size and position come from ZoneManager:** - a sphere's `Radius`, or half a cube's longer side (cargo's zone is a cube) - the position is the zone's transform, read through `GetZoneByID` as a `Component`, so cargo's zone moves with the ship - **`map.live` gains a `pvp` layer** of the live zones. The two hooks keep it up to date. It is seeded from Dynamic PVP's own `AllDynamicPVPZones()` / `GetEventName()` when the world is ready and when Dynamic PVP loads. A zone ZoneManager no longer holds is dropped. - **Hello** gains `integrations.dynamicPvp`, sent again when Dynamic PVP loads or unloads. `rg.world` prints `dynamicPvp=` and `pvpZones=`. Both hooks join `rg.hooks`. - The bridge never makes, maps or erases one of Dynamic PVP's zones. README lists Dynamic PVP among the optional plugins. **Tested:** compiled and loaded on both rigs (Rust 25902425, Oxide 2.0.7830, Carbon 2.0.262). `rg.world` read `dynamicPvp=False pvpZones=0`, then both rigs went back on the protocol-13 bridge. Dynamic PVP itself is not on the rigs; its hooks are exercised by §14.3.3's walk rows at the end walk (D331, D359). AI-assisted: written with Claude Code (disclosed per org policy). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-15 06:12:57 -05:00
feat(bridge): Dynamic PVP's zones on protocol 14 (PLAN_REDESIGNS §14.3.3)
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in -2m8s
7c9c8bdacb
Stage 4 of the §14.3 integration plan, specified in docs
rust-link/PROTOCOL.md §20.7 and §17.3.

- pvp.zone.created { zoneId, event, x, z, radius, shape, durationSec } from
  OnCreatedDynamicPVP, and pvp.zone.deleted { zoneId, event } from
  OnDeletedDynamicPVP. Neither is sent while the world is not live.
- Size and place come from ZoneManager: a sphere's Radius, or half a cube's
  longer side (cargo's zone is a cube); the position is the zone's transform,
  so cargo's moves with the ship.
- map.live gains a `pvp` layer of the live zones, kept by the two hooks and
  seeded from Dynamic PVP's own AllDynamicPVPZones / GetEventName at world
  ready and when it loads; a zone ZoneManager no longer holds is dropped.
- hello's integrations.dynamicPvp, sent again when it loads or unloads;
  rg.world prints dynamicPvp= and pvpZones=; both hooks join rg.hooks.
- The bridge never makes, maps or erases one of Dynamic PVP's zones.

Compiled and loaded on both rigs (Rust 25902425, Oxide 2.0.7830, Carbon
2.0.262).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 8e8553c589 into edge 2026-10-15 06:17:47 -05:00
whitlocktech deleted branch feat/dynamic-pvp 2026-10-15 06:17:47 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Plugins#37
No description provided.