僵毁B42双人联机指南

本文实现双人联机的方式是基于B42中并未移除的本地分屏合作游玩方式,如果你和你的小伙伴具备线下联机的条件,十分推荐你们直接查看第三部分如何进入分屏合作。此外由于分屏合作的特殊性,游戏会直接播放两位玩家能听到的声音,对于需要听声辨位潜行或者害怕开门杀的玩家不太友好,同时需要一位玩家使用手柄游玩(没有手柄可以用手机模拟),在合成、放置等行动比较麻烦。最后,串流,特别是僵毁需要串流同时赋予键鼠或手柄操作权限,不可避免的带来网络信息安全风险,本文不对风险防护作出任何保证,请大家自行甄别,如果指南中出现明显漏洞也可以在评论区中指出。

由于串流只需要在一台电脑上实际运行游戏,因此只需要游戏启动方使用windows系统,另一方可以使用任意能够支持后文提到的软件的设备,如Mac、安卓平板等。同理,也只需要一位玩家的 steam 购买了僵尸毁灭工程,即可分屏合作游玩,也不会出现模组冲突等联机常见情况。

第一部分 如何实现两台主机的低延迟串流

本文给出的解决方案为私有服务器搭建zerotier中转moon服务器,通过sunshine和moonlight进行串流传输。服务器的成本为79元/年,除了zerotier中转外也可用于TS语音服务器等用途,通过各种促销、首次购买等方式也可以降低成本。如果实在不方便支付,可以使用蒲公英、radminlan等组网软件代替zerotier;如果缺乏动手能力,建议使用贝锐向日葵替代这一部分。

1.1 zerotier组网

此部分使用Jonnyan制作的zerotier-planet内网穿透软件,内容参考下列链接

Ubuntu 22.04 安装 Docker 容器

一分钟自建zerotier-plant

环境为阿里云轻量服务器,系统镜像ubuntu

下面所有与指令相关的部分如果有任何疑问或报错,建议先向任意AI提问,通常能够给出有价值的回应。

首先需要给服务器安装 Docker,这里推荐使用阿里云自带网页端控制台,使用root权限登录,也可以使用xshell等方式。登录界面如下图所示。





 

第一步,更新系统软件包并安装依赖工具

sudo apt update && sudo apt upgrade -y

sudo apt install -y ca-certificates curl gnupg lsb-release

第二步,添加 Docker 官方 GPG 密钥和仓库

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

第三步,安装 Docker 引擎

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

第四步,验证 Docker 安装

启动 Docker 服务并设置开机自启:

sudo systemctl enable --now docker

运行测试容器:

sudo docker run hello-world

可以看到类似下图的输出:





还可以通过下面的代码检测 Docker 状态:

docker --version # 查看 Docker 版本

docker info # 查看 Docker 详细信息

docker ps -a # 查看容器列表

第五步,安装 Docker Compose

sudo apt install -y docker-compose-plugin

验证安装是否成功:

docker compose version







接下来是给服务器安装zerotier中转服务。

请先参考上文,确认已经成功安装docker和docker-compose。然后进入阿里云服务器管理界面,选择防火墙模板>>创建模板,填写便于记忆的模板名称和描述,在下方规则中添加TCP端口 4000/9993/3180 和UDP端口 9993 的开放权限。在本指南中实际上只需要开启TCP 4000端口,可自行抉择。









然后请通过命令 pwd 和 ls ,确认当前所处目录和目录下的文件信息,如果不在

/home 目录下,请使用 cd /home 命令进入。





下载zerotier-planet库有两条途径,建议国内用户使用gitee源。

git clone https://github.com/Jonnyan404/zerotier-planet

git clone https://gitee.com/Jonnyan404/zerotier-planet

下载好后即可在 /home 路径下通过 ls 命令看到 zerotier-planet 文件夹,也可先在 home 目录下创建 zerotier 文件夹,然后 cd /home/zerotier 再使用 git clone 下载。

接下来使用 cd zerotier-planet 或者 cd /home/zerotier/zerotier-planet 进入刚刚 git clone 下载的项目文件夹中,运行:

docker cp mkmoonworld-x86_64 ztncui:/tmp

docker cp patch.sh ztncui:/tmp

docker exec -it ztncui bash /tmp/patch.sh

docker restart ztncui

获取密码:

docker exec -it ztncui cat /var/log/docker-ztncui.log|grep Password

下面提到的ip请用你购买的服务器提供的公网ip替代,比如http://111.111.111.111:4000/,这通常可以在服务器控制台处查看,下图中(公)前面的点分十进制ip即为服务器的公网ip。





使用本地计算机浏览器登录 http://ip:4000 打开web控制台界面, 用户名为admin。

登录之后请立刻重设密码,由于web控制台端口暴露在公网,弱密码有可能被攻破,届时网络中设备将面临严重网络安全风险!

选择上方功能栏中的 Add Network 创建第一个私有网络,按照个人喜好命名。









创建好之后,选择easy-setup对网络地址进行配置,使用generate network address对IP地址进行自动配置。请复制Network名称右侧括号中的ID以便于后续客户端连接该网络。





浏览器访问 http://ip:3180 打开planet和moon文件下载页面(亦可在项目根目录的./ztncui/etc/myfs/里获取)。将planet和moon文件下载到方便复制的地方。如果只开启了TCP 4000端口,可以使用XFTP软件在项目目录下子文件夹 ./ztncui/etc/myfs/ 中下载。

XFTP配置和具体路径参考如下:









最后是在本地设备上部署 zerotier 客户端。

这里给出最常用的windows设备部署方法,MacOS和安卓系统可参考下面链接中的方法,经过测试均可生效。

https://www.mrdoc.fun/doc/443/

首先从 zerotier 官网(https://www.zerotier.com/download/)下载windows客户端,安装也是无脑默认下一步即可。

然后将刚才从服务器上下载的planet文件拷贝到C:\ProgramData\ZeroTier\One文件夹中,替换原有的planet文件。如果遇到资源管理器中看不到这个文件夹,可以通过显示隐藏文件夹的方式解决。





最后打开服务页面(可以通过 win+R 打开运行,输入 services.msc 打开,或者用win+S 打开搜索栏搜索服务),选中 ZeroTier One,右键选择重启服务。





重启后使用 win+X 打开终端管理员,执行:

zerotier-cli.bat join 网络id

看到“200 join OK”,说明链接成功。

此时进入 zerotier web 控制台,选择功能栏中的 Networks,选择对应名称的网络,此时 Members 栏中将会出现刚刚请求链接的设备信息。填写便于记忆的设备名称,并勾选 Authorized 单选框即可将设备加入网络。

不要把任何来历不明的设备加入网络!

任何认证行为之前都要尽可能确保申请者的身份!

 









 

1.2 部署 Sunshine 服务

内容参考下列链接:

Sunshine基地版串流食用指南

这里推荐使用集成了虚拟显示器等功能的 Sunshine Foundation 版本,下载链接为

Sunshine-Foundation官网

选择最新版本 Assets 下拉框中对应的windows-installer.exe下载安装即可,注意安装时请不要更改默认安装位置,否则会导致虚拟显示器功能失效。

安装过程中无脑选择下一步即可,完成后选择启动 Sunshine 就能在任务栏看到其图标。下图中前两个分别为虚拟显示器托盘图标和 Sunshine 托盘图标。右键 Sunshine 托盘图标选择 Open Sunshine 即可打开 webui 控制界面。首次打开需要设置用户名和密码。

Sunshine 串流设置有大量可供参照的教程和高度的自定义能力,这里只给出界面语言修改和主机名称修改的部分。选择上方功能栏中 Configuration,进入第一个功能页面 General,即可看到 Language 和 Sunshine Name 选项,选择简体中文并把主机名称修改为便于记忆的即可,保存后选择应用等待 Sunshine 重启,重新打开 webui 即可。



如果联机的双方显示器数据不同(大部分情况),请在 Audio/Video 选项卡下拉到底部,将配置修改为下图所示,这样可以使你们在游玩时不会对显示器分辨率、刷新率等产生影响。


1.3 部署Moonlight服务

内容参考下列链接:

Sunshine基地版串流食用指南

这里也同样推荐使用和 Sunshine Foundation 相适配的 Moonlight 增强版,实测使用官方提供的标准 Moonlight 也能够完成本指南中的全部需求,请自行抉择。

Moonlight 增强版链接:https://github.com/qiin2333/moonlight-qt

Moonlight 官网链接:https://moonlight-stream.org/

Moonlight 安装也是一如既往的无脑默认即可,如果两台设备都已经成功链接到 zerotier 网络中,安装好之后打开 Moonlight 将会自动扫描当前网络中的 Sunshine 服务提供者。如果无法搜索到,可以使用右上角“手动添加计算机”功能,将对应IP填入即可尝试连接。

zerotier网络给成员设备提供的虚拟公网IP地址可以在两个地方看到。第一处从 zerotier web 控制台的 Networks 选项卡下进入对应网络信息页面,可以查看到全部成员设备的分配IP。第二处是对应设备的zerotier客户端,右键zerotier托盘图标,选择当前连接的 zerotier 网络id,选择 Managed Address,左键单击出现的点分十进制IP即可复制到剪切板,把这个IP发给 Moonlight 连接者即可。





 

Moonlight 搜索到主机之后,第一次连接需要在主机上输入对应pin码来确认身份。点选右下角弹出的信息即可进入pin码界面。

不要允许任何来历不明的设备连接!

任何认证行为之前都要尽可能确保申请者的身份! 





 

第二部分 如何解决串流中语音的回声

这里简单说明一下串流中为什么会出现回声,下面将使用 Moonlight 连接的设备称为 M,提供 Sunshine 服务的设备称为 S。默认情况下 Sunshine 会将设备 S 上当前使用的音频通道串流给 M,这样 M 就可以听到 S 上运行的游戏输出的音频。但是语音软件也会把语音输出到这个通道中,这种情况下 M 就会听到自己说话的回音。

如果你们不介意,或者一方能够忍受静音游玩,或者你们选择使用其他设备语音通信,那么可以直接跳过这个部分。下面是给完美主义者提供一个解决方案。

这一部分参考链接如下: https://www.bilibili.com/video/BV1W8411u7tJ/?vd_source=dcb475bb2afe283e88afbadb7dd36a17

使用音频通道管理软件 VoiceMeeter Banana,软件可从官网免费下载最新版本:https://voicemeeter.com/

注意,下载安装之后会提供 VoiceMeeter Standard 和 VoiceMeeter Banana 两个软件,其图标相同,不要启动错了!VoiceMeeter Standard 功能较少,无法区分语音和游戏音频。下图给出了 VoiceMeeter Banana(下面简称Banana)的设置参考,再次注意,如果红圈处没有两个虚拟音频通道说明你打开的是 Standard 版本!





右键任务栏中音量图标,打开声音设置。在输出一栏中选择所有带有中文的输出设备,进入属性页面,全部重命名为英文,这是为了后续使用脚本获取输出设备id时不会报错。

接下来把声音设置拉到底,在高级栏中选择更多声音设置,进入高级设置中。

将 VoiceMeeter Input 设置为默认设备,将VoiceMeeter AUX Input 设置为默认通信设备。其他 VoiceMeeter balabala 不需要设置。





 进入 Banana 界面,点击右上角的A1按钮,在出现的新窗口中选择你当前使用的音频输出设备,比如耳机、扬声器。



此时可以随意打开一个视频/音频查看音频设置是否成功。 确认无误之后可以打开你们使用的语音软件,此处以teamspeak3 client为例。选择工具栏,在底部进入设置窗口。在左侧功能栏中选择音频输出,在配置详情中将输出设备修改为 Voicemeeter AUX Input。在左侧功能栏中选择音频输出,直接选择当前的物理麦克风即可。

至此已经完成了对串流时桌面音频和语音音频的隔离。





第三部分 如何进行本地分屏游玩

由于分屏游玩的特殊性,是无法支持两套键鼠共同操作的,因此需要一方使用手柄输入游玩。如果当前没有手柄,也可以使用手机、键鼠安装模拟软件充当手柄,不过还是建议使用物理手柄。

进入游戏选择单人游戏,流程与单人游玩完全相同,直到进入世界。可以先使用键鼠闲逛一下,使键鼠和1P绑定。接着手柄玩家按A键,会看到屏幕左上角出现加入选项。选择添加新玩家,并在出生点选择玩家1即可在玩家1旁边出生。

下图是我和朋友联机游玩的存档,加入玩家1则是手柄和键鼠均控制1P,添加新玩家则是捏一个新小人,添加XXX则是加载之前存档的2P人物。







 最后给出手柄操作的简单图示,祝大家都能和朋友玩上b42联机。





0
0
0
0
评论(0)
观看就是喜欢,快来评论一下吧!