This branch is 68 commits behind sundayzsy/Dota2-DaLuanDou-Server:master

刀塔大乱斗 后端服务(第一版)

基于 Go + Gin + GORM + MySQL + Redis 实现的轻量后端,只负责按 SteamID 存取玩家档案、记录每局比赛并持久化段位分。段位积分由游戏端算好,后端只存。

第一版只实现两个核心接口

接口 路径 说明
开局拉档案 POST /api/v13/game/start 按 steamID 批量返回玩家档案,未知玩家不返回(游戏端兜底)
结算上报 POST /api/v13/game/end 写比赛+战绩,更新段位分/统计,更新 Redis 排行榜

次要接口(rank/toplist)与可选接口(herowinrate/query)暂未实现。

目录结构

.
├── main.go                     # 启动、路由
├── internal/
│   ├── config/config.go        # 环境变量配置
│   ├── db/db.go                # MySQL(GORM) + Redis 初始化、AutoMigrate
│   ├── model/model.go          # Player / SeasonRank / Match / MatchPlayer
│   ├── common/
│   │   ├── response.go         # 统一响应 {status, status_code:"200", data}
│   │   └── tier.go             # 段位积分 -> tier 换算
│   ├── middleware/auth.go      # Dedicated-Server-Key 固定 token 校验(可开关)
│   └── handler/
│       ├── game_start.go       # v13/game/start
│       └── game_end.go         # v13/game/end
├── .env.example                # 配置模板
└── .env                        # 真实配置(已 gitignore

配置

复制 .env.example.env 并填写。关键项:

  • DB_*MySQL 连接(本项目用 root / mydb
  • REDIS_*Redis 连接。
  • AUTH_ENABLED:开发期 false 不校验;上线设 true 并让游戏端 webapi.lua 发送同一个 AUTH_TOKEN
  • CURRENT_SEASON:当前赛季。

注意MySQL/Redis 监听的是 VPS 本机 127.0.0.1,本地开发机无法直接连接,需在 VPS 上运行,或用 SSH 端口转发后把 DB_HOST/REDIS_ADDR 指向转发端口。

访问地址

  • 服务内部监听:127.0.0.1:9929APP_PORT
  • 对外(域名 + HTTPS 反向代理):
    • POST https://dota.sansan.de5.net/api/v13/game/start
    • POST https://dota.sansan.de5.net/api/v13/game/end
  • 游戏端 webapi.luaserverHost 设为:https://dota.sansan.de5.net/api/(注意结尾的 /api/

本地编译

go mod tidy
go build ./...

在 VPS 上运行

  1. 在 VPS 上编译(或本地交叉编译后上传二进制):

    本地交叉编译 Linux amd64

    $env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"; go build -o dota-server .
    

    dota-server.env 上传到 VPS 的 /opt/dota-server/ 目录。

  2. 直接运行测试:

    ./dota-server
    
  3. 用 systemd 托管(推荐):用 deploy/dota-server.service

    cp deploy/dota-server.service /etc/systemd/system/
    systemctl daemon-reload && systemctl enable --now dota-server
    
  4. 反向代理:用 deploy/nginx.conf,把 https://dota.sansan.de5.net/api/ 反代到 127.0.0.1:9929。证书用 certbot 申请:

    certbot --nginx -d dota.sansan.de5.net
    

健康检查

GET https://dota.sansan.de5.net/health  ->  {"status":"ok"}

游戏端需要改的地方

  • scripts/vscripts/gameutils/webapi.luaserverHost 改成 https://dota.sansan.de5.net/api/dedicatedServerKey 改成与 AUTH_TOKEN 一致的固定 token若开启认证
  • scripts/vscripts/global/initvaribles.lua:确认 _GV.startGameApi/_GV.endGameApiv13/..._GV.currentSeason 与后端一致。

数据表

AutoMigrate 自动建表:players / season_rank / matches / match_players。 玩家战绩的称号与伤害/治疗等杂项原样存入 match_players.badges / match_players.statsJSON 列)。

Description
大乱斗服务器
Readme 76 KiB
Languages
Go 75.3%
HTML 17.9%
PowerShell 6.8%