雨云服务器搭建异星工厂服务器
概况
想必玩异星工厂的大家都熟悉吧,在客户端开服的往往都需要内网穿透,或者是需要公网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 个字节用来包含报头信息,剩余字节则用来包含具体的传
输数据。
进入正题
服务器这里推荐雨云服务器,价格实惠性能稳定,老厂子可信度巨高。
我们先注册一个雨云账号,通过下方链接注册登录的可以享受一定优惠。
三种服务器都是可以的,我这里选择的云服务器,游戏云主要是我的世界吧,一些以java为环境的游戏服务端推荐使用。
游戏云的服务器上图可知,VPS服务器适合广众游戏,MCSM面板适合以java为环境的服务端文件,比如我的世界,像素工厂。
VPS服务器和云服务器区别就是性能和宽带以及性能方面的区别,当然如果你想也可以买游戏云服务器搭建网站也是可以的,成本可能会高(富二代,以及高性能需求除外)。
上图为云服务器,性能好,性价比高,稳定,适合建站,小型游戏或者中大型游戏还是可以的,主要用来建站,宽带可能不高(有些服务器除外)。
上图为独立机,宽带高,配置高,硬盘大,适合搭建云盘,或者文件管理器之类的应用,如果说是国内机还是可以考虑的。
————————————————————
综上所述,VPS服务器及MCSM面板是最适合用来搭建游戏服务器的,这两者相比VPS更胜一筹(在不用java环境的情况下)。
——————————
系统方面
系统方面这里建议Ubuntu18及以上,真的有坑,因为系统的不同,所以说有些环境也不同,Ubuntu及以上是最适合搭建异星工厂的服务器的(都是教训)。
服务端文件下载
注册异星工厂官网账号(有账号的可以跳过)
我们进入异星工厂官网:异星工厂官网直达
我们要先注册账号,账号好解决
在箭头位置注册
填写完成后,点击log in即可
我们点击下面链接:
进入页面后
点击这个无头企鹅,下载即可,下载速度可能较慢耐心等待。
文件传到服务器
文件下载好后,连接服务器,将文件传输到服务器里
我这里直接重新在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-model | force Blit 演示模式(仅限 Windows) |
--audio-driver | default = 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.com 有关禁止/取消禁止命令的信息。 |
--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`
1
Tab
您可以通过设置菜单→控件→切换聊天(和 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))