# 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).