leaderboard

This commit is contained in:
2025-11-28 19:26:47 +05:30
parent 95381c2a56
commit 65b5ef4660
2 changed files with 43 additions and 0 deletions

View File

@@ -45,6 +45,21 @@ func InitModule(
return err
}
err := nk.LeaderboardCreate(
ctx,
"tictactoe", // id
true, // authoritative
"desc", // sortOrder
"incr", // operator
"", // resetSchedule
map[string]interface{}{}, // metadata
)
if err != nil && err.Error() != "Leaderboard ID already exists" {
return err
}
logger.Info("Leaderboard tictactoe ready")
logger.Info("Go module loaded successfully!")
return nil
}

View File

@@ -244,6 +244,34 @@ func (m *TicTacToeMatch) MatchLoop(
s.Turn = 1 - s.Turn
logger.Info("Turn advanced to %d", s.Turn)
}
if s.GameOver {
if s.Winner != "" && s.Winner != "draw" && s.Winner != "forfeit" {
// winner = "X" or "O"
winningIndex := 0
if s.Winner == "O" {
winningIndex = 1
}
winnerUserId := s.Players[winningIndex]
// Write +1 win
_, err := nk.LeaderboardRecordWrite(
ctx,
"tictactoe", // leaderboard ID
winnerUserId, // owner ID
"", // username (optional)
int64(1), // score
int64(0), // subscore
map[string]interface{}{"result": "win"},
nil, // overrideOperator
)
if err != nil {
logger.Error("Failed to write leaderboard win: %v", err)
} else {
logger.Info("Leaderboard updated for: %s", winnerUserId)
}
}
}
}
// If anything changed (or periodically if you want), broadcast updated state to everyone