diff --git a/plugins/main.go b/plugins/main.go index 06aa9a0..85320bc 100644 --- a/plugins/main.go +++ b/plugins/main.go @@ -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 } diff --git a/plugins/match.go b/plugins/match.go index b1ebe68..e837718 100644 --- a/plugins/match.go +++ b/plugins/match.go @@ -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