itDisplay registered flags when logged in - 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 2db1381cace960339b3408f5f18ddf70c814cfb3 /scm/scoreboard/commit/2db1381cace960339b3408f5f18ddf70c814cfb3.gph z3bra.org 70 1parent cb97cb5f224a91c0f4b47db43fae0f37f6e1a079 /scm/scoreboard/commit/cb97cb5f224a91c0f4b47db43fae0f37f6e1a079.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:contact@z3bra.org z3bra.org 70 iDate: Fri, 27 Sep 2024 19:25:46 +0200 Err z3bra.org 70 i Err z3bra.org 70 iDisplay registered flags when logged in Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M player.go | 72 ++++++++++++++++++++++++++++--- Err z3bra.org 70 i M ui.go | 4 ++-- Err z3bra.org 70 i Err z3bra.org 70 i2 files changed, 67 insertions(+), 9 deletions(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/player.go b/player.go /scm/scoreboard/file/player.go.gph z3bra.org 70 it@@ -147,9 +147,55 @@ func (p *Player) FlagStr() string { Err z3bra.org 70 i return fmt.Sprintf("%2d/%d", p.flag, len(scoreboard.flag_ref)) Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i-func (p *Player) BadgeStr(full bool) string { Err z3bra.org 70 i+func (p *Player) FlagsStr() string { Err z3bra.org 70 i+ var flaglist strings.Builder Err z3bra.org 70 i+ Err z3bra.org 70 i+ var flags []Flag Err z3bra.org 70 i+ Err z3bra.org 70 i+ query := `SELECT Err z3bra.org 70 i+ flag.badge, flag.value, flag.score Err z3bra.org 70 i+ FROM flag Err z3bra.org 70 i+ INNER JOIN score ON score.flag = flag.value Err z3bra.org 70 i+ WHERE score.name = ?;` Err z3bra.org 70 i+ Err z3bra.org 70 i+ rows, err := p.db.Query(query, p.name) Err z3bra.org 70 i+ if err != nil { Err z3bra.org 70 i+ return "" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ for rows.Next() { Err z3bra.org 70 i+ var f Flag Err z3bra.org 70 i+ err := rows.Scan(&f.badge, &f.value, &f.score) Err z3bra.org 70 i+ if err != nil { Err z3bra.org 70 i+ return "" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ flags = append(flags, f) Err z3bra.org 70 i+ flaglist.WriteString(fmt.Sprintf("%s %s\n", f.badge, f.value)) Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ var hasflag = func(a []Flag, f Flag) bool { Err z3bra.org 70 i+ for _, r := range a { Err z3bra.org 70 i+ if f.value == r.value { Err z3bra.org 70 i+ return true Err z3bra.org 70 i+ } Err z3bra.org 70 i+ } Err z3bra.org 70 i+ return false Err z3bra.org 70 i+ } Err z3bra.org 70 i+ flaglist.WriteString("[::-][::d]") Err z3bra.org 70 i+ for _, r := range scoreboard.flag_ref { Err z3bra.org 70 i+ if !hasflag(flags, r) { Err z3bra.org 70 i+ flaglist.WriteString(fmt.Sprintf("[::d]%s ................................................................[::-]\n", r.badge)) Err z3bra.org 70 i+ } Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ return flaglist.String(); Err z3bra.org 70 i+} Err z3bra.org 70 i+ Err z3bra.org 70 i+func (p *Player) BadgeStr() string { Err z3bra.org 70 i var badges strings.Builder Err z3bra.org 70 i Err z3bra.org 70 i+ var flags []Flag Err z3bra.org 70 i+ Err z3bra.org 70 i query := `SELECT Err z3bra.org 70 i flag.badge, flag.value, flag.score Err z3bra.org 70 i FROM flag Err z3bra.org 70 it@@ -162,16 +208,28 @@ func (p *Player) BadgeStr(full bool) string { Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i for rows.Next() { Err z3bra.org 70 i- var b, v string Err z3bra.org 70 i- var s int Err z3bra.org 70 i- err := rows.Scan(&b, &v, &s) Err z3bra.org 70 i+ var f Flag Err z3bra.org 70 i+ err := rows.Scan(&f.badge, &f.value, &f.score) Err z3bra.org 70 i if err != nil { Err z3bra.org 70 i return "" Err z3bra.org 70 i } Err z3bra.org 70 i- if full { Err z3bra.org 70 i- badges.WriteString(fmt.Sprintf("%s %s\n", b, v)) Err z3bra.org 70 i+ flags = append(flags, f) Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ var hasflag = func(a []Flag, f Flag) bool { Err z3bra.org 70 i+ for _, r := range a { Err z3bra.org 70 i+ if f.value == r.value { Err z3bra.org 70 i+ return true Err z3bra.org 70 i+ } Err z3bra.org 70 i+ } Err z3bra.org 70 i+ return false Err z3bra.org 70 i+ } Err z3bra.org 70 i+ badges.WriteString("[::-]") Err z3bra.org 70 i+ for _, r := range scoreboard.flag_ref { Err z3bra.org 70 i+ if hasflag(flags, r) { Err z3bra.org 70 i+ badges.WriteString(fmt.Sprintf("[::b]%s[::-]", r.badge)) Err z3bra.org 70 i } else { Err z3bra.org 70 i- badges.WriteString(b) Err z3bra.org 70 i+ badges.WriteString(fmt.Sprintf("[::d]%s[::-]", r.badge)) 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@@ -65,9 +65,9 @@ func RankTable(offset, limit, rank int, fill bool) *tview.Table { Err z3bra.org 70 i player.db = scoreboard.db Err z3bra.org 70 i player.Fetch() Err z3bra.org 70 i if scoreboard.player.name == player.name { Err z3bra.org 70 i- scoreboard.Message(player.name, player.BadgeStr(true)) Err z3bra.org 70 i+ scoreboard.Message(player.name, player.FlagsStr()) Err z3bra.org 70 i } else { Err z3bra.org 70 i- scoreboard.Popup(player.name, player.BadgeStr(false)) Err z3bra.org 70 i+ scoreboard.Popup(player.name, player.BadgeStr()) Err z3bra.org 70 i } Err z3bra.org 70 i }) Err z3bra.org 70 i Err z3bra.org 70 .