SteamCMD 搭建游戏服务器

之前发过一篇 LinuxGSM自建游戏服务器(l4d2),提到了本来想搭建英雄萨姆3的多人游戏,但是因为 LinuxGSM 不支持而失败了(现在看来当时的错误也是找不到 steamclient.so,下文解决了这个问题,所以 LinuxGSM 也可以用),如今改用 SteamCMD

本文将展示如何用 SteamCMD 搭建英雄萨姆3多人游戏服务器,也适用于任意 Steam 游戏的独立服务器

环境

  • Debian 10

参考

步骤

新建 SteamCMD 用户

为了更安全的使用 SteamCMD,需要新建 steam 用户,以 root 用户运行 SteamCMD 会有安全风险

  1. 新建 steam 用户
    useradd -m -s /bin/bash steam
  2. 修改 steam 用户密码
    passwd steam
  3. 将 steam 用户加入 sudo 用户组
    adduser steam sudo

    如果是新安装的 Debian 10 环境,还需要手动安装 sudo 指令

    apt install sudo
  4. 切换到 steam 用户
    su - steam

后续步骤的指令都在 steam 用户下执行

安装 SteamCMD

  1. 修改软件源
    • 由于 SteamCMD 不遵守 Debain 社群契约,所以需要添加 non-free 到源地址
    • 执行
      sudo apt edit-sources

      在源地址后添加 non-free

  2. 如果使用 64 位 Debian,还需要添加 32 位架构
    sudo dpkg --add-architecture i386
  3. 安装 SteamCMD 及依赖
    sudo apt update
    sudo apt install lib32gcc1
    sudo apt install steamcmd

    过程中需要同意协议

获取游戏服务器

  1. 运行 steamcmd
    steamcmd
  2. 开始时和Windows GUI 版本一样,会自动获取 Steam 客户端更新
  3. 登录匿名账户
    • 注意:是否使用匿名账户取决于游戏服务器是否需要账户拥有游戏本体,具体信息可查看 Dedicated Servers List,大部分游戏都可以使用匿名账户
      • SteamCMD 下没有 tab 自动补全功能,注意输入正确的指令
    • 在 SteamCMD 下执行
      login anonymous

  4. 设定游戏服务器安装路径
    • 在 SteamCMD 下执行
      force_install_dir ./SS3

      注意:此处的相对路径 ./SS3 所表示的绝对路径为 /home/steam/.steam/steamcmd/SS3

  5. 获取英雄萨姆 3 多人游戏服务器
    app_update 41080

    可以在 Dedicated Servers List 获取其他游戏服务器的 AppID如果下载服务器中途遇到报错,重新执行指令直到成功安装

  6. 退出 SteamCMD,执行
    exit

配置并运行游戏服务器

服务器的配置需要根据具体的服务器说明进行,游戏不同配置不同,以下内容以英雄萨姆3为例

服务器安装完毕后,可以在英雄萨姆 3 根目录找到 Help 文件夹,其中包含了服务器运行指南,Bin 目录则存放了游戏服务器可执行文件,Log 目录存放服务器运行日志(可能需要运行一次才会建立),Content 目录存放了地图等游戏内容

  1. 查看帮助文件
    • 执行指令
      cd /home/steam/.steam/steamcmd/SS3
      cd Help
      vim ./DedicatedServer_Readme.txt
    • 其中比较重要的内容如下
      • 如果不指定配置文件,服务器则会默认开启合作模式的第一个任务(开罗盛夏),并使用默认配置和端口
      • 所有游戏模式
      • 配置文件示例
  2. 在服务器的根目录(也就是 Bin 目录的上级目录,SS3/ 下)新建服务器配置文件 server.cfg,添加以下内容
    rconpass = "veryStrongPassword"; -- 管理密码
    sessionname = "azhuge233's Gameserver"; -- 游戏房间标题
    
    gam_ctMaxPlayers = 4; -- 最大玩家数
    gamemode = "Cooperative"; -- 游戏模式,指南内有全选项
    gam_bAutoCycleMap = 1;
    
    local prj_strMapList = { -- 配置地图关卡组合,服务器会在这几个地图中循环
        "#SunPalace.wld"
    };

    关于地图名称:找了一圈没有一个具体的列表,不过可以尝试通过查看 SS3/Content/SeriousSam3/ 下的 .gro 文件获取地图文件名称(.gro 文件实际上就是压缩文件,用解压软件打开可以查看其中的地图名称)

  3. 启动游戏服务器
    cd Bin
    ./Sam3_DedicatedServer +exec server.cfg

    启动过程中可能会遇到找不到 steamclient.so 问题,解决方法:将 steamclient.so 软连接到服务器根目录(即 SS3/),执行指令

    ln -s /home/steam/.steam/steamcmd/linux32/steamclient.so /home/steam/.steam/steamcmd/SS3
  4. 服务器成功启动可以看到游戏模式和最大玩家数与配置文件中描述的相同

配置系统服务(可选)

使用 systemd 管理系统服务

  1. /etc/systemd/system 下新建服务文件 SS3.service,添加以下内容
    [Unit]
    Description=Serious Sam 3 Server
    
    [Service]
    Type=simple
    User=steam
    Group=steam
    WorkingDirectory=/home/steam/.steam/steamcmd/SS3/Bin
    ExecStart=/home/steam/.steam/steamcmd/SS3/Bin/Sam3_DedicatedServer +exec server.cfg
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    注意:WorkingDirectory(服务工作目录)必须设置为 Bin 目录,否则可能无法启动 SS3 服务器

  2. 启动服务并设置开机启动
    systemctl start SS3.service
    systemctl status SS3.service
    systemctl enable SS3.service

  3. /home/steam/.steam/steamcmd/SS3/Log 下查看游戏服务器日志可见服务器使用了自定义配置文件 server.cfg,最大玩家数为 4 人

效果

玩家加入游戏后的日志输出第一行为搭建的本地多人游戏

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据