Leaderboard attiva di default, senza configurazione

La classifica globale non dipende più da un argomento: sui build desktop il client
usa il servizio pubblico DEFAULT_API_BASE (https://enne2.net/api/zombie-fps).

- scripts/leaderboard.gd: resolve_base() statica con priorità --api=<url> (test)
  → --offline/--no-api (opt-out esplicito per le partite di prova) → origine della
  pagina sul Web → servizio pubblico. Rimosso l'avviso "Classifica disattivata".
- Le suite di test (--script) restano spente a meno di un --api= esplicito, così
  nessun test può scrivere nella classifica pubblica.
- tools/test_start_screen.gd: verifica default attivo, opt-out e override;
  tools/test_rebalance_branding.gd: suite di test senza invii.
- docs/HIGHSCORES.md: nuova regola della base URL e diagnostica aggiornata.

Verifiche: test_start_screen 18/18 PASS con display; test_rebalance_branding
14/14 PASS; test_leaderboard.sh invariato (12 PASS, 2 FAIL preesistenti su questa
macchina anche prima della modifica).
This commit is contained in:
Matteo Benedetto
2026-10-24 15:57:42 +02:00
parent 4af402f8bf
commit 323a7cdbae
4 changed files with 66 additions and 24 deletions
+16 -4
View File
@@ -8,6 +8,7 @@ extends SceneTree
## (con display, per gli eventi di puntamento: --rendering-method gl_compatibility)
const Profile = preload("res://scripts/player_profile.gd")
const StartScreen = preload("res://scripts/start_screen.gd")
const Leaderboard = preload("res://scripts/leaderboard.gd")
var world: Node3D
var screen: CanvasLayer
@@ -101,10 +102,21 @@ func test_world_menu() -> void:
or Input.mouse_mode == Input.MOUSE_MODE_CAPTURED),
"playing=%s mode=%s display=%s" % [str(world.player.playing), str(Input.mouse_mode),
DisplayServer.get_name()])
# Regressione: senza --api= questa e' una build desktop di prova e non deve poter
# inviare punteggi alla classifica pubblica (ci sono finite righe "Test").
check("senza --api= la build di prova non invia punteggi alla classifica pubblica",
world.leaderboard.disabled == true and world.leaderboard.base_url == "",
# La classifica e' attiva di default (nessuna configurazione). Il nodo qui e' spento
# perche' questa suite gira come --script: le regole si verificano su resolve_base().
check("senza argomenti la classifica e' attiva sul servizio pubblico",
Leaderboard.resolve_base(PackedStringArray(), false) == Leaderboard.DEFAULT_API_BASE
and Leaderboard.DEFAULT_API_BASE == "https://enne2.net/api/zombie-fps",
"base=%s" % str(Leaderboard.resolve_base(PackedStringArray(), false)))
check("--offline (e --no-api) spengono la classifica per le partite di prova",
Leaderboard.resolve_base(PackedStringArray(["--offline"]), false) == ""
and Leaderboard.resolve_base(PackedStringArray(["--no-api"]), false) == "")
check("--api= vince su --offline e normalizza la barra finale",
Leaderboard.resolve_base(PackedStringArray(["--offline", "--api=http://127.0.0.1:8799/"]), false)
== "http://127.0.0.1:8799")
check("in una suite di test la classifica resta spenta",
world.leaderboard.disabled == true and world.leaderboard.base_url == ""
and Leaderboard.resolve_base(PackedStringArray(), true) == "",
"base=%s disattivata=%s" % [str(world.leaderboard.base_url), str(world.leaderboard.disabled)])
world.queue_free()
await process_frame