165 lines
8.6 KiB
Markdown
165 lines
8.6 KiB
Markdown
# TWS T6 Zombies scripts
|
|
|
|
Plutonium T6 versions of the T5 server scripts. Defaults live in the scripts,
|
|
just like T5. The telemetry token is embedded in the reporter script; no
|
|
separate token config or database setup is required.
|
|
|
|
| File | Role | Dependencies |
|
|
| --- | --- | --- |
|
|
| `tws_t6_common.gsc` | Shared HUD values, helpers, `.help`, connection and first-spawn dispatchers | 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 |
|
|
| `tws_t6_leaderboard.gsc` | Private map high-round record and every tied holder on connection | Common, t6-gsc-utils |
|
|
|
|
## Install
|
|
|
|
1. Copy all seven `tws_t6_*.gsc` files into
|
|
`Plutonium/storage/t6/scripts/zm/`. Update common along with leaderboard.
|
|
2. For telemetry or leaderboard, 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 five scripts
|
|
do not require that plugin.
|
|
3. Ensure the API service's `EC_TELEMETRY_TOKEN` matches the token embedded in
|
|
the reporter; see [authentication setup](../README.md#telemetry-authentication-t5-and-t6).
|
|
4. Restart the map to load script updates.
|
|
|
|
If upgrading from the earlier leaderboard filename, **remove
|
|
`tws_leaderboard.gsc` from the T6 server script directory** before installing
|
|
`tws_t6_leaderboard.gsc`, so both copies do not load.
|
|
|
|
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. The same rule applies to leaderboard.
|
|
|
|
## Map record announcements
|
|
|
|
`tws_t6_leaderboard.gsc` reads the public Electric Cherry API without credentials.
|
|
It works independently of telemetry and HUD, and privately announces records
|
|
once per connection, including newcomers waiting in spectator mode.
|
|
|
|
Map selection uses stock `level.scr_zm_ui_gametype` and
|
|
`level.scr_zm_map_start_location`, falling back to the corresponding
|
|
`ui_gametype` / `ui_zm_mapstartlocation` dvars when absent. For example,
|
|
`zstandard` + `town` selects `t6:zm_transit:town`, while `zclassic` + `transit`
|
|
selects TranZit. Survival, Grief and Turned variants follow Electric Cherry's
|
|
catalogue. An unknown mode/location is logged instead of guessing from the engine
|
|
map. Use `tws_leaderboard_map_key` for a custom registered selection if needed.
|
|
|
|
The plugin must expose `httpPost` (with the GET method override), `jsonParse`,
|
|
`typeof` and `formatString`. [Shared configuration, caching and validation](../README.md#map-record-announcements)
|
|
apply to both versions. All T6 script filenames use the `tws_t6_` prefix.
|
|
|
|
## Chat commands
|
|
|
|
Type `.help` or `.commands` in chat to see the commands supplied by the loaded TWS modules and
|
|
a short description of each. The list is shown only to the requesting player,
|
|
including spectators who have not spawned. Commands are case-insensitive.
|
|
Help appears below the health bar for 12 seconds, clear of the timers, zombie
|
|
counter and health display. Typing either command again restarts that display time.
|
|
|
|
| Command | Description |
|
|
| --- | --- |
|
|
| `.help`, `.commands` | List available commands |
|
|
| `.afk` | Pause with protection |
|
|
| `.back` | Return from AFK |
|
|
| `.join` | Join mid-round (newcomers only) |
|
|
| `.leaders` | Show the map record again (leaderboard module required) |
|
|
|
|
AFK and Join register their commands during `init()` through
|
|
`tws_t6_common::register_help_command(command, description)`. If a module is
|
|
omitted, its commands are omitted from `.help`. Register new commands alongside
|
|
their module's initialization so the list stays current.
|
|
The enabled leaderboard module registers `.leaders`, which replays the latest
|
|
cached map record privately. Repeating it restarts the record from the first page;
|
|
help temporarily hides the record until its own display ends.
|
|
|
|
## 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
|
|
`https://ec.thewrightserver.net/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. An embedded token matching the service's
|
|
`EC_TELEMETRY_TOKEN` (at least 32 characters) and an HTTPS URL are required as well.
|
|
|
|
The dvars already present in T5 are still supported: `tws_lock_round`,
|
|
`tws_server_id`, `tws_telemetry_url`, and `tws_telemetry_enabled` (`0` disables
|
|
telemetry). Earlier settings still override defaults; remove any old HTTP URL
|
|
override when upgrading. The reporter token lives in `level.telemetry_token`.
|
|
|
|
## 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 "https://ec.thewrightserver.net/api/telemetry"
|
|
```
|
|
|
|
The script embeds the reporter token in `level.telemetry_token`; it must match
|
|
the API service's `EC_TELEMETRY_TOKEN` environment variable. Follow the shared
|
|
[authentication setup](../README.md#telemetry-authentication-t5-and-t6). Every
|
|
request includes `Authorization: Bearer <token>` and `Content-Type:
|
|
application/json`. Token rotation requires updating and redeploying both reporter
|
|
scripts. Token and endpoint changes require a map restart.
|
|
|
|
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
|
|
|
|
To compile all seven scripts for T6 PC with gsc-tool:
|
|
|
|
```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).
|