admin 管理员组

文章数量: 887021

雨云服务器搭建异星工厂服务器

概况

想必玩异星工厂的大家都熟悉吧,在客户端开服的往往都需要内网穿透,或者是需要公网ip,有时内网穿透还极其不稳定,要加载很久。

今天我像大家演示在linux服务器上搭建异星工厂服务器教程

准备工作

————————————————

1.一台服务器(带公网或者是NAT服务器 注意:必须是支持udp协议的服务器)

2.异星工厂服务端(在异星工厂官网下载,只要注册即可下载)

3.异星工厂客户端(用于游玩,这个无所谓,今天服务端才是主角)

4.一颗没有被吃掉的脑子(这个重要)

5.一双没有残废的时候(这个没有可以用脚)

介绍

————————————————

异星工厂是一款关于采矿,规划并建设工厂,研发科技,自动生产以及与外星生物战斗的游戏。

你在一场失败的太空移民行动中幸存了下来,却发现自己孤身一人地降落在一个充满危险生物的星球表面。除了脚下的石头和矿藏你一无所有,只能从头开始,用手砍树、挖矿,并一点一点建造你的工厂和流水线,从头开始生产出必要的装备和防御。很快你就能发展出大型的工厂,有着大片的太阳能板,可以进行石油的处理,还能管理工厂的建设和物流机器人,和你的生产所需要的其它东西。规划设计高效流水线的同时,你还得保护好工厂和你自己,那些丧心病狂的虫群会不顾一切地想要摧毁你辛苦建设的流水线。

服务端协议

————————————————

服务端与客户端的连接采用的是UDP的连接协议。

UDP是什么?

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP的正式规范是IETF RFC768。UDP在IP报文的协议号是17。

 

在OSI模型中,UDP在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

与所熟知的 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议)协议
的顶层。根据 OSI(开放系统互连)参考模型,UDP 和 TCP 都属于传输层协议。 UDP 协议
的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据
的传输单位。每一个数据包的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传
输数据。

进入正题

服务器这里推荐雨云服务器,价格实惠性能稳定,老厂子可信度巨高。

我们先注册一个雨云账号,通过下方链接注册登录的可以享受一定优惠。

雨云 - 老一代云服务提供商欢迎来到以用户体验为优先的雨云,我们提供稳定高速的国际虚拟主机,云服务器产品,强大的功能,高效率的客户支持,简洁易用的面板,值得您的信赖https://www.rainyun/MTE1NDIz_我们来到主页

 三种服务器都是可以的,我这里选择的云服务器,游戏云主要是我的世界吧,一些以java为环境的游戏服务端推荐使用。

游戏云的服务器上图可知,VPS服务器适合广众游戏,MCSM面板适合以java为环境的服务端文件,比如我的世界,像素工厂。

VPS服务器和云服务器区别就是性能和宽带以及性能方面的区别,当然如果你想也可以买游戏云服务器搭建网站也是可以的,成本可能会高(富二代,以及高性能需求除外)。

 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​上图为云服务器,性能好,性价比高,稳定,适合建站,小型游戏或者中大型游戏还是可以的,主要用来建站,宽带可能不高(有些服务器除外)。

上图为独立机,宽带高,配置高,硬盘大,适合搭建云盘,或者文件管理器之类的应用,如果说是国内机还是可以考虑的。

————————————————————

综上所述,VPS服务器及MCSM面板是最适合用来搭建游戏服务器的,这两者相比VPS更胜一筹(在不用java环境的情况下)。

——————————

系统方面

系统方面这里建议Ubuntu18及以上,真的有坑,因为系统的不同,所以说有些环境也不同,Ubuntu及以上是最适合搭建异星工厂的服务器的(都是教训)。

服务端文件下载

注册异星工厂官网账号(有账号的可以跳过)

我们进入异星工厂官网:异星工厂官网直达

我们要先注册账号,账号好解决

在箭头位置注册

填写完成后,点击log in即可

 我们点击下面链接:

Download | Factorio

进入页面后

 点击这个无头企鹅,下载即可,下载速度可能较慢耐心等待。

文件传到服务器

文件下载好后,连接服务器,将文件传输到服务器里

我这里直接重新在win10里解压打包了一遍,换成了zip格式的解压包。

目的是方便服务器操作。

我这里把服务端文件上传到了/home/ubuntu文件夹。

然后我们解压

安装unzip
apt install unzip
unzip factorio.zip
#也可以使用tar,适合不修改文件后缀的小伙伴使用。
tar -zvxf factorio.tar.xz

这样即可

 可以看到已经有了

我进入

cd factorio

然后给与执行文件权限

chmod 777 bin/x64/factorio

 然后到配置文件的文件夹:/home/ubuntu/factorio/data

 

修改这个文件夹名字,修改为server-settings.json(配置文件修改放在最后了)

此步骤可以通过命令实现

cd data 
mv server-settings.example.json server-settings.json

这样即可,回到factorio文件夹

cd .. # 回到上级目录

启动服务器和配置

我们先创建一个存档

./bin/x64/factorio --create ./saves/存档名字(建议使用英文).zip

然后稍等片刻

 这样即可

然后我们运行

bin/x64/factorio --config config/config.ini --port 34197 --start-server saves/2024.8.15.9.36.zip --server-settings data/server-settings.json

# --start-server saves/你的存档名.zip
# --port 34197 启动的端口
# --server-settings data/server-settings.json配置文件路径

运行此命令启动服务器

 没有出现输入框就是运行成功了

——————————————————————

配置文件

常规选项
-h, --帮助显示帮助
--版本显示版本信息
-v, --详细启用详细日志记录
-c, --config 路径要使用的配置文件
--no-log-rotation不轮换日志文件
--mod-directory 路径要使用的 Mod 目录
--check-unused-prototype-data为所有未访问的原型值打印警告。mod 作者注意事项:如果一个条目未使用,并且是一个包含键/值对“ignore”和值“true”的表,则整个条目将被忽略。
--executable-path 路径覆盖自动检测的__PATH__executable。通常不需要,除非在非常奇怪的系统上。
运行选项
-s, --map2scenario 参数映射到方案转换
-m, --scenario2map 参数方案到地图的转换
--apply-update 参数立即应用更新包
--创建文件创建新地图
--map-gen-settings 文件用于 --create、--start-server-load-scenario 或 --generate-map-preview 的地图生成设置。见 data/map-gen-settings.example.json
--map-gen-seed 种子用于 --create、--start-server-load-scenario 或 --generate-map-preview 的地图生成种子。将覆盖映射生成设置中指定的种子
--map-gen-seed-max 种子与 --generate-map-preview 一起使用的地图生成种子,以在从 map-gen-seed 到 map-gen-seed-max 的时间间隔内使用每秒种子生成多个预览。
--map-settings 文件用于 --create 或 --start-server-load-scenario 的映射设置。参见 data/base/prototypes/map-settings.lua
--预设参数要使用的地图生成预设的名称。
--generate-map-preview 路径生成地图的预览图像;PATH 应命名 PNG 文件或以“/”或“\”结尾以指示目录。
--generate-map-preview-random COUNT使用 --generate-map-preview 使用随机种子生成的地图数量。
--map-preview-size 比例尺地图预览的大小(以像素为单位)(默认值:1024)
--map-preview-scale 比例地图预览的比例(米/像素)(默认值:1)
--map-preview-偏移量 X,Y地图中心的偏移量,以米为单位(默认值:0,0)
--noise-outputs 标签,标签...指示要输出的噪声程序的哪些变量
--slope-shading SHADEAMOUNT将高程着色应用于地图预览
--slope-shade-property SHADEPROP要应用坡度着色的属性(默认值:高程)
--report-quantity 原型,...生成地图预览时,报告命名实体原型的近似数量
--threads 线程计数生成地图预览时要使用的线程数
--disable-migration-window禁用在打开包含迁移内容的存档时显示的 gui
--instrument-mod用于启用仪器模式的模块名称
--start-server 文件启动多人游戏服务器
--start-server-load-scenario [MOD/]名称启动多人游戏服务器并加载指定的场景。在给定的模组内寻找该场景。如果未给出 mod,则在顶级 scenarios 目录中查找它。
--start-server-load-latest启动多人游戏服务器并加载最新的可用存档
--until-tick 滴答运行保存,直到给定的地图刻度
--基准文件加载、保存和运行基准测试
--benchmark-ticks N基准测试的即时报价数量。默认值为 1000
--benchmark-运行 N每运行一次即时报价的数量,地图将在每次运行后重新加载。默认值为 1
--benchmark-详细计时以逗号分隔的更新计时列表,以输出每个价格变动。此处允许使用“all”、“timestamp”以及在debug show-time-usage视图的“Update”部分中看到的所有其他值。空字符串禁用了详细的基准测试。计时以纳秒为单位返回。
--基准消毒仅输出最终的基准测试结果
--benchmark-忽略-暂停如果游戏在保存时已暂停,则游戏将暂停。默认情况下,当基准测试开始时,游戏是未暂停的。
--output-perf-stats 文件应将渲染性能统计信息度量保存到的文件的路径。特殊标签 {api}、{hw}、{time} 和 {tag} 将被替换。
--dump-data将data.raw作为 JSON 转储到脚本输出文件夹并退出。
--dump-icon-sprites将所有图标精灵作为 PNG 文件转储到脚本输出文件夹并退出。
--dump-prototype-locale将所有原型名称和描述(如果它们具有有效值)转储到脚本输出文件夹并退出。
--mp-connect 地址启动异星工厂并连接到地址
--password 密码使用 MP-Connect 时要使用的密码(如果有)
--重如果带有图形的单人游戏(重度模式与调查不同步有关,请参阅去同步#Using_heavy_mode_command)
--load-game 文件启动异星工厂并在单人游戏中加载游戏
--load-scenario [MOD/]名称启动异星工厂并在单人游戏中加载指定的场景。在给定的模组内寻找该场景。如果未给出 mod,则在顶级 scenarios 目录中查找它。
--benchmark-graphics 文件加载、保存并使用图形运行它,以像正常游戏一样进行基准刻度、刻度数
--benchmark-frame 文件在不更新游戏的情况下加载、保存和基准测试单帧图形渲染(准备 + 渲染)
--force-opengl使用 OpenGL 进行渲染(仅限 Windows)
--force-d3d使用 Direct3D 进行渲染(仅限 Windows)
--d3d-adapter ID适配器,应用于初始化 Direct3D(仅限 Windows)
--d3d-feature-level覆盖功能级别 (11、10.1、10)(仅限 Windows)
--dxgi-blit-modelforce Blit 演示模式(仅限 Windows)
--audio-driverdefault = sdl = SDL 的 WASAPI 驱动程序 (windows)/SDL 的 PulseAudio 或 ALSA 驱动程序 (linux)/SDL 的 CoreAudio 驱动程序 (mac);allegro = Allegro 的 DirectSound8 驱动程序 (windows)/Allegro 的 PulseAudio、ALSA 或 OSS 驱动程序 (linux)/Allegro 的 OpenAL 驱动程序 (mac);allegro-via-sdl = 带有 SDL WASAPI 驱动程序的 Allegro 混音器 (Windows)/不支持 (linux + mac)
--debug-graphics启用图形 API 的调试层。如果使用 DirectX,则需要安装 DirectX SDK 才能正常工作。
--全屏布尔值以窗口模式启动游戏(保存到配置)
--max-texture-size N游戏可以使用的最大纹理大小(已保存到配置中)。应为大于 2048 的 2 次方
--图形质量参数接受的值: high, normal, low, very-low。“低”和“非常低”已弃用,并已迁移到正常状态。
--video-memory-usage 参数接受的值: All, high, medium, low
--force-graphics-preset 参数接受的值: very-low, low, mac-with-low-ram, medium-with-low-vram, medium, high, very-high, extreme
--gfx-安全模式将某些图形设置重置为适用于大多数配置的值
--低 vram未放入 Sprite Atlas 的 Sprite 不会被分配为纹理对象
--着色启用/禁用着色器后处理(保存到配置)
--禁用音频禁用音频。主要是为了在开发过程中更快地启动。
--window-size 参数所需的窗口分辨率。例如,“1680x1050”。或“最大化”
--单线程加载禁止在多个线程中加载精灵。
--cache-sprite-atlas 布尔值启用/禁用精灵图集缓存。
--nogamepad禁用游戏手柄(控制器)支持
服务器选项
--端口 N要使用的网络端口
--绑定地址[:P ORT]要绑定到的 IP 地址(以及可选的端口)
--rcon-端口 N用于 RCON 的端口
--rcon-bind 地址:端口用于 RCON 的 IP 地址和端口
--rcon-password 密码RCON的密码
--server-settings 文件包含服务器设置的文件的路径。见 data/server-settings.example.json
--use-authserver-bans 布尔值确认连接的玩家未被禁止进行多人游戏,并通知 Factorio 有关禁止/取消禁止命令的信息。
--use-server-whitelist 布尔值如果应该使用白名单。
--server-whitelist 文件包含服务器白名单的文件的路径。
--server-banlist 文件包含服务器禁止列表的文件的路径。
--server-adminlist 文件包含服务器 adminlist 的文件路径。
--console-log 文件将存储服务器日志副本的文件路径
--server-id 文件存储或读取服务器 ID 的路径

 

多人游戏

 --start-server SAVE

将启动无头(专用)服务器,没有 GUI。

 --mp-connect ADDRESS

ADDRESS 是远程主机的 IP:端口。端口是可选的。 例子:

 ./factorio --mp-connect 192.168.1.101
 ./factorio --mp-connect 192.168.1.101:2345

如上所述,可以通过在地址中将端口号放在冒号后来指定端口。

从自定义设置创建地图

有时,使用存储在 JSON 文件中的地图和/或地图生成器设置来创建新游戏会很有用,而不是通过游戏内的地图设置屏幕。 其中一个原因是,通过直接编辑设置,可以将设置在通常可从 GUI 获得的范围之外。

为此,异星工厂从命令行运行,并且需要一个包含地图生成器设置的 JSON 文件和一个包含地图设置(如果自定义它们)的 JSON 文件。

自定义生成器设置示例:

{
    "terrain_segmentation": 0.5,
    "water": "2",
    "width": 0,
    "height": 0,
    "starting_area": "normal",
    "peaceful_mode": false,
    "autoplace_controls":
    {
        "coal": {"frequency": 1, "size": 2, "richness": 0.5},
        "copper-ore": {"frequency": "low", "size": "normal", "richness": "high"},
        "crude-oil": {"frequency": "normal", "size": "normal", "richness": "normal"},
        "enemy-base": {"frequency": "normal", "size": "normal", "richness": "normal"},
        "iron-ore": {"frequency": "normal", "size": "normal", "richness": "normal"},
        "stone": {"frequency": "normal", "size": 0, "richness": "normal"},
        "uranium-ore": {"frequency": "normal", "size": "none", "richness": "normal"}
    },

    "cliff_settings":
    {
        "name": "cliff",                
        "cliff_elevation_0": 30,        
        "cliff_elevation_interval": 20, 
        "richness": 1                   
    },

    "property_expression_names":
    {
        "elevation": "0_16-elevation",
        "temperature": "35"
    },
    
    "seed": null
}

请注意,这与可从 Lua 修改的 MapGenSettings 格式相同。文件中的所有内容都是可选的。

创建自定义保存:

"C:\Program Files\Factorio\bin\x64\Factorio.exe" --create stuff-seed123.zip --map-gen-settings map-gen-settings.json --map-gen-seed 123

生成地图预览:

"C:\Program Files\Factorio\bin\x64\Factorio.exe" --generate-map-preview preview-seed123.png --map-gen-settings map-gen-settings.json --map-gen-seed 123
从映射交换字符串创建 JSON 文件

从已知的映射交换字符串创建初始 JSON 文件,而不是从头开始创建它们,这可能很有用。要将地图交换字符串转换为 JSON,请打开游戏并使用地图交换字符串运行以下命令:

/c game.write_file('map.txt', game.table_to_json(game.parse_map_exchange_string("<your exchange string here>")))

然后打开用户数据目录中的 script_output 文件夹并打开 map.txt - 它看起来像这样:

{"map_settings":{ ...<MAP_SETTINGS> ... },"map_gen_settings":{ ...<MAP_GEN_SETTINGS>... }}

复制 { ...<MAP_SETTINGS> ... }部分复制到所需位置的名为“map-settings.json”的新文件中。复制 { ...<MAP_GEN_SETTINGS> ... }部分添加到所需位置的名为“map-gen-settings.json”的新文件中。

——————————————————

使用控制台

可以使用键 () 切换控制台显示。这是位于密钥左侧的密钥,位于上方。GRAVE`1Tab

您可以通过设置菜单→控件→切换聊天(和 Lua 控制台)来自定义键。 当控制台打开时,您会在屏幕底部看到一个闪烁的光标;输入您的消息或命令,然后按返回以发送它(这也将关闭控制台)。 有关消息和命令前缀的文档可在此页面下方找到。

控制台支持富文本标签。这些标签可用于共享蓝图、在聊天中标记地图位置或向地图标记和火车站添加图标。按住 Ctrl + Alt 键并单击地图或地面将自动插入 GPS 标签并将其发布到控制台中。在控制台打开的情况下按住 Shift 键单击大多数内容将在控制台中插入该事物的标签。

当控制台关闭时,只会显示最新的消息/命令,但它们会逐渐消失(打开控制台将立即重新显示所有最近的消息)。 请注意,默认情况下,所有已执行的命令都对所有用户可见。可以通过设置菜单→界面→聊天消息延迟来更改淡出时间。

可以使用 /clear 命令清除控制台。

使用 和 键滚动浏览控制台历史记录。该键提供关于命令、选项和玩家名称的智能代码完成。↑↓Tab

普通命令

命令描述仅限管理员
/alerts <启用/禁用/静音/取消静音> <警报>/alerts 禁用turret_fire启用、禁用、静音或取消静音给定的警报类型。可用警报:entity_destroyed、entity_under_attack、not_enough_construction_robots、no_material_for_construction、not_enough_repair包、turret_fire、自定义、no_storage、train_out_of_fuel fluid_mixing。
/清楚/清楚清除控制台。
/color <color>/颜色 20 255 255更改颜色。可以是预定义的颜色之一,也可以是“# # #”格式的 RGB 值。可选颜色:默认、红色、绿色、蓝色、橙色、黄色、粉红色、紫色、白色、黑色、灰色、棕色、青色、酸性。
/enable-research-queue/enable-research-queue启用研究队列。是的
/演化/演化打印有关外星进化因子的信息。
/help [命令]/帮助打印可用命令的列表,可选参数可以指定应描述的命令。
/h [命令]/小时与 /help 相同。
/mute-programmable-speaker <静音/取消静音> <local/everyone>/mute-programmable-speaker 静音本地静音或取消静音由可编程扬声器创建的全局声音。使用“local”仅将本地客户端静音。管理员可以使用“everyone”将服务器上每个人的声音静音。
/perf-avg-frames <数量>/perf-avg-帧 100用于平均性能计数器的刻度/更新数。默认值为 100。建议使用 5-10 值以实现快速收敛,但数字抖动会更快。
/权限/权限打开权限 GUI。是的
/permissions <action> <parameters>/permissions add-player DeveloperGroup kovarex可用操作包括 add-player <group> <player>、create-group <name>、delete-group <group>、edit-group <group> <input_action> <true/false>、get-player-group <player>、remove-player <group> <player>、rename-group <group> <new_name> 和 reset是的
/重置提示/重置提示重置提示和技巧的状态,就像游戏刚刚首次启动一样。
/screenshot [X 分辨率] [Y 分辨率] [缩放]/截图在隐藏 GUI 的情况下截取屏幕截图,以播放器为中心。它保存在用户数据目录的“script-output”子文件夹中。分辨率是可选的,默认为当前窗口大小。缩放是可选的,默认为 1。
/种子/种子打印起始地图种子。
/时间/时间打印有关地图的年龄的信息。
/toggle-action-logging/toggle-action-logging切换记录游戏执行的所有输入操作。此值在游戏重启之间不会保留,只会影响多人游戏会话中的本地游戏。是的
/切换重模式/切换重模式用于调查不同步。会减慢游戏速度并使多人游戏无法玩。是的
/解锁快捷键/解锁快捷键解锁所有快捷条项,包括蓝图字符串导入、复制和粘贴、解构和升级规划器。
/解锁提示/解锁提示解锁所有提示和技巧条目。
/版本/版本打印当前游戏版本。

多人游戏命令

命令描述仅限管理员
<留言>您好团队!不以 Title 开头的控制台输入将显示为聊天消息发送给您的团队。/
/管理/管理打开播放器管理 GUI。是的
/admins/admins打印游戏管理员列表。
/ban <player> <reason>/ban xTROLLx 向基地投掷手榴弹禁止指定的玩家。是的
/禁止/禁止打印被禁止的玩家列表。
/banlist <添加/删除/获取/清除> <player>/banlist 获取在封禁名单中添加或移除玩家。与 /ban 或 /unban 相同。
/配置/配置打开服务器配置 GUI。是的
/config <get/set> <option> <value>/config 设置密码 hunter2获取或设置各种多人游戏设置。可用的配置包括:afk-auto-kick、allow-commands、allow-debug-settings、autosave-interval、autosave-only-on-server、ignore-player-limit-for-returning-players、max-players、max-upload-speed、only-admins-can-pause、password、require-user-verification、visibility-lan、visibility-public。选项 afk-auto-kick 和 autosave-interval 的单位以分钟为单位。是的
/delete-blueprint-library <播放器>/delete-blueprint-library 大家确认从保存文件中删除给定离线播放器的蓝图库存储。输入“大家确认”以删除所有离线播放器的存储。是的
/降级 <player>/降级 AzureDiamond将玩家从管理员中移除。是的
/ignore <player>/忽略 Cthon98阻止聊天显示来自此播放器的消息。管理员消息仍会显示。
/忽略/忽略打印被忽略的玩家的列表。
/kick <player> <reason>/kick xTROLLx 向基地投掷手榴弹踢指定的玩家。是的
/mute <player>/mute Cthon98阻止玩家在聊天中说任何话。是的
/静音/静音所有被静音的玩家(不能在聊天中交谈)。
/open <player>/打开 AzureDiamond打开其他玩家的物品栏。是的
/o <播放器>/o AzureDiamond与 /open 相同。是的
/players [在线/o/count/c]/球员打印游戏中的玩家列表。(参数 online/o,它只打印在线的玩家,count/c 只打印 count)
/p [在线/o/计数/c]/p o c与 /players 相同。
/提升<播放器>/推广 AzureDiamond将玩家提升为管理员。是的
/purge <播放器>/清除 Cthon98从聊天记录中清除此播放器的所有消息。是的
/reply <留言>/回复哦,真的吗?回复最后一位对你耳语的玩家。
/r <消息>/r哦,真的吗?与 /reply 相同。
/服务器保存/服务器保存在多人游戏中将游戏保存在服务器上。是的
/shout <留言>/shout 你好世界!向所有玩家发送消息,包括其他势力。
/s <消息>/s 你好,世界!与 /shout 相同。
/swap-players <player> [player]/swap-players AzureDiamond将您的角色与给定玩家的角色交换,或者如果有两个玩家,则交换两个玩家的角色。是的
/解禁 <player>/取消封禁 xTROLLx取消对指定玩家的封禁。是的
/unignore <player>/unignore Cthon98允许聊天显示来自此播放器的消息。
/unmute <player>/取消隐藏 Cthon98允许玩家再次在聊天中交谈。是的
/whisper <player> <message>/whisper AzureDiamond,这就是我所看到的向指定的播放器发送消息。
/w <player> <message>/w AzureDiamond,这就是我所看到的与 /whisper 相同。
/whitelist <添加/删除/获取/清除> [播放器]/whitelist 获取在白名单中添加或删除玩家,只有列入白名单的玩家才能加入游戏。使用“get”打印所有列入白名单的玩家的列表时,不要为“player”输入任何内容。空的白名单将禁用允许任何人加入的白名单功能。

编写脚本和作弊命令

命令描述
/作弊 <全部>研究所有技术并启用作弊模式。使用“全部”选项还可以为玩家提供一些额外的项目。
/command <command>执行 Lua 命令(如果允许)。
/c <命令>执行 Lua 命令(如果允许)。
/编辑 器切换地图编辑器。
/measured-command <命令>执行 Lua 命令(如果允许)并测量它所花费的时间。
/mc <命令>执行 Lua 命令(如果允许)并测量它所花费的时间。
/silent-command <命令>执行 Lua 命令(如果允许),而不将其打印到控制台。
/sc <命令>执行 Lua 命令(如果允许),而不将其打印到控制台。

这是一个非常强大的功能,它也允许作弊,因此,一旦您使用脚本命令,成就将被永久禁用以保存。

基本示例脚本

将其用作计算器

/c game.player.print(1234*5678)

缩放超出正常范围

请注意,缩小得太远可能会导致性能下降。小心。

/c game.player.zoom=0.1

挖矿速度更快

/c game.player.force.manual_mining_speed_modifier=1000

制作速度更快

/c game.player.force.manual_crafting_speed_modifier=1000

解锁和研究所有技术

/c game.player.force.research_all_technologies()

使用下一节中的命令撤消此操作。

注意:可以使用地图编辑器通过单击技术 GUI 上的“开始研究”按钮来研究特定技术。

取消研究所有技术

这不会重置手动应用的奖金

/c for _, tech in pairs(game.player.force.technologies) do 
	tech.researched=false
end

注意:通过单击技术 GUI 上的“取消研究”按钮,可以使用地图编辑器对特定技术进行未研究。

重置你的部队

这将重置您的部队的所有数据,包括击杀和生产统计数据、技术、奖励和图表状态。

/c game.player.force.reset()

始终显示轨道块可视化

永久显示轨道块可视化效果,而不是仅在持有轨道信号时显示。通过将 true 替换为 false 来禁用。

/c game.player.game_view_settings.show_rail_block_visualisation = true

将所有列车设置为自动模式

将所有列车设置为自动模式 - 例如,在使用蓝图构建它们之后。

/c for key,ent in pairs (game.player.surface.find_entities_filtered{name="locomotive"}) do 
    ent.train.manual_mode = false
end

库存操作脚本

作弊模式

允许无限的自由制作。通过将 true 替换为 false 来禁用。

/c game.player.cheat_mode=true

加注资源(加注油、铁等)

在游戏中将光标悬停在资源图块上时:

/c game.player.selected.amount=7500

或者,您可以使用以下命令重新填充地图中的所有资源。将 ore.amount 更改为所需值。

/c surface = game.player.surface
for _, ore in pairs(surface.find_entities_filtered({type="resource"})) do
    ore.amount = 10000
end

将物品添加到玩家的物品栏

用所需物品的内部名称替换铁板。

/c game.player.insert{name="iron-plate", count=100}

例如,这里有一堆神模式能源系统接口:

/c game.player.insert{name="electric-energy-interface"}

有几种神模式物品可供选择:

  • infinity-chest
  • infinity-pipe
  • electric-energy-interface
  • heat-interface

用设备和一些建筑工具添加强大的盔甲:

/c	local player = game.player
player.insert{name="power-armor-mk2", count = 1}
local p_armor = player.get_inventory(5)[1].grid
	p_armor.put({name = "fusion-reactor-equipment"})
	p_armor.put({name = "fusion-reactor-equipment"})
	p_armor.put({name = "fusion-reactor-equipment"})
	p_armor.put({name = "exoskeleton-equipment"})
	p_armor.put({name = "exoskeleton-equipment"})
	p_armor.put({name = "exoskeleton-equipment"})
	p_armor.put({name = "exoskeleton-equipment"})
	p_armor.put({name = "energy-shield-mk2-equipment"})
	p_armor.put({name = "energy-shield-mk2-equipment"})
	p_armor.put({name = "personal-roboport-mk2-equipment"})
	p_armor.put({name = "night-vision-equipment"})
	p_armor.put({name = "battery-mk2-equipment"})
	p_armor.put({name = "battery-mk2-equipment"})
player.insert{name="construction-robot", count = 25}

增加玩家库存槽位

为您的整个部队提供 100 个额外的额外库存槽。由 Toolbelt (研究) 使用。

/c game.player.force.character_inventory_slots_bonus=100

世界操纵脚本

显示玩家周围的地图

显示玩家周围的地图,类似于雷达。

/c local radius=150
game.player.force.chart(game.player.surface, {{game.player.position.x-radius, game.player.position.y-radius}, {game.player.position.x+radius, game.player.position.y+radius}})

或从起始位置开始

/c local radius=150
game.player.force.chart(game.player.surface, {{x = -radius, y = -radius}, {x = radius, y = radius}})

将 150 更改为所需的半径,较高的值需要更长的时间。

隐藏显示的地图

隐藏所有显示的块,倒置的地图显示。

/c local surface = game.player.surface
local force = game.player.force
for chunk in surface.get_chunks() do
  force.unchart_chunk({x = chunk.x, y = chunk.y}, surface)
end

显示所有生成的地图

将所有生成的地图归还给玩家的团队。

/c game.player.force.chart_all()

删除区块

如果显示地图的大部分内容,则会增加保存文件的大小。以下命令取消当前排队等待生成的所有块的生成,并删除 0,0 左右的 32 个块半径之外的块。请注意,如果这些块上有玩家实体,这将删除玩家实体。

/c local surface = game.player.surface;
game.player.force.cancel_charting(surface); 
local chunk_radius = 32;
for chunk in surface.get_chunks() do
  if (chunk.x < -chunk_radius or chunk.x > chunk_radius or chunk.y < -chunk_radius or chunk.y > chunk_radius) then
    surface.delete_chunk(chunk)
  end
end

删除未公开的块

此命令将删除播放器未显示的块。可以在命令后用于隐藏显示的地图,以删除雷达未覆盖的块。

/c local surface = game.player.surface
local force = game.player.force
for chunk in surface.get_chunks() do
  if not force.is_chunk_charted(surface, chunk) then
    surface.delete_chunk(chunk)
  end
end

关闭夜间

使永恒的白昼成为可能。

/c game.player.surface.always_day=true

更改游戏速度

0.5 为半速,1 为默认,2 为双速,以此类推。最小值为 0.01。这可以用于很多事情,例如当您知道您必须等待很长时间才能完成某些事情时。增加会降低性能,要小心。

/c game.speed=X

冻结时间

停止时间的推进。如果将“true”替换为“false”,则解冻它。

/c game.player.surface.freeze_daytime=true

去除所有污染

/c game.player.surface.clear_pollution()

完全关闭污染

/c for _, surface in pairs(game.surfaces) do
  surface.clear_pollution()
end
game.map_settings.pollution.enabled = false

增加大量污染

/c game.player.surface.pollute(game.player.position, 1000000)

演讲者在哪里,谁放置了他们

/c local speakers = game.player.surface.find_entities_filtered{force = game.player.force, type="programmable-speaker"}
for key, speaker in pairs(speakers) do
    game.player.print(speaker.last_user.name .. " placed a speaker at " .. speaker.gps_tag)
end

禁用你的部队的友军火力

/c game.player.force.friendly_fire = false

添加新的资源补丁

这将创建一个新的 11×11 资源块,以玩家角色为中心,其中地面不是水。 它创建的斑块是完全方形的,但它随机化了类似于自然生成的量,边缘的矿石较少,中心矿石较多。 默认数字会导致一个含有 2500-3000 矿石的斑块。

如果您想要更大的补丁,请将“本地大小 = 5”更改为更大的数字。 更大的斑块将拥有成倍增加的矿石。 不建议输入大于 30 的数字。

如果您想要更丰富的补丁,请将“本地密度 = 10”更改为更大的数字。 输入一个非常大的数字应该不会造成任何伤害,但您可能不需要超过 100。

要选择生成哪种资源,请将底部附近的“石头”更改为“铁矿石”、“铜矿石”、“煤”或“铀矿石”。

/c local surface=game.player.surface
local ore=nil
local size=5
local density=10
for y=-size, size do
	for x=-size, size do
		a=(size+1-math.abs(x))*10
		b=(size+1-math.abs(y))*10
		if a<b then
			ore=math.random(a*density-a*(density-8), a*density+a*(density-8))
		end
		if b<a then
			ore=math.random(b*density-b*(density-8), b*density+b*(density-8))
		end
		if surface.get_tile(game.player.position.x+x, game.player.position.y+y).collides_with("ground-tile") then
			surface.create_entity({name="stone", amount=ore, position={game.player.position.x+x, game.player.position.y+y}})
		end
	end
end

为了获得更大的灵活性,地图编辑器还可用于创建/更改/删除资源补丁。

删除播放器周围的资源

从玩家周围 50 x 50 区域的地面上移除所有资源斑块。

/c local surface=game.player.surface
local size=50
local pos=game.player.position

for _, e in pairs(surface.find_entities_filtered{area={{pos.x-size, pos.y-size},{pos.x+size, pos.y+size}}, type="resource"}) 
	do e.destroy() 
end

添加新的油斑

这在 3×3 的正方形中创建了 9 个原油斑块。

/c for y=0,2 do
	for x=0,2 do
		game.player.surface.create_entity({name="crude-oil", amount=100000, position={game.player.position.x+x*7-7, game.player.position.y+y*7-7}})
	end
end

或随机无任何碰撞:

/c local position=nil
for i=1,9 do
	position=game.player.surface.find_non_colliding_position("crude-oil", game.player.position, 0, i/2+1.5)
	if position then 
		game.player.surface.create_entity({name="crude-oil", amount=100000, position=position})
	end
end

重新生成资源

对于像铁这样的固体资源,会破坏所有资源实体并创建资源实体,就像在原始地图生成中一样。对于流体资源(如石油),将所有现有资源实体的产量设置为原始量。在整个表面上再生资源。

/c local surface = game.player.surface
for _, e in pairs(surface.find_entities_filtered{type="resource"}) do
  if e.prototype.infinite_resource then
    e.amount = e.initial_amount
  else
    e.destroy()
  end
end
local non_infinites = {}
for resource, prototype in pairs(game.get_filtered_entity_prototypes{{filter="type", type="resource"}}) do
  if not prototype.infinite_resource then
    table.insert(non_infinites, resource)
  end
end
surface.regenerate_entity(non_infinites)
for _, e in pairs(surface.find_entities_filtered{type="mining-drill"}) do
    e.update_connections()
end

对实体进行计数

对名称在本地实体中包含字符串的所有实体进行计数。

/c local entity="belt"
local surface=game.player.surface
local count=0
for key, ent in pairs(surface.find_entities_filtered({force=game.player.force})) do
	if string.find(ent.name,entity) then
		count=count+1
	end
end
game.player.print(count)

关闭悬崖生成

将大小设置为“无”。仅对使用此命令后生成的块有效。使用 #Remove 所有悬崖来删除现有悬崖。

/c local mgs = game.player.surface.map_gen_settings
mgs.cliff_settings.cliff_elevation_0 = 1024
game.player.surface.map_gen_settings = mgs

移除所有悬崖

从世界上移除所有现有的悬崖。使用 #Turn off cliff generation 来关闭新块中的 cliff 生成。

/c for _, v in pairs(game.player.surface.find_entities_filtered{type="cliff"}) do
  v.destroy()
end

删除所有装饰品

删除世界上可以找到的装饰品。

/c game.player.surface.destroy_decoratives({})

更改地图生成设置

这允许更改新块的地图生成设置;它不会改变已经生成的块。已删除的区块会受到设置更改的影响,因为它们是在再次浏览时新生成的。

要更改资源生成设置,请在以下命令中将“iron-ore”替换为应更改的资源,并将“very-high”替换为所需的MapGenSize。将“铁矿石”替换为“敌人基地”以更改敌人基地生成设置。

/c local surface = game.player.surface
local resource = "iron-ore"
local mgs = surface.map_gen_settings
mgs.autoplace_controls[resource].size = "very-high"
mgs.autoplace_controls[resource].frequency = "very-high"
mgs.autoplace_controls[resource].richness = "very-high"
surface.map_gen_settings = mgs

要更改水生成设置,请在以下命令中将“very-high”替换为所需的 MapGenSize。

/c local surface = game.player.surface
local mgs = surface.map_gen_settings
mgs.water = "very-high" --[[ size]]
mgs.terrain_segmentation  = "very-high" --[[ frequency]]
surface.map_gen_settings = mgs

使结构坚不可摧

这使得一个实体不可能被破坏或杀死,例如被咬人。将鼠标悬停在实体上,然后运行:

/c game.player.selected.destructible = false

连接联动传送带

如果至少存在两条链接的传送带,并且其中一个具有“实体标签”,另一个链接的传送带具有“实体标签”,则以下命令应链接这两个链接的传送带。inout

/c local i = game.get_entity_by_tag('in')
local o = game.get_entity_by_tag('out')
i.linked_belt_type = 'input'
o.linked_belt_type = 'output'
i.connect_linked_belts(o)

敌人/进化脚本

设置进化因子

范围从 0(新游戏)到 1。

/c game.forces["enemy"].evolution_factor=X

禁用基于时间的演化并增加基于污染的演化

/c game.map_settings.enemy_evolution.time_factor=0
/c game.map_settings.enemy_evolution.pollution_factor=game.map_settings.enemy_evolution.pollution_factor*2

最后一个命令末尾的“2”将使默认污染因子加倍。您可以替换另一个数字以进一步增加(或减少)污染因子。

杀死“敌”军上的所有咬人者

请注意,这只会杀死移动单位,不会杀死刷怪者。

/c game.forces["enemy"].kill_all_units()

杀死所有敌人

这将杀死所有叮咬者、碱基和蠕虫。任何敌人都会被彻底摧毁。这只会影响生成世界中的敌人,因此地图中任何仍需要生成的未探索部分仍将有敌人。如果需要,您可以防止比特虫位于新生成的块上。

/c local surface=game.player.surface
for key, entity in pairs(surface.find_entities_filtered({force="enemy"})) do
	entity.destroy()
end

杀死附近的所有敌人

这将杀死可配置半径内的所有叮咬者、碱基和蠕虫。默认值为 250 个图块,在全高清模式下大约是两个缩小的屏幕宽度。销毁后,它显示被销毁的对象数量。

/c local surface=game.player.surface
local pp = game.player.position
local cnt = 0
for key, entity in pairs(surface.find_entities_filtered({force="enemy", radius=250, position=pp })) do
	cnt = cnt+1
	entity.destroy()
 end	
game.player.print(cnt)

启用/禁用和平模式

启用和平模式可以防止虫子攻击,直到被激怒。用 true 替换 false 以禁用。已经存在的咬虫不受此命令的影响,因此在激活和平模式后,攻击可能会继续一段时间。

/c game.player.surface.peaceful_mode = true

启用/禁用比特扩展

Biter 扩展允许 Biters 创建新的巢穴,默认情况下它是启用的。用 true 替换 false 以禁用。

/c game.map_settings.enemy_expansion.enabled = true

防止比虫虫落在新生成的块上

在新生成的块上,不会存在任何比特器,但是所有当前的比特器将不受影响。相当于在地图生成过程中在地形设置下将敌人基地大小设置为无,但在游戏中期通过更改地图生成设置来实现。

/c local surface = game.player.surface
local mgs = surface.map_gen_settings
mgs.autoplace_controls["enemy-base"].size = "none"
surface.map_gen_settings = mgs

除了命令之外,还可以在地图编辑器中使用 GUI 来更改游戏中期的地图生成设置。使用以下命令访问地图编辑器,转到“表面”选项卡,然后单击“编辑地图生成设置”。/editor

玩家角色脚本

直接与播放器有关的命令。

获取玩家位置

打印您当前位置的坐标。

/c game.player.print(game.player.position)

传送播放器

将播放器移动到指定位置。如果您通过他们执行上一个命令并将其提供给您来获取他们的坐标,您应该能够传送到特定玩家。

/c game.player.teleport({X, Y})

要传送到世界的起源,请使用 0,0。

启用上帝模式

上帝模式会移除您的玩家角色,让您能够飞越障碍物而不会受到任何伤害。

取消您的控件与角色的关联并销毁它:

/c game.player.character.destroy()

要撤消,请生成一个玩家角色。这将在世界的生成点生成一个新角色,并将您的控件连接到它。

/c game.player.create_character()

实现长距离覆盖

启用长距离,使玩家能够在更远的距离内构建实体并与之交互。默认覆盖面为 10。

/c local reach = 10000
game.player.force.character_build_distance_bonus = reach
game.player.force.character_reach_distance_bonus = reach

寻找玩家尸体

地图上的 Pings 玩家尸体。

/c local found_corpses = game.player.surface.find_entities_filtered{type="character-corpse"}
for _,corpse in pairs(found_corpses) do
    local player = game.get_player(corpse.character_corpse_player_index)
    local name = player and player.name or "????"
    game.player.print(name .. " --> " .. corpse.gps_tag)
end

跑得更快

/c game.player.character_running_speed_modifier=3

研究脚本

加快研究速度

/c game.player.force.laboratory_speed_modifier=1

-0.5为半速,0为正常速度,1为双速,2为三倍速,以此类推。

研究特定技术

内部技术名称可以在各自页面的信息框中找到。

/c game.player.force.technologies['electric-energy-distribution-1'].researched=true
/c game.player.force.technologies['steel-processing'].researched=true

要研究无限技术的高水平,请设置其级别:

/c game.player.force.technologies['worker-robots-speed-6'].level = 100
/c game.player.force.technologies['mining-productivity-4'].level = 100

未经研究的特定技术

内部技术名称可以在各自页面的信息框中找到。

/c game.player.force.technologies['electric-energy-distribution-1'].researched=false
/c game.player.force.technologies['steel-processing'].researched=false

启用特定配方

内部配方/项目名称可以在各自页面的信息框中找到。

/c game.player.force.recipes["electric-energy-interface"].enabled=true
/c game.player.force.recipes["rocket-silo"].enabled=true
/c game.player.force.recipes.loader.enabled=true
/c game.player.force.recipes["fast-loader"].enabled = true
/c game.player.force.recipes["express-loader"].enabled = true

启用所有配方

/c for name, recipe in pairs(game.player.force.recipes) do recipe.enabled = true end

将技术效果重置为默认值

这将把所有配方的启用/解锁状态重置为纯粹基于当前研究的技术的状态,并重置其他技术效果,如采矿速度等。对这些效果和配方解锁的任何手动修改都将被撤销。

/c game.player.force.reset_technology_effects()

注意:当添加或更改模组后配方不可用时,即使已经研究了解锁它们的技术,也可以用作快速解决方法。

改装工具

也可以在 data.raw 上找到原版游戏中大多数事物的内部名称列表。

访问 mod 的数据

如果命令的第一个单词是 __mod-name__它将在具有相同名称的 mod 的上下文中运行。例如,此命令打印来自 Even Distribution mod 的数据:

/c __even-distribution__ game.player.print(serpent.dump(global))

打印以控制台播放器下方的磁贴

/c game.player.print(game.player.surface.get_tile(game.player.position).name)

将所有研究的技术写入文件

/c local list = {}
for _, tech in pairs(game.player.force.technologies) do 
	if tech.researched then
    list[#list+1] = tech.name
  end
end
game.write_file("techs.lua", serpent.block(list) .. "\n", true)

将所有启用的配方写入文件

/c local list = {}
for _, recipe in pairs(game.player.force.recipes) do 
	if recipe.enabled then
    list[#list+1] = recipe.name
  end
end
game.write_file("recipes.lua", serpent.block(list) .. "\n", true)

将模块列表写入文件

将所有当前活动的 mod 及其版本写入用户数据目录中的 script-output/mods.txt 文件。

/c game.write_file("mods.txt", serpent.block(game.active_mods))

本文标签: 雨云 服务器 工厂