tFix newplayer box menu and HTML generation - scoreboard - Interactive scoreboard for CTF-like games
(HTM) git clone git://git.z3bra.org/scoreboard.git
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit cc20e9fc44c4a724943a4eb8d8a1edb741ecbb39
(DIR) parent e8f323a0f07c97f14b90618e21bccbff82ff176e
(HTM) Author: Willy Goiffon <contact@z3bra.org>
Date: Wed, 25 Sep 2024 23:43:04 +0200
Fix newplayer box menu and HTML generation
Diffstat:
M db.go | 11 +++++++++++
M html.go | 43 ++++++++++++++++++++-----------
M main.go | 25 +++++++++++++------------
M playerbox.go | 4 ++--
M ui.go | 2 +-
5 files changed, 55 insertions(+), 30 deletions(-)
---
(DIR) diff --git a/db.go b/db.go
t@@ -63,6 +63,17 @@ func db_init(file string) (*sql.DB, error) {
return db, nil
}
+func db_count_players(db *sql.DB) (int, error) {
+ var count int
+
+ query := `SELECT count(*) FROM user;`
+
+ row := db.QueryRow(query)
+ err := row.Scan(&count)
+
+ return count, err
+}
+
func db_get_flags(db *sql.DB) ([]Flag, error) {
query := `SELECT rowid,value,badge,score FROM flag ORDER BY score;`
(DIR) diff --git a/html.go b/html.go
t@@ -26,16 +26,33 @@ var html string = `
<meta charset="utf-8">
<meta name="author" content="z3bra">
<meta name="viewport" content="width=device-width">
- <link rel="stylesheet" type="text/css" href="/arcade.css">
- <link rel="stylesheet" type="text/css" href="/glitch.css">
- <link rel="stylesheet" type="text/css" href="/board.css">
+ <link rel="stylesheet" type="text/css" href="/5rooms.css">
<link rel="icon" type="image/ico" href="/favicon.ico" />
<title>High scores</title>
+ <style>
+ table {
+ max-width: 100%;
+ margin: auto;
+ border-collapse: collapse;
+ overflow: scroll;
+ text-align:center;
+ font-family: monospace;
+ }
+ th { padding: 1ch 1ch; }
+ td { padding: 0ch 1ch; }
+ tr.unset { color: #888; }
+ tr > td:last-of-type { text-align:right; }
+ p.copyright {
+ width: 100%;
+ text-align: center;
+ position: absolute;
+ bottom: 2ch;
+ }
+ </style>
</head>
<body class=flex>
-<h1 class="title glitch" data-text="CYB3R HUNT"><a href="/">CYB3R HUNT</a></h1>
-<h2>HIGH SCORES</h2>
-<div class="board">
+<h1>HIGH SCORES</h1>
+<main class="room vert">
<table>
<thead><tr><th>RANK</th><th>NAME</th><th>FLAGS</th><th>SCORE</th></tr></thead>
<tbody>
t@@ -45,21 +62,17 @@ var html string = `
{{end}}
</tbody>
</table>
-</div>
-<div style="flex-grow:2"></div>
-<p class='copyright'>Copyright (C) <a href="https://z3bra.org">Z3BRA</a>, 2022-2106</p>
+</main>
+<p class='copyright'>Copyright (C) <a href="https://z3bra.org">WGS</a>, 2024</p>
</body>
</html>
`
func (a *Application) GenerateHTML() {
- players := make([]Player, 0)
- /*
players, err := db_ranked_players(a.db, 0, -1)
if err != nil {
panic(err)
}
- */
data := Template{}
for i:=0; i<len(players); i++ {
t@@ -68,7 +81,7 @@ func (a *Application) GenerateHTML() {
Name: players[i].name,
Rank: players[i].RankStr(),
Flag: players[i].FlagStr(),
- Score: fmt.Sprintf("%d", players[i].score),
+ Score: fmt.Sprintf("%5d", players[i].score),
})
}
t@@ -78,8 +91,8 @@ func (a *Application) GenerateHTML() {
data.Placeholders = append(data.Placeholders, Boardline{
Name: "AAA",
Rank: humanize.Ordinal(i+1),
- Flag: ".......",
- Score: "00000",
+ Flag: ".....",
+ Score: "0",
})
}
}
(DIR) diff --git a/main.go b/main.go
t@@ -187,21 +187,22 @@ func main() {
scoreboard.GenerateHTML()
os.Exit(0)
}
- switch scoreboard.flag = flagid(args[0]) + 1; scoreboard.flag {
- case 0:
- fmt.Println("Incorrect flag")
- return
- case 1:
- scoreboard.player.flag = scoreboard.flag
- scoreboard.player.score = 100
+ if args[0] == "register" {
+ scoreboard.player.flag = 0
+ scoreboard.player.score = 0
scoreboard.player.ts = time.Now().Unix()
- rank := scoreboard.player.ScoreRank() + 1
-
- scoreboard.NewPlayer(rank)
+ rank, _ := db_count_players(scoreboard.db)
+ scoreboard.NewPlayer(rank + 1)
scoreboard.pages.SwitchToPage("board")
- default:
- scoreboard.pages.SwitchToPage("token")
+ } else {
+ switch scoreboard.flag = flagid(args[0]) + 1; scoreboard.flag {
+ case 0:
+ fmt.Println("Incorrect flag")
+ return
+ default:
+ scoreboard.pages.SwitchToPage("token")
+ }
}
} else {
scoreboard.pages.SwitchToPage("board")
(DIR) diff --git a/playerbox.go b/playerbox.go
t@@ -122,10 +122,10 @@ func PlayerBoxGrid(p *Player, rank int) *tview.Grid {
box := PlayerBoxName(p)
playerbox.box = box
- playerbox.score = gridcell(fmt.Sprintf("%4d ", p.score))
+ playerbox.score = gridcell(fmt.Sprintf("%5d ", p.score))
grid := tview.NewGrid().
- SetColumns(4,3,8,6).
+ SetColumns(4,4,6,7).
SetGap(0, 2).
SetRows(1).
AddItem(gridcell(rankstr), 0, 0, 1, 1, 0, 0, false).
(DIR) diff --git a/ui.go b/ui.go
t@@ -50,7 +50,7 @@ func RankTable(offset, limit, rank int, fill bool) *tview.Table {
for i := 0; i < len(players); i++ {
p := players[i]
rankstr := fmt.Sprintf("%4s", humanize.Ordinal(rank + i + 1))
- scorestr := fmt.Sprintf("%4d", p.score)
+ scorestr := fmt.Sprintf("%5d", p.score)
t.SetCell(i, 0, newcell(rankstr))
t.SetCell(i, 1, newcell(p.name))
t.SetCell(i, 2, newcell(p.FlagStr()))