切换语言: Deutsch English 日本語 한국어 Русский

Console/zh: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
GhosterFT (talk | contribs)
Created page with "{{Languages}} The console is the built in interface for lua-commands. It works a bit like any command-line-interface or the java-script-console for your browser. Basically yo..."
 
Cardinal (talk | contribs)
m Translation verification.
 
(18 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Languages}}
{{Languages}}{{Translation verification|revisionID=213625}}
The console is the built in interface for lua-commands. It works a bit like any command-line-interface or the java-script-console for your browser.
'''{{Translation|Console}}'''是游戏内置的命令行界面。关于执行游戏设置的命令行界面,请参阅页面:{{L|Command line parameters}}。


Basically you can fire here all commands, like from any other lua-program (= [[Modding]]). This means you have full access to all in-game-internals.
在游戏中,控制台可用于:


In other words: Factorio doesn't need any special cheats, it has a console, which allows you to cheat around any limition, if you know how.
* 与其他玩家聊天
* 查看状态更新
* 运行命令 / 脚本 / 作弊码


== How to open the console? ==
命令分为三种类型:


You open the console by default with the key''' '/' or '~''''. But depending on your keyboard-layout and operating system, this doesn't work.
* '''[[#常规命令|常规命令]]''' - 显示游戏信息并自定义游戏体验。
* '''[[#多人游戏命令|多人游戏命令]]''' - 过滤消息,封禁用户等。
* '''[[#脚本和作弊命令|脚本/作弊命令]]''' - 运行小型Lua脚本。(这会<span style="color:#FF0000">禁用该存档的成就功能!</span>)


Go for that case into the keyboard control and change "Toggle Lua console" to a useful key.
__TOC__


=== Editing ===
=== 使用控制台 ===
按{{Keybinding|grave}}键(<code>`</code>)可切换控制台显示。此键位于{{Keybinding|1}}键左侧,{{Keybinding|tab}}键上方。


The game ignores newlines when pasting "scriptlets" in the console. This means they can be written in a human readable form in an editor and copy/pasted into the console, making understanding and editing a bit easier.
玩家可以在 '''设置 → 按键→ 打开会话(及Lua控制台)''' 界面设置自定义快捷键。当控制台显示时,屏幕底部会显示闪烁的光标;输入聊天信息或命令,然后按回车键发送(这会同时关闭控制台)。关于聊天信息和命令前缀的内容可在本页面下文中找到。


== Useful commands (cheats) ==
控制台支持{{L|Rich text}}标签。这些标签对于分享蓝图、在聊天中标记地图位置、为地图标记和车站添加图标非常有用。按住{{Keybinding|ctrl|alt}}并点击地图或地面将会自动插入GPS位置标签并发送到控制台。当控制台开启时,按住{{Keybinding|shift}}键点击大多数物品可以将其标签插入控制台。


* Check how far the biters have evolved
当控制台关闭后,屏幕上只会显示最近的消息/命令,而且它们会逐渐淡出(打开控制台会立即重新显示所有最近信息)。注意,默认情况下所有已执行命令对所有用户可见。可以在 '''设置 → 界面 → 会话淡出延迟''' 界面修改信息淡出时间。
: <code>game.player.print(game.evolutionfactor)</code>
* Turn off night
: <code>game.alwaysday=true</code>
* Kill everything that moves
: <code>game.killallenemies()</code>
* Gain 100 iron plates
: <code>game.player.insert{name="iron-plate",count=100}</code>
* Finish research
: <code>for n,t in pairs(game.player.force.technologies) do t.researched=t.enabled end</code>
* Mine faster
: <code>game.player.force.manualminingspeedmodifier=1000</code>
* Craft faster
: <code>game.player.force.manualcraftingspeedmodifier=1000</code>
* Switching on peacfulmode
: <code>game.peacefulmode = true</code>
: After setting, you should do <code>game.killallenemies()</code> because some, if not all, existing biters will still not be on peaceful mode.
* Faster research
: <code>game.player.force.laboratoryspeedmodifier = 1</code>
: 1 is normal speed, 2 is double speed 3 is triple etc. I think it goes up to 100.
* [http://www.factorioforums.com/forum/viewtopic.php?f=18&t=5178 Cancel deconstruction]
: <code>
for _, entity in ipairs(game.findentities{
  {game.player.position.x-20, game.player.position.y-20},
  {game.player.position.x+20, game.player.position.y+20}})
do
  entity.canceldeconstruction(game.player.force)
end</code>
* [http://www.factorioforums.com/forum/viewtopic.php?f=18&t=5686 Destroy rocks in sandbox-mode] (you don't have a player here, so you can't destroy anything):
: <code>for _, entity in ipairs(game.findentitiesfiltered{area={{game.player.position.x-32, game.player.position.y-32},{game.player.position.x+32, game.player.position.y+32}}, name="stone-rock"}) do entity.destroy() end</code>
: you need to center the rock in your vision range
* [http://www.factorioforums.com/forum/viewtopic.php?f=41&t=5638 Use print() instead of game.player.print()]
: <code>print = function(text) game.player.print(text) end</code>
* [http://www.factorioforums.com/forum/viewtopic.php?f=14&t=4761&p=44184#p44184 Generate a section of the world and explore it at the same time]:
: <code>game.forces.player.chart({lefttop = {x = -1024, y = -1024}, rightbottom = {x = 1024, y = 1024}})</code>
: Simply change the bounding box to the size you want and it will generate the map and explore it in that area. Keep In mind that command is telling Factorio to generate 64*64 (4096) chunks so it's going to take a while before all the background entity generation (trees, resources, biters) are placed in the world.
* [http://www.factorioforums.com/forum/viewtopic.php?f=5&t=6066&p=47758#p47758 Check water level in a pipe]:
: <code>game.player.print(game.player.selected.getliquid().amount)</code>


More commands can be looked up in the [[Modding|modding-section]].
使用 '''/clear''' 命令可清除控制台显示内容。


== See also ==
使用{{keybinding|&uarr;}}和{{keybinding|&darr;}}键可以滚动查看控制台历史记录。按{{keybinding|tab}}键可开启智能代码补全,包括命令、选项和玩家名称。


* [http://www.factorioforums.com/forum/viewtopic.php?f=18&t=4752 The Console: What is it and How do I use it?]
== 常规命令 ==
: Some interesting cheats or useful commands and tips.
 
{| class="wikitable"
|-
! style="width:25%"| 命令
! style="width:25%"| 示例
! style="width:45%"| 说明
! style="width:5%"| 仅限管理员
|-
| /alerts <enable/disable/mute/unmute> <alert>
| /alerts disable turret_fire
| 启用/禁用,静音/取消静音指定类型的{{L|Alerts}}。可用的警报类型包括:entity_destroyed, entity_under_attack, not_enough_construction_robots, no_material_for_construction, not_enough_repair_packs, platform_tile_building_blocked, turret_out_of_ammo, turret_fire, custom, no_storage, train_out_of_fuel, train_no_path, no_platform_storage, collector_path_blocked, unclaimed_cargo, no_roboport_storage, pipeline_overextended。
| 否
|-
| /clear
| /clear
| 清除控制台显示内容。
| 否
|-
| /color <color>
| /color 20 255 255
| 改变颜色。可以是预定义的颜色之一,或者是“# # #”格式的[[:Wikipedia:RGB_color_space|RGB 颜色值]]。可用的预定义颜色:default, red, green, blue, orange, yellow, pink, purple, white, black, gray, brown, cyan, acid。
| 否
|-
| /evolution
| /evolution
| 输出当前的进化因子信息。
| 否
|-
| /help [command]
| /help
| 输出可用命令列表,可选参数可用于指定需要描述的命令。
| 否
|-
| /h [command]
| /h
| 与 /help 命令相同。
| 否
|-
| /mute-programmable-speaker <mute/unmute> <local/everyone>
| /mute-programmable-speaker mute local
| 对{{Translation|Programmable speaker}}发出的全局声音执行静音/取消静音。使用“local”参数可以仅对本地客户端静音。管理员可以使用“everyone”参数来对服务器上的所有玩家静音。
| 否
|-
| /perf-avg-frames <number>
| /perf-avg-frames 100
| 用于平均性能计数器的[[time/zh#刻|刻]]/更新次数。默认值为100。建议使用5-10的值以实现快速收敛,但此时数值波动会更快。
| 否
|-
| /permissions
| /permissions
| 开启{{L|Permissions}}界面。
| 是
|-
| /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
| 是
|-
| /reset-tips
| /reset-tips
| 重置提示与技巧条目状态,使其恢复到游戏刚开始的状态。
| 否
|-
| /screenshot [x resolution] [y resolution] [zoom]
| /screenshot
| 以玩家位置为中心截取屏幕截图,并隐藏游戏界面。截图会保存在[[Application directory/zh#用户数据目录|用户数据目录]]中。截图分辨率可以更改,默认为当前窗口大小,缩放倍率可以更改,默认值为1。
| 否
|-
| /seed
| /seed
| 输出初始地图种子。
| 否
|-
| /time
| /time
| 输出地图持续时间信息。
| 否
|-
| /toggle-action-logging
| /toggle-action-logging
| 切换记录游戏中所有输入动作的日志。此值不会在游戏重启时存留,且仅影响多人游戏中的本地线程。
| 是
|-
| /toggle-heavy-mode
| /toggle-heavy-mode
| 用于检查[[Desynchronization#Using_heavy_mode_command|不同步]]问题。此命令会减慢游戏速度,使多人游戏无法进行。
| 是
|-
| /unlock-shortcut-bar
| /unlock-shortcut-bar
| 解锁所有{{L|Shortcut bar}}项目,包括导入蓝图代码、复制和粘贴、红图和绿图。
| 否
|-
| /unlock-tips
| /unlock-tips
| 解锁所有提示与技巧条目。
| 否
|-
| /version
| /version
| 输出当前游戏版本。
| 否
|-
|}
 
== 多人游戏命令 ==
{| class="wikitable"
|-
! style="width:25%"| 命令
! style="width:25%"| 示例
! style="width:45%"| 说明
! style="width:5%"| 仅限管理员
|-
| <message>
| Hello team!
| 以 {{keybinding|/}} 开头的控制台输入将会作为团队聊天信息显示。
| 否
|-
| /admin
| /admin
| 打开玩家管理界面。
| 是
|-
| /admins
| /admins
| 输出游戏管理员名单。
| 否
|-
| /ban <player> <reason>
| /ban xTROLLx Throwing grenades in base
| 封禁指定玩家。
| 是
|-
| /bans
| /bans
| 输出被封禁玩家名单。
| 否
|-
| /banlist <add/remove/get/clear> <player>
| /banlist get
| 将玩家移入/移出封禁名单。与 /ban 或 /unban 相同。
| 否
|-
| /config
| /config
| 打开服务器设置界面。
| 是
|-
| /config <get/set> <option> <value>
| /config set password 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 <player>
| /delete-blueprint-library everybody confirm
| 从存档中删除指定离线玩家的蓝图库。输入“everybody confirm”可删除所有离线玩家的蓝图库。
| 是
|-
| /demote <player>
| /demote AzureDiamond
| 将玩家从管理员降级。
| 是
|-
| /ignore <player>
| /ignore Cthon98
| 忽略特定玩家的聊天内容,使之不在聊天界面显示。管理员消息仍然显示。
| 否
|-
| /ignores
| /ignores
| 输出被忽略玩家名单。
| 否
|-
| /kick <player> <reason>
| /kick xTROLLx Throwing grenades in base
| 将指定玩家踢出游戏。
| 是
|-
| /mute <player>
| /mute Cthon98
| 禁止指定玩家发送聊天信息。
| 是
|-
| /mutes
| /mutes
| 全体禁言(不能发送聊天信息)
| 否
|-
| /open <player>
| /open AzureDiamond
| 打开另一个玩家的背包。
| 是
|-
| /o <player>
| /o AzureDiamond
| 与 /open 命令相同。
| 是
|-
| /players [online/o/count/c]
| /players
| 输出游戏中玩家的名单。(参数 online/o 仅输出在线玩家,参数 count/c 仅输出数量)
| 否
|-
| /p [online/o/count/c]
| /p o c
| 与 /players 相同。
| 否
|-
| /promote <player>
| /promote AzureDiamond
| 将玩家晋升为管理员。
| 是
|-
| /purge <player>
| /purge Cthon98
| 从聊天日志中清除特定玩家发送的信息。
| 是
|-
| /reply <message>
| /reply oh, really?
| 回复最后一个发送私信的玩家。
| 否
|-
| /r <message>
| /r oh, really?
| 与 /reply 相同。
| 否
|-
| /server-save
| /server-save
| 在多人游戏中将游戏保存到服务器上。
| 是
|-
| /shout <message>
| /shout Hello world!
| 向全体玩家发送信息,包括其它阵营。
| 否
|-
| /s <message>
| /s Hello world!
| 与 /shout 相同。
| 否
|-
| /swap-players <player> [player]
| /swap-players AzureDiamond
| 将自己的角色与指定玩家的角色互换,如果指定了两个玩家,则将这两个玩家的角色互换。
| 是
|-
| /unban <player>
| /unban xTROLLx
| 解封指定玩家。
| 是
|-
| /unignore <player>
| /unignore Cthon98
| 恢复指定玩家的聊天信息显示。
| 否
|-
| /unmute <player>
| /unmute Cthon98
| 解除玩家禁言
| 是
|-
| /whisper <player> <message>
| /whisper AzureDiamond that's what I see
| 向指定玩家发送私信。
| 否
|-
| /w <player> <message>
| /w AzureDiamond that's what I see
| 与 /whisper 相同。
| 否
|-
| /whitelist <add/remove/get/clear> [player]
| /whitelist get
| 编辑用户白名单。只有白名单中的玩家才能加入游戏。使用“get”参数输出白名单玩家列表时,需将“player”项留空。将白名单设置为空将禁用白名单功能,允许任何人加入游戏。
| 否
|}
 
== 脚本和作弊命令 ==
{| class="wikitable"
|-
! 命令
! 说明
|-
| /cheat [all/<planet-name>/<platform-name>/off]
| 研究所有科技项目并启用作弊模式(允许免费制造任意物品)。
* 使用 '''all''' 选项还会给予玩家一些额外物品。
* 指定一个 ''planet-name'' 或 ''platform-name'' 会将玩家移动到指定星球/平台的出生点。
* 使用 '''off''' 选项关闭作弊模式。
|-
| /command <command>
| 执行 Lua 命令(如果允许)。
|-
| /c <command>
| 与 /command 相同。
|-
| /editor
| 切换地图编辑器。
|-
| /measured-command <command>
| 执行 Lua 命令(如果允许)并测量耗时。
|-
| /mc <command>
| 与 /measured-command 相同。
|-
| /silent-command <command>
| 执行 Lua 命令(如果允许)并将结果输出到控制台。
|-
| /sc <command>
| 与 /silent-command 相同。
|}
 
这些功能非常强大,也允许玩家作弊。注意:一旦使用脚本命令,该存档的<span style="color:#FF0000">成就功能将被永久禁用!</span>
 
== 基础脚本示例 ==
 
=== 计算器 ===
<syntaxhighlight lang="lua">
/c game.player.print(1234*5678)
</syntaxhighlight>
 
=== 超常规缩放 ===
注意过度缩放可能导致性能下降,请小心操作。
<syntaxhighlight lang="lua">
/c game.player.zoom=0.1
</syntaxhighlight>
在标准模式中,最远缩放倍率为0.3,在地图编辑器中是0.1。更远的缩放倍率将被限制。
 
=== 快速采矿 ===
<syntaxhighlight lang="lua">
/c game.player.force.manual_mining_speed_modifier=1000
</syntaxhighlight>
 
=== 快速制造 ===
<syntaxhighlight lang="lua">
/c game.player.force.manual_crafting_speed_modifier=1000
</syntaxhighlight>
 
=== 解锁所有科技 ===
<syntaxhighlight lang="lua">
/c game.player.force.research_all_technologies()
</syntaxhighlight>
 
使用下一节中的命令撤销此操作
 
注意,在{{L|Map editor}}中,可以按住{{Keybinding|shift}}键点击科技界面上的“开始研究”按钮来研究指定的科技项目。
 
=== 取消所有科技 ===
这不会移除手动添加的加成效果。
<syntaxhighlight lang="lua">
/c for _, tech in pairs(game.player.force.technologies) do
tech.researched=false
end
</syntaxhighlight>
 
注意,在{{L|Map editor}}中,可以点击科技界面上的“删除科技”按钮来取消指定的科技项目。
 
=== 重置阵营 ===
这会重置阵营的所有数据,包括击杀和生产统计数据、科技、加成和地图探测状态。
<syntaxhighlight lang="lua">
/c game.player.force.reset()
</syntaxhighlight>
 
=== 总是显示铁路区间可视化 ===
永久显示铁路区间的可视化效果,而非只在手持铁路信号物品时显示。将 true 替换为 false 可以禁用此功能。
 
<syntaxhighlight lang="lua">
/c game.player.game_view_settings.show_rail_block_visualisation = true
</syntaxhighlight>
 
=== 设置所有火车自动驾驶 ===
将所有火车设置为自动驾驶模式 - 例如,在使用蓝图建造它们之后。
 
<syntaxhighlight lang="lua">
/c for key,ent in pairs (game.player.surface.find_entities_filtered{name="locomotive"}) do
    ent.train.manual_mode = false
end
</syntaxhighlight>
 
== 物品栏管理脚本 ==
 
=== 作弊模式 ===
允许无限免费制造。将 true 替换为 false 可以禁用此功能。
<syntaxhighlight lang="lua">
/c game.player.cheat_mode=true
</syntaxhighlight>
 
=== 补充资源(原油、铁矿等) ===
在游戏中将光标悬停在资源地格上:
<syntaxhighlight lang="lua">
/c game.player.selected.amount=7500
</syntaxhighlight>
 
或者使用以下命令将地图中所有的资源重新补满。ore.amount 可以更改为需要的值。
<syntaxhighlight lang="lua">
/c surface = game.player.surface
for _, ore in pairs(surface.find_entities_filtered({type="resource"})) do
    ore.amount = 10000
end
</syntaxhighlight>
 
=== 向玩家背包中添加物品 ===
将铁板(iron-plate)替换为所需物品的[[data.raw|内部名称]]。
<syntaxhighlight lang="lua">
/c game.player.insert{name="iron-plate", count=100}
</syntaxhighlight>
 
例如,使用以下命令在上帝模式中生成电力接口:
<syntaxhighlight lang="lua">
/c game.player.insert{name="electric-energy-interface"}
</syntaxhighlight>
 
在上帝模式中有多种物品可供选择:
 
* <code>infinity-chest</code> 永续箱 - 无限生成物品
* <code>infinity-pipe</code> 永续管 - 无限生成流体
* <code>electric-energy-interface</code> 电力接口 - 提供最高500吉瓦的电力
* <code>heat-interface</code> 热力接口 - 提供最高1000℃的热能
 
使用以下命令为玩家添加一套强大的装备和一些建筑工具:
<syntaxhighlight lang="lua">
/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 = "fission-reactor-equipment"})
p_armor.put({name = "fission-reactor-equipment"})
p_armor.put({name = "fission-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}
</syntaxhighlight>
 
=== 增加玩家背包容量 ===
为阵营中的所有玩家提供额外的100格背包容量。通过{{L|Toolbelt (research)}}实现:
<syntaxhighlight lang="lua">
/c game.player.force.character_inventory_slots_bonus=100
</syntaxhighlight>
 
== 世界操作脚本 ==
 
=== 显示玩家周围的地图 ===
探测玩家周围的地图,类似于{{L|Radar}}的效果。
<syntaxhighlight lang="lua">
/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}})
</syntaxhighlight>
或者从出生点开始:
<syntaxhighlight lang="lua">
/c local radius=150
game.player.force.chart(game.player.surface, {{x = -radius, y = -radius}, {x = radius, y = radius}})
</syntaxhighlight>
可将150更改为需要的半径,值越大所需时间越长。
 
=== 隐藏已探明地图 ===
隐藏所有已探明的区块,反转地图探测状态。
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 显示所有已生成地图 ===
向玩家团队显示所有已生成的地图。
<syntaxhighlight lang="lua">
/c game.player.force.chart_all()
</syntaxhighlight>
 
=== 删除区块 ===
如果大部分地图已经探明,会增加存档文件的大小。以下命令可以取消所有正在排队等待生成的区块,并移除 0,0 点周围32个区块以外的区块。注意,此命令会移除这些区块上的玩家实体。
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 删除未探明区块 ===
使用此命令删除玩家尚未探明的区块。可以在执行[[#隐藏已探明地图|隐藏已探明地图]]的命令后使用,以删除雷达未探测的区块。
 
<syntaxhighlight lang="lua">/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</syntaxhighlight>
 
=== 关闭昼夜交替 ===
使游戏始终处于白昼状态。
<syntaxhighlight lang="lua">
/c game.player.surface.always_day=true
</syntaxhighlight>
 
=== 改变游戏速度 ===
0.5为一半速度,1为默认速度,2为双倍速度,等等。最小值可以取0.01。这适用于很多场合,比如正常需要等待很长时间才能完成的事情。提高游戏速度可能导致性能下降,请小心操作。
<syntaxhighlight lang="lua">
/c game.speed=X
</syntaxhighlight>
 
=== 时间停止 ===
停止时间推移。如果将  "true" 替换为 "false",可以恢复时间推移。
<syntaxhighlight lang="lua">
/c game.player.surface.freeze_daytime=true
</syntaxhighlight>
 
=== 移除所有污染 ===
<syntaxhighlight lang="lua">
/c game.player.surface.clear_pollution()
</syntaxhighlight>
 
=== 彻底关闭污染 ===
<syntaxhighlight lang="lua">
/c for _, surface in pairs(game.surfaces) do
  surface.clear_pollution()
end
game.map_settings.pollution.enabled = false
</syntaxhighlight>
 
=== 增加大量污染 ===
<syntaxhighlight lang="lua">
/c game.player.surface.pollute(game.player.position, 1000000)
</syntaxhighlight>
 
=== 显示扬声器位置和放置者 ===
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 禁用友军伤害 ===
<syntaxhighlight lang="lua">
/c game.player.force.friendly_fire = false
</syntaxhighlight>
 
=== 新增资源地格 ===
以下命令将会以玩家角色为中心创建一片 11×11 格的资源地格,仅能在地面而非水域上创建,生成的资源地格将是完美的正方形。与自然生成过程类似,其资源数量是随机化的,但总体来说,区域边缘的资源数量较少,中心的资源数量较多。默认数值下生成的每个资源地格包含2500-3000单位的资源。
 
如果需要生成更大面积的资源,可以将 "local size = 5" 更改为更大的数字。更大的资源地块中的资源数量将呈指数级增加。建议不要超过30。
 
如果需要生成资源含量更高的地格,可以将 "local density = 10" 更改为更大的数字。输入一个大数字通常不会造成负面影响,但仍然建议不要超过100。
 
要改变生成资源的类型,可以将代码底部附近的 "stone" 替换为 "iron-ore", "copper-ore", "coal", 或 "uranium-ore"。
 
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
以灵活性角度而言,{{L|Map editor}}也可以用于创建/修改/删除资源地格。
 
=== 移除玩家周围的资源 ===
移除以玩家为中心 50 x 50 格区域内的所有资源地格。
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 新增油田 ===
在 3×3 格的正方形区域内创建9片油田。
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
或者随机生成,油田间不发生碰撞:
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 新增水域 ===
创建一个 4 x 2 格区域的小池塘。
<syntaxhighlight lang="lua">
/c
local waterTiles = {}
for y=2,4 do
for x=-2,2 do
  table.insert(waterTiles, {name="water", position={game.player.position.x+x, game.player.position.y+y}})
end
game.player.surface.set_tiles(waterTiles)
end
</syntaxhighlight>
 
=== 重新生成资源 ===
对于固体资源(如铁矿),删除所有资源实体,并按原始地图的生成方式重新创建资源实体。对于流体资源(如原油),将所有现存资源实体的产率重置为原始产率,并在整个地表上重新生成资源。
<syntaxhighlight lang="lua">
/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(prototypes.get_entity_filtered{{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
</syntaxhighlight>
 
=== 统计实体数量 ===
统计所有名称中包含特定字符串的实体的数量。
<syntaxhighlight lang="lua">
/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)
</syntaxhighlight>
 
=== 关闭悬崖生成 ===
设置尺寸为 "none"。仅对使用此命令后生成的区块有效。使用[[#删除所有悬崖|删除所有悬崖]]命令可以删除已经生成的悬崖。
<syntaxhighlight lang="lua">
/c local mgs = game.player.surface.map_gen_settings
mgs.cliff_settings.cliff_elevation_0 = 1024
game.player.surface.map_gen_settings = mgs</syntaxhighlight>
 
=== 删除所有悬崖 ===
删除世界中存在的所有悬崖。使用[[#关闭悬崖生成|关闭悬崖生成]]命令可以关闭新区块中悬崖的生成。
<syntaxhighlight lang="lua">
/c for _, v in pairs(game.player.surface.find_entities_filtered{type="cliff"}) do
  v.destroy()
end</syntaxhighlight>
 
=== 删除所有装饰 ===
删除世界中所有的装饰物。
<syntaxhighlight lang="lua">
/c game.player.surface.destroy_decoratives({})</syntaxhighlight>
 
=== 更改地图生成设置 ===
允许更改新区块的地图生成设置;此命令不会改变已生成的区块。[[#删除区块|已删除的区块]]会受到设置更改的影响,因为区块会在再次探索时重新生成。
 
要更改资源生成设置,在以下命令中将 "iron-ore" 替换为其它资源的[[Data.raw#resource|内部名称]],并将 "very-high"替换为需要的[https://lua-api.factorio.com/latest/Concepts.html#MapGenSize MapGenSize]值。将 "iron-ore" 替换为 "enemy-base" 可以更改敌方虫巢的生成设置。
 
<syntaxhighlight lang="lua">
/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</syntaxhighlight>
 
要更改水域生成设置,可将以下命令中的 "very-high" 替换为需要的[https://lua-api.factorio.com/latest/Concepts.html#MapGenSize MapGenSize]值。
 
<syntaxhighlight lang="lua">
/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 </syntaxhighlight>
 
=== 生成不可摧毁设施 ===
这将使实体无法被破坏或杀死。将鼠标悬停在实体上,然后运行:
<syntaxhighlight lang="lua">
/c game.player.selected.destructible = false
</syntaxhighlight>
 
=== 连接关联带 ===
如果存在至少两条[https://lua-api.factorio.com/latest/prototypes/LinkedBeltPrototype.html 关联带],其中一条的 "Entity tag"为 <code>in</code>,另一条的 "Entity tag"为 <code>out</code>,则可使用以下命令连接这两条关联带:
 
<syntaxhighlight lang="lua">
/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)
</syntaxhighlight>
 
== 敌人/进化脚本 ==
 
=== 设置进化因子 ===
取值范围从 0(新游戏)到 1。
<syntaxhighlight lang="lua">
/c game.forces["enemy"].set_evolution_factor(X, game.player.surface)
</syntaxhighlight>
 
=== 禁用随时间进化 & 增加随污染进化 ===
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
后一条命令末尾的 "2" 会将默认污染系数加倍。玩家可以更改此数字以进一步增加(或减少)污染值。
 
=== 杀死所有敌方阵营的虫子 ===
注意,这只会杀死可以移动的单位,不会摧毁虫巢。
<syntaxhighlight lang="lua">
/c game.forces["enemy"].kill_all_units()
</syntaxhighlight>
 
=== 杀死所有敌人 ===
这会杀死所有敌方单位和建筑,例如虫子、虫巢和沙虫。此命令仅对已生成世界中的敌人有效,因此地图上尚未探索且需要生成的区域中仍可能存在敌人。如有需要,可以使用命令[[#防止在新区块中出现虫子|防止在新区域中生成敌人]]。
<syntaxhighlight lang="lua">
/c local surface=game.player.surface
for key, entity in pairs(surface.find_entities_filtered({force="enemy"})) do
entity.destroy()
end
</syntaxhighlight>
 
=== 杀死所有附近敌人 ===
这将在设定范围内杀死所有虫子、虫巢和沙虫。默认范围为250格,大约是全高清分辨率下两倍缩放倍率的屏幕宽度。执行命令后会显示已杀死的对象数量。
 
<syntaxhighlight lang="lua">
/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)
</syntaxhighlight>
 
=== 启用/禁用和平模式 ===
启用和平模式后虫群不会主动进攻,除非玩家主动进攻虫群以激怒它们。将 true 替换为 false 可禁用此模式。已经存在的虫群不受此命令影响,因此启用和平模式后,虫群的进攻可能还会持续一段时间。
<syntaxhighlight lang="lua">
/c game.player.surface.peaceful_mode = true
</syntaxhighlight>
 
=== 启用/禁用虫族扩张 ===
虫群扩张选项允许虫群创建新的虫巢,此选项默认启用。将 true 替换为 false 可禁用此功能。
<syntaxhighlight lang="lua">
/c game.map_settings.enemy_expansion.enabled = true
</syntaxhighlight>
 
=== 防止在新区块中出现虫子 ===
在新生成的区块中不会出现虫子,但所有当前已生成的虫子不受影响。这相当于在地图生成设置中将 emeny-base.size 设置为 none,在游戏中途可以通过[[#更改地图生成设置|更改地图生成设置]]命令进行设置。
<syntaxhighlight lang="lua">
/c local surface = game.player.surface
local mgs = surface.map_gen_settings
mgs.autoplace_controls["enemy-base"].size = "none"
surface.map_gen_settings = mgs
</syntaxhighlight>
 
除了使用命令之外,玩家也可以使用{{L|Map editor}}界面在游戏中更改地图生成设置。通过 <code>/editor</code> 命令打开地图编辑器,转到“表面”选项卡然后点击“编辑地图生成设置”。
 
== 玩家角色脚本 ==
直接涉及玩家的命令。
 
=== 获取玩家位置 ===
输出玩家当前位置的坐标。
<syntaxhighlight lang="lua">
/c game.player.print(game.player.position)
</syntaxhighlight>
 
=== 传送玩家 ===
将玩家移动到指定位置。如果其它玩家执行上一个命令并分享坐标,玩家就可以传送到其它玩家身边。
<syntaxhighlight lang="lua">
/c game.player.teleport({X, Y})
</syntaxhighlight>
 
要传送到出生点,请使用坐标 0,0。
 
要传送到不同的星球/表面,请使用:
<syntaxhighlight lang="lua">
/c game.player.teleport({X, Y}, 'surface_name')
</syntaxhighlight>
 
=== 启用上帝模式 ===
上帝模式会移除玩家角色,使玩家能够飞越障碍并不受伤害。
 
将玩家控制与角色解绑,并删除角色:
<syntaxhighlight lang="lua">
/c game.player.character.destroy()
</syntaxhighlight>
 
要撤销上一条命令,需要重新生成一个玩家角色。这将在世界的出生点生成一个新角色,此时玩家可以将控制与角色绑定。
<syntaxhighlight lang="lua">
/c game.player.create_character()
</syntaxhighlight>
 
=== 启用远距离操作 ===
启用远距离操作,允许玩家在更远的地方建造和与实体交互。默认操作距离为10。
<syntaxhighlight lang="lua">
/c local reach = 10000
game.player.force.character_build_distance_bonus = reach
game.player.force.character_reach_distance_bonus = reach
game.player.force.character_resource_reach_distance_bonus = reach
game.player.force.character_item_drop_distance_bonus = reach
</syntaxhighlight>
 
=== 寻找玩家尸体 ===
在地图上对玩家实体进行 ping 操作。
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 增加奔跑速度 ===
<syntaxhighlight lang="lua">
/c game.player.character_running_speed_modifier=3
</syntaxhighlight>
 
== 科研脚本 ==
 
=== 开启快速研究 ===
<syntaxhighlight lang="lua">
/c game.player.force.laboratory_speed_modifier=1
</syntaxhighlight>
-0.5 是一半速度,0 是正常速度,1 是双倍速度,2 是三倍速度,等等。
 
=== 研究指定科技 ===
科技项目的内部名称可以在其页面右侧的信息框中找到。
<syntaxhighlight lang="lua">
/c game.player.force.technologies['electric-energy-distribution-1'].researched=true
/c game.player.force.technologies['steel-processing'].researched=true
</syntaxhighlight>
 
要研究高等级的无限科技,需手动设置等级:
<syntaxhighlight lang="lua">
/c game.player.force.technologies['worker-robots-speed-6'].level = 100
/c game.player.force.technologies['mining-productivity-4'].level = 100
</syntaxhighlight>
 
=== 取消指定科技 ===
科技项目的内部名称可以在其页面右侧的信息框中找到。
<syntaxhighlight lang="lua">
/c game.player.force.technologies['electric-energy-distribution-1'].researched=false
/c game.player.force.technologies['steel-processing'].researched=false
</syntaxhighlight>
 
=== 启用指定配方 ===
配方/物品的内部名称可以在其页面右侧的信息框中找到。
<syntaxhighlight lang="lua">
/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
</syntaxhighlight>
 
=== 启用所有配方 ===
<syntaxhighlight lang="lua">
/c for name, recipe in pairs(game.player.force.recipes) do recipe.enabled = true end
</syntaxhighlight>
 
=== 重置科技效果 ===
这将重置所有配方的启用/解锁状态,使其与当前已研究的科技匹配,同时重置其它科技效果,例如采矿速度加成等。对配方/效果的任何手动修改都将被撤销。
<syntaxhighlight lang="lua">
/c game.player.force.reset_technology_effects()
</syntaxhighlight>
注意:当添加或更改模组后,如果解锁配方的科技已经研究完成,但配方仍然不可用时,可以使用此命令作为快速解决方案。
 
== 模组工具 ==
基础游戏中大部分物体的内部名称都可以在 [[data.raw]] 中查找。
 
=== 访问模组数据 ===
如果命令以 __mod-name__ 开头,它将在具有相同名称的模组环境中运行。例如,以下命令将输出 Even Distribution 模组的数据内容:
<syntaxhighlight lang="lua">
/c __even-distribution__ game.player.print(serpent.dump(global))
</syntaxhighlight>
 
=== 将玩家所在的地格输出到控制台 ===
<syntaxhighlight lang="lua">
/c game.player.print(game.player.surface.get_tile(game.player.position).name)
</syntaxhighlight>
 
=== 将所有已研究科技写入文件 ===
<syntaxhighlight lang="lua">
/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)
</syntaxhighlight>
 
=== 将所有已解锁配方写入文件 ===
<syntaxhighlight lang="lua">
/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)
</syntaxhighlight>
 
=== 将模组列表写入文件 ===
将所有当前已激活的模组及其版本号写入[[Application directory/zh#用户数据目录|用户数据目录]]下的 script-output/mods.txt 文件中。
<syntaxhighlight lang="lua">
/c helpers.write_file("mods.txt", serpent.block(script.active_mods))
</syntaxhighlight>
 
== 更新历史 ==
{{History|1.1.92|
* 添加了科技研究完成时的通知。
* 添加了 /enable-research-queue 命令,用于启用研究队列而不禁用成就功能。}}
 
== 参见 ==
* {{L|Command line parameters}}
* [https://lua-api.factorio.com/latest/index-runtime.html 最新版本API]
 
{{C|Modding}}

Latest revision as of 03:55, 7 May 2025

控制台是游戏内置的命令行界面。关于执行游戏设置的命令行界面,请参阅页面:命令行参数

在游戏中,控制台可用于:

  • 与其他玩家聊天
  • 查看状态更新
  • 运行命令 / 脚本 / 作弊码

命令分为三种类型:

使用控制台

波浪键键(`)可切换控制台显示。此键位于1键左侧,TAB键上方。

玩家可以在 设置 → 按键→ 打开会话(及Lua控制台) 界面设置自定义快捷键。当控制台显示时,屏幕底部会显示闪烁的光标;输入聊天信息或命令,然后按回车键发送(这会同时关闭控制台)。关于聊天信息和命令前缀的内容可在本页面下文中找到。

控制台支持富文本标签。这些标签对于分享蓝图、在聊天中标记地图位置、为地图标记和车站添加图标非常有用。按住CTRL + ALT并点击地图或地面将会自动插入GPS位置标签并发送到控制台。当控制台开启时,按住SHIFT键点击大多数物品可以将其标签插入控制台。

当控制台关闭后,屏幕上只会显示最近的消息/命令,而且它们会逐渐淡出(打开控制台会立即重新显示所有最近信息)。注意,默认情况下所有已执行命令对所有用户可见。可以在 设置 → 界面 → 会话淡出延迟 界面修改信息淡出时间。

使用 /clear 命令可清除控制台显示内容。

使用键可以滚动查看控制台历史记录。按TAB键可开启智能代码补全,包括命令、选项和玩家名称。

常规命令

命令 示例 说明 仅限管理员
/alerts <enable/disable/mute/unmute> <alert> /alerts disable turret_fire 启用/禁用,静音/取消静音指定类型的警报。可用的警报类型包括:entity_destroyed, entity_under_attack, not_enough_construction_robots, no_material_for_construction, not_enough_repair_packs, platform_tile_building_blocked, turret_out_of_ammo, turret_fire, custom, no_storage, train_out_of_fuel, train_no_path, no_platform_storage, collector_path_blocked, unclaimed_cargo, no_roboport_storage, pipeline_overextended。
/clear /clear 清除控制台显示内容。
/color <color> /color 20 255 255 改变颜色。可以是预定义的颜色之一,或者是“# # #”格式的RGB 颜色值。可用的预定义颜色:default, red, green, blue, orange, yellow, pink, purple, white, black, gray, brown, cyan, acid。
/evolution /evolution 输出当前的进化因子信息。
/help [command] /help 输出可用命令列表,可选参数可用于指定需要描述的命令。
/h [command] /h 与 /help 命令相同。
/mute-programmable-speaker <mute/unmute> <local/everyone> /mute-programmable-speaker mute local 对程控扬声器发出的全局声音执行静音/取消静音。使用“local”参数可以仅对本地客户端静音。管理员可以使用“everyone”参数来对服务器上的所有玩家静音。
/perf-avg-frames <number> /perf-avg-frames 100 用于平均性能计数器的/更新次数。默认值为100。建议使用5-10的值以实现快速收敛,但此时数值波动会更快。
/permissions /permissions 开启权限设置界面。
/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
/reset-tips /reset-tips 重置提示与技巧条目状态,使其恢复到游戏刚开始的状态。
/screenshot [x resolution] [y resolution] [zoom] /screenshot 以玩家位置为中心截取屏幕截图,并隐藏游戏界面。截图会保存在用户数据目录中。截图分辨率可以更改,默认为当前窗口大小,缩放倍率可以更改,默认值为1。
/seed /seed 输出初始地图种子。
/time /time 输出地图持续时间信息。
/toggle-action-logging /toggle-action-logging 切换记录游戏中所有输入动作的日志。此值不会在游戏重启时存留,且仅影响多人游戏中的本地线程。
/toggle-heavy-mode /toggle-heavy-mode 用于检查不同步问题。此命令会减慢游戏速度,使多人游戏无法进行。
/unlock-shortcut-bar /unlock-shortcut-bar 解锁所有快捷工具栏项目,包括导入蓝图代码、复制和粘贴、红图和绿图。
/unlock-tips /unlock-tips 解锁所有提示与技巧条目。
/version /version 输出当前游戏版本。

多人游戏命令

命令 示例 说明 仅限管理员
<message> Hello team! / 开头的控制台输入将会作为团队聊天信息显示。
/admin /admin 打开玩家管理界面。
/admins /admins 输出游戏管理员名单。
/ban <player> <reason> /ban xTROLLx Throwing grenades in base 封禁指定玩家。
/bans /bans 输出被封禁玩家名单。
/banlist <add/remove/get/clear> <player> /banlist get 将玩家移入/移出封禁名单。与 /ban 或 /unban 相同。
/config /config 打开服务器设置界面。
/config <get/set> <option> <value> /config set password 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 <player> /delete-blueprint-library everybody confirm 从存档中删除指定离线玩家的蓝图库。输入“everybody confirm”可删除所有离线玩家的蓝图库。
/demote <player> /demote AzureDiamond 将玩家从管理员降级。
/ignore <player> /ignore Cthon98 忽略特定玩家的聊天内容,使之不在聊天界面显示。管理员消息仍然显示。
/ignores /ignores 输出被忽略玩家名单。
/kick <player> <reason> /kick xTROLLx Throwing grenades in base 将指定玩家踢出游戏。
/mute <player> /mute Cthon98 禁止指定玩家发送聊天信息。
/mutes /mutes 全体禁言(不能发送聊天信息)
/open <player> /open AzureDiamond 打开另一个玩家的背包。
/o <player> /o AzureDiamond 与 /open 命令相同。
/players [online/o/count/c] /players 输出游戏中玩家的名单。(参数 online/o 仅输出在线玩家,参数 count/c 仅输出数量)
/p [online/o/count/c] /p o c 与 /players 相同。
/promote <player> /promote AzureDiamond 将玩家晋升为管理员。
/purge <player> /purge Cthon98 从聊天日志中清除特定玩家发送的信息。
/reply <message> /reply oh, really? 回复最后一个发送私信的玩家。
/r <message> /r oh, really? 与 /reply 相同。
/server-save /server-save 在多人游戏中将游戏保存到服务器上。
/shout <message> /shout Hello world! 向全体玩家发送信息,包括其它阵营。
/s <message> /s Hello world! 与 /shout 相同。
/swap-players <player> [player] /swap-players AzureDiamond 将自己的角色与指定玩家的角色互换,如果指定了两个玩家,则将这两个玩家的角色互换。
/unban <player> /unban xTROLLx 解封指定玩家。
/unignore <player> /unignore Cthon98 恢复指定玩家的聊天信息显示。
/unmute <player> /unmute Cthon98 解除玩家禁言
/whisper <player> <message> /whisper AzureDiamond that's what I see 向指定玩家发送私信。
/w <player> <message> /w AzureDiamond that's what I see 与 /whisper 相同。
/whitelist <add/remove/get/clear> [player] /whitelist get 编辑用户白名单。只有白名单中的玩家才能加入游戏。使用“get”参数输出白名单玩家列表时,需将“player”项留空。将白名单设置为空将禁用白名单功能,允许任何人加入游戏。

脚本和作弊命令

命令 说明
/cheat [all/<planet-name>/<platform-name>/off] 研究所有科技项目并启用作弊模式(允许免费制造任意物品)。
  • 使用 all 选项还会给予玩家一些额外物品。
  • 指定一个 planet-nameplatform-name 会将玩家移动到指定星球/平台的出生点。
  • 使用 off 选项关闭作弊模式。
/command <command> 执行 Lua 命令(如果允许)。
/c <command> 与 /command 相同。
/editor 切换地图编辑器。
/measured-command <command> 执行 Lua 命令(如果允许)并测量耗时。
/mc <command> 与 /measured-command 相同。
/silent-command <command> 执行 Lua 命令(如果允许)并将结果输出到控制台。
/sc <command> 与 /silent-command 相同。

这些功能非常强大,也允许玩家作弊。注意:一旦使用脚本命令,该存档的成就功能将被永久禁用!

基础脚本示例

计算器

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

超常规缩放

注意过度缩放可能导致性能下降,请小心操作。

/c game.player.zoom=0.1

在标准模式中,最远缩放倍率为0.3,在地图编辑器中是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()

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

注意,在地图编辑器中,可以按住SHIFT键点击科技界面上的“开始研究”按钮来研究指定的科技项目。

取消所有科技

这不会移除手动添加的加成效果。

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

注意,在地图编辑器中,可以点击科技界面上的“删除科技”按钮来取消指定的科技项目。

重置阵营

这会重置阵营的所有数据,包括击杀和生产统计数据、科技、加成和地图探测状态。

/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

向玩家背包中添加物品

将铁板(iron-plate)替换为所需物品的内部名称

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

例如,使用以下命令在上帝模式中生成电力接口:

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

在上帝模式中有多种物品可供选择:

  • infinity-chest 永续箱 - 无限生成物品
  • infinity-pipe 永续管 - 无限生成流体
  • electric-energy-interface 电力接口 - 提供最高500吉瓦的电力
  • heat-interface 热力接口 - 提供最高1000℃的热能

使用以下命令为玩家添加一套强大的装备和一些建筑工具:

/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 = "fission-reactor-equipment"})
	p_armor.put({name = "fission-reactor-equipment"})
	p_armor.put({name = "fission-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格背包容量。通过科技:工具腰带实现:

/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单位的资源。

如果需要生成更大面积的资源,可以将 "local size = 5" 更改为更大的数字。更大的资源地块中的资源数量将呈指数级增加。建议不要超过30。

如果需要生成资源含量更高的地格,可以将 "local density = 10" 更改为更大的数字。输入一个大数字通常不会造成负面影响,但仍然建议不要超过100。

要改变生成资源的类型,可以将代码底部附近的 "stone" 替换为 "iron-ore", "copper-ore", "coal", 或 "uranium-ore"。

/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

新增水域

创建一个 4 x 2 格区域的小池塘。

/c
local waterTiles = {}
for y=2,4 do
 for x=-2,2 do
  table.insert(waterTiles, {name="water", position={game.player.position.x+x, game.player.position.y+y}})
 end
 game.player.surface.set_tiles(waterTiles)
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(prototypes.get_entity_filtered{{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)

关闭悬崖生成

设置尺寸为 "none"。仅对使用此命令后生成的区块有效。使用删除所有悬崖命令可以删除已经生成的悬崖。

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

删除所有悬崖

删除世界中存在的所有悬崖。使用关闭悬崖生成命令可以关闭新区块中悬崖的生成。

/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值。将 "iron-ore" 替换为 "enemy-base" 可以更改敌方虫巢的生成设置。

/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

连接关联带

如果存在至少两条关联带,其中一条的 "Entity tag"为 in,另一条的 "Entity tag"为 out,则可使用以下命令连接这两条关联带:

/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"].set_evolution_factor(X, game.player.surface)

禁用随时间进化 & 增加随污染进化

/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

启用/禁用虫族扩张

虫群扩张选项允许虫群创建新的虫巢,此选项默认启用。将 true 替换为 false 可禁用此功能。

/c game.map_settings.enemy_expansion.enabled = true

防止在新区块中出现虫子

在新生成的区块中不会出现虫子,但所有当前已生成的虫子不受影响。这相当于在地图生成设置中将 emeny-base.size 设置为 none,在游戏中途可以通过更改地图生成设置命令进行设置。

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

除了使用命令之外,玩家也可以使用地图编辑器界面在游戏中更改地图生成设置。通过 /editor 命令打开地图编辑器,转到“表面”选项卡然后点击“编辑地图生成设置”。

玩家角色脚本

直接涉及玩家的命令。

获取玩家位置

输出玩家当前位置的坐标。

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

传送玩家

将玩家移动到指定位置。如果其它玩家执行上一个命令并分享坐标,玩家就可以传送到其它玩家身边。

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

要传送到出生点,请使用坐标 0,0。

要传送到不同的星球/表面,请使用:

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

启用上帝模式

上帝模式会移除玩家角色,使玩家能够飞越障碍并不受伤害。

将玩家控制与角色解绑,并删除角色:

/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
game.player.force.character_resource_reach_distance_bonus = reach
game.player.force.character_item_drop_distance_bonus = reach

寻找玩家尸体

在地图上对玩家实体进行 ping 操作。

/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-name__ 开头,它将在具有相同名称的模组环境中运行。例如,以下命令将输出 Even Distribution 模组的数据内容:

/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)

将模组列表写入文件

将所有当前已激活的模组及其版本号写入用户数据目录下的 script-output/mods.txt 文件中。

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

更新历史

  • 1.1.92:
    • 添加了科技研究完成时的通知。
    • 添加了 /enable-research-queue 命令,用于启用研究队列而不禁用成就功能。

参见