Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d15bc50b7d | ||
|
|
2123b8f4d5 |
@@ -6,6 +6,58 @@ T5/T6 script and each native plugin. Current versions are recorded in
|
|||||||
|
|
||||||
## 2026-10-13
|
## 2026-10-13
|
||||||
|
|
||||||
|
### Shorter Discord URL
|
||||||
|
|
||||||
|
| Component | Version | Affected source |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `tws_t5_hud.gsc` | `1.1.2` | `t5/scripts/tws_t5_hud.gsc` |
|
||||||
|
| `tws_t6_hud.gsc` | `1.1.2` | `t6/scripts/tws_t6_hud.gsc` |
|
||||||
|
|
||||||
|
- Both games replace the displayed Discord URL with `https://discord.tws.lol`.
|
||||||
|
Keep the smaller font and muted gray introduced in the already-uploaded
|
||||||
|
`1.1.1` release.
|
||||||
|
- Compatibility: no new dependency requirement; matching common `1.1.0+`
|
||||||
|
remains required. Deployment: copy each updated HUD script and restart the
|
||||||
|
map. No plugin update or full server-process restart is required. No
|
||||||
|
deployment of `1.1.2` performed here; GSC compilation and live T5/T6 display
|
||||||
|
verification remain required.
|
||||||
|
|
||||||
|
### More subtle Discord label
|
||||||
|
|
||||||
|
| Component | Version | Affected source |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `tws_t5_hud.gsc` | `1.1.1` | `t5/scripts/tws_t5_hud.gsc` |
|
||||||
|
| `tws_t6_hud.gsc` | `1.1.1` | `t6/scripts/tws_t6_hud.gsc` |
|
||||||
|
|
||||||
|
- Both games reduce the top-left Discord URL font scale from `1.4` to `1.2`
|
||||||
|
and darken its neutral gray from `(0.85, 0.85, 0.85)` to `(0.65, 0.65, 0.65)`.
|
||||||
|
The label keeps its position and connection lifetime; other HUD text is
|
||||||
|
unaffected.
|
||||||
|
- Compatibility: no new dependency requirement; matching common `1.1.0+`
|
||||||
|
remains required. Deployment: copy each updated HUD script and restart the
|
||||||
|
map. No plugin update or full server-process restart is required. The user
|
||||||
|
reports `1.1.1` has been uploaded; GSC compilation and live T5/T6 appearance
|
||||||
|
verification have not been performed here.
|
||||||
|
|
||||||
|
### Simplified bank balance message
|
||||||
|
|
||||||
|
| Component | Version | Affected source |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `tws_t5_bank.gsc` | `2.0.3` | `t5/scripts/tws_t5_bank.gsc` |
|
||||||
|
| `tws_t6_bank.gsc` | `2.0.3` | `t6/scripts/tws_t6_bank.gsc` |
|
||||||
|
|
||||||
|
- Both games now display `.b` as `Bank: {balance} points`, retaining the
|
||||||
|
existing colors and omitting the available amount. Update startup version
|
||||||
|
reporting and the existing balance-message fixtures. API data and point
|
||||||
|
accounting are unchanged.
|
||||||
|
- Validation: all 42 portable bank script fixture groups passed with
|
||||||
|
`node tools/check_bank.mjs`, including exact balance text for both games.
|
||||||
|
- Compatibility: no new dependency requirement; matching TWS plugins `1.2.0+`
|
||||||
|
remain required. Deployment: copy each updated bank script and restart the
|
||||||
|
map. No plugin update or full server-process restart is required for this
|
||||||
|
change. No deployment performed; GSC compilation and live T5/T6 display
|
||||||
|
verification remain required.
|
||||||
|
|
||||||
### Bank failure diagnostics — TWS #14
|
### Bank failure diagnostics — TWS #14
|
||||||
|
|
||||||
| Component | Version | Affected source |
|
| Component | Version | Affected source |
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ startup. `bankVersion()` is a new linking requirement even when the bank is
|
|||||||
disabled by dvar. No EC/agent change or new third-party dependency is required;
|
disabled by dvar. No EC/agent change or new third-party dependency is required;
|
||||||
existing bank API, common/telemetry and endpoint-migration requirements still apply.
|
existing bank API, common/telemetry and endpoint-migration requirements still apply.
|
||||||
Verify deployed DLL and GSC SHA-256 hashes against the built release artifacts,
|
Verify deployed DLL and GSC SHA-256 hashes against the built release artifacts,
|
||||||
and confirm startup reports `script=2.0.2 plugin=1.2.0` before interpreting results.
|
and confirm startup reports `script=2.0.3 plugin=1.2.0` before interpreting results.
|
||||||
An old bank script checksum on Ascension was reported in issue #14; deploying
|
An old bank script checksum on Ascension was reported in issue #14; deploying
|
||||||
only the DLL does not update GSC. No deployment was performed here.
|
only the DLL does not update GSC. No deployment was performed here.
|
||||||
|
|
||||||
|
|||||||
@@ -56,12 +56,12 @@ invalid identities fail privately without changing points. Follow the shared
|
|||||||
|
|
||||||
## Persistent Discord text
|
## Persistent Discord text
|
||||||
|
|
||||||
The HUD shows `https://discord.thewrightserver.net` in small light-gray text
|
The HUD shows `https://discord.tws.lol` in small muted-gray text
|
||||||
at the top-left, including for newcomers waiting in spectator mode. The label
|
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
|
is created once per connection and persists across death and respawn. The
|
||||||
gameplay HUD starts one line lower, keeping timers, help and records clear.
|
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
|
Install HUD `1.1.2` with common `1.1.0` or later, then restart the map; no plugin
|
||||||
or full server-process restart is required.
|
update or full server-process restart is required.
|
||||||
|
|
||||||
## Map record announcements
|
## Map record announcements
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ init()
|
|||||||
credentials = "valid";
|
credentials = "valid";
|
||||||
if (level.bank_token.size < 40 || getSubStr(level.bank_token, 0, 8) != "ec_bank_")
|
if (level.bank_token.size < 40 || getSubStr(level.bank_token, 0, 8) != "ec_bank_")
|
||||||
credentials = "invalid";
|
credentials = "invalid";
|
||||||
print("[tws_bank] startup script=2.0.2 plugin=" + bankVersion() +
|
print("[tws_bank] startup script=2.0.3 plugin=" + bankVersion() +
|
||||||
" endpoint=" + level.bank_url + " server=" + bank_log_token(level.bank_server) +
|
" endpoint=" + level.bank_url + " server=" + bank_log_token(level.bank_server) +
|
||||||
" credentials=" + credentials);
|
" credentials=" + credentials);
|
||||||
// A private per-server cfg supplies this; never embed bank credentials.
|
// A private per-server cfg supplies this; never embed bank credentials.
|
||||||
@@ -179,7 +179,7 @@ bank_transfer(entry, args)
|
|||||||
if (!isDefined(reply) || reply["state"] != "balance")
|
if (!isDefined(reply) || reply["state"] != "balance")
|
||||||
bank_say(entry, "^3Bank unavailable. Your points are unchanged.");
|
bank_say(entry, "^3Bank unavailable. Your points are unchanged.");
|
||||||
else
|
else
|
||||||
bank_say(entry, "^3Bank: ^7" + reply["balance"] + " ^3points; available: ^7" + reply["amount"]);
|
bank_say(entry, "^3Bank: ^7" + reply["balance"] + " ^3points");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.size != 2)
|
if (args.size != 2)
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ hud_discord()
|
|||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
|
|
||||||
label = scripts\sp\tws_t5_common::make_text_elem(
|
label = scripts\sp\tws_t5_common::make_text_elem(
|
||||||
self, 10, 10, "left", level.hud_font_small, level.hud_c_label);
|
self, 10, 10, "left", 1.2, (0.65, 0.65, 0.65));
|
||||||
label SetText("https://discord.thewrightserver.net");
|
label SetText("https://discord.tws.lol");
|
||||||
|
|
||||||
elems = [];
|
elems = [];
|
||||||
elems[elems.size] = label;
|
elems[elems.size] = label;
|
||||||
|
|||||||
@@ -69,12 +69,12 @@ populates that field before the `connected` notification. Follow the shared
|
|||||||
|
|
||||||
## Persistent Discord text
|
## Persistent Discord text
|
||||||
|
|
||||||
The HUD shows `https://discord.thewrightserver.net` in small light-gray text
|
The HUD shows `https://discord.tws.lol` in small muted-gray text
|
||||||
at the top-left, including for newcomers waiting in spectator mode. The label
|
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
|
is created once per connection and persists across death and respawn. The
|
||||||
gameplay HUD starts one line lower, keeping timers, help and records clear.
|
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
|
Install HUD `1.1.2` with common `1.1.0` or later, then restart the map; no plugin
|
||||||
or full server-process restart is required.
|
update or full server-process restart is required.
|
||||||
|
|
||||||
## Map record announcements
|
## Map record announcements
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ init()
|
|||||||
credentials = "valid";
|
credentials = "valid";
|
||||||
if (level.bank_token.size < 40 || getSubStr(level.bank_token, 0, 8) != "ec_bank_")
|
if (level.bank_token.size < 40 || getSubStr(level.bank_token, 0, 8) != "ec_bank_")
|
||||||
credentials = "invalid";
|
credentials = "invalid";
|
||||||
println("[tws_bank] startup script=2.0.2 plugin=" + bankVersion() +
|
println("[tws_bank] startup script=2.0.3 plugin=" + bankVersion() +
|
||||||
" endpoint=" + level.bank_url + " server=" + bank_log_token(level.bank_server) +
|
" endpoint=" + level.bank_url + " server=" + bank_log_token(level.bank_server) +
|
||||||
" credentials=" + credentials);
|
" credentials=" + credentials);
|
||||||
// A private per-server cfg supplies this; never embed bank credentials.
|
// A private per-server cfg supplies this; never embed bank credentials.
|
||||||
@@ -184,7 +184,7 @@ bank_transfer(entry, args)
|
|||||||
if (!isDefined(reply) || reply["state"] != "balance")
|
if (!isDefined(reply) || reply["state"] != "balance")
|
||||||
bank_say(entry, "^3Bank unavailable. Your points are unchanged.");
|
bank_say(entry, "^3Bank unavailable. Your points are unchanged.");
|
||||||
else
|
else
|
||||||
bank_say(entry, "^3Bank: ^7" + reply["balance"] + " ^3points; available: ^7" + reply["amount"]);
|
bank_say(entry, "^3Bank: ^7" + reply["balance"] + " ^3points");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.size != 2)
|
if (args.size != 2)
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ hud_discord()
|
|||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
|
|
||||||
label = scripts\zm\tws_t6_common::make_text_elem(
|
label = scripts\zm\tws_t6_common::make_text_elem(
|
||||||
self, 10, 10, "left", level.hud_font_small, level.hud_c_label);
|
self, 10, 10, "left", 1.2, (0.65, 0.65, 0.65));
|
||||||
label SetText("https://discord.thewrightserver.net");
|
label SetText("https://discord.tws.lol");
|
||||||
|
|
||||||
elems = [];
|
elems = [];
|
||||||
elems[elems.size] = label;
|
elems[elems.size] = label;
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ for (const game of ['t5','t6']) {
|
|||||||
});
|
});
|
||||||
test('startup reports versions, scope, credential validation and journal count safely', () => {
|
test('startup reports versions, scope, credential validation and journal count safely', () => {
|
||||||
const e = engine(game);
|
const e = engine(game);
|
||||||
assert.match(e.logs.join('\n'), /script=2\.0\.2 plugin=1\.2\.0/);
|
assert.match(e.logs.join('\n'), /script=2\.0\.3 plugin=1\.2\.0/);
|
||||||
assert(e.logs.some(line => line.includes(`endpoint=${publicEndpoint} server=server credentials=valid`)));
|
assert(e.logs.some(line => line.includes(`endpoint=${publicEndpoint} server=server credentials=valid`)));
|
||||||
assert(e.logs.some(line => line.includes('journal_load=success pending=0')));
|
assert(e.logs.some(line => line.includes('journal_load=success pending=0')));
|
||||||
const invalid = engine(game, {dvars:{tws_bank_token:'secret-invalid-token'}});
|
const invalid = engine(game, {dvars:{tws_bank_token:'secret-invalid-token'}});
|
||||||
@@ -304,11 +304,11 @@ for (const game of ['t5','t6']) {
|
|||||||
const e=engine(game); e.c.level.telemetry_match=undefined; e.run(['.d','all']); assert.equal(e.sent.length,0);
|
const e=engine(game); e.c.level.telemetry_match=undefined; e.run(['.d','all']); assert.equal(e.sent.length,0);
|
||||||
});
|
});
|
||||||
test('balance reads do not journal or alter points', () => {
|
test('balance reads do not journal or alter points', () => {
|
||||||
const e=engine(game); e.run(['.b']); assert.equal(e.saved.length,0); assert.equal(e.player.score,3000); assert.match(e.messages[0],/5000/);
|
const e=engine(game); e.run(['.b']); assert.equal(e.saved.length,0); assert.equal(e.player.score,3000); assert.equal(e.messages[0], '^3Bank: ^75000 ^3points');
|
||||||
});
|
});
|
||||||
test('empty balance displays zero and withdrawing all reports insufficient balance', () => {
|
test('empty balance displays zero and withdrawing all reports insufficient balance', () => {
|
||||||
const e = engine(game, {amount:0, balance:0}); e.run(['.b']);
|
const e = engine(game, {amount:0, balance:0}); e.run(['.b']);
|
||||||
assert.equal(e.messages[0], '^3Bank: ^70 ^3points; available: ^70');
|
assert.equal(e.messages[0], '^3Bank: ^70 ^3points');
|
||||||
assert.equal(e.saved.length, 0); assert.equal(e.player.score, 3000);
|
assert.equal(e.saved.length, 0); assert.equal(e.player.score, 3000);
|
||||||
const w = engine(game, {amount:0, balance:0, state:'rejected', code:'insufficient_balance'}); w.run(['.w','all']);
|
const w = engine(game, {amount:0, balance:0, state:'rejected', code:'insufficient_balance'}); w.run(['.w','all']);
|
||||||
assert.match(w.messages[0], /Not enough bank balance/);
|
assert.match(w.messages[0], /Not enough bank balance/);
|
||||||
@@ -356,7 +356,7 @@ for (const game of ['t5','t6']) {
|
|||||||
}
|
}
|
||||||
assert.equal(ec.requests().length, 0);
|
assert.equal(ec.requests().length, 0);
|
||||||
const e = engine(game, {guid, receiver:ec.request});
|
const e = engine(game, {guid, receiver:ec.request});
|
||||||
e.run(['.b']); assert.equal(e.messages[0], '^3Bank: ^70 ^3points; available: ^70');
|
e.run(['.b']); assert.equal(e.messages[0], '^3Bank: ^70 ^3points');
|
||||||
e.run(['.w','all']); assert.match(e.messages.at(-1), /Not enough bank balance/);
|
e.run(['.w','all']); assert.match(e.messages.at(-1), /Not enough bank balance/);
|
||||||
assert.equal(e.player.score, 3000); assert.equal(e.saved[0].decision, 'cancel');
|
assert.equal(e.player.score, 3000); assert.equal(e.saved[0].decision, 'cancel');
|
||||||
e.c.bank_sender().next(); assert.equal(e.saved.length, 0);
|
e.c.bank_sender().next(); assert.equal(e.saved.length, 0);
|
||||||
|
|||||||
+4
-4
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"tws_t5_afk.gsc": "1.0.0",
|
"tws_t5_afk.gsc": "1.0.0",
|
||||||
"tws_t5_bank.gsc": "2.0.2",
|
"tws_t5_bank.gsc": "2.0.3",
|
||||||
"tws_t5_common.gsc": "1.1.0",
|
"tws_t5_common.gsc": "1.1.0",
|
||||||
"tws_t5_hud.gsc": "1.1.0",
|
"tws_t5_hud.gsc": "1.1.2",
|
||||||
"tws_t5_join.gsc": "1.0.0",
|
"tws_t5_join.gsc": "1.0.0",
|
||||||
"tws_t5_leaderboard.gsc": "1.0.0",
|
"tws_t5_leaderboard.gsc": "1.0.0",
|
||||||
"tws_t5_lock.gsc": "1.0.0",
|
"tws_t5_lock.gsc": "1.0.0",
|
||||||
"tws_t5_telemetry.gsc": "1.0.0",
|
"tws_t5_telemetry.gsc": "1.0.0",
|
||||||
"tws_t6_afk.gsc": "1.0.0",
|
"tws_t6_afk.gsc": "1.0.0",
|
||||||
"tws_t6_bank.gsc": "2.0.2",
|
"tws_t6_bank.gsc": "2.0.3",
|
||||||
"tws_t6_common.gsc": "1.1.0",
|
"tws_t6_common.gsc": "1.1.0",
|
||||||
"tws_t6_hud.gsc": "1.1.0",
|
"tws_t6_hud.gsc": "1.1.2",
|
||||||
"tws_t6_join.gsc": "1.0.1",
|
"tws_t6_join.gsc": "1.0.1",
|
||||||
"tws_t6_leaderboard.gsc": "1.0.0",
|
"tws_t6_leaderboard.gsc": "1.0.0",
|
||||||
"tws_t6_lock.gsc": "1.0.0",
|
"tws_t6_lock.gsc": "1.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user