- Telemetry: async queued game_start/heartbeat/round_change/game_end with sequenced FIFO, watchdog, log-level dvar, and per-player stats snapshot - Join: new tws_t6_join.gsc chat command lets late spectators enter mid-match - Update NOTES/README/check.ps1 to reflect the six-module layout
106 lines
5.2 KiB
Markdown
106 lines
5.2 KiB
Markdown
# TWS T6 Zombies scripts
|
|
|
|
Plutonium T6 versions of the T5 server scripts. Defaults live in the scripts,
|
|
just like T5. There is no separate TWS config file or database setup.
|
|
|
|
| File | Role | Dependencies |
|
|
| --- | --- | --- |
|
|
| `tws_t6_common.gsc` | Shared HUD values, helpers and first-spawn dispatcher | Stock T6 |
|
|
| `tws_t6_hud.gsc` | Match/round timers, name, zombie count and health bar | Common |
|
|
| `tws_t6_afk.gsc` | `.afk` / `.back`, protection, movement and weapon blocking | Common |
|
|
| `tws_t6_lock.gsc` | Lock at round 20; clear password on game over | Common, HUD |
|
|
| `tws_t6_telemetry.gsc` | Async queued game reports (game_start/heartbeat/round_change/game_end) | t6-gsc-utils |
|
|
| `tws_t6_join.gsc` | `.join` chat command lets a spectator newcomer enter mid-match once | Common |
|
|
|
|
## Install
|
|
|
|
1. Copy these six `tws_t6_*.gsc` files into `Plutonium/storage/t6/scripts/zm/`.
|
|
2. For telemetry, install [t6-gsc-utils v3.1.1](https://github.com/alicealys/t6-gsc-utils/releases/tag/v3.1.1)
|
|
in `Plutonium/plugins/` and restart the server process. The other four scripts
|
|
do not require that plugin.
|
|
3. Restart the map to load script updates.
|
|
|
|
If updating an existing deployment, **remove `tws_t6_db.gsc` and
|
|
`tws_t6_bank.gsc` from the server script directory**. Copying the remaining files
|
|
will not remove those old scripts. Remove any `exec server.example.cfg` added for
|
|
the earlier version. Neither a database nor that config file is used anymore.
|
|
|
|
Source `.gsc` files load directly under Plutonium's
|
|
[documented T6 script layout](https://plutonium.pw/docs/modding/loading-mods/).
|
|
Keep the filenames and `scripts/zm` location so shared references resolve.
|
|
To omit telemetry, remove its script; disabling it at runtime does not remove
|
|
its plugin dependency during linking.
|
|
|
|
## Defaults, matching T5
|
|
|
|
- HUD values live in `tws_t6_common::common_config()`. That function and
|
|
`ensure_config()` came from T5; they initialize in-script values and do not
|
|
load a config file. The requested fullscreen corner alignment is retained.
|
|
- AFK uses T5's native `level waittill("say", message, player)` listener.
|
|
`.back` restores movement and weapons immediately, then ends protection after
|
|
two seconds. The T6 control/weapon fix remains in place.
|
|
- Lock uses T5's HUD round/game-over notifications. Default threshold is 20.
|
|
As in T5, it clears `g_password` at startup and game over.
|
|
- Telemetry is enabled by default and posts to
|
|
`http://192.168.1.199:3000/api/telemetry`. Set `tws_server_id` to the exact,
|
|
case-sensitive Electric Cherry registry name; missing or overlong names
|
|
disable reporting with a console diagnostic.
|
|
|
|
The optional dvars already present in T5 are still supported: `tws_lock_round`,
|
|
`tws_server_id`, `tws_telemetry_url`, and `tws_telemetry_enabled` (`0` disables
|
|
telemetry). None require a separate config file. If earlier settings are already
|
|
set on the server, they still override these defaults.
|
|
|
|
## Round telemetry
|
|
|
|
Telemetry runs directly in GSC using t6-gsc-utils. Configure the exact Electric
|
|
Cherry registry name and full endpoint in your existing server configuration:
|
|
|
|
```cfg
|
|
set tws_server_id "t6_zombie_town_1"
|
|
set tws_telemetry_url "http://192.168.1.199:3000/api/telemetry"
|
|
```
|
|
|
|
It sends four event types over the life of a match, mirroring the T5 script:
|
|
|
|
| Event | When | Round in payload |
|
|
| --- | --- | --- |
|
|
| `game_start` | First playable spawn | omitted |
|
|
| `heartbeat` | Every 30s while the match is in progress | current round |
|
|
| `round_change` | Every new positive round | new round |
|
|
| `game_end` | `end_game` / `game_ended` / `intermission` | final round |
|
|
|
|
Each event payload includes `event`, `server`, `map`, `round` (except `game_start`)
|
|
and a `players` array with `name`, `guid`, `kills`, `headshots`, `downs`, `revives`
|
|
and `score` per player. `guid` reads Plutonium's `player.guid` engine property
|
|
(T5 uses the `player getGuid()` method — T6 has no such method, but the field is
|
|
equivalent for identity purposes). `kills`/`headshots`/`downs`/`revives` read
|
|
from `player.stats[]` if a mod populates it, otherwise `0`.
|
|
|
|
Delivery is asynchronous with a sequenced FIFO queue and one in-flight request.
|
|
The queue survives the game-end signal so the final snapshot drains. There is no
|
|
automatic retry: the receiver may already have accepted the event. Transport
|
|
success reports the HTTP call finished, not that the API accepted it. Increase
|
|
`tws_telemetry_log_level` to `2` for per-event capture/queue/response logging;
|
|
set to `0` to silence non-error output.
|
|
|
|
## `.join` for newcomers
|
|
|
|
Late connectors who never got a spawn can type `.join` in chat to leave spectator
|
|
mode before the round ends, once per connection. `.join` is rejected if the player
|
|
has already played, if the game is not running, if no active player is alive, or
|
|
during intermission. The script hooks the stock `spectator_respawn` path via
|
|
`level.custom_spawnplayer`; it does not skip the map-authored spawn callback if
|
|
another mod installed one first.
|
|
|
|
## Validation
|
|
|
|
All six scripts compile for T6 PC with gsc-tool 1.4.10. To repeat:
|
|
|
|
```powershell
|
|
.\tools\check.ps1 -CompilerPath C:\path\to\gsc-tool.exe
|
|
```
|
|
|
|
Compilation does not verify engine/plugin linking or gameplay. T6 differences,
|
|
research sources and live checks are in [NOTES.md](NOTES.md).
|