如何淘一台洋垃圾并部署Windows版潜渊症服务器

潜渊症(Barotrauma)是今年玩过最让人惊喜的一款游戏。

并不算华丽精美的游戏画面下却有着异乎寻常的游戏深度, 共同登船上岸后亲友无不赞许玩法之丰富, 制作用心之良苦, 然后顺势自然地AFK。玩法说来简单:只要从一个站点出发航行到下一个站点(具体是否是任务所需的目标站点并不重要), 安全地停靠在站点或是到达中继点即可算是完成一个关卡, 无论是任务、遗物还是怪物都在可以无视的范围内, 所谓“只要不想赢我就不会输”正是如此。然而在实际游戏中扮演一名草菅人命的舰载庸医, 与社畜安全官和机修工艇长开拓伟大航路的旅程并不可能顺遂, 除了面对危机四伏的木卫二水下世界, 与海洋原住民密切而亲切地打成一片外,还必须随时可能面对人性的扭曲和道德的沦丧。

虽然2019年就发布了专用服务器, 但到现在多人联机仍旧Bug遍地体验屌差

你需要面对“在站点中盗窃灭火器不成反被揍晕, 船医被铐亟待救援舰长竟举枪相向”的绝望; 需要体悟“为搜沉舟, 船员未携一物尽数赤身潜往深海; 载兴而归, 潜艇竟被洋流刮飞全员缺氧无一生还”的安详; 除去“立志消灭木卫二上一切罪恶的bot安全官化身兰博抡起铁拳单挑全艇大获全胜, 主动出击的船员(含舰长)被丝血打晕拷成一串, 几位越狱囚犯被黄金精神点悟而流下感动热泪, 遂发宏愿夺枪屠遍全船, bot亦未能幸免”的天灾; 甚至还有“安全官为六根清净平除贪欲, 登船便拔除独苗经济作物, 致使艇上深海拾荒之风泛滥, 礼崩乐坏”的人祸。此间乐, 不适数。这样走心血管的上头佳作, 不建立个专用服务器怎么能好好支持接下来的数百小时游戏时长呢?

本文主要基于官方Wiki的专用服务器部署指南奈亚提拉托普official的《如何在Linux上部署潜渊症服务器》一文撰写。

贫穷的我们意欲淘出一台洋垃圾并在其上搭建潜渊症专用服务器的话, 至少需要解决两个问题:

  • 专用服务器如何在局域网环境下正常工作
  • 专用服务器如何被异地的小伙伴稳定访问

首先我们来解决第一个问题:

1. 白嫖一台洋垃圾Windows主机让一部分人在局域网先乐起来

  • 首先, 找一名有闲置洋垃圾的老伙计, 白嫖他。然后在老伙计的HPE ProLiant MicroServer Gen8上建立一个专供潜渊症专用服务器运行的账号, 顺便也找个空闲磁盘建个文件夹当作工作目录。
  • 第二步是按照SteamCMD的官方文档安装最新的SteamCMD, 可以选择在官方下载地址下载SteamCMD并解压到工作目录中, 如果你和akamaihd.net八字不合也可以使用这份缓存文档(2021-12-07存档):
    • 解压后在目录中建立一个initialize_server.ps1文件, 在其中输入以下内容:steamcmd +login anonymous +app_update 1026340 validate +quit

该PowerShell脚本使用匿名方式登录Steam并下载最新的专用服务器文件, 截至本文成文时间, 服务器版本号为0.15.13.0

双击运行它, 它会按命令中指定的AppID下载专用服务器到SteamCMD自己的目录里。之后当它走完进度条完成下载更新和验证后, 若你的SteamCMD目录位于:

D:\SteamCMD\

那么专用服务器的文件就会在:

D:\SteamCMD\steamapps\common\Barotrauma Dedicated Server\

它看上去会像这样:

..\Barotrauma Dedicated Server\ 目录中的内容

下文将默认假定你的SteamCMD和专用服务器放置于此且Steam账户名和Windows账户名均为AWSL

这时候在目录中找到DedicatedServer.exe或者桌面上的绿色小图标。不想深究服务器配置的话, 双击运行至下图所示内容就算完工, 此时已然可以停手于此并呼朋唤友, 即刻劲爽。

2. 设置配置文件让先乐起来的一部分人体验更好

专用服务器主要依赖三份配置文件:

  • serversettings.xml 服务器的基本配置文件
  • config_player.xml MOD配置文件
  • clientpermissions.xml 游戏服务器权限配置文件

和两个目录:

  • Mod文件目录, 其中保存着服务器订阅的各种Mod文件, 但具体启用与否依赖config_player.xml的配置
    • D:\SteamCMD\steamapps\common\Barotrauma Dedicated Server\Mods\
  • 游戏存档目录, 其中保存着多个游戏当前的存档文件和具体使用的潜艇文件
    • C:\Users\[Windows账户用户名]\AppData\Local\Daedalic Entertainment GmbH\Barotrauma\

需要配置的 serversettings.xml 在专服目录的根目录下:

  • D:\SteamCMD\steamapps\common\Barotrauma Dedicated Server\Mods\serversettings.xml
  • 配置文件大部分内容均无需更改, 设置以下几行即可:

    <?xml version="1.0" encoding="utf-8"?>
    <serversettings
      name="木卫二渊洋牛马海鲜放题"
      public="false"
      password="123"
      port="27015"
      queryport="27016"
      playstyle="Serious"
      maxplayers="10"
      enableupnp="true"
      autorestart="true"
      LevelDifficulty="50"
      AllowedRandomMissionTypes="Random,Salvage,Monster,Cargo,Combat"  
      AllowedClientNameChars="32-33,38-46,48-57,65-90,91-91,93-93,95-122,192-255,384-591,1024-1279,19968-21327,21329-40959,13312-19903,131072-173791,173824-178207,178208-183983,63744-64255,194560-195103"
      ServerMessage="全场不限量,任意吃,长尾鲨现场熬制,菜品任意挑。日式黑蒜画皮烧、泰式冬阴功爬行者、重庆麻辣摩洛克、更有不限量丘脑刺身和老广人最爱的花胶锤头煞。入场请携带盖格计数器并出示健康码。" 
      tickrate="10"
      randomizeseed="True"
      userespawnshuttle="False"
      respawninterval="100"
      maxtransporttime="180"
      minrespawnratio="0.2"
      autorestartinterval="60"
      startwhenclientsready="False"
      startwhenclientsreadyratio="0.8"
      allowspectating="True"
      saveserverlogs="True"
      linesperlogfile="800000"
      allowragdollbutton="True"
      allowfiletransfers="True"
      voicechatenabled="True"
      allowvotekick="True"
      allowendvoting="True"
      allowrespawn="True"
      botcount="0"
      maxbotcount="16"
      botspawnmode="Fill"
      allowdisguises="True"
      allowrewiring="True"
      allowfriendlyfire="True"
      traitorsenabled="maybe"
      subselectionmode="Manual"
      modeselectionmode="Manual"
      endvoterequiredratio="0.6"
      kickvoterequiredratio="0.6"
      killdisconnectedtime="3000"
      kickafktime="600"
      traitoruseratio="True"
      traitorratio="0.2"
      karmaenabled="True"
      karmapreset="default"
      gamemodeidentifier="Campaign"
      missiontype="all"
      autobantime="3600"
      maxautobantime="86400"
      />

    这9行配置的解释如下:

    <serversettings
    // 服务器列表显示的服务器名称  
    name="木卫二渊洋牛马海鲜放题"
    // 服务器是否公开可搜索, 为否则只能直接加入
    public="False"
    // 服务器密码, 为空则无需密码
    password="123"
    // 服务器通信端口, UDP
    port="27015"
    // 服务器查询端口, UDP
    queryport="27016"
    // 服务器允许的最大玩家人数
    maxplayers="10"
    // 服务器的描述文本
    ServerMessage="全场不限量,任意吃,长尾鲨现场熬制,菜品任意挑。日式黑蒜画皮烧、泰式冬阴功爬行者、重庆麻辣摩洛克、更有不限量丘脑刺身和老广人最爱的花胶锤头煞。入场请携带盖格计数器并出示健康码。" 
    // 玩家是否准备好就开始巡回
    startwhenclientsready="False"
    // 开始巡回的已准备玩家比例
    startwhenclientsreadyratio="0.8"
    />

    重启服务器再搜索即可加入游戏。这里贴一个奈亚提拉托普officiall给出的全配置注释:

    <?xml version="1.0" encoding="utf-8"?>
    <serversettings
      //服务器名字
      name="Nyatelathop  QQ群920493518  难度20%" 
      //公有私有服务器 true-false  
      public="true"
      //服务器进入密码  
      password="" 
      //服务器登录端口
      port="27015" 
      //服务器查询端口
      queryport="27016" 
      //服务器游戏风格 Serious=严肃 Casual=休闲 Roleplay=角色扮演 Rampage=暴乱 SomethingDifferent=mod服
      playstyle="Serious" 
      //服务器最大玩家人数
      maxplayers="16" 
      //开启upnp转发
      enableupnp="false" 
      //自动重新开始
      autorestart="true" 
      //游戏难度百分比
      LevelDifficulty="100" 
      //允许的随机任务类型
      AllowedRandomMissionTypes="Random,Salvage,Monster,Cargo,Combat"   
      //设置玩家姓名中允许的字符编码
      AllowedClientNameChars="32-33,38-46,48-57,65-90,91-91,93-93,95-122,192-255,384-591,1024-1279,19968-40959,13312-19903,131072-15043983,15043985-173791,173824-178207,178208-183983,63744-64255,194560-195103" 
      //进入服务器消息提示
      ServerMessage="欢迎来到奈亚服务器,想搭建Linux专用服务器请进Q群920493518" 
      //设置服务器的时钟频率
      tickrate="20" 
      //随机化种子
      randomizeseed="True" 
      //用户重生穿梭机
      userespawnshuttle="True" 
      //复活时间
      respawninterval="300" 
      //设置重生的停靠潜水艇存在时长
      maxtransporttime="180" 
      //最小复活比例
      minrespawnratio="0.2" 
      //自动重新启动间隔
      autorestartinterval="60" 
      //玩家准备好就开始
      startwhenclientsready="False" 
      //玩家准备就绪比例开始
      startwhenclientsreadyratio="0.8" 
      //允许大厅观战
      allowspectating="True" 
      //保存服务器日志
      saveserverlogs="True" 
      //允许碎布玩偶按钮(这个参数的含义我至今一头雾水)
      allowragdollbutton="True" 
      //允许文件传输
      allowfiletransfers="True" 
      //启用语音聊天
      voicechatenabled="True" 
      //允许踢人投票
      allowvotekick="True" 
      //允许巡回结束投票
      allowendvoting="True" 
      //允许重生
      allowrespawn="True" 
      //机器人数量
      botcount="0" 
      //最大机器人数量
      maxbotcount="16" 
      //机器人生成模式 Normal = 正常 Fill = 补充玩家空缺
      botspawnmode="Normal" 
      //允许玩家通过其他身份来伪装自己
      allowdisguises="True" 
      //允许玩家重新布线
      allowrewiring="True" 
      //允许友伤
      allowfriendlyfire="True" 
      //是否开启叛徒 yes = 有 no = 没有 maybe = 可能有
      traitorsenabled="No" 
      //潜艇选择 Manual = 手动选择 Random = 随机选择 Vote = 投票选择
      subselectionmode="Random" 
      //游戏模式选择 Manual = 手动 Random = 随机 Vote = 投票
      modeselectionmode="Random" 
      //巡回结束投票人数最低比例
      endvoterequiredratio="0.6" 
      //玩家踢出投票人数最低比例
      kickvoterequiredratio="0.6" 
      //终止断开连接的时间
      killdisconnectedtime="120" 
      //挂机人踢出等待时间
      kickafktime="600" 
      //启用叛徒玩家
      traitoruseratio="True" 
      //叛徒比例
      traitorratio="0.2" 
      //启用报应 - 在有叛徒模式下才能体现此系统的作用
      karmaenabled="True" 
      //报应设置 default = 默认 strict = 严格 custom = 自定义
      karmapreset="default" 
      //游戏模式标识符 Sandbox = 沙盒 Mission = 任务 Campaign = 战役
      gamemodeidentifier="sandbox" 
      //任务类型设置 Salvage = 打捞 Monster = 怪物 Cargo = 货物 Combat = 战斗 Random = 随机 all = 全部
      missiontype="all" 
      //玩家自动禁止时间
      autobantime="3600" 
      //最大自动禁止时间
      maxautobantime="86400" 
    />

    config_player.xml 文件在专服目录下即可找到, 配置也并不复杂, 内容如下:

    <config
      gameversion="0.15.13.0"
      language="Simplified Chinese"
      masterserverurl="http://www.undertowgames.com/baromaster"
      ...
    >
      ...
      <graphicssettings
        particlelimit="1500"
        lightmapscale="1"
        chromaticaberration="true"
        losmode="Transparent"
        hudscale="1"
        inventoryscale="1"
        textscale="1" />
      <contentpackages>
        <core
          name="Vanilla 0.9" />
        <regular>
          <package
            name="Waifu addon pack"
            enabled="true" />
          <package
            name="“信念”级 轻型潜艇 [Faith-class]"
            enabled="true" />
          <package
            name="Super Mining Sonar" 
            enabled="true" />
          <package
            name="EuropaWaifu" />
        </regular>
      </contentpackages>
      <keymapping
        Select="PrimaryMouse"
      ...
       />
      ...
    </config>

    除去诸如语言语言画面音效键位教程等无用设置, 与Mod相关的仅有如下代码块。将需要启用的Mod名字包裹上<package>标签放入<contentpackages></contentpackages>块内即可。但具体启用需要在标签中将enable属性置为enabled=”true”, 否则不会在服务器中生效。

    <contentpackages>
        <core
          // 服务器自带, 不建议修改 
          name="Vanilla 0.9" />
        <regular>
          <package
            // 订阅Mod - Waifu addon pack并在游戏中启用
            name="Waifu addon pack"
            enabled="true" />
          <package
            // 订阅Mod - “信念”级 轻型潜艇 [Faith-class] 并在游戏中启用
            name="“信念”级 轻型潜艇 [Faith-class]"
            enabled="true" />
          <package
            // 订阅Mod - Super Mining Sonar并在游戏中启用
            name="Super Mining Sonar" 
            enabled="true" />
          <package
            // 订阅Mod - EuropaWaifu但不启用
            name="EuropaWaifu" />
        </regular>
      </contentpackages>

    如果一切顺利, 服务器启动后会自行连接Steam创意工坊下载Mod, 并按配置启用; 但若你与创意工坊八字不合根本连不上, 你可能需要在Steam客户端或网页上订阅Mod后从本机将Mod文件复制到服务器的Mod文件夹中, 位置为:

  • D:\SteamCMD\steamapps\common\Barotrauma Dedicated Server\Mods\
  • 无论是建立SSH或SFTP传输压缩文件再解压到文件夹中, 还是如钢铁猛男般用RDP直接Crtrl+V复制到目标目录下都可以。只要保持文件完整无错, 目录组织正确都能正常使用, 如下图所示:

    启用的Mod包会在玩家加入服务器后自动下载, Mod包便可在正在运行的服务器实例上启用, 玩家并不需要遵循服务器的Mod列表去创意工坊挨个订阅, 亦不必每次调整Mod都新建存档从头玩起。官方的Mod部署指南可以在潜渊症Wiki中找到。

    最后是服务器管理权限配置文件clientpermissions.xml, 它设置了服主的Steam凭据和权限。与另外两个配置文件不同, 它呆在:

    D:\SteamCMD\steamapps\common\Barotrauma Dedicated Server\Data\ 目录下, 需要更改的三行配置为:

    <?xml version="1.0" encoding="utf-8"?>
    <ClientPermissions>
      <Client
        name="AWSL"
        steamid="76561[ID打码]602597"
        permissions="All">
        <command
          name="ambientlight" />
        <command
          name="autoitemplacerdebug" />
        ...
      </Client>
    </ClientPermissions>

    name属性设置了服主的Steam账户名, steamid属性则是该Steam账户的SteamID, 可在Steam好友页面查阅到。当该用户连接服务器后就能获得服务器的全部控制权限, 文件后跟随的 <command> 标签标识了该用户可用的命令, 如果需要设置第二名服务器管理员应在游戏中的船员列表右键为某个玩家提权。permissions属性可设置13种服主权限, 具体属性值见下表, 译自潜渊症的fandom WiKi:

    权限 权限描述
    ManageRound可以开始/结束巡回
    Kick可以踢出其他玩家
    Ban可以禁止其他玩家
    Unban可以取消禁止其他玩家
    SelectSub可以选择潜艇
    SelectMode可以选择游戏模式
    ManageCampaign可以在战役中的商店中选择目的地, 任务和购买物资
    ConsoleCommands可以使用控制台命令-请注意, 还需要授予单个控制台命令的权限
    ServerLog可以读取服务器日志
    ManageSettings可以更改服务器设置
    ManagePermissions可以更改其他玩家的权限
    KarmaImmunity使自己不受报应系统的负面影响, 不掉道德值
    All授予全部权限
    permissions属性可用的全部属性值

    更多的杂项诸如站点设置, 尸体设置, 技能天赋设置, 船长命令, 任务内容等等配置, 可以在专服的Content目录下的其他xml配置文件中找到, 也能查阅潜渊症官方GitHub页面去issue里抱大腿。

    游戏服务器的安装与设置到此结束

    3. 启用外网访问让剩下的人也乐起来

    我们现在来解决先前提到的第二个问题: 游戏专服如何被异地小伙伴稳定访问?老伙计家里并没有IPv4的公网地址, 亦没有IPv6的, 为了让诸君都能一起碧蓝之海, 我们需要提供外网访问这台服务器的方式。简单的方法是大把掏钱让电信/联通/移动给你稳定好用的公网IP, 然后按照官方WiKi的步骤设置下防火墙和路由器的端口映射即可。如若不愿意大把掏钱升级套餐也不想与装机师傅斗智斗勇, 那么稍微花上几杯奶茶钱搭建内网穿透是比较好的办法。

    首先我们需要公网IP, 可以去云服务商购买一些学生优惠套餐, 诸如69元一年的1核心2GB内存30G硬盘3M带宽的VPS或者 49元一年的1核心1GB内存20G硬盘5M带宽的丐中丐, 内网穿透只需要最低限度的网络数据包处理能力和VPS带的公网IP地址, 运算性能低并不碍事, 反正游戏服务器又不会运行在这上面, 就当租个路由器吧。购买VPS的流程大同小异, 《如何在Linux上部署潜渊症服务器》一文中亦有涉及, 本文不再赘述。

    3.1 部署NPS服务端

    拿到VPS后给防火墙添加几个规则保证端口和协议通畅, 别忘了在云服务商给VPS提供地安全组规则也给加上需要开放地协议和端口号。

    在NPS的GitHub Release页面下载服务端压缩包, 这是一款轻量的开源内网穿透服务器, 对Linux和Windows均提供了支持。GitHub上的项目Readme文档在此处, 官方中文文档在这里

    登录VPS后把nps服务端文件解压到一个工作目中,

    • 对于Linux | Darwin服务器, 在安装目录下执行:
      • sudo ./nps install
    • 对于Windows服务器, Win+X管理员身份运行PowerShell, 在安装目录下执行:
      • nps.exe install

     nps服务端就算完成了安装, 安装后Windows服务器的配置文件位于 C:\Program Files\nps, 而Linux和Darwin服务器的配置文件位于 /etc/nps

    然后输入命令即可直接启动:

    • 对于Linux | Darwin服务器, 执行:
      • sudo nps start
    • 对于Windows服务器, Win+X管理员身份运行PowerShell, 执行:
      • nps.exe start

    如果一切正常, 可以通过[公网IP:Web界面端口](默认配置为8080)访问到Web管理界面了。账号默认为admin, 密码默认为123。进入Web管理界面就能看到服务器状态信息和统计信息了。

    nps的配置太依赖这个Web管理页面了, 导致其内建的WebAPI打磨不足并不好用。为什么我并没有基于nps来做开发的经历却仍有如此言论?因为我的腾讯云忘记去备案导致被封了HTTP/HTTPS我根本访问不到配置页面, nps配置好之后就是个无感知的服务, 平时不太用都快忘记了这个配置页面的存在——但急用的时候访问不到可就让人抓狂了。
    这是nps的信息面板, 害挺好看

    3.2 部署NPC客户端

    在nps的概念里, 需要被访问的内网服务器被称为客户端, 像frp一样, 客户端和服务端需要建立TCP连接才能保持通信和转发。所以需要被访问的服务器安装npc(c是client)而提供对外访问端点的VPS则安装nps(s指server)。但和frp不一样的地方是, frp只需要稍稍在服务端做一些基本的认证配置, 保证带有复杂配置的客户端能够连上来就能正常工作了, 转发行为的控制主要还是客户端来承担; nps则把主要的配置交给了服务端, 只要让客户端顺利在列表里出现[在线]字样, 要杀要剐就是服务端说了算, 具体是开TCP/UDP隧道, 抑或是SOCKS代理还是进行域名解析, 逻辑上来看不过是给客户端增加了一些路由规则, 告诉VPS的入站请求应该如何转发/改写这些请求到哪一台具体处理这些请求的客户端上去。

    因此得在Web管理界面上把白嫖到的游戏服务器添加到列表里: 在客户端里面点击[新增]按钮, 在此新建一个客户端。主要作用就是为了在软件里标识这台游戏服务器, 所以重要的配置项反倒是备注……..要写得清晰易懂些过段时间来看才知道这是个啥机器。

    然后展开新建的客户端条目, 下面会生成好客户端连接服务端所需要执行的命令, 复制它, 然后回到我们的Windows游戏服务器上:

    仍然是去nps的GitHub Release页面, 下载带client字样的npc客户端。解压出来就可以用无配置文件模式启动npc客户端了, 虽然官方文档是这么写的, 然而……并不能。(npc基本使用说明的官方文档存档于此)

    因此你需要在npc的工作目录下的conf目录里, 编辑一下它的默认配置文件npc.conf, 按照刚才复制的命令中携带的参数值来修改如下3行配置:

    [common]
    server_addr=[地址打码]:[地址打码]
    conn_type=tcp
    vkey=msagf039a4b5i4p9
    auto_reconnection=true
    max_conn=1000
    flow_limit=1000
    rate_limit=1000
    crypt=true
    compress=true
    #pprof_addr=0.0.0.0:9999
    disconnect_timeout=60

    保存后PowerShell切到npc的工作目录下, 输入上文复制的这条客户端命令

    ./npc.exe -server=[地址打码]: [地址打码] -vkey=msagf039a4b5i4p9 -type=tcp

    你会看到如下输出:

    PS C:\Users\S[ID打码ID打码]t\Desktop\npc> cd C:\Users\S[ID打码ID打码]t\Desktop\npc
    PS C:\Users\SS[ID打码ID打码]t\Desktop\npc> .\npc.exe -server=[地址打码]:[地址打码] -vkey=msagf039a4b5i4p9 -type=tcp
    2021/12/11 00:54:26.227 [I] [npc.go:231]  the version of client is 0.26.10, the core version of client is 0.26.0
    2021/12/11 00:54:26.245 [I] [control.go:97]  Loading configuration file C:\Users\S[ID打码ID打码]t\Desktop\npc\conf\npc.conf
    successfully
    2021/12/11 00:54:26.574 [N] [control.go:176]  web access login username:user password:1234
    2021/12/11 00:54:26.753 [I] [client.go:72]  Successful connection with server [地址打码]:[地址打码]

    这就算是把npc客户端成功启动了。然后我们回到nps的Web管理页面, 你会看到它的状态已经是在线了, 其客户端ID为3:

    如果你觉得每次都需要复制这行代码来启动npc很麻烦, 而且写个bat文件手动双击执行还是不够简单可靠, 可以按照官方文档中的步骤来将npc注册为系统服务。在Windows上依旧是在npc的工作目录下打开Powershell:

    • 注册为服务:
      • ./npc.exe install -server=[地址打码]:[地址打码] -vkey=msagf039a4b5i4p9 -type=tcp
    • 也可以直接指定配置文件来注册:
      • ./npc.exe install -config="C:/Program Files/npc/conf/nps.conf"
    • 启动服务:
      • ./npc.exe start
    • 停止服务:
      • ./npc.exe stop
    • 配置文件检查:
      • ./npc.exe status -config="C:/Program Files/npc/conf/nps.conf"
    • 重新载入配置文件:
      • ./npc.exe restart -config="C:/Program Files/npc/conf/nps.conf"

    最后一步, 添加隧道代理规则, 提供外网访问。根据潜渊症Wiki和Steam社区讨论页面的信息, 需要开通的端口就只有两个: UDP的27015和27016——如果在前文的步骤中你没有修改过它们的话。在Web管理页面里进入UDP隧道菜单, 单击[新增]按钮, 为27015和27016两个端口各添加一条隧道:

    如下:

    到此外网访问配置就全部结束了, 进入潜渊症游戏, 在[加入游戏]的时候点[直接加入], 输入VPS的公网IP和潜渊症服务器密码(如果有的话)就能进服快乐打渔了。输入IP后可以点击[加入偏好]保存这个IP地址, 以防每次都记不住IP得到处翻记录。

    祝各位在船上住得愉快


    Bonus: 全员翻船脊刺笑, 存档备份是刚需

    游戏中舰长时常把泥头车开到80KM/H与摩洛克一决高下, 然而这种D.V.A行为时常撞山翻车, 或者意图刷材料需要经常覆盖存档文件, 不时地RDP到服务器上备份存档是个烦人的差事。

    世界名画:《我的船长我的船》 藏于木卫二联盟美术馆

    所以我用Flask和Jinja2写了个小网页, 在玩游戏等载入的间隙可以拿起手边的手机一键备份存档压缩包。效果如下:

    上面的按钮会新建一个当前存档的压缩包来备份存档, 下面的按钮是下载当前目录下最新的存档压缩包。页面很丑? 抱歉, 我们木卫二海贼王不整这些花里胡哨的CSS

    要运行这个小小的网页程序, 需要先安装python 3.8, 不然3.6也行, 反正我是在3.9下写的。然后用pip3安装flask, 因为我在Windows上用的是WinRAR来压缩的, 所以还需要装个WinRAR。不装也行, 向7-zip传输参数也能压缩和解压, 改一下subprocess的代码即可。这个小程序的压缩包在: 这里下载

    服务端备份器的使用方法:

    首先修改一下__init__,py里的参数, WINRAR_EXE_DIRECTORY指定了WinRAR的安装目录, 脚本需要调用里面的Rar.exe来创建压缩包; BAROTRAUMA_SAVEDATA_DIRECTORY 指定了潜渊症的存档目录, 压缩文件正放置于此:

    import os
    from flask import Flask
    
    def create_app(test_config=None):
        # create and configure the app
        app = Flask(__name__, instance_relative_config=True, template_folder='templates')
        app.config.from_mapping(
            SECRET_KEY='canister-unveiled-vigorous',
            WINRAR_EXE_DIRECTORY='C:/Program Files/WinRAR/',
            BAROTRAUMA_SAVEDATA_DIRECTORY='C:/Users/[改成你的用户名]/AppData/Local/Daedalic Entertainment GmbH/'
        )

    然后修改一下启动脚本startServer.ps1, 它使用Start-Transcript和Stop-Transcript命令来实现这个小程序的日志记录功能, 所以需要给transcriptPath变量指定一个有效目录来存放日志文件:

    $transcriptPath = 'D:\WorkSpace\SaveData_Backupper\serverlog.log'
    Start-Transcript -Path $transcriptPath
    cd D:\WorkSpace\
    $env:FLASK_APP = "SaveData_Backupper"
    $env:FLASK_ENV = "development"
    flask run
    Stop-Transcript

    最后直接在Powershell里执行这个ps1脚本就能启动网页服务器了, 你可以通过http://127.0.0.1:5000/BarotraumaSaveData/ 来访问该页面。当然最完美的访问方式还是用nps给它一个域名解析, 直接通过域名来访问该页面(比如https://[你的域名]/BarotraumaSaveData/), 随时可以用手机浏览器来备份存档。

    全文完

    Published by

    发表回复