itEnsure player names are uniques - scoreboard - Interactive scoreboard for CTF-like games Err z3bra.org 70 hgit clone git://git.z3bra.org/scoreboard.git URL:git://git.z3bra.org/scoreboard.git z3bra.org 70 1Log /scm/scoreboard/log.gph z3bra.org 70 1Files /scm/scoreboard/files.gph z3bra.org 70 1Refs /scm/scoreboard/refs.gph z3bra.org 70 i--- Err z3bra.org 70 1commit e74b632684c58ebb06b40f395409f7759a3ca9fb /scm/scoreboard/commit/e74b632684c58ebb06b40f395409f7759a3ca9fb.gph z3bra.org 70 1parent 8abd5edce6b5776b4288254ea3f19fd4d7406c18 /scm/scoreboard/commit/8abd5edce6b5776b4288254ea3f19fd4d7406c18.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:contact@z3bra.org z3bra.org 70 iDate: Mon, 5 Dec 2022 14:10:51 +0100 Err z3bra.org 70 i Err z3bra.org 70 iEnsure player names are uniques Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M db.go | 34 ++++++++++++++++++++++--------- Err z3bra.org 70 i M main.go | 2 +- Err z3bra.org 70 i M playerbox.go | 8 ++++++-- Err z3bra.org 70 i M ui.go | 19 +++++++++++++++++++ Err z3bra.org 70 i Err z3bra.org 70 i4 files changed, 50 insertions(+), 13 deletions(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/db.go b/db.go /scm/scoreboard/file/db.go.gph z3bra.org 70 it@@ -70,32 +70,46 @@ func (a *Application) db_count() int { Err z3bra.org 70 i return count Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-func (a *Application) db_rank(score int, ts int64) int { Err z3bra.org 70 i- var rank int Err z3bra.org 70 i+func (a *Application) db_count_flag(flag int) int { Err z3bra.org 70 i+ var count int Err z3bra.org 70 i query := `SELECT Err z3bra.org 70 i count(id) Err z3bra.org 70 i FROM score Err z3bra.org 70 i WHERE Err z3bra.org 70 i- score >= ? Err z3bra.org 70 i+ flags >= ? Err z3bra.org 70 i ;` Err z3bra.org 70 i Err z3bra.org 70 i- row := a.db.QueryRow(query, score) Err z3bra.org 70 i- row.Scan(&rank) Err z3bra.org 70 i- return rank + 1 Err z3bra.org 70 i+ row := a.db.QueryRow(query, flag) Err z3bra.org 70 i+ row.Scan(&count) Err z3bra.org 70 i+ return count Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-func (a *Application) db_count_flag(flag int) int { Err z3bra.org 70 i+func (a *Application) db_checkname(nick string) bool { Err z3bra.org 70 i var count int Err z3bra.org 70 i query := `SELECT Err z3bra.org 70 i count(id) Err z3bra.org 70 i FROM score Err z3bra.org 70 i WHERE Err z3bra.org 70 i- flags >= ? Err z3bra.org 70 i+ name = ? Err z3bra.org 70 i ;` Err z3bra.org 70 i Err z3bra.org 70 i- row := a.db.QueryRow(query, flag) Err z3bra.org 70 i+ row := a.db.QueryRow(query, nick) Err z3bra.org 70 i row.Scan(&count) Err z3bra.org 70 i- return count Err z3bra.org 70 i+ return (count > 0) Err z3bra.org 70 i+} Err z3bra.org 70 i+ Err z3bra.org 70 i+func (a *Application) db_rank(score int, ts int64) int { Err z3bra.org 70 i+ var rank int Err z3bra.org 70 i+ query := `SELECT Err z3bra.org 70 i+ count(id) Err z3bra.org 70 i+ FROM score Err z3bra.org 70 i+ WHERE Err z3bra.org 70 i+ score >= ? Err z3bra.org 70 i+ ;` Err z3bra.org 70 i+ Err z3bra.org 70 i+ row := a.db.QueryRow(query, score) Err z3bra.org 70 i+ row.Scan(&rank) Err z3bra.org 70 i+ return rank + 1 Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i func (a *Application) db_ranked(offset, limit int) ([]Player, error) { Err z3bra.org 70 1diff --git a/main.go b/main.go /scm/scoreboard/file/main.go.gph z3bra.org 70 it@@ -151,7 +151,7 @@ func main() { Err z3bra.org 70 i cyboard.player.ts = time.Now().Unix() Err z3bra.org 70 i Err z3bra.org 70 i /* Bonus points for the first 10 players to get first flag */ Err z3bra.org 70 i- n := cyboard.db_count() Err z3bra.org 70 i+ n := cyboard.db_count_flag(1) Err z3bra.org 70 i if n < 10 { Err z3bra.org 70 i cyboard.player.score += 10 - n Err z3bra.org 70 i } Err z3bra.org 70 1diff --git a/playerbox.go b/playerbox.go /scm/scoreboard/file/playerbox.go.gph z3bra.org 70 it@@ -70,8 +70,12 @@ func PlayerBoxName(p Player) *tview.TextView { Err z3bra.org 70 i SetDoneFunc(func(key tcell.Key) { Err z3bra.org 70 i if key == tcell.KeyEnter { Err z3bra.org 70 i p.name = fmt.Sprintf("%3s", playerbox.name) Err z3bra.org 70 i- cyboard.db_save(p) Err z3bra.org 70 i- cyboard.pages.SwitchToPage("board") Err z3bra.org 70 i+ if cyboard.db_checkname(p.name) == false { Err z3bra.org 70 i+ cyboard.db_save(p) Err z3bra.org 70 i+ cyboard.DrawBoard() Err z3bra.org 70 i+ } else { Err z3bra.org 70 i+ cyboard.Popup("Error", "Name already registered\nPlease pick another one") Err z3bra.org 70 i+ } Err z3bra.org 70 i } Err z3bra.org 70 i }) Err z3bra.org 70 i Err z3bra.org 70 1diff --git a/ui.go b/ui.go /scm/scoreboard/file/ui.go.gph z3bra.org 70 it@@ -84,3 +84,22 @@ func (a *Application) NewPlayer(rank int) { Err z3bra.org 70 i AddItem(t2, BOARD_HEIGHT - rank, 0, false) Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i+func (a *Application) Popup(title, text string) { Err z3bra.org 70 i+ p := tview.NewTextView(). Err z3bra.org 70 i+ SetDynamicColors(true). Err z3bra.org 70 i+ SetTextAlign(tview.AlignCenter). Err z3bra.org 70 i+ SetText("[::b]" + text). Err z3bra.org 70 i+ SetDoneFunc(func(key tcell.Key) { Err z3bra.org 70 i+ a.pages.RemovePage("popup") Err z3bra.org 70 i+ }) Err z3bra.org 70 i+ Err z3bra.org 70 i+ frame := tview.NewFrame(p). Err z3bra.org 70 i+ SetBorders(1, 0, 2, 2, 1, 1). Err z3bra.org 70 i+ AddText("Press RET", false, tview.AlignRight, tcell.ColorGray) Err z3bra.org 70 i+ Err z3bra.org 70 i+ frame.SetBorder(true).SetTitle(title) Err z3bra.org 70 i+ Err z3bra.org 70 i+ c := center(30, 8, frame) Err z3bra.org 70 i+ Err z3bra.org 70 i+ a.pages.AddAndSwitchToPage("popup", c, true) Err z3bra.org 70 i+} Err z3bra.org 70 .