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

Multiplayer/zh: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
Tmysam (talk | contribs)
mNo edit summary
Cardinal (talk | contribs)
m Miswords.
 
(13 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Languages}}
{{Languages}}
[[File:players_colored_preview.png|190px|right]]


多人游戏的功能产生于v0.11.0版本,建议在''局域网''或''低延迟互联网''上使用,因为这样会不那么卡顿。
虽然异星工厂是一款单机游戏,但它也支持多人游戏,允许{{L|Player}}们在游戏中合作互助,或在对战模式中相互竞争。本页面会介绍如何创建多人游戏、如何加入多人游戏,以及管理其他用户和服务器时的需要的管理员功能。默认情况下,玩家们可以在[[Game modes and options/zh|标准模式]]游戏中进行合作,以获取游戏胜利。更多场景(包括对战地图)可以在[https://forums.factorio.com/viewforum.php?f=36&sid=93d1fbe9336d31d6bac60847b6c97985 地图和场景社区]下载。


从技术上讲这是一个用户-用户的游戏,不需要''服务器''。
== 创建多人游戏 ==


只要知道游戏的IP地址,任何人都可以加入一个已经存在的游戏。他加入游戏时,游戏将暂停以等待新玩家下载地图。如果原先的玩家退出了游戏,第二名玩家可以继续游戏,同时第一名玩家还可以随时重新加入。如果游戏需要同步,地图会被自动重新下载,然后游戏会继续进行。
玩家可以加入多人游戏,或以本机为主机创建多人游戏,亦或由专用服务器托管。多人游戏可以在局域网或整个互联网范围内公开,允许其它玩家加入游戏。


== 在局域网/互联网上联机 ==
要创建多人游戏,可以在主菜单中选择“多人游戏”,然后选择以下选项之一来创建游戏:


v0.11版游戏可能不能正常在互联网上玩。注意,卡顿和延迟取决于连接速度和响应时间。
* '''搭建服务器-创建游戏''':选择所需场景,{{L|Map generator}}设置,并设置服务器可见性。服务器可见性决定它被哪些玩家搜索到。玩家可以进行如下设置:
** '''互联网''':游戏将在互联网大厅列表中列出。
** '''Steam''':启用或禁用Steam的“加入游戏”功能。
** '''局域网''':你的游戏将在局域网大厅列表中列出。
* '''搭建服务器-载入存档''':从列表中选择一个存档,并设置服务器可见性。


* 所有玩家的游戏版本和安装的mod必须完全一致。 (提示:也许有人没有装剧情包?)
要加入多人游戏,可以选择以下选项之一:
* 为了更流畅的进行游戏,主机可以关闭自动保存。
* 游戏使用端口'''34197'''。端口可以在[[Application directory|设置]]中更改。
* 游戏仅支持 '''UDP'''协议。请确保你的路由器有正确的设置。(游戏拥有自己的“可靠通信层”建立在UDP之上来解决丢包问题。)
** 请确保没有防火墙或杀毒软件阻止了UDP数据包。
** 请看“更多指导”来正确设置路由器。
** 所有的玩家都能互相连接是十分必要的。不仅仅是必要,而是从理论上说,所有的玩家都需要有公共的IP地址,即使在NAT中也是如此。看 [http://www.factorioforums.com/forum/viewtopic.php?f=30&p=51201#p50553 为什么我不能超过三人同时联机?]''
* 同时联机人数的理论上限是[http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6481&p=50661#p50586 65535]. :)


=== 语音聊天 ===
* '''互联网大厅''':根据玩家要求搜索服务器并加入游戏。
* 建议使用一些聊天软件,因为你会需要说很多话(配合连接,建造,传递物品...)。 语音服务器:[http://www.factorioforums.com/forum/viewforum.php?f=53 多人游戏论坛]。
* '''局域网大厅''':加入本地局域网上的服务器。
* '''服务器直连''':通过服务器的IP地址加入服务器。该选项可以加入未设置任何可见性的服务器。


=== 寻找其他玩家 ===
注意与提示:


* 使用[http://www.factorioforums.com/forum/viewforum.php?f=53 论坛中的多人游戏版面].
* 服务器中所有玩家的游戏版本和模组必须完全一致。
* 很多人使用蛤蟆吃(Hamachi)或Evolve来寻找其他玩家。这有助于在玩家之间建立一个虚拟私有网络。看看下面的软件。
* 服务器使用端口'''34197'''。端口可以在[[Application directory/zh|配置文件]]中更改。
* 一些人在 [http://www.factorioforums.com/forum/viewtopic.php?f=5&t=9136 Steam] 上寻找其他玩家。
* 异星工厂仅支持'''UDP'''协议。请确保路由器正确配置。(游戏基于UPD构建自己的“可靠通信层”,以解决丢包和重组问题。)
** 确保路由器转发端口正确配置,端口为34197。
** 确保路由器不会对34197端口发送的数据包进行[https://doc.pfsense.org/index.php/Static_Port 端口随机化](一些路由器默认会执行此操作)。玩家需要进行[https://forum.pfsense.org/index.php?PHPSESSID=3k4h9n5o2tksgqv910fknf7qt7&topic=142188.msg798594#msg798594 额外设置]以避免此类情况发生。
** 确保防火墙或杀毒软件不会阻止UDP数据包传输。
* 服务器联机人数的理论上限是[http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6481&p=50661#p50586 65535],然而,实际的上限要低得多。一些热门主播已经成功尝试过一百人以上同时在线。


== 异星工厂服务器:为什么要p2p? ==
=== 专用/无头服务器 ===


有人争论,为什么异星工厂不使用客户-服务器的模式,却采用玩家-玩家的模式。
专用或无头(Headless,指不配备键鼠、显示器等外设,仅通过网络进行操作的设备)服务器可以通过<code>--start-server</code>命令行选项启动。玩家可以运行<code>factorio --help</code>命令以获取游戏支持的所有命令行参数的列表。任何版本的游戏都可以在无头模式下运行,尽管Linux服务器可能更倾向于使用无头版本(不含图像资源)的游戏以减少下载量。无头版本的游戏可在[https://www.factorio.com/download 官方下载页面]下载。
在v0.11没有明确支持一个异星工厂 “服务器”。而v0.12会支持!


如果你想制作一个24/7不间断运行的世界,你需要在你的服务器上运行异星工厂并保持运行,它的原理就如同一个玩家。服务器将如同其他人一样,成为一个在游戏中的角色。
在无头模式下:


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


* [http://www.factorioforums.com/forum/viewtopic.php?f=38&p=74091#p73402 开发者接口]
从0.13版本开始,<code>--start-server</code>命令后需要加上存档文件的路径。
* [http://www.factorioforums.com/forum/viewtopic.php?f=5&t=6077#p47283 早期的接口]
* [http://www.factorioforums.com/forum/viewtopic.php?f=38&p=70874 更好的解释]


==== 无中央配置服务端 ====
玩家需要在启动服务器之前创建存档文件,因为专用服务器需要一个存档文件。这可以通过<code>--create</code>命令行参数轻松完成。例如:


* Linux 无中央配置服务端 / 虚拟网络计算机 (以后可能有): http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6449
<pre>
* [http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6585 Dedicated Multiplayer Server Guide]
./bin/x64/factorio --create ./saves/my-save.zip      # 建立新存档文件,等效于在游戏中点击“创建游戏”按钮
</pre>


== 游戏类别 ==
<pre>
./bin/x64/factorio --start-server ./saves/my-save.zip # 启动服务器并使用上一行中创建的存档文件
</pre>


=== Coop ===
有数个JSON配置文件可用于更改服务器和地图设置:


Coop-game runs without any further preparation ( http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6501 )
* '''map-gen-settings''':用于设置{{L|Map generator}}使用的参数,例如地图的宽度和高度,资源的分布情况和规模大小等。
* '''map-settings''':设置{{L|Pollution}}扩散、[[Enemies/zh#扩张|敌人扩张]]和[[Enemies/zh#进化|进化因子]]等参数。
* '''server-setting''':将多行命令合并到单个文件中。


=== PvP ===
每个参数的示例文件都保存在其data子目录中,也可从官方的[https://github.com/wube/factorio-data Github项目]上找到。


* [http://www.factorioforums.com/forum/viewtopic.php?f=14&t=8352 PvP with craftable biters]
创建新地图时,<code>--map-gen-settings</code>和<code>--map-settings</code>选项必须与<code>--create</code>选项一起使用。例如:


== Technical Implementation ==
<pre>
./bin/x64/factorio --create saves/my-save.zip --map-gen-settings my-map-gen-settings.json --map-settings my-map-settings.json
</pre>


* [http://www.factorio.com/blog/post/fff-76 Friday facts article]
服务器在启动时需要指定 server-settings.json 文件的位置。默认情况下,该文件位于游戏的data文件夹中。例如,要使用最近保存的地图启动游戏,可以运行:


== More Tools/Infos ==
<pre>
* use mods for planning. See [http://www.factorioforums.com/forum/viewtopic.php?f=14&t=6788 basic planner], [http://www.factorioforums.com/forum/viewtopic.php?f=14&t=4022 Planning-Tool-Mod]...
./bin/x64/factorio --start-server-load-latest --server-settings ./data/server-settings.json
* look into [http://www.factorioforums.com/forum/viewforum.php?f=53 multiplayer forum], most other questions are answered there.
</pre>


''And always remember that Factorio in v0.11 isn't intended to work well on internet connections, so keep patient. ;)
在Windows系统中,使用bat批处理命令启动服务器会很有用,其内容如下:


== More Guides ==
<pre>
start /wait .\bin\x64\factorio.exe --start-server-load-latest --server-settings .\data\server-settings.json
</pre>


* [http://youtube.com/watch?v=MqsqRWNsbPM How To set up a Factorio Multiplayer Server | Guide | Tutorial], by Teaspoon
请参阅{{L|Command line parameters}}以获取更多信息。
* [http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6585 Dedicated Multiplayer Server Guide], by Icecube45
* [http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6720 Tips to connect in multiplayer], by Nondre


== Miscellaneous tips ==
=== 创建Linux服务器 ===
* 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 ==
'''注意''':异星工厂现在需要2.31版本的glibc运行库,但 CentOS/RHEL 7仅附带2.17版本的运行库,因此本指南在没有[https://forums.factorio.com/viewtopic.php?t=54654#p324493 手动编译]glibc 2.31的情况下将不再适用。


* http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6393
以下内容已在全新安装的CentOS 7和RHEL 7环境下进行了验证,同时在大多数Linux发行版中几乎不需要进行任何更改。
* http://www.factorioforums.com/forum/viewtopic.php?f=53&t=6386
* http://www.factorioforums.com/forum/viewtopic.php?f=49&t=7690
* [http://www.factorioforums.com/forum/viewtopic.php?f=53&t=7714 A guide for connecting with evolve]


本指南假设您将在 '''/opt/factorio''' 目录下安装无头服务器,玩家可以根据自己的设置改变安装路径。此外建议玩家以单独的用户身份运行游戏服务器,以增强设置的安全性。


请注意,有两种不同的Linux游戏版本适用于无头服务器。首先是标准的Linux版本,包含完整的游戏内容。另一种是特殊的[https://www.factorio.com/download-headless/stable 无头版本]。无头版本不包含与服务器运行无关的其它文件,例如图像和声音资源;它也不与服务器上不存在的运行库链接,如Xlib、libGL或libasound。如果在第三方托管服务器中运行,应选择此选项。


{{Stub}}
本指南不涉及防火墙/端口转发,因为这可以通过Linux系统以多种方式进行(玩家需要掌握在自己的Linux系统中以管理员身份执行这些操作的方法)。
 
==== 安装游戏 ====
 
* 下载游戏安装包(完整版或无头版均可),并将下载的 tar.gz 或 tar.xz 文件包上传到服务器的 /tmp 目录中。
* 将 /tmp 目录中的文件包解压到 /opt/factorio 目录中:
 
<pre>
$cd /opt/
 
$sudo tar -xzf /tmp/factorio.tar.gz # 请使用正确的文件名称,包含游戏版本号
$sudo tar -xJf /tmp/factorio.tar.xz # 如果下载的是.tar.xz文件,请使用此命令(0.15.x 版本)
</pre>
 
* 在Linux系统中创建新用户,并为其分配 factorio 目录的所有权(请勿以root用户身份运行,可能需要sudo权限)
 
<pre>
$useradd factorio
$chown -R factorio:factorio /opt/factorio
</pre>
 
* 尝试运行服务端二进制可执行文件
<pre>
$su factorio
$/opt/factorio/bin/x64/factorio --start-server savename
</pre>
 
如果运行失败,并提示无法找到或打开 savename.zip 文件,则游戏实际上就安装成功了。此时玩家只需上传一个自己的存档文件,并将其保存在 /opt/factorio/saves 目录中,或者使用<code>--create ./saves/newgame.zip</code>命令创建一个存档文件即可。
 
=== 如何在匹配服务器中列出服务器托管的游戏 ===
 
要把游戏发布到匹配的服务器,除了保存文件的位置以外,还需一些额外的信息。这些信息需要在''服务器配置文件''中设置。
 
要创建服务器配置文件,请查看游戏{{L|Application directory}}中的 data/server-settings.example.json 示例文件。建议复制该文件后进行编辑。
 
以下值可以更改:
 
; Name: 服务器在游戏大厅中显示的名称。
; Description: 服务器简要说明,最多包含5000个字符,参见[https://factorio.com/blog/post/fff-304 多人服务器描述]。
; Tags: 游戏标签列表。
; Max Players: 同时连接到服务器的最大玩家数量。如果不想限制此数量,只需将 max_players 设置为0即可。
 
* 服务器可见性:可在公开(Public)、局域网(LAN)和隐藏(Hidden)三者中选择。
** 公开:服务器将在互联网大厅列表中展示。需要填写用户凭证。
** 局域网:服务器不在互联网大厅列表中展示,但可通过“局域网游戏”选项访问。
** 隐藏:客户端必须使用服务器的IP地址进行连接。
* 用户凭证,使用用户名和密码,或身份验证令牌(可在官方网站或player-data.json中找到):如果要公开服务器,则需要填写用户凭证。否则可以留空。
** 出于安全考虑,建议使用身份验证令牌,因为此文档以纯文本形式存储。应该指出,身份验证令牌也是敏感信息,因此玩家最好 将其保密。
* 服务器密码
** 字段名称为 game_password
* 是否验证用户身份
 
(在0.14版本中还有其他值。)
 
=== 技术细节 ===
 
开发团队在周五工厂报中公布了多人游戏的一些技术细节:
 
* [http://www.factorio.com/blog/post/fff-76 同步架构]
* [http://www.factorio.com/blog/post/fff-99 客户端 - 服务器连接]
* [http://www.factorio.com/blog/post/fff-143 NAT穿透](在0.13版本引入)
 
=== DNS SRV 记录 ===
异星工厂从1.1.67版本起支持[https://www.cloudflare.com/learning/dns/dns-records/dns-srv-record/ DNS SRV记录]。
 
此服务使玩家可以在单台主机上更容易地运行多个游戏服务器,同时允许用户通过不同的子域名连接服务器,而非必须输入端口号。
 
服务名称为<code>_factorio</code>,该服务仅支持<code>_udp</code>协议。
 
'''示例:'''
 
<pre>
Domain: subdomain.domain.tld
IP:    192.0.2.2
Port:  10002
 
DNS records:
subdomain.domain.tld    IN A  192.0.2.2
_factorio._udp.subomain.domain.tld IN SRV 0 0 10002 subomain.domain.tld.
</pre>
 
此时,连接到<code>subdomain.domain.tld</code>的客户端实际上会连接到<code>subdomain.domain.tld:10002</code>
 
'''Cloud Flare配置示例:'''
 
[[File:Screenshot of SRV record settings Cloudflare dashboard.png]]
 
'''日志条目:'''
 
* 游戏将在找到指定域的SRV记录时记录"DNS SRV lookup returned [...]"(DNS SRV查找返回[...])信息
* 当没有找到SRV记录时,游戏将记录"DNS SRV lookup for [domain] didn't return any usable records"(DNS SRV查找[域名]未返回可用记录)的详细日志。
 
=== 其它 ===
 
* 开启{{L|Console}}命令的快捷键也用于在多人游戏中发起聊天。要执行命令而不是发起聊天,需要在命令前输入/c。执行的命令对所有玩家都是可见的。此外,多人游戏必须启用“允许命令工作”设置。
* 设置玩家角色的颜色:
<pre>
/color r g b
</pre>
 
r、g和b分别代表红色,绿色和蓝色(输入0和1之间的数字,可使用[https://www.w3schools.com/colors/colors_converter.asp 此网站]将颜色转换为RGB数值)。
 
* 要给自己赋予管理员权限,玩家需要在 factorio-current.log 所在的目录中创建 server-adminlist.json 文件。该文件应当包含所有管理员的用户名,例如:<code>[ "user1", "user2" ]</code>。
 
此文件将在管理员通过控制台提升玩家权限时创建。
 
== 加入多人游戏 ==
 
从0.13版本开始,端口转发不再是玩家加入多人游戏的唯一方式。现在玩家还可以通过Steam服务加入多人游戏,或者直接加入已经通过端口转发的主机。
 
玩家可以通过多种方式加入多人游戏:
 
* 直接输入公开服务器的IP地址和端口。
* 在互联网大厅中选择活动服务器。
* 通过Steam服务加入游戏。
* 通过局域网进行联机游戏。
 
=== IP地址和端口 ===
 
要使用IP地址加入多人游戏,玩家需要知道有效的服务器公网IP。可以通过社交媒体,网站或口耳相传来获取这些信息。知道IP和端口后,只需进入开始游戏 ->多人游戏 ->连接服务器,并提供所需的IP以及端口即可加入游戏。
 
如果服务器设置正确并允许公共连接,玩家应该可以正常加入游戏。
 
=== 服务器列表 ===
 
异星工厂的开发者维护着一个包含所有公开服务器的列表,这些服务器允许玩家通过互联网大厅直接加入。大多数服务器需要密码,但同时也有许多完全公开的服务器可以无密码连接。要通过服务器列表加入多人游戏,请转到开始游戏 ->多人游戏 ->互联网游戏。如果需要,玩家需要提供官网账号名,然后会显示公共服务器列表。只需选择一个并加入就可以开始游戏。
 
=== Steam服务 ===
 
Steam提供了一个“游戏邀请”系统,使用它即可加入多人游戏。玩家可以在Steam文档中找到更多关于如何使用此功能的信息。这是普通玩家与朋友一起进行多人游戏的最简单(可能也是最佳)方式,因为Steam会替玩家处理所有问题。
 
=== 局域网游戏 ===
 
如果玩家与朋友使用相同的互联网连接(例如在同一幢建筑或同一个学校中),就可以通过局域网进行游戏。只需转到开始游戏 - >多人游戏 - >局域网游戏即可。
 
=== 使用NAT穿透连接服务器 ===
 
异星工厂要求服务器(在客户端 - 服务器模式下)具有公网IP地址,或者所有玩家都在同一局域网内。如果玩家的网络位于NAT设备后方,就必须设置端口转发(请参阅[[#创建多人游戏|上文]]的端口号)或使用虚拟局域网软件,例如全网通(Evolve)或蛤蟆吃(Hamachi)。
 
多人游戏将以客户端 - 服务器模式启动(也被称为[http://www.factorio.com/blog/post/fff-99 多人转发]模式)。在此模式下,所有客户端都会将数据包发送到服务器,然后服务器再将数据包转发给其他客户端。这种模式的优点是同时允许局域网和公网中的玩家加入游戏;缺点是由于数据包必须经过额外的转发(通过服务器),因此可能造成些许延迟。
 
* [https://forums.factorio.com/viewtopic.php?f=53&t=6393 不登录路由器转发端口](官方社区,英文)
* [https://forums.factorio.com/viewtopic.php?f=53&t=7714 全网通连接指南](官方社区,英文)
* [http://steamcommunity.com/sharedfiles/filedetails/?id=653628496 蛤蟆吃连接指南](Steam社区,英文)
 
== 对战模式 ==
 
在对战模式中,玩家可以选择不同的阵营。每个阵营可以由一名(自由对战)或多名(团队合作)玩家组成。每个阵营都有各自独立的科研进度。此外,每个阵营的{{L|Military units and structures}}都会将其它阵营的玩家视为敌人并自动开火,除非进行了停火设置。注意,根据场景的不同,停火可能是单方面的——将其它阵营设置为停火并不能保证他们也将己方阵营设置为停火。
 
要创建一个多人对战游戏,玩家可以在“开始游戏”界面中选择“对战模式”场景,或下载一个支持对战模式的自定义场景。
 
下载对战场景后,玩家需要将其移动到应用程序目录中,并使用该场景创建多人游戏。
 
# 下载游戏场景文件,并将场景文件夹移动到[[Application directory/zh#用户数据目录|用户数据目录]]下的 ''/scenarios'' 目录中。
# 启动游戏
# 点击 ''开始游戏''
# 点击 ''多人游戏''
# 点击 ''场景''
# 选择需要的对战场景,并点击 ''创建''
# 选择延迟和其它设置,然后点击 ''开始游戏''
# 其它玩家现在可以加入游戏
 
=== 阵营 ===
 
可以通过控制台手动创建阵营。这允许使用任意地图/场景进行多人对战游戏。由于玩家只能通过控制台命令来进行停火设置,这可能不如专门的对战场景方便。
 
每个阵营都有独立的科技进度,不同阵营可能会相互攻击。
 
创建和设置阵营的控制台命令如下:
 
<pre>
game.create_force("Name")
--创建名称为"Name"的阵营
 
game.players["Player_name"].force = game.forces["Name"]
--将名称为"Player_name"的玩家划分到名称为"Name"的阵营
 
game.forces["Name"].set_cease_fire("Other_force_name", true)
--为阵营设置停火设置为"other force"(其它阵营)
 
game.forces["Name"].set_spawn_position({x = 10, y = 20}, game.surfaces[1])
--设定阵营出生点
 
game.print(#game.forces)
--输出阵营的玩家数目
 
for name, force in pairs (game.forces) do
  game.print(name)
end
--输出所有阵营的名称
</pre>
 
一个阵营的玩家/实体与非友好阵营的实体的互动是受到限制的,但某些互动仍然可以进行:
 
;手动拾取
: 玩家可以拾取敌方阵营的传送带上的物品。注意:这种拾取不是自动的,机械臂不能从敌方传送带上拾取物品。
;传送带连接
: 传送带的连接是不分阵营的。因此玩家可以将己方传送带连接到敌方传送带上,从中获取物品。或者也可以将物品(使用机械臂)放置到敌方阵营的传送带上。
;流体连接
: 管道(以及储液罐、管道泵等)的连接是不分阵营的,因此玩家可使用管道泵将敌方储液罐中的流体送入己方储液罐中。反之亦然。
;电力汲取
: 玩家可以在敌方电线杆的覆盖范围内建造电线杆以汲取敌方电力。在敌方电线杆旁边放置的电线杆会自动接入敌方电网,但玩家无法手动连接或断开连接。
 
== 更新概述 ==
 
由于地图上可能存在大量活动,游戏引擎使用了[https://www.factorio.com/blog/post/fff-76 锁步架构]。所有客户端都会进行整个游戏世界的完整模拟,只有玩家活动在网络中传输。
 
多人游戏在0.11.0版本加入游戏。当时唯一可用的连接方式是点对点模式,这意味着每个玩家都需要直接连接服务器并与其它所有玩家通信。在0.12.4版本时引入了客户端-服务器通讯模式,其中服务器(无论是专用服务器还是托管服务器)都会将数据转发给所有对等节点,这意味着玩家之间不再需要直接连接。截至0.13版本,P2P连接已被完全移除。
 
在0.12.0版本中,游戏引入了“延迟隐藏”机制,游戏将在本地模拟玩家的部分操作,使一些常见交互(例如玩家角色的移动)更加流畅。并非所有动作都采用了延迟隐藏机制——最明显的是,驾驶汽车或火车,以及射击不采用延迟隐藏机制。
 
{{C|Main}}

Latest revision as of 05:13, 8 March 2025

虽然异星工厂是一款单机游戏,但它也支持多人游戏,允许玩家们在游戏中合作互助,或在对战模式中相互竞争。本页面会介绍如何创建多人游戏、如何加入多人游戏,以及管理其他用户和服务器时的需要的管理员功能。默认情况下,玩家们可以在标准模式游戏中进行合作,以获取游戏胜利。更多场景(包括对战地图)可以在地图和场景社区下载。

创建多人游戏

玩家可以加入多人游戏,或以本机为主机创建多人游戏,亦或由专用服务器托管。多人游戏可以在局域网或整个互联网范围内公开,允许其它玩家加入游戏。

要创建多人游戏,可以在主菜单中选择“多人游戏”,然后选择以下选项之一来创建游戏:

  • 搭建服务器-创建游戏:选择所需场景,地图生成器设置,并设置服务器可见性。服务器可见性决定它被哪些玩家搜索到。玩家可以进行如下设置:
    • 互联网:游戏将在互联网大厅列表中列出。
    • Steam:启用或禁用Steam的“加入游戏”功能。
    • 局域网:你的游戏将在局域网大厅列表中列出。
  • 搭建服务器-载入存档:从列表中选择一个存档,并设置服务器可见性。

要加入多人游戏,可以选择以下选项之一:

  • 互联网大厅:根据玩家要求搜索服务器并加入游戏。
  • 局域网大厅:加入本地局域网上的服务器。
  • 服务器直连:通过服务器的IP地址加入服务器。该选项可以加入未设置任何可见性的服务器。

注意与提示:

  • 服务器中所有玩家的游戏版本和模组必须完全一致。
  • 服务器使用端口34197。端口可以在配置文件中更改。
  • 异星工厂仅支持UDP协议。请确保路由器正确配置。(游戏基于UPD构建自己的“可靠通信层”,以解决丢包和重组问题。)
    • 确保路由器转发端口正确配置,端口为34197。
    • 确保路由器不会对34197端口发送的数据包进行端口随机化(一些路由器默认会执行此操作)。玩家需要进行额外设置以避免此类情况发生。
    • 确保防火墙或杀毒软件不会阻止UDP数据包传输。
  • 服务器联机人数的理论上限是65535,然而,实际的上限要低得多。一些热门主播已经成功尝试过一百人以上同时在线。

专用/无头服务器

专用或无头(Headless,指不配备键鼠、显示器等外设,仅通过网络进行操作的设备)服务器可以通过--start-server命令行选项启动。玩家可以运行factorio --help命令以获取游戏支持的所有命令行参数的列表。任何版本的游戏都可以在无头模式下运行,尽管Linux服务器可能更倾向于使用无头版本(不含图像资源)的游戏以减少下载量。无头版本的游戏可在官方下载页面下载。

在无头模式下:

  • 图形界面不会初始化。(启动速度更快,内存使用量更少,适用于无头服务器)
  • 在键入命令后,游戏立即启动,并按照给出的参数(存档名)加载存档。
  • 服务器在游戏中没有对应角色。
  • 在没有玩家连接的情况下,游戏会暂停。(尽管可以使用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配置文件可用于更改服务器和地图设置:

  • map-gen-settings:用于设置地图生成器使用的参数,例如地图的宽度和高度,资源的分布情况和规模大小等。
  • map-settings:设置污染扩散、敌人扩张进化因子等参数。
  • server-setting:将多行命令合并到单个文件中。

每个参数的示例文件都保存在其data子目录中,也可从官方的Github项目上找到。

创建新地图时,--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

服务器在启动时需要指定 server-settings.json 文件的位置。默认情况下,该文件位于游戏的data文件夹中。例如,要使用最近保存的地图启动游戏,可以运行:

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

在Windows系统中,使用bat批处理命令启动服务器会很有用,其内容如下:

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

请参阅命令行参数以获取更多信息。

创建Linux服务器

注意:异星工厂现在需要2.31版本的glibc运行库,但 CentOS/RHEL 7仅附带2.17版本的运行库,因此本指南在没有手动编译glibc 2.31的情况下将不再适用。

以下内容已在全新安装的CentOS 7和RHEL 7环境下进行了验证,同时在大多数Linux发行版中几乎不需要进行任何更改。

本指南假设您将在 /opt/factorio 目录下安装无头服务器,玩家可以根据自己的设置改变安装路径。此外建议玩家以单独的用户身份运行游戏服务器,以增强设置的安全性。

请注意,有两种不同的Linux游戏版本适用于无头服务器。首先是标准的Linux版本,包含完整的游戏内容。另一种是特殊的无头版本。无头版本不包含与服务器运行无关的其它文件,例如图像和声音资源;它也不与服务器上不存在的运行库链接,如Xlib、libGL或libasound。如果在第三方托管服务器中运行,应选择此选项。

本指南不涉及防火墙/端口转发,因为这可以通过Linux系统以多种方式进行(玩家需要掌握在自己的Linux系统中以管理员身份执行这些操作的方法)。

安装游戏

  • 下载游戏安装包(完整版或无头版均可),并将下载的 tar.gz 或 tar.xz 文件包上传到服务器的 /tmp 目录中。
  • 将 /tmp 目录中的文件包解压到 /opt/factorio 目录中:
$cd /opt/

$sudo tar -xzf /tmp/factorio.tar.gz # 请使用正确的文件名称,包含游戏版本号
$sudo tar -xJf /tmp/factorio.tar.xz # 如果下载的是.tar.xz文件,请使用此命令(0.15.x 版本)
  • 在Linux系统中创建新用户,并为其分配 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命令创建一个存档文件即可。

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

要把游戏发布到匹配的服务器,除了保存文件的位置以外,还需一些额外的信息。这些信息需要在服务器配置文件中设置。

要创建服务器配置文件,请查看游戏应用程序目录中的 data/server-settings.example.json 示例文件。建议复制该文件后进行编辑。

以下值可以更改:

Name
服务器在游戏大厅中显示的名称。
Description
服务器简要说明,最多包含5000个字符,参见多人服务器描述
Tags
游戏标签列表。
Max Players
同时连接到服务器的最大玩家数量。如果不想限制此数量,只需将 max_players 设置为0即可。
  • 服务器可见性:可在公开(Public)、局域网(LAN)和隐藏(Hidden)三者中选择。
    • 公开:服务器将在互联网大厅列表中展示。需要填写用户凭证。
    • 局域网:服务器不在互联网大厅列表中展示,但可通过“局域网游戏”选项访问。
    • 隐藏:客户端必须使用服务器的IP地址进行连接。
  • 用户凭证,使用用户名和密码,或身份验证令牌(可在官方网站或player-data.json中找到):如果要公开服务器,则需要填写用户凭证。否则可以留空。
    • 出于安全考虑,建议使用身份验证令牌,因为此文档以纯文本形式存储。应该指出,身份验证令牌也是敏感信息,因此玩家最好 将其保密。
  • 服务器密码
    • 字段名称为 game_password
  • 是否验证用户身份

(在0.14版本中还有其他值。)

技术细节

开发团队在周五工厂报中公布了多人游戏的一些技术细节:

DNS SRV 记录

异星工厂从1.1.67版本起支持DNS SRV记录

此服务使玩家可以在单台主机上更容易地运行多个游戏服务器,同时允许用户通过不同的子域名连接服务器,而非必须输入端口号。

服务名称为_factorio,该服务仅支持_udp协议。

示例:

Domain: subdomain.domain.tld
IP:     192.0.2.2
Port:   10002

DNS records:
subdomain.domain.tld     IN A   192.0.2.2 
_factorio._udp.subomain.domain.tld IN SRV 0 0 10002 subomain.domain.tld.

此时,连接到subdomain.domain.tld的客户端实际上会连接到subdomain.domain.tld:10002

Cloud Flare配置示例:

日志条目:

  • 游戏将在找到指定域的SRV记录时记录"DNS SRV lookup returned [...]"(DNS SRV查找返回[...])信息
  • 当没有找到SRV记录时,游戏将记录"DNS SRV lookup for [domain] didn't return any usable records"(DNS SRV查找[域名]未返回可用记录)的详细日志。

其它

  • 开启控制台命令的快捷键也用于在多人游戏中发起聊天。要执行命令而不是发起聊天,需要在命令前输入/c。执行的命令对所有玩家都是可见的。此外,多人游戏必须启用“允许命令工作”设置。
  • 设置玩家角色的颜色:
/color r g b

r、g和b分别代表红色,绿色和蓝色(输入0和1之间的数字,可使用此网站将颜色转换为RGB数值)。

  • 要给自己赋予管理员权限,玩家需要在 factorio-current.log 所在的目录中创建 server-adminlist.json 文件。该文件应当包含所有管理员的用户名,例如:[ "user1", "user2" ]

此文件将在管理员通过控制台提升玩家权限时创建。

加入多人游戏

从0.13版本开始,端口转发不再是玩家加入多人游戏的唯一方式。现在玩家还可以通过Steam服务加入多人游戏,或者直接加入已经通过端口转发的主机。

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

  • 直接输入公开服务器的IP地址和端口。
  • 在互联网大厅中选择活动服务器。
  • 通过Steam服务加入游戏。
  • 通过局域网进行联机游戏。

IP地址和端口

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

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

服务器列表

异星工厂的开发者维护着一个包含所有公开服务器的列表,这些服务器允许玩家通过互联网大厅直接加入。大多数服务器需要密码,但同时也有许多完全公开的服务器可以无密码连接。要通过服务器列表加入多人游戏,请转到开始游戏 ->多人游戏 ->互联网游戏。如果需要,玩家需要提供官网账号名,然后会显示公共服务器列表。只需选择一个并加入就可以开始游戏。

Steam服务

Steam提供了一个“游戏邀请”系统,使用它即可加入多人游戏。玩家可以在Steam文档中找到更多关于如何使用此功能的信息。这是普通玩家与朋友一起进行多人游戏的最简单(可能也是最佳)方式,因为Steam会替玩家处理所有问题。

局域网游戏

如果玩家与朋友使用相同的互联网连接(例如在同一幢建筑或同一个学校中),就可以通过局域网进行游戏。只需转到开始游戏 - >多人游戏 - >局域网游戏即可。

使用NAT穿透连接服务器

异星工厂要求服务器(在客户端 - 服务器模式下)具有公网IP地址,或者所有玩家都在同一局域网内。如果玩家的网络位于NAT设备后方,就必须设置端口转发(请参阅上文的端口号)或使用虚拟局域网软件,例如全网通(Evolve)或蛤蟆吃(Hamachi)。

多人游戏将以客户端 - 服务器模式启动(也被称为多人转发模式)。在此模式下,所有客户端都会将数据包发送到服务器,然后服务器再将数据包转发给其他客户端。这种模式的优点是同时允许局域网和公网中的玩家加入游戏;缺点是由于数据包必须经过额外的转发(通过服务器),因此可能造成些许延迟。

对战模式

在对战模式中,玩家可以选择不同的阵营。每个阵营可以由一名(自由对战)或多名(团队合作)玩家组成。每个阵营都有各自独立的科研进度。此外,每个阵营的军事单位和建筑都会将其它阵营的玩家视为敌人并自动开火,除非进行了停火设置。注意,根据场景的不同,停火可能是单方面的——将其它阵营设置为停火并不能保证他们也将己方阵营设置为停火。

要创建一个多人对战游戏,玩家可以在“开始游戏”界面中选择“对战模式”场景,或下载一个支持对战模式的自定义场景。

下载对战场景后,玩家需要将其移动到应用程序目录中,并使用该场景创建多人游戏。

  1. 下载游戏场景文件,并将场景文件夹移动到用户数据目录下的 /scenarios 目录中。
  2. 启动游戏
  3. 点击 开始游戏
  4. 点击 多人游戏
  5. 点击 场景
  6. 选择需要的对战场景,并点击 创建
  7. 选择延迟和其它设置,然后点击 开始游戏
  8. 其它玩家现在可以加入游戏

阵营

可以通过控制台手动创建阵营。这允许使用任意地图/场景进行多人对战游戏。由于玩家只能通过控制台命令来进行停火设置,这可能不如专门的对战场景方便。

每个阵营都有独立的科技进度,不同阵营可能会相互攻击。

创建和设置阵营的控制台命令如下:

game.create_force("Name")
--创建名称为"Name"的阵营

game.players["Player_name"].force = game.forces["Name"]
--将名称为"Player_name"的玩家划分到名称为"Name"的阵营

game.forces["Name"].set_cease_fire("Other_force_name", true)
--为阵营设置停火设置为"other force"(其它阵营)

game.forces["Name"].set_spawn_position({x = 10, y = 20}, game.surfaces[1])
--设定阵营出生点

game.print(#game.forces)
--输出阵营的玩家数目

for name, force in pairs (game.forces) do
   game.print(name)
end
--输出所有阵营的名称

一个阵营的玩家/实体与非友好阵营的实体的互动是受到限制的,但某些互动仍然可以进行:

手动拾取
玩家可以拾取敌方阵营的传送带上的物品。注意:这种拾取不是自动的,机械臂不能从敌方传送带上拾取物品。
传送带连接
传送带的连接是不分阵营的。因此玩家可以将己方传送带连接到敌方传送带上,从中获取物品。或者也可以将物品(使用机械臂)放置到敌方阵营的传送带上。
流体连接
管道(以及储液罐、管道泵等)的连接是不分阵营的,因此玩家可使用管道泵将敌方储液罐中的流体送入己方储液罐中。反之亦然。
电力汲取
玩家可以在敌方电线杆的覆盖范围内建造电线杆以汲取敌方电力。在敌方电线杆旁边放置的电线杆会自动接入敌方电网,但玩家无法手动连接或断开连接。

更新概述

由于地图上可能存在大量活动,游戏引擎使用了锁步架构。所有客户端都会进行整个游戏世界的完整模拟,只有玩家活动在网络中传输。

多人游戏在0.11.0版本加入游戏。当时唯一可用的连接方式是点对点模式,这意味着每个玩家都需要直接连接服务器并与其它所有玩家通信。在0.12.4版本时引入了客户端-服务器通讯模式,其中服务器(无论是专用服务器还是托管服务器)都会将数据转发给所有对等节点,这意味着玩家之间不再需要直接连接。截至0.13版本,P2P连接已被完全移除。

在0.12.0版本中,游戏引入了“延迟隐藏”机制,游戏将在本地模拟玩家的部分操作,使一些常见交互(例如玩家角色的移动)更加流畅。并非所有动作都采用了延迟隐藏机制——最明显的是,驾驶汽车或火车,以及射击不采用延迟隐藏机制。