跳转至

User Handbook - 多人游戏

使用本指南来解答相关问题,并开始使用 Eden 的多人游戏功能。

多人游戏 FAQ

本 FAQ 将作为一般性快速问答,回答一些简单问题。

在此查看图文指南。

Eden 能否与 Switch 主机进行游戏?

不能——目前唯一具有此类功能的模拟器是 Ryujinx 及其分支。此方案需要在改装过的 Switch 主机上加载自定义模块才能工作。

我可以在线玩游戏吗?

不能——这需要将对任天堂官方服务器的请求劫持到一个用于模拟该功能的自定义服务器基础设施上。像 Pretendo 这样的服务就是这样运作的。因此,你无法游玩“在线”游戏,但你可以游玩多人游戏。

在线游戏和多人游戏有什么区别?

我在这里特意斟酌了措辞,这是有原因的。

  • 在线:连接到任天堂官方服务器并使用该通信方式进行的游戏/功能,目前在任何模拟器上都不受支持(原因显而易见)。
  • 多人游戏:在各自独立的系统上与多名玩家一起游玩的能力。对于支持 LDN 本地无线功能的游戏,这是受支持的。

这里的基本原则很简单:如果一款游戏支持无需服务器即可通信(本地无线、LAN 等),你就可以与其他玩家一起游玩。如果它必须依赖服务器才能运行,那就无法实现。你需要自行查询你的游戏是否支持本地无线/LAN 联机作为选项。

Eden 的多人游戏具体是如何运作的?

Eden 的多人游戏功能通过模拟 Switch 的本地无线(LDN)系统,然后将这些流量通过充当大厅的“房间”隧道传输到互联网上。每位玩家各自运行一个模拟器实例,只要所有人加入同一个房间,并且游戏支持本地无线多人游戏,模拟主机就会像处于同一本地网络一样互相发现。这种设计避免了典型的基于单一存档的 netplay 问题,因为每个用户都保留独立的存档和主机状态,只有游戏内的无线数据包会通过房间服务器转发。实际操作中,你选择或托管一个房间,按需配置网络接口/端口转发,然后启动任何支持 LDN 的游戏;从游戏的角度来看,它只是在执行标准的本地无线通信,而模拟器负责处理互联网或局域网上的发现和通信。

我需要做什么?

这完全取决于你的目标以及你的技术能力水平。你有两个选项可以选择如何继续。

  1. 加入公开大厅。
    1. 如果你只想和其他人一起玩 Mario Kart 8 Deluxe,并且不关心其原理或延迟,那么这个选项适合你。关于如何操作,请参阅 加入多人游戏房间 一节。
  2. 托管自己的房间。
    1. 该选项要求你熟悉访问路由器的配置、修改防火墙规则,并且在事情(不可避免的)第一次无法完美运行时能够进行排查。如果你想完全控制房间、担心延迟问题,或者只是想为朋友们搭建一个联机环境,请使用此选项。后续步骤请参阅 托管多人游戏房间 一节。

不同平台之间可以一起玩吗?

可以——你选择在哪个平台上运行模拟器并不重要。Steam Deck 用户可以与 Windows 用户一起玩,Android 用户可以与其他 MacOS 用户一起玩,等等。此外,不同模拟器之间也可以一起玩(Eden/Citron/Ryubing 等)。但如果遇到问题,你可能还是希望大家都使用同一个模拟器。

我应该留意哪些陷阱?

如果一切总能完美运行当然很好,但现实并非如此。以下是你在尝试多人游戏时需要注意的一些事情。

  1. 模拟器版本不一致
    1. 有时,所选模拟器的更新会改变 LDN 功能的处理方式。在这些情况下,尝试建立 LDN 连接时可能会出现意外行为。如果你们可以无问题地加入同一个大厅,但一起玩某个游戏时出现问题,这很适合作为第一个检查项。
  2. 游戏版本不一致
    1. 最佳做法是让所有玩家的游戏版本保持一致,以确保各个程序处理 LDN 逻辑时没有差异。游戏是黑盒,开发团队无法看到其内部逻辑处理方式是否一致。因此,强烈建议所有玩家的游戏版本保持一致。如果你们可以无问题地加入同一个大厅,但一起玩某个游戏时出现问题,这很适合作为第二个检查项。
  3. 延迟
    1. 由于这种实现是在模拟 LAN/本地无线连接,因此它对网络延迟和数据包丢失极为敏感。Eden 在尽力处理这个问题、避免立即将用户断开方面做得不错,但它并非万无一失。如果延迟值得担心或已经成为一个问题,可以考虑托管一个房间。

加入多人游戏房间

当您需要在 Eden 中连接到多人游戏房间以使用 LDN 功能时,请参考本部分。这里不涉及如何托管房间,只涉及加入已有房间。

在此查看图文指南。

先决条件

  • 已安装并正常运行的 Eden
  • 已在 Eden 设置中配置多人游戏选项
  • 可访问网络

步骤

根据房间的托管方式,有两种主要方法可以连接到一个已有房间。

  • 加入公开大厅
    • 此选项允许你查看公开托管的大厅并轻松加入。如果你只是想快速加入一个房间游玩,请使用此选项。
  • 直接连接房间
    • 如果托管房间不在公开大厅列表中(例如私人房间、仅限内网等),请使用此选项。

加入公共大厅

  1. 打开 Eden 并导航到 多人游戏 > 浏览公共游戏大厅。
  2. 此时将打开公共房间浏览器,显示可公开访问的房间列表。找到想要连接的房间并双击它。

    3. 现在你会看到一个显示大厅中所有成员的窗口,或者一条错误消息。

直接连接到房间

如果主机没有将大厅设为公开,或者你不想在公共游戏浏览器中寻找它,请使用此选项连接。

  1. 打开 Eden 并导航到 多人游戏 > 直接连接。
  2. 输入服务器地址、端口、昵称(你的用户将在房间中显示的名称)和密码(如果主机设置了密码,否则留空),然后点击连接。
  3. 现在你会看到一个显示大厅中所有成员的窗口,或者一条错误消息。

托管多人游戏房间

当你想在 Eden 中托管一个多人游戏大厅与他人一起游玩时,请参考本指南。如果希望有人从你的本地网络之外访问该房间,请参阅从外部访问你的多人游戏房间部分了解后续步骤。

在此处查看图文指南。

前提条件

  • Eden 已设置并正常工作
  • 网络访问权限
  • 能够在设备上允许程序通过防火墙。

步骤

  1. 打开 Eden 并导航到 模拟 > 多人游戏 > 创建房间。
  2. 在弹出的对话框中填写以下信息。

    选项 可接受的值 默认值 描述
    房间名称 任意长度为 4 - 20 个字符的字符串 无 控制房间名称及其在公共游戏大厅/房间屏幕中的显示方式。
    用户名 任意长度为 4 - 20 个字符的字符串 无 控制你的用户在其他房间用户面前的显示名称。
    首选游戏 游戏列表中的任意游戏 游戏列表中的第一个游戏 大厅将玩什么游戏?你并非必须玩所选的游戏,也无需重新创建房间即可切换游戏。
    密码 无或任意字符串 无 你想用什么密码保护房间(如果有)。
    最大玩家数 2 - 16 8 你希望房间内同时允许多少名玩家?
    端口 1024 - 65535 24872 你希望大厅运行在哪个端口上?从技术上讲可以是任何端口号,但最好选择一个不常见的端口以避免潜在冲突。有关常用端口的更多信息,请参阅知名端口。
    房间描述 无或任意字符串 无 可选的说明消息,用于详细说明房间用途,或作为向大厅用户展示的临时每日消息。
    加载先前封禁列表 [已勾选, 未勾选] 已勾选 告知 Eden 加载你之前封禁的用户列表。
    房间类型 [公开, 未公开] 公开 指定你是否希望服务器出现在公共游戏大厅浏览器中
    3. 点击托管房间以启动房间服务器。你可能会收到操作系统发出的允许该程序通过防火墙的通知。允许后,用户即可尝试连接到你的房间。

从外部访问你的多人游戏房间

很多时候,你想一起游玩的人并不在你的内部网络(LAN)中。如果你想托管房间并与之游玩,你需要让你的设备相互通信。本指南将介绍实现这一目标的各种选项,以便你们能一起玩。

在此处查看图文指南。

前提条件

  • Eden 已设置并正常工作
  • 网络访问权限

选项

端口转发

  • 难度等级:高

端口转发是一种网络技术,可将到达路由器或防火墙上特定端口的传入流量引导到私有本地网络内的指定设备和端口。当外部客户端通过该端口访问路由器的公共 IP 地址时,路由器会重写数据包的目标信息(IP 地址,有时还有端口号),并将其转发到正在监听相应服务的内部主机。这样,即使设备本身拥有不可路由的私有地址,托管在 NAT(网络地址转换)后面的 Web 服务器、游戏服务器或远程桌面会话等服务也能从更广泛的互联网访问。

该过程通过在路由器配置中创建静态映射(通常称为“端口转发规则”)来实现。该规则指定三项数据:外部(公共)端口、目标机器的内部(私有)IP 地址,以及该机器期望流量的内部端口。当数据包到达时,路由器检查其 NAT 表,将外部端口与规则匹配,然后在转发前将数据包的目的地址转换为内部地址。来自内部主机的响应也会被类似地重写,使其看起来来自路由器的公共 IP,从而完成双向通信循环。这种机制允许无缝访问受保护 LAN 内的服务,而无需暴露整个网络。

就我们的需求而言,我们会选择要暴露的端口(例如 24872),然后进入路由器的配置界面,创建一条端口转发规则,将来自外部连接的流量通过我们指定的端口(24872)发送到你的本地机器。具体操作方法因路由器制造商而异——有时根据你的合约还需要联系你的 ISP 才能完成。你可以在 portforward.com 上查询你的路由器,上面可能有针对你特定设备的说明。如果那里没有,你就需要使用 Google/ChatGPT 来确定适用于你设备的步骤。

请记住,你不能让同一个端口同时为多个设备开放——你必须只在一台设备上托管(或者进行更复杂的组网,这不在本文讨论范围内)。

使用隧道服务

  • 难度级别:简单

使用隧道服务可能是避免端口转发的一种解决方案,同时也无需担心用户的设置。隧道服务的工作原理是:在承载游戏服务器的那台机器上运行一个轻量级客户端。该客户端会立即通过一个出站加密连接(通常基于 TLS/QUIC)连接到隧道提供商云基础设施所运营的中继节点。由于出站流量几乎总是被 NAT 路由器和 ISP 防火墙允许,因此即使主机位于运营商级 NAT 或严格防火墙之后,也可以建立隧道。隧道提供商随后会分配一个公共地址(例如 mygame.playit.gg:12345)。当远程玩家连接到该地址时,流量会到达隧道提供商的中继节点,中继节点再通过已建立的隧道将其转发回专用网络中的客户端,最后到达本地游戏服务器的端口。实际上,服务器在互联网上看起来就像在公共地址上监听,而主机完全不需要配置端口转发规则或直接暴露自己的 IP。

就我们的目的而言,我们会为我们托管房间时选择的那个端口启动监听器。用户将连接到我们分配的公共地址/端口组合,然后流量会被路由到我们的机器。只要你想让连接保持开放,隧道就必须保持活动状态。关闭终端将会终止隧道并断开用户连接。

推荐服务:

使用 VPN 服务

  • 难度:简单

VPN 解决方案是隧道解决方案与端口转发之间一个很好的折中方案。你完全不必进行端口转发,也不必动你的网络设备——同时也不需要将你的所有数据连接都通过第三方中继节点发送。它最大的缺点是,你必须确保所有用户都安装了你的 VPN 解决方案,并且 他们拥有有效的配置。在寻找解决方案时,建议选择使用 WireGuard 协议以获得速度优势,并且不需要在初始握手之外与服务器进行通信的方案。

推荐服务:

  • Tailscale
  • ZeroTier
  • 自托管 VPN 解决方案
    • 这已经远远超出本文档的范围,简直属于另一个邮政编码地区了。

请向你选择的提供商咨询其特定的注册和安装流程。


查找多人游戏房间的服务器信息

当你需要确定所连接的公共多人游戏大厅的连接信息时,请使用本指南。

点击此处 查看图文指南。

前提条件

  • Eden 已设置并配置完成
  • 可访问互联网

步骤

方法一:从日志文件获取地址

  1. 打开 Eden 并连接到你要识别的房间。
    1. 如需相关说明,请参阅 “加入多人游戏房间” 部分。
  2. 转到 File > Open Eden Folder,然后打开 config 文件夹。
  3. 用文本编辑器打开 qt-config.ini 文件。
  4. 搜索以下键:
    1. Multiplayer\ip=
    2. Multiplayer\port=
  5. 复制服务器地址和端口。

方法二:使用网页浏览器

  1. 获取你想要获取信息的房间名称。
  2. 打开网页浏览器。
  3. 导航到 https://api.ynet-fun.xyz/lobby
  4. 按 Ctrl + F 并搜索你的房间名称。
  5. 查找并复制服务器地址和端口。

方法三:使用终端(PowerShell 或 CURL)

  1. 获取你想要获取信息的房间名称。
  2. 打开你的操作系统所支持的终端。
  3. 运行以下命令之一,将 替换为第 1 步中的服务器名称。

PowerShell 命令 [Windows 用户]

# Calls the API to get the address and port information
(Invoke-RestMethod -Method Get -Uri "https://api.ynet-fun.xyz/lobby").rooms | Where-Object {$_.Name -eq '<NAME>'} | Select address,port | ConvertTo-Json

# Example Output
#{
#  "address": "118.208.233.90",
#  "port": 5001
#}

CURL 命令 [MacOS/Linux 用户] *需要 jq

# Calls the API to get the address and port information
curl -s "https://api.ynet-fun.xyz/lobby" | jq '.rooms[] | select(.name == "<NAME>") | {address, port}'

# Example Output
#{
#  "address": "118.208.233.90",
#  "port": 5001
#}
  1. 复制服务器地址和端口。

本地合作游戏的多人联机

当你想要与在不同系统上的朋友一起游玩仅支持本地合作的游戏时,请使用本指南。

点击此处 查看图文指南。

有时候,你会想和朋友一起游玩某个不支持 LDN 多人联机、仅提供本地合作(多个控制器连接到同一台主机)的游戏,例如《New Super Mario Bros. U Deluxe》。模拟器方案已经发展出 2 种主要方法来处理这些情况。

  1. Netplay:Netplay 让两名或更多玩家各自在自己的电脑上运行同一款游戏,同时通过互联网共享彼此的控制器输入,使所有人看到同步的同一游戏世界。一名玩家作为主机主持会话,其余玩家作为访客加入,来回发送按键输入以保持游戏协同。
  2. 这是对其工作原理的极大简化,但能让你有个概念。
  3. 低延迟远程桌面方案:使用诸如 Parsec 之类的服务时,主机将自己的屏幕共享给连接了输入设备的远程一方。该设备将输入发送到主机。

无论哪种情况,其核心都是我们在主机上模拟一个输入设备,让游戏认为已连接 2 个控制器。目前还没有任何 Switch 模拟器提供 Netplay 功能,因此我们使用 Parsec 来实现这一点。

前置条件

  • Eden 已设置并完全配置
  • 一个 Parsec 账户
    • Parsec 对个人非商业用途免费。关于如何创建账户和安装客户端的说明,请参阅其网站上的 Parsec 文档。
  • Parsec 客户端已安装在你和远程(朋友)的机器上

步骤

  1. 在主机上启动 Parsec。
  2. 在 Parsec 中连接到另一位玩家。当对方能够看到主机的屏幕时,即表示连接成功。
  3. 如果你是游戏的主机方,你应该让朋友发起远程连接,然后由你接受。
  4. 如果你是加入游戏的一方,你需要发送连接请求,由主机方接受。
  5. 确认远程玩家可以看到屏幕,并且连接没有问题。
  6. 启动 Eden。
  7. 导航到 Emulation > Configure。
  8. 选择 Controls 选项卡。
  9. 如有必要,设置你的控制器。
  10. 选择 Player 2 选项卡,并勾选 Connect Controller 复选框。这会使来自另一设备的输入被视为第二个控制器。
  11. 下拉 Input Device 并选择控制器。
  12. 它具体显示为什么取决于 Parsec 的设置。
  13. 设置远程玩家的控制器。
  14. 点击 OK 以应用更改。
  15. 启动你想玩的游戏并进入合作模式。具体操作方式取决于游戏,因此你需要在游戏菜单中或网上查找相关信息。

元服务器故障排除

如果你无法连接到元服务器,很可能是你的 ISP 正在阻止这些请求。

Linux 与 Steamdeck

大多数 Linux 系统和 Steamdeck 都允许修改基础的 /etc/hosts 文件,这应该能修复 DNS 解析问题;因此请将以下内容添加到该文件中:

28.165.181.135 api.ynet-fun.xyz api.ynet-fun.xyz

Zapret

在 lists/list-general.txt 中添加以下内容:

api.ynet-fun.xyz
ynet-fun.xyz

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 eg/Eglantine