Add persistent Discord URL to T5 and T6 HUDs

This commit is contained in:
2026-10-12 19:42:39 -04:00
parent 664e8da81b
commit eda2c7e76d
8 changed files with 86 additions and 12 deletions
+26
View File
@@ -22,6 +22,32 @@ T5/T6 script and each native plugin. Current versions are recorded in
- Portable regression fixtures: `node tools/check_join.mjs`. Compilation and
live Plutonium validation remain required; no deployment was performed.
### Persistent top-left Discord URL
| Script | Version | Affected source |
| --- | --- | --- |
| `tws_t5_hud.gsc` | `1.1.0` | `t5/scripts/tws_t5_hud.gsc` |
| `tws_t5_common.gsc` | `1.1.0` | `t5/scripts/tws_t5_common.gsc` |
| `tws_t6_hud.gsc` | `1.1.0` | `t6/scripts/tws_t6_hud.gsc` |
| `tws_t6_common.gsc` | `1.1.0` | `t6/scripts/tws_t6_common.gsc` |
- Add `https://discord.thewrightserver.net` as a small, light-gray top-left
HUD label, created once per connection, including spectator newcomers.
It has no expiry or death/respawn reset and is cleaned up on disconnect.
Move the gameplay stack down 20 HUD units to leave room above the timers;
help and record positioning follow the shared layout automatically.
- Both engines receive the feature using their existing HUD anchors: T5
left/top safe-area alignment and T6 fullscreen alignment.
- Compatibility: deploy each game's HUD and common `1.1.0` together for the
reserved top line. No new native plugin or external dependency requirement.
Other scripts and both plugins retain their existing versions.
- Deployment: copy the updated HUD and common scripts to `storage/t5/scripts/sp/`
or `storage/t6/scripts/zm/`, respectively, and restart the map. No full
server-process restart is required. No deployment has been performed here.
- Live validation remains required on both Plutonium games: check placement
and readability, join as a spectator, die/respawn, reconnect, and open help
and records to verify spacing and that only one URL label appears.
### Initial versioning baseline
Established independent version `1.0.0` entries for each of the 14 scripts and
+10 -1
View File
@@ -11,7 +11,7 @@ Platform quirks and deploy commands: [NOTES.md](NOTES.md).
| File | Role |
|---|---|
| [tws_t5_common.gsc](tws_t5_common.gsc) | Shared config, HUD helpers, `.help`, connect/spawn registries, single `connected` listener + dispatcher |
| [tws_t5_hud.gsc](tws_t5_hud.gsc) | Bottom-left HUD stack: timers, zombie count, health bar |
| [tws_t5_hud.gsc](tws_t5_hud.gsc) | Top-left Discord URL, timers, zombie count, health bar |
| [tws_t5_afk.gsc](tws_t5_afk.gsc) | `.afk` / `.back` chat toggle + `[AFK]` indicator |
| [tws_t5_join.gsc](tws_t5_join.gsc) | `.join` lets newcomers spawn before the current round ends |
| [tws_t5_lock.gsc](tws_t5_lock.gsc) | Lobby `g_password` lock at a milestone round |
@@ -31,6 +31,15 @@ that directory:
Do not leave both common scripts installed: duplicate connection listeners
break T5's connect handshake. Existing dvar names are unchanged.
## Persistent Discord text
The HUD shows `https://discord.thewrightserver.net` in small light-gray text
at the top-left, including for newcomers waiting in spectator mode. The label
is created once per connection and persists across death and respawn. The
gameplay HUD starts one line lower, keeping timers, help and records clear.
Install HUD and common `1.1.0` together, then restart the map; no plugin update
or full server-process restart is required.
## Map record announcements
Copy `tws_t5_leaderboard.gsc` and the updated `tws_t5_common.gsc` to
+2 -2
View File
@@ -20,9 +20,9 @@ common_config()
if (isDefined(level.hud_x))
return;
// anchor: move the whole cluster with these two
// Anchor the gameplay stack below the persistent Discord line.
level.hud_x = 10;
level.hud_y = 10;
level.hud_y = 30;
level.hud_row_match = level.hud_y;
level.hud_row_round = level.hud_y + 15;
+16 -1
View File
@@ -1,4 +1,4 @@
/* tws_t5_hud.gsc — bottom-left HUD stack. Timer / zombie count / health bar. */
/* tws_t5_hud.gsc — top-left Discord URL, timers, zombie count and health bar. */
#include maps\_utility;
#include common_scripts\utility;
@@ -14,6 +14,21 @@ init()
level thread game_over_watcher();
scripts\sp\tws_t5_common::register_spawn_handler(::hud_start);
scripts\sp\tws_t5_common::register_connect_handler(::hud_discord);
}
// One static label per connection, including newcomers waiting to spawn.
hud_discord()
{
self endon("disconnect");
label = scripts\sp\tws_t5_common::make_text_elem(
self, 10, 10, "left", level.hud_font_small, level.hud_c_label);
label SetText("https://discord.thewrightserver.net");
elems = [];
elems[elems.size] = label;
self thread scripts\sp\tws_t5_common::destroy_on_disconnect(elems);
}
hud_start()
+10 -1
View File
@@ -7,7 +7,7 @@ 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_hud.gsc` | Top-left Discord URL, 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) | tws-t6-gsc-utils |
@@ -40,6 +40,15 @@ 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.
## Persistent Discord text
The HUD shows `https://discord.thewrightserver.net` in small light-gray text
at the top-left, including for newcomers waiting in spectator mode. The label
is created once per connection and persists across death and respawn. The
gameplay HUD starts one line lower, keeping timers, help and records clear.
Install HUD and common `1.1.0` together, then restart the map; no plugin update
or full server-process restart is required.
## Map record announcements
`tws_t6_leaderboard.gsc` reads the public Electric Cherry API without credentials.
+2 -2
View File
@@ -22,9 +22,9 @@ common_config()
if (isDefined(level.hud_x))
return;
// Small inset from the physical screen corner (fullscreen HUD coordinates).
// Fullscreen coordinates; reserve the top line for the Discord URL.
level.hud_x = 10;
level.hud_y = 10;
level.hud_y = 30;
level.hud_row_match = level.hud_y;
level.hud_row_round = level.hud_y + 15;
+16 -1
View File
@@ -1,4 +1,4 @@
/* tws_t6_hud.gsc - configurable HUD stack: timers, zombie count, health bar. */
/* tws_t6_hud.gsc - top-left Discord URL, timers, zombie count and health bar. */
#include maps\mp\_utility;
#include common_scripts\utility;
@@ -16,6 +16,21 @@ init()
level thread game_over_watcher();
scripts\zm\tws_t6_common::register_spawn_handler(::hud_start);
scripts\zm\tws_t6_common::register_connect_handler(::hud_discord);
}
// One static label per connection, including newcomers waiting to spawn.
hud_discord()
{
self endon("disconnect");
label = scripts\zm\tws_t6_common::make_text_elem(
self, 10, 10, "left", level.hud_font_small, level.hud_c_label);
label SetText("https://discord.thewrightserver.net");
elems = [];
elems[elems.size] = label;
self thread scripts\zm\tws_t6_common::destroy_on_disconnect(elems);
}
hud_start()
+4 -4
View File
@@ -1,14 +1,14 @@
{
"tws_t5_afk.gsc": "1.0.0",
"tws_t5_common.gsc": "1.0.0",
"tws_t5_hud.gsc": "1.0.0",
"tws_t5_common.gsc": "1.1.0",
"tws_t5_hud.gsc": "1.1.0",
"tws_t5_join.gsc": "1.0.0",
"tws_t5_leaderboard.gsc": "1.0.0",
"tws_t5_lock.gsc": "1.0.0",
"tws_t5_telemetry.gsc": "1.0.0",
"tws_t6_afk.gsc": "1.0.0",
"tws_t6_common.gsc": "1.0.0",
"tws_t6_hud.gsc": "1.0.0",
"tws_t6_common.gsc": "1.1.0",
"tws_t6_hud.gsc": "1.1.0",
"tws_t6_join.gsc": "1.0.1",
"tws_t6_leaderboard.gsc": "1.0.0",
"tws_t6_lock.gsc": "1.0.0",