Files
tws-zombies-scripts/t6
josh 26bb9e158d T6: expand telemetry to T5-parity reports and add .join module
- 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
2026-09-24 08:12:25 -04:00
..

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 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. 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:

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:

.\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.