切换语言: Deutsch English Español 日本語 Русский Українська

多人游戏

From Official Factorio Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
No-building-material-icon.png
这篇文章是一篇小作品,可能还不够完善。
您可以通过编辑这篇文章来帮助其更加完善。

除了单人游戏之外,Factorio还支持多人游戏,允许许多玩家合作并互相帮助,或者在PVP中相互对抗。本页面介绍如何设置多人游戏以及如何加入。默认情况下,多人游戏运行合作自由模式,所有玩家一起工作,发射一颗卫星进入太空的火箭。其他场景,包括PvP地图,可以从地图和场景论坛下载。

设置多人游戏

玩家可以加入多人游戏,或以本机为主机建立多人游戏,亦或由专用服务器托管。建立好的多人游戏可以被同一局域网玩家或全球其他玩家找到并加入。

使用开始游戏菜单中的多人游戏按钮开始多人游戏,选择新游戏载入游戏游戏场景建立主机并开始游戏,或者选择局域网游戏互联网游戏以连接到已经其他人的的游戏中。主机也可以选择不在服务器列表中显示建立的游戏,在这种情况下,您需要服务器的(公共或其他方式)IP地址;然后你可以选择连接服务器以加入游戏。

注意与提示:

  • 所有玩家的游戏版本和安装的mod必须完全一致。
  • 游戏使用端口34197。端口可以在设置中更改。
  • 游戏仅支持 UDP协议。请确保你的路由器有正确的设置。(游戏拥有自己的“可靠通信层”建立在UDP之上来解决丢包问题。)
    • 请确保没有防火墙或杀毒软件阻止了UDP数据包。
  • 同时联机人数的理论上限是65535,然而,实际的限制要低得多。

专用/Headless服务器

从Factorio版本0.12.0开始,可以使用--start-server命令行选项启动专用(或Headless)服务器。您可以运行factorio --help来获取Factorio接受的所有命令行参数的列表。

在Headless模式下:

  • 图形界面未初始化。(启动速度更快,内存使用量更少,适用于Headless服务器)
  • 在键入命令后,游戏立即开始,并按照给出的参数(存档名)加载存档。
  • 服务器在游戏中没有角色。
  • 在没有玩家连接的情况下,游戏会暂停。(尽管可以使用server-settings.json中的no-auto-pause选项覆盖此选项)
  • 退出时保存游戏。(并正常执行自动保存)

从0.13开始,--start-server命令后需要加上存档文件的路径。

您需要在启动服务器之前创建保存文件,因为专用服务器需要提供保存文件。这可以使用--create命令行参数轻松完成。例如:

./bin/x64/factorio --create ./saves/my-save.zip       # 这将建立一个新存档,就像在游戏中点击新游戏那样
./bin/x64/factorio --start-server ./saves/my-save.zip # 这将启动游戏服务端,并且会使用上一行中创建的存档

有几个JSON配置文件可供factorio用来更改服务器和地图设置:

  • 在map-gen-settings中设置地图生成器使用的参数,例如宽度和高度,矿块的频率和大小等。(在0.13中添加)
  • 编辑map-settings来控制污染扩散,扩散和演变等等。(0.15版本中增加)
  • server-setting将多个命令行选项合并到单个文件中(在0.14.12中添加)

data子目录中包含每个参数的示例文件。

创建新地图时,必须将--map-gen-settings和--map-settings选项与--create选项一起使用。例如:

./bin/x64/factorio --create saves/my-save.zip --map-gen-settings my-map-gen-settings.json --map-settings my-map-settings.json

启动factorio服务器需要您指定server-settings.json文件的位置。默认情况下,这是在factorio数据文件夹中。例如,要使用最新保存的地图启动factorio,您可以运行:

./bin/x64/factorio --start-server-load-latest --server-settings ./data/server-settings.json

要在同一台计算机上启动服务器和客户端,需要使用以下启动选项启动客户端:

--no-log-rotation

设置Linux Factorio服务器

注意:Factorio现在需要glibc 2.18版本,但CentOS / RHEL 7仅附带2.17版本,因此如果不手动编译glibc 2.18,本指南将不再起作用。

本分步指南已在新安装的CentOS 7和RHEL 7环境下进行了验证,同时在大多数发行版中几乎不用做任何更改。

本指南假设您将在/ opt / factorio下安装Headless服务器,请根据您自己的设置调整路径。我们还建议您将Factorio服务器在单独的用户中运行,以加强安全性。

请注意,Linux有两种不同的软件包可用于运行Headless服务器。首先是普通的Linux下载,其中包含完整的游戏。另一种是特殊的Headless包。Headless包不包含与纯服务器无关的任何文件,如图形和声音。它也不与服务器机器上不存在的库链接,如Xlib,libGL或libasound。如果在第三方托管服务器中运行,应选择此选项。

本指南不处理防火墙/端口转发,因为这可以在Linux中以各种方式完成(请务必在您的特定发行版上以Linux管理员的身份了解这些内容)

您可以使用Linux factorio-init脚本以更好的方式启动/停止无头服务器。该脚本将确保您只能在服务器启动时使用最新的存档(即使这是自动保存),同时还可以设置许多其他设置项,例如自动保存频率和延迟设置。此脚本还将简化与Linux factorio-updater脚本结合使用时更新服务器的流程。

  • 下载所选软件包 - 完整游戏或是无头包 - 并将Linux tar.gz或tar.xz软件包上传到您的服务器的/tmp目录下
  • 将/tmp中的软件包解压到/opt/factorio中
$cd /opt/

$sudo tar -xzf /tmp/factorio.tar.gz # 请使用正确的文件名称。它包含factorio版本号
$sudo tar -xJf /tmp/factorio.tar.xz # 如果您下载了.tar.xz文件请使用这条命令(版本0.15.x)
  • 将一个新用户添加到您的系统中,并为其分配factorio目录的所有权(请不要以root用户身份运行,可能需要sudo)
$useradd factorio
$chown -R factorio:factorio /opt/factorio
  • 尝试运行服务端二进制可执行文件
$su factorio
$/opt/factorio/bin/x64/factorio --start-server savename

如果失败并提示它无法找到或打开你设置的savename.zip,这时只需从自己的计算机上传一个保存,并将其保存在/opt/factorio/saves目录中,或者使用--create ./saves/newgame.zip创建一个存档。

如何在匹配服务器中列出服务器托管的游戏

为了将游戏发布到匹配服务器,需要给Factorio一些额外的信息,而不仅仅是保存文件的位置。这些信息在服务器设置文件中提供。

要创建服务器设置文件,请查看Factorio Application目录中data/server-settings.example.json中的示例文件。推荐的方法是制作此示例文件的副本并编辑副本。

以下值可以更改:

Name
这将是服务器在服务器列表中显示的名称
Description
服务器的简要说明
Tags
游戏标签列表
Max Players
允许您限制可以同时连接到服务器的玩家数量。如果你不想要限制,只需将max_players设置为0即可。
  • 服务器浏览器的可见性:可以是公共的,局域网可见的或隐藏的。
    • 公开:服务器将出现在公共服务器列表中。这需要在下方填写登录凭据。
    • 局域网:服务器不会出现在公共服务器列表中,但可通过“局域网游戏”按钮使用
    • 隐藏:客户端必须使用服务器的IP地址进行连接
  • 使用用户名和密码或验证令牌的用户凭证(可在factorio网站或player-data.json中找到):如果您希望公开服务器,则这些是必需的。否则可以留空。
    • 出于安全原因,建议使用身份验证令牌,因为此文档以纯文本形式存储。应该指出,身份验证令牌也是敏感信息,因此建议您保密。
  • 服务器密码
    • 字段名称是game_password
  • 是否验证用户身份

(factorio的v0.14中还有其他值。)

技术实施细节

关于多人游戏的一些技术细节的注意事项由开发团队在几个Friday Facts博客文章中发布:

杂项

  • 控制台命令的按键也用于多人游戏中的开始聊天。要执行命令而不是聊天,您需要在命令前键入/c。执行的命令对所有玩家都是可见的。此外,多人游戏必须启用了允许命令工作的设置。
  • 使用该命令设置玩家的颜色:
/c game.players["player_name"].color = {r=0.7, g=0.5, b=0.1, a=0.9}

r,g和b分别代表红色,绿色和蓝色(可能的值介于0和1之间,请使用http://prideout.net/archive/colors.php上的最右边一列将颜色转换为rgb数字)。 a是阿尔法通道,也就是透明度。

加入多人游戏

从版本0.13开始,端口转发不再是玩家加入多人游戏的唯一选择。现在玩家还可以通过Steam服务彼此加入游戏。

玩家可以通过多种方式来加入一个多人游戏:

  • 通过直接输入公共IP和端口加入Factorio。
  • 从活跃的公共服务器菜单中选择服务器加入。
  • 通过Steam服务加入游戏。
  • 通过局域网进行联机游戏。

建议玩家使用语音聊天(TeamSpeak,Discord,Mumble,(译注:或者中国特色语音软件)),因为您需要协调连接,构建,处理攻击等等。TeamSpeak服务器发布在多人论坛中。 Factorio社区的公共Discord频道可以在这里找到。

通过输入IP以及端口加入游戏

要通过IP加入多人游戏,您需要知道有效的服务器公网IP。您可以通过社交媒体,网站或口耳相传来得到这些信息。获得IP和端口后,只需进入开始游戏 ->多人游戏 ->连接服务器,并提供所需的IP以及端口即可加入游戏。

如果服务器设置正确并可以接受公共连接,你应该可以正常加入游戏。

通过服务器列表加入游戏

Factorio的开发者维护了一个包含所有公开服务器的列表,这些服务器向官方服务端声明并认证后,即可允许玩家通过Factorio直接加入。大多数服务器需要密码,但同时也有许多完全公用的服务器可以无密码连接。要通过服务器列表加入,请转到开始游戏 ->多人游戏 ->互联网游戏。如果询问,请提供您的Factorio.com用户名,并显示公共服务器列表。只需选择一个并加入就可以开始游戏啦。

通过Steam服务加入游戏

Steam提供了一个“游戏邀请”系统,只需使用它即可加入别人的游戏。你可以在相关文档中找到更多关于如何使用steam的信息。这是普通玩家与朋友一起进行多人游戏的最(简单)佳方式,因为它允许Steam处理所有事务。

加入一个局域网游戏

如果你在同一个局域网内有一些朋友建立了游戏(在同一个建筑物中),你就可以通过局域网加入。只需转到开始游戏 - >多人游戏 - >局域网游戏即可。

寻找其他玩家

  • 使用论坛的多人游戏版块
  • 许多玩家使用Evolve等其他软件来与其他玩家会面。这也具有在玩家中创建虚拟局域网的“优势”。
  • 有些人还使用Steam来寻找其他玩家。
  • 通过一个带有各种搜索选项的外部服务器浏览器
  • 告诉你的朋友购买Factorio,然后和他们一起玩!

穿过NAT连接服务器

Factorio要求服务器(在客户端 - 服务器模式下)具有可公开访问的IP地址,或者所有播放器都在同一局域网内。如果您位于NAT后面,则必须设置端口转发(请参阅上面的端口号)或使用虚拟LAN软件(如Hamachi或Evolve)。

多人游戏将以客户端 - 服务器模式启动(也是多人转发模式)。在这种模式下,所有客户端都将其数据包发送到服务器,服务器将流量转发给其他客户端。这样做的好处是它允许一些玩家在局域网内而另一些在外网进行游戏。由于数据包必须经过额外的转发(通过服务器),因此这样做的缺点是可能稍微有些延迟。

游戏类别

Coop

Coop-game runs without any further preparation ( http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6501 )

PvP

Technical Implementation

More Tools/Infos

And always remember that Factorio in v0.11 isn't intended to work well on internet connections, so keep patient. ;)

More Guides

Miscellaneous tips

  • the key for Console commands will now initiate a chat in MP. To execute commands you need to type '/c' before the command!
  • Set the player's color using the command
/c game.players[x].color = {r=0.7, g=0.5, b=0.1, a=0.9}

Where x is the player number. r, g and b are for red, green and blue respectively (possible values are between 0 and 1, use the right-most column on http://prideout.net/archive/colors.php). a is alpha channel aka Transparency of the color to the base texture. For single player, leave off the "[x]" to set the color.

Software for routing / establishing connection