多人游戏
除了单人战役和剧本外,《异星工厂》还支持多人游戏。默认情况下,多人游戏运用CO-OP 自定义剧本,玩家共同发射卫星火箭进入太空。其他剧本,包括PvP地图,可从地图和剧本论坛下载。
当前,加入多人游戏,要求所有的玩家都在同一个局域网或主机有一个公共IP地址。在下个版本中(0.31),将支持在公共游戏大厅定位游戏,同时 NAT穿透将不使用公共IP地址,与服务器进行无缝连接。
目录
历史
由于在地图上会有庞大的潜在活动,游戏引擎使用lock step architecture。游戏中的所有的实例都是对世界的模拟,只有玩家的行动通过网络传输。
在异星工厂0.11.0引入多人游戏中。每个玩家只能通过点对点的模式与其他玩家进行直接交流。在0.12.4版本中,引入客户服务器模式,服务器(无论是专用的还是某个玩家发起的游戏)可以向所有玩家发送消息,只意味着所有玩家间没有必要直接进行交流。客户服务器模式只能在0.13版本中使用。
在0.12.0版本, “延迟隐藏”机制会成为游戏的一大特色。通过模仿玩家的一些特定的行为,是的游戏中的一些经常性的交互(比如角色的移动)变得更加流畅。延迟隐藏是默认设置,可以通过选项→其他→启用多人延迟隐藏进行关闭。并不是所有动作都能够使用延迟隐藏,例如驾驶汽车和火车以及射击。
创建多人游戏
在游戏菜单中选择多人游戏选项开始多人游戏,建立游戏的玩家即为房主,房主向其他玩家提供自己的IP地址,其余玩家可以通过这个IP地址加入到房主的游戏中。
帮助与提示:
- 玩家需要安装相同版本的游戏和MOD。
- 异星工厂使用34197端口,该端口可通过config file进行修改。
- 异星工厂只使用UDP,确保正确的设置你的路由器的端口转发。 (异星工厂在UDP上建立自己“可靠的传输层”,以此来解决数据包丢失和乱序问题。)
- 确保没有防火墙或其他杀毒软件拦截UDP数据包。
- 查看下一节以正确配置你的网络。
- 玩家数量上限为65535。
语音聊天
- 推荐玩家使用语音聊天(团队语音,网络通话), 因为玩家需要大量的沟通,例如建立联系,建造,抵御攻击等等。团队语音可在多人论坛下载。
寻找其他玩家
- 使用论坛中的多人游戏面板。
- 许多玩家使用Evolve等其他软件与其他玩家联络,创建虚拟局域网对玩家也是有好处的,见下面的软件。
- 也可以使用Steam寻找其他玩家。
- 使用具有搜索选项的外部服务器浏览器。
- 推荐你的朋友购买异星工厂,一起游戏。
连接到一个NAT后的服务器
异星工厂需要服务器(客户服务器模式)或者所有玩家(点对点的模式)有一个公共IP地址,或者所有玩家都在同一个局域网内。如果你在NAT之后,你必须设置设置端口转发 (见上文端口码 )或者使用虚拟局域网软件例如Hamachi或者Evolve。
多人游戏默认在客户服务器模式 (多人转发模式)下启动。在这个模式下,所有的客户端将他们的网络流量到发送到服务器,同时服务器将其转发到其他客户端,这样对于局域网内外的玩家都有好处,但其不足在于会出现数据延迟,因为数据包要通过服务器进行额外的传送。多人游戏也可以在点对点模式下启动,在开始游戏时,房主通过点击使用点对点通信盒子禁用转发行为。不推荐使用点对点模式,在0.13版本中该模式会被移除。
游戏类型
合作模式
在合作模式中,所有的玩家都属于同一个势力,玩家共享研究进程,可以接触其他玩家储存在建筑中的物品,玩家不会遭到其他玩家建立的防御结构的攻击。
启动合作模式:
- 启动异星工厂
- 点击 游戏
- 点击 多人游戏
- 点击 新游戏
- 选择地图编辑器。点击生成地图
- 选择频率和其他设置,点击游戏
- 现在其他玩家可加入游戏
PvP
在PvP模式中,玩机可以选择不同的势力,每个势力都有不同数量的玩家。每个势力都有自己独立的研究进程。此外,每个势力的防御炮塔和战斗机器人 会将其他玩家视为敌人进行攻击。注意,基于剧本,停火指令可能是单向的,即使玩家对敌方设置停火指令,敌方仍然可对玩家开火。
启动PvP游戏,玩家要下载PvP兼容剧情 (或者使用命令控制台向不同势力手动分配玩家数量,见下文)。PvP剧情可在地图和剧情论坛下载下载。
PvP剧情示例:
下载PvP剧情之后,玩家以自定义单人剧情开始游戏,之后保存,然后作为多人游戏进行加载,否则,异星工厂将默认为合作模式启动游戏。详细步骤:
- 下载剧情,将剧情目录装入用户数据目录中的“剧情”目录中。
- 启动游戏
- 点击 游戏
- 点击 自定义剧情
- 选择PvP剧情中你想进行的用户剧情,再点击创建
- (取决于剧情,玩家可能需要进行生成地图的相关设置。点击生成地图)
- 点击退出并点击保存
- 命名并点击保存
- 点击 退出游戏
- 点击 游戏
- 点击 多人游戏
- 点击 载入游戏
- 选择之前保存的游戏并点击载入
- 选择频率和其他设定,点击游戏
- 现在其他玩家可加入游戏
势力
玩家通过控制选项可以自由划分势力。,在PvP模式中,任何地图和剧情都是适用的。这或许没有使用预制的PvP剧情方便,因为除了控制按钮,玩家没法开启或关闭停火命令。
每个势力都有各自的研究进程,各势力之间可以相互进攻。
设置和控制势力的控制命令如下:
- game.create_force('force 1')
- 创造势力并命名为“势力1”。默认势力位“玩家”,“敌人”和“中立单位”。
- “玩家”默认为玩家的势力。
- “敌人”为外星势力。
- “中立单位”是特殊的“”:他们不会进行攻击并且可以被其他势力所用。(例如,中立的存储罐可被任何势力所用。)
- game.get_player('friend 1').force = game.forces['force 1']
- 改变“友军1”至“势力1”
- game.forces['force 1'].set_cease_fire('force 2', true)
- 设置“势力1”对“势力2”停火命令。反向操作必须单独完成。
- game.forces['force 1'].set_spawn_position({x=10, y=20}, game.get_surface(1))
- 对一个特定的势力设置产生/重生点x=10,y=20。默认情况下,所有势力的玩家都以{x = 0, y = 0}开始产生。
- for v in pairs(game.forces) do game.local_player.print(v) end
- 所有当前势力列表
Dedicated/Headless server
在异星工厂0.12.0版本之前,专用 (或者无终端)服务器可以通过开始--服务器命令选项启动。玩家可以运行异星工厂—帮助得到异星工厂所有的命令行参数列表。
在无终端模式下:
- 图像无需初始化(在无终端服务器上启动更快,占用内存更少,运行充分。)
- 游戏立即启动,将保存的游戏当做参数命令进行加载。
- 服务器在游戏中没有影响。
- 无玩家连接时游戏暂停。(可以使用无自动暂停选项进行覆盖)
- 保存游戏并退出 (自动保存亦可)
注意在0.12, 0.13和0.14版本之间在启动服务器(和其他)怎样解释给定的参数方面有轻微的改变。在0.12版本中预期--启动服务器之后要保存名称,可在保存目录中发现。0.13版本替代为预期--启动服务器之后要保存文件路径。例如,如果你保存factorio --start-server foo在0.12版本中,在0.13中则需使用factorio --start-server saves/foo.zip
在启动服务器之前,你需要创建你的保存文件,因为专用服务器需要一个保存文件。这可以使用创建命令行参数来进行。例如:
./bin/x64/factorio --create ./saves/my-save.zip # This creates a new save, as if by clicking the New Game button in the GUI ./bin/x64/factorio --start-server ./saves/my-save.zip # This starts a server that will host the file created on the previous line
在0.13版本中,可以使用非默认的地图生成器创建地图,创造一个所需的包含地图设定的文件 (以the file data/map-gen-settings.example.json 为例),运行:
factorio --create saves/my-save.zip --map-gen-settings path-to-file-with-desired-map-generation-settings.json
在0.14.12版本中,异星工厂移动了一些命令行选项到the server-settings.json file。启动异星工厂需要指定the server-settings.json file的位置。默认在异星工厂数据文件夹,例如,使用最新保存的地图启动异星工厂,你将运行:
./factorio --start-server-load-latest --server-settings ./data/server-settings.json
下面是在Windows和Linux上启动专用服务器的一些基本指令。
Windows
- 找到Factorio.exe 文件 (Probably 'C:\Program Files\Factorio\bin\x64\')
- 创建一个文本文档并写入 'Factorio.exe --start-server YOURSAVEGAME.zip'
- 如果没有这样做,使用your savegame nam替换YOURSAVEGAME。
- 作为server.bat保存文件。在保存类型中选择全部文件
- 使用server.bat启动你的服务器。
- 控制台日志将显示在窗口中。
- 关闭服务器,选择控制台窗口,按Control+C。如果不按Control+C,将不会进行保存。
- 端口转发: 你会在网上找到你专用路由器的详细说明
Linux
详细指导已在CentOS 7和RHEL 7的安装中阐述过,适用于多数微小或者无变化的情况。
指导假设你在/opt/factorio下安装无终端服务器,根据你的设置调整路径。为了强化玩家的设置安全,我们建议玩家使用一个单独的用户运行异星工厂。
注意,Linux有两种不同的软件包可以用于运行无终端服务器。第一种是常用的Linux下载,包含完整的游戏。另一个是特殊的无终端软件包。无终端软件包不包含任何与纯粹服务器无关的文件,比如图像,声音,也不与函数库相连,不会出现在服务器上,例如Xlib,libGL或者libasound。
该指南不处理防火墙/端口转发,以为在Linux上有好多方式可以解决。(作为Linux管理员一定要阅读这是如何在你特定的分布工作的 )
用一个更好的方式通过Linux 异星工厂初始化脚本启动/暂停无终端服务器。该脚本只能保证在你启动服务器时使用最近的存档(即使是自动保存),同时你也可以做一些其他的设置,比如自动保存频率和延迟设定。与Linux 异星工厂更新脚本相结合可以简化服务器的更新。
- 下载可选择的软件包,完整游戏或者无终端软件包。将linux tar.gz p软件包上传至你的服务器/tmp
- 从 /tmp to /opt/factorio提取软件包
#cd /opt/ #tar -xzf /tmp/factorio.tar.gz # Use the correct filename. It includes the factorio version number
- 将新用户添加到您的系统,并分配异星工厂目录列表(不要再根用户中运行。)
#useradd factorio #chown -R factorio:factorio /opt/factorio
- 尝试二进制。
#su factorio #/opt/factorio/bin/x64/factorio --start-server savename
只要不显示无法找到/open the savename.zip,就可以上传你电脑中的存档并将它加入 /opt/factorio/saves directory, 或使用 --create ./saves/newgame.zip。
如何在匹配的服务器上列出服务器托管的游戏
为了能够发行匹配服务器的游戏,异星工厂需要的不仅仅是保存文件的位置,这些信息在包含在server settings file中。
创建一个服务器设置文件,查看位于异星工厂的应用程序目录中data/server-settings.example.json里的示例文件,推荐的方法是复制这个示例文件然后编辑这个复制的文件。
下面的数据可以被改变:
- 名称: 服务器的名称,将列在服务器浏览器上。
- 描述: 关于你的服务器的简介描述。
- 标签: 游戏标签列表。
- 玩家上限: 可以限制连接同一游戏的玩家的数量。如果不想做限制。设置玩家上限为0。
- 服务器浏览器可见性: 可以使公开,局域网或者隐藏。
- 公开: 服务器出现在公共服务器列表,需要填写下面的登录信息。
- 局域网: 服务器不会出现在公共服务器列表, 但可通过局域网对战案件搜索到。
- 隐藏: 客户端必须使用服务器的IP地址连接。
- 用户信息使用用户名,密码或者认证令牌:如果想建立公共服务器这些都是必要的,否则,它们都是空置的。
- 出于安全因素,由于作为明文存储,所以建议使用认证令牌。认证令牌属于敏感信息,玩家需做好保密工作。
- 服务器密码
- 字段名是游戏密码。
- 是否验证用户身份
(在0.14版本中还有其他的数据)
技术实现细节
关于多人游戏的一些技术细节的已经由开发团队发布在Friday Facts博客上:
更多教程
- How to set up Factorio server with cookbook
- How To set up a Factorio Multiplayer Server | Guide | Tutorial, by Teaspoon
- Tips to connect in multiplayer, by Nondre
Miscellaneous Tips
- 控制台命令可以用于多人聊天。要执行一个命令而不是聊天,你需要在命令之前输入“/C”。执行的命令对所有玩家都是可见的。此外,多人游戏与命令工作的命令许可一起开始。
- 使用命令设置玩家颜色。
/c game.get_player("x").color = {r=0.7, g=0.5, b=0.1, a=0.9}
X是玩家的名字。r,g和b代表红色,绿色和蓝色。(数值在0~1之间, 最右列转换为http://prideout.net/archive/colors.php rgb的数字)。a是阿尔法通道也称为基础图像透明度,对单个玩家来说替换get_player("x")为player进行颜色设置。