塔科夫在线版至今仍不支持Linux系统下进入在线战局,但是本地模式下在战局中ai运算负担较大,且众所周知塔科夫的服务器质量也是烂得出奇(特别是对国内玩家而言)
安装SPT还是比较容易的,从steam获取完整游戏文件并进入到BSG启动器界面(通过proton),完成本体安装后使用SPT installer对游戏文件进行patch就可以了(这一步用protontricks完成比较方便);然后SPT 4.1.X的版本已经包含有原生的Linux启动器(依赖aspnet-runtime-10.0和webkit2gtk-4.1两个软件包)
在本地先运行SPT Server然后再通过启动器SPT Launcher运行游戏(如果只是想在服务器上跑SPT Server可以略过这一步),可以尝试进入战局先行体验(不过体验可能不会特别好,如前文所说,此时战局的ai运算和客户端的游戏进程跑在同一台电脑上,如果是双CCD cpu并且内存足够的配置下,那么在不考虑公网联机的情况下一个CCD运行游戏,另一个承担ai运算是可行的,可以参考后文的headless相关的内容,不过我没有尝试过,故不再详细说明),退出游戏和SPT Server进程后将此时的游戏同步到计划用做SPT服务端的机器上
在Poject Fika项目获取Fika-Plugin、Fika-Server-CSharp以及Fika-Headless的文件,其中Fika-Plugin需要同时在服务端和客户端进行安装,但后两者只需在服务端进行安装(所有SPT_Runtime/user/mods/路径的mod都是服务端的mod文件,不需要在客户端进行配置,而BepInEx/Plugins/目录的mod文件一般是客户端的mod文件,除了ai相关的mod和这里提到的fika-plugin一般不需要同步到服务端,但是有例外的情况,具体需要自行阅读想要安装的mod的作者说明以及实际体验情况确定)
下面主要介绍服务端运行headless client的内容(注意如果只是运行SPT Server,则服务端可用内存不少于4G,cpu需求也不高,但是如果要运行headless client,则推荐可用内存不少于32G,并且cpu至少为4c8t并且主频不能太低,gpu则没有特别的要求,所以使用公网主机运行headless client的花销较大,一般不推荐,尽管联机相关的配置上可能比较容易一些;这也是使用frp并且通过本地主机运行headless client的主要原因,作为参考,我用来跑headless client的主机为8845hs 32G内存的nuc主机,并且使用8G zram的配置;实际运行中发现设置4G zram时会出现内存溢出的情况,包括运行游戏进程的主机在有64G内存的情况下,设置4G zram时也会出现内存溢出的问题),在服务器端编辑SPT_Runtime/user/mods/fika-server/assets/configs/fika.jsonc文件,可以设置http部分的ip和backendIp均为0.0.0.0,port和backendPort则需要设置为对应的frp的TCP端口,并将headless - profiles - amount设置为大于等于1的数,即生成多少个headless的存档文件,此时再重启SPT Server的服务,则可以在SPT_Runtime/user/mods/fika-server/assets/scripts/目录下看到生成的HeadlessConfig.json文件;由于headless client没有原生的Linux下的可执行文件,一般使用docker容器来运行headless client,比如我使用的是fika-headless-docker这个项目的docker容器,该项目下已经有相关的使用说明,作为参考,我使用的docker-compose.yml的内容为
services:
fika_headless:
image: ghcr.io/zhliau/fika-headless-docker:latest
volumes:
- YOUR_SPT_FILE_LOCATION:/opt/tarkov
environment:
- PROFILE_ID=YOUR_PROFILE_ID
- SERVER_URL=172.18.0.1
- SERVER_PORT=YOUR_SERVER_PORT
- AUTO_RESTART_ON_RAID_END=true
- NTSYNC=true
ports:
- YOUR_UDP_PORT:YOUR_UDP_PORT/udp
这里使用的SERVER_PORT和下面的udp端口就是前文提到的frp的对应端口,PROFILE_ID可以从HeadlessConfig.json文件中得到;可以先运行这个docker容器的进程,主要是确保BepInEx/config/com.fika.core.cfg能够生成,此时客户端是没法使用headless client来开启战局的,等到headless client提示[Message:Fika.HeadlessWebSocket] Connected to HeadlessWebSocket时,说明headless client已经完成启动,此时将headless client的进程停止,编辑com.fika.core.cfg文件,将Force IP设置成frp服务器的ip,Force Bind IP设置为Disabled,UDP Port按之前的udp端口进行设置,到此为止服务器端的配置已经完成,重启headless client后按照同样的方式编辑客户端的com.fika.core.cfg文件就也完成了客户端的配置;作为参考,我是通过systemd user service来管理SPT Server和headless client进程的,使用的两个service文件内容如下:
[Unit]
Description=SPTarkov Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/.local/share/SPTarkov/SPT_Runtime
ExecStart=%h/.local/share/SPTarkov/SPT_Runtime/SPT.Server.Linux
Restart=on-failure
[Install]
WantedBy=default.target
[Unit]
Description=SPTarkov Headless Docker Client
After=network-online.target spt-server.service
Requires=spt-server.service
[Service]
Type=simple
WorkingDirectory=%h/.local/share/SPTarkov
ExecStartPre=/usr/bin/sleep 30
ExecStartPre=/usr/bin/docker-compose down
ExecStart=/usr/bin/docker-compose up
ExecStop=/usr/bin/docker-compose down
Restart=on-failure
[Install]
WantedBy=default.target
需要按照服务端SPT文件的路径作相应修改