2026-08-17 18:04:10 +02:00
---
2026-08-17 18:23:05 +02:00
name : Plugin Server Data Plan
overview : Stay on retail TeamSpeak + Client Plugin SDK (API 26). Improve what we send through TeamSpeak (and optionally a small authority) so less is ad-hoc client-only — without building a custom ServerLib app.
2026-08-17 18:04:10 +02:00
todos :
2026-08-17 18:23:05 +02:00
- id : inventory-wire
content : Inventory current CEPOS fields + hub_parser keys (what already goes via TS)
2026-08-17 18:04:10 +02:00
status : pending
2026-08-17 18:23:05 +02:00
- id : protocol-design
content : Design versioned plugin-command + hub schema for extra server-side policy/data
2026-08-17 18:04:10 +02:00
status : pending
2026-08-17 18:23:05 +02:00
- id : implement-one
content : Implement one additive send path (one message type or hub keys) — Golden Rule
2026-08-17 18:04:10 +02:00
status : pending
2026-08-17 18:23:05 +02:00
- id : optional-hybrid
content : "Only if chosen: sketch hybrid authority audible-set API (still client PCM)"
2026-08-17 18:04:10 +02:00
status : pending
2026-08-17 18:23:05 +02:00
- id : no -serverlib
content : Do not revive ClientLib/ServerLib custom app
2026-08-17 18:04:10 +02:00
status : pending
isProject : false
---
2026-08-17 18:23:05 +02:00
# Better “send to server” on Plugin SDK (API 26)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
**Discarded:** Option B (own ClientLib/ServerLib app). Deleted old plan file.
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
**Stay on:** retail TeamSpeak + plugin (`PLUGIN_API_VERSION 26` ), branch `tsmain` / current V8 path.
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## What “server” can mean here
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
| Meaning | Reality with Plugin SDK |
2026-08-17 18:15:55 +02:00
|---|---|
2026-08-17 18:23:05 +02:00
| **A. Retail TeamSpeak server** | Relay only. Plugin commands (`sendPluginCommand` ) go client→server→clients. Channel description holds hub config. **No game proximity engine on TS.** |
| **B. Optional game voice authority** | Your own small process (or Conan dedicated server). Clients upload state; it returns audible sets. Plugin still applies PCM/3D. Not TeamSpeak ServerLib. |
2026-08-17 18:15:55 +02:00
2026-08-17 18:23:05 +02:00
This plan focuses on **A first** (more/better data over TeamSpeak), then optional **B** if you want central decisions.
## What V8 already sends today
- **CEPOS** via `sendPluginCommand("CEPOS:…")` — position, facing, voice distance (~56 B base64), throttled + keepalive ([`ts3_cepos.c` ](src/ts/proximity/ts3_cepos.c ))
- **CEDRAIN** — wakeup tick only
- **Hub settings** — read from **root channel description** (server admin writes config; plugin parses)
Proximity math and mute/gain stay **on each client** .
## What Plugin API 26 cannot do
- Run proximity inside retail `ts3server`
- True packet drop like ServerLib `ts3server_setClientWhisperList`
- Replace client PCM as the hearing mechanism without leaving Plugin SDK
## Improvements worth planning (ranked)
### 1. Richer / cleaner plugin-command protocol (TeamSpeak relay)
Keep CEPOS, add typed messages (compact binary/base64), e.g.:
- `CEPOS:` — position (as now; maybe version bump if fields added)
- `CEAUTH:` / identity bind hints (Steam/Conan id hash — still spoofable without B)
- `CEMODE:` — voice mode change events (less poll noise)
- `CEZONE:` — local zone enter/leave if useful for peers
- `CEPING:` — RTT / stale detection beyond keepalive
Rules: still `sendPluginCommand` ; throttle; bounds-check; no secrets in cleartext.
### 2. Push more config to the TeamSpeak server (channel description / hub)
Today hub already carries ranges/zones. Expand systematically:
- Documented key schema (versioned)
- Radio defaults, fail-closed policy, feature flags
- Single writer (server admin / description) — clients only read
This is the cleanest “server owns policy” path **without** a custom backend.
### 3. Optional: client whisper lists (limited)
`requestClientSetWhisperList` exists in Plugin SDK. Possible for **overlays** (admin whisper), not as main proximity router (permissions + “whisper disables channel talk”). Plan as experiment only after protocol work.
### 4. Optional hybrid authority (if you want “server computes”)
2026-08-17 18:15:55 +02:00
```text
2026-08-17 18:23:05 +02:00
Conan / clients -> Voice Authority (your process)
Authority -> audible set per listener
Plugin applies mute/gain/3D (PCM) as today
TeamSpeak = voice transport + CEPOS or authority uplink
2026-08-17 18:15:55 +02:00
```
2026-08-17 18:23:05 +02:00
Fail closed if authority down. Positions still untrusted unless Conan dedicated server feeds the authority.
2026-08-17 18:15:55 +02:00
2026-08-17 18:23:05 +02:00
## Explicitly out of scope
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
- Custom TeamSpeak SDK 3.5 ClientLib/ServerLib product
- Branch `ts3-Testing` ServerLib bootstrap
- Expecting retail `ts3server` to run Conan proximity
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## Suggested first milestone (if you approve later)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
1. Inventory current CEPOS + hub keys (freeze wire format)
2. Design versioned plugin-command + hub schema (doc only)
3. Implement one additive message type or hub keys (one function)
4. Only then consider hybrid authority or whisper-list experiment
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## Docs
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
- Keep [`vergleichs.md` ](vergleichs.md ) as historical Option B comparison, or add a short “discarded” banner when implementing
- New living doc under `doku/` when code starts (project rule)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## Decision needed from you (before any code)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
Prefer **A-only** (better plugin commands + hub config on retail TS), or **A + optional hybrid authority** for central audible sets?