Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d8d3785fc | |||
| 65b5ef4660 |
@@ -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
|
||||
}
|
||||
|
||||
@@ -244,6 +244,42 @@ 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]
|
||||
account, acc_err := nk.AccountGetId(ctx, winnerUserId)
|
||||
winnerUsername := ""
|
||||
if acc_err != nil {
|
||||
logger.Error("Failed to fetch username for winner %s: %v", winnerUserId, acc_err)
|
||||
} else {
|
||||
winnerUsername = account.GetUser().GetUsername()
|
||||
}
|
||||
|
||||
logger.Info("Winner username=%s userId=%s", winnerUsername, winnerUserId)
|
||||
// Write +1 win
|
||||
_, err := nk.LeaderboardRecordWrite(
|
||||
ctx,
|
||||
"tictactoe", // leaderboard ID
|
||||
winnerUserId, // owner ID
|
||||
winnerUsername, // username
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user