Treffer-Toleranz, 2 Ranglisten, Anti-Cheat, CLI-Modi & Icons
- Treffer-Toleranz: Ziel wird geometrisch + bevorzugt getroffen, auch wenn verdeckt - Zwei Ranglisten: Hall of Fame (Allzeit-Top-5) + Heute (Top-10) - Anti-Cheat: server-autoritative Sessions (start/hit), Score = Server-Zahl, Mindestabstand gegen Auto-Klicker, Deckelung nach Spielzeit; Score ohne Session -> 400 - CLI (server/admin.js): list / delete <name> / clear-today / clear-all - Zwei Betriebsmodi per CLI (live, ohne Neustart): public (/ = Spiel) und private (/ gesperrt, Spiel unter geheimem /pfad) + "not allowed to play"-Seite - Board-Icons von Emojis auf echte SVG-Icons, Board heisst "Hall of Fame" Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
33
README.md
33
README.md
@@ -51,9 +51,36 @@ In `public/js/app.js` oben:
|
||||
|
||||
## Rangliste
|
||||
|
||||
- Gespeichert in `data/leaderboard.json` (wird automatisch angelegt, überlebt Neustarts).
|
||||
- Endpoints: `GET /api/leaderboard` (Top 10), `POST /api/score` `{name, score}`.
|
||||
- Namen werden beim Anzeigen escaped (kein XSS). Kein Anti-Cheat — Spaßspiel.
|
||||
- Zwei Boards: **Hall of Fame** (Allzeit-Top-5) + **Heute** (Top-10). Gespeichert in
|
||||
`data/leaderboard.json` (wird automatisch angelegt, überlebt Neustarts).
|
||||
- **Anti-Cheat:** Der Score ist server-autoritär — der Server vergibt zu Spielbeginn eine
|
||||
Session (`/api/game/start`), zählt jeden gemeldeten Treffer (`/api/game/hit`) mit
|
||||
Mindestabstand (gegen Auto-Klicker) und deckelt nach echter Spielzeit. Beim Eintragen
|
||||
(`/api/score`) zählt **nur** diese Server-Zahl; ein Score ohne gültige Session wird
|
||||
abgelehnt. Namen werden beim Anzeigen escaped (kein XSS).
|
||||
|
||||
## Verwaltung per CLI
|
||||
|
||||
Auf dem Server (im Projektordner):
|
||||
|
||||
```sh
|
||||
# Rangliste
|
||||
node server/admin.js list # beide Boards anzeigen
|
||||
node server/admin.js delete "Name" # einen bestimmten Spieler löschen
|
||||
node server/admin.js clear-today # nur die heutige Rangliste leeren
|
||||
node server/admin.js clear-all # komplette Rangliste leeren
|
||||
|
||||
# Betriebsmodus (wirkt SOFORT, ohne Neustart)
|
||||
node server/admin.js mode # aktuellen Modus anzeigen
|
||||
node server/admin.js mode public # Spiel öffentlich unter "/"
|
||||
node server/admin.js mode private geheim # "/" gesperrt, Spiel nur unter "/geheim"
|
||||
```
|
||||
|
||||
(Kurzform via npm: `npm run lb -- <befehl>`.)
|
||||
|
||||
- **public** (Default): `/` ist das Spiel.
|
||||
- **private**: `/` zeigt „You are not allowed to play", das Spiel läuft nur unter dem
|
||||
gewählten Pfad (`/<pfad>`) — praktisch zum Testen im Live-Betrieb.
|
||||
|
||||
## Deployment (Ausblick)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user