tAllow having multiple flags for the same chapter - scoreboard - Interactive scoreboard for CTF-like games
HTML git clone git://git.z3bra.org/scoreboard.git
DIR Log
DIR Files
DIR Refs
---
DIR commit 4e55278ba45d60e799d7ffa66788b8db4ab81db5
DIR parent fa790c7999b6849352187e0619a7a20d070c585b
HTML Author: Willy Goiffon <contact@z3bra.org>
Date: Thu, 7 Sep 2023 20:01:27 +0200
Allow having multiple flags for the same chapter
Diffstat:
M db.go | 10 +++++-----
M main.go | 21 +++++++++++++--------
2 files changed, 18 insertions(+), 13 deletions(-)
---
DIR diff --git a/db.go b/db.go
t@@ -138,18 +138,18 @@ func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) {
return players, nil
}
-func db_flags(db *sql.DB) ([]string, error) {
- query := `SELECT value FROM flag ORDER BY chapter;`
+func db_flags(db *sql.DB) ([]Flag, error) {
+ query := `SELECT chapter,value FROM flag ORDER BY chapter;`
rows, err := db.Query(query)
if err != nil {
return nil, err
}
- flags := make([]string, 0)
+ flags := make([]Flag, 0)
for rows.Next() {
- var flag string
- err := rows.Scan(&flag)
+ var flag Flag
+ err := rows.Scan(&flag.chapter, &flag.value)
if err != nil {
return nil, err
}
DIR diff --git a/main.go b/main.go
t@@ -41,9 +41,14 @@ Save it carefully, do not share it.
`
)
+type Flag struct {
+ chapter int
+ value string
+}
+
type Application struct {
flag int
- flag_ref []string
+ flag_ref []Flag
db *sql.DB
app *tview.Application
html string
t@@ -63,8 +68,8 @@ func usage() {
func flagid(hash string) int {
for i := 0; i<len(cyboard.flag_ref); i++ {
- if strings.ToUpper(hash) == cyboard.flag_ref[i] {
- return i
+ if strings.ToUpper(hash) == cyboard.flag_ref[i].value {
+ return cyboard.flag_ref[i].chapter
}
}
return -1
t@@ -182,6 +187,9 @@ func main() {
os.Exit(0)
}
switch cyboard.flag = flagid(args[0]) + 1; cyboard.flag {
+ case 0:
+ fmt.Println("Incorrect flag")
+ return
case 1:
cyboard.player.flag = cyboard.flag
cyboard.player.score = 100
t@@ -196,11 +204,8 @@ func main() {
cyboard.NewPlayer(rank)
cyboard.pages.SwitchToPage("board")
- case 2,3,4,5:
- cyboard.pages.SwitchToPage("token")
default:
- fmt.Println("Incorrect flag")
- return
+ cyboard.pages.SwitchToPage("token")
}
} else {
cyboard.pages.SwitchToPage("board")
t@@ -212,7 +217,7 @@ func main() {
os.Exit(1)
}
- if cyboard.player.token != "" && cyboard.flag < (len(cyboard.flag_ref)) {
+ if cyboard.player.token != "" && cyboard.flag < 7 {
fmt.Printf(TOKEN_REMINDER, cyboard.player.name, humanize.Ordinal(cyboard.flag + 1), cyboard.player.token)
}
}