Files
md-show/plans.md
T

114 lines
4.1 KiB
Markdown
Raw Normal View History

2026-08-17 18:25:41 +02:00
---
name: Plugin Server Data Plan
overview: "Concrete work plan for the current V8 plugin (Plugin API 26): improve what we send via retail TeamSpeak (plugin commands + hub policy). No ServerLib app. No hybrid authority in v1. Inventory already in vergleichs.md."
todos:
- id: inventory-wire
content: "DONE — vergleichs.md inventories CEPOS, hub keys, used/unused API 26"
status: completed
- id: protocol-design
content: "Write doku design: versioned CE* plugin-command map + hub schema version (doc only, freeze wire rules)"
status: pending
- id: hub-schema-vnext
content: "Specify additive hub keys (feature flags, schema version) — clients read only"
status: pending
- id: implement-cemode
content: "First code WP: CEMODE (or equivalent) edge send on voice-mode change — one function, keep CEPOS"
status: pending
- id: wire-filter-intensity
content: "Optional follow-up WP: actually wire hubAudioFilterIntensity / FilterIntensity into PCM if still unwired"
status: pending
- id: whisper-experiment
content: "Later experiment only: requestClientSetWhisperList for admin overlay — not proximity"
status: pending
- id: no-serverlib
content: "Never revive ClientLib/ServerLib custom app in this workstream"
status: pending
isProject: false
---
# Current-plugin plan: better use of retail TeamSpeak (API 26)
**Locked product:** existing V8 DLL on retail TeamSpeak (`PLUGIN_API_VERSION 26`).
**Locked approach:** **A-only** — send/store more via TeamSpeak relay + hub description.
**Deferred:** hybrid voice authority, radio product, ServerLib custom app.
**Baseline inventory:** [`vergleichs.md`](../../vergleichs.md).
```text
Keep: Pos.txt -> CEPOS -> client proximity -> PCM/3D
Improve: cleaner peer messages + richer hub policy on TS server
Never: expect ts3server to compute who hears whom
```
---
## 0. Constraints (from live plugin)
| Can | Cannot |
|---|---|
| `sendPluginCommand` relay (CEPOS today) | Proximity math inside retail `ts3server` |
| Hub policy in root channel description | True packet drop for inaudible speakers |
| Client PCM + 3D as hearing | Trust client position as anti-cheat truth |
| Optional later: `requestClientSetWhisperList` overlays | Replace PCM with ServerLib routing |
---
## 1. Work packages (ordered)
### WP0 — Inventory (done)
- CEPOS 56-byte layout, throttle/keepalive
- Hub `[GLOBAL]` / zones / races / defaults keys
- Used vs unused `TS3Functions`
- Documented in `vergleichs.md`
### WP1 — Protocol + hub design (doc only)
**Plugin commands (keep CEPOS wire-compatible):**
| Prefix | Purpose | When to send |
|---|---|---|
| `CEPOS:` | Position + voiceDistance (unchanged 56 B) | Throttled move + 1 Hz keepalive |
| `CEDRAIN:` | Wakeup (unchanged) | Internal |
| `CEMODE:` **(first new)** | Voice mode id + distance | On mode change only (edge) |
| `CEPING:` (later) | Seq / stale hint | Low rate |
| `CEAUTH:` (later) | Soft identity hint | On connect — still spoofable |
Rules: `sendPluginCommand` only; bounds-check; throttle; no secrets; unknown prefixes ignored.
**Hub schema (additive):** `SchemaVersion` + flags; missing keys = old defaults; clients read only.
### WP2 — First code change (Golden Rule: one function)
**Implement `CEMODE` only:**
1. On voice-mode change, send small plugin command (mode + distance).
2. Peers update without waiting for CEPOS keepalive.
3. Do not break 56-byte CEPOS.
Likely files: `ts3_cepos.c` / new cmd dispatch, `voice_modes.c`, `ts3_entry.c`, `doku/aenderungen/…`.
**Off-limits in WP2:** hub keys, whisper lists, filter wiring, radio, hybrid backend.
### WP3 — Optional: wire FilterIntensity if still unwired (ask first)
### WP4 — Optional: whisper-list admin overlay experiment (not proximity)
---
## 2. Out of scope
- ServerLib custom app / `ts3-Testing` product
- Proximity inside retail `ts3server`
- Hybrid authority (unless reopened)
- Breaking CEPOS without compatibility plan
---
## 3. Success / test
- Two clients: mode hotkey → peer sees update via `CEMODE`; CEPOS distance still works; old clients ignore `CEMODE` and keep CEPOS.
## 4. Default on “go”
Implement **CEMODE** first.