package main import ( "context" "database/sql" "github.com/heroiclabs/nakama-common/runtime" // Project modules "localrepo/plugins/modules" "localrepo/plugins/games" ) func InitModule( ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, initializer runtime.Initializer, ) error { //-------------------------------------------------------- // 1. Register RPCs //-------------------------------------------------------- if err := initializer.RegisterRpc("hello_world", HelloWorld); err != nil { logger.Error("Failed to register RPC hello_world: %v", err) return err } if err := initializer.RegisterRpc("leave_matchmaking", modules.RpcLeaveMatchmaking); err != nil { logger.Error("Failed to register RPC leave_matchmaking: %v", err) return err } //-------------------------------------------------------- // 2. Register Matchmaker Handler //-------------------------------------------------------- if err := initializer.RegisterMatchmakerMatched(modules.MatchmakerMatched); err != nil { logger.Error("Failed to register MatchmakerMatched: %v", err) return err } //-------------------------------------------------------- // 3. Register ALL game rules for GenericMatch //-------------------------------------------------------- registry := map[string]games.GameRules{ "tictactoe": &games.TicTacToeRules{}, "battleship": &games.BattleshipRules{}, } if err := initializer.RegisterMatch( "generic", modules.NewGenericMatch(registry), ); err != nil { logger.Error("Failed to register generic match: %v", err) return err } //-------------------------------------------------------- // 4. Create Leaderboards //-------------------------------------------------------- leaderboards := []string{ "tictactoe_classic", "tictactoe_ranked", "battleship_classic", "battleship_ranked", } for _, lb := range leaderboards { err := nk.LeaderboardCreate( ctx, lb, true, // authoritative "desc", // sort order "incr", // operator "", // reset schedule map[string]interface{}{}, // metadata ) if err != nil && err.Error() != "Leaderboard ID already exists" { logger.Error("Failed to create leaderboard %s: %v", lb, err) return err } logger.Info("Leaderboard ready: %s", lb) } logger.Info("Go module loaded successfully!") return nil }