Files

4.1 KiB

name, overview, todos, isProject
name overview todos isProject
Plugin Server Data Plan 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.
id content status
inventory-wire DONE — vergleichs.md inventories CEPOS, hub keys, used/unused API 26 completed
id content status
protocol-design Write doku design: versioned CE* plugin-command map + hub schema version (doc only, freeze wire rules) pending
id content status
hub-schema-vnext Specify additive hub keys (feature flags, schema version) — clients read only pending
id content status
implement-cemode First code WP: CEMODE (or equivalent) edge send on voice-mode change — one function, keep CEPOS pending
id content status
wire-filter-intensity Optional follow-up WP: actually wire hubAudioFilterIntensity / FilterIntensity into PCM if still unwired pending
id content status
whisper-experiment Later experiment only: requestClientSetWhisperList for admin overlay — not proximity pending
id content status
no-serverlib Never revive ClientLib/ServerLib custom app in this workstream pending
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.

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.