自定义快捷键

自定义快捷键

本模组允许你将控制台命令绑定到热键,并添加了许多新的控制台命令。详情请参阅说明。

杂项

TL;DR

这个模组对玩家和模组制作者都很有用。您可以通过编辑 hotkeys.json 来添加/编辑热键(更改将立即生效)。按键绑定可以在模组选项菜单中更改(按键 + 按键修饰符)。

一些功能:

  • 您可以通过一次按键执行多个控制台命令
  • 您可以使用热键在不同状态之间切换(每次按键执行不同的命令)
  • 您可以在按住热键时持续重复执行命令
  • 您可以为热键使用可选的辅助按键
  • 添加了许多新的控制台命令(例如使用/装备物品或将模块连接到海虾号)

MOD 选项菜单

默认情况下,所有热键都已添加到模组选项菜单中。每个热键有两个绑定按钮,但与原生绑定不同,它们不是用于主/次按键,而是用于按键和可选的按键修饰符。

两个按钮均可用于绑定按键以及绑定修饰键。

您可以使用 Control、Alt 和 Shift 键作为修饰键(左右键被视为不同的键)。您也可以单独使用这些键,在这种情况下它们将像普通键一样工作。

如果你同时绑定两个修饰键或两个非修饰键,那么只会使用第一个键。

您可以通过将鼠标指针悬停在绑定按钮上并按Delete键来清除绑定(无需点击按钮)。

HOTKEYS.JSON

所有热键都在模组文件夹的hotkeys.json中指定。您可以直接从游戏内打开此文件(模组选项菜单中的按钮)。

对 hotkeys.json 的更改会立即生效(在您切换回游戏时),您无需重新加载游戏即可添加或编辑热键。

示例 hotkeys.json 包含三个热键:

{
  "hotkeys": [
    {
      "key": "A",
      "command": "some_console_command"
    },
    {
      "key": "B",
      "command": "some_console_command1; some_console_command2",
      "label": "两个命令"
    },
    {
      "key": "LeftAlt+C",
      "command": "some_console_command value1 | some_console_command value2",
      "mode": "PressRelease",
      "label": "使用修饰键切换",
      "hidden": true
    }
  ]
}

字段描述

每个热键的描述格式如下:

{
  "key": "A",
  "command": "some_console_command",
  "mode": "Press",
  "label": "某个标签",
  "hidden": false
}

字段 key 和 command 是必需的,其他字段是可选的。

"key"(必需):可以是空字符串(""),可以是单个按键(例如"A"或"LeftAlt")或带有一个修饰键的按键(例如"LeftShift+F1")。

"command"(必需):与此热键关联的控制台命令。您可以在此处使用任何有效的控制台命令和两种分隔符——分号(;)和竖线(|)。更多信息请参阅第5节。

"mode"(可选,默认值:"Press"):热键模式。热键可以在三种不同模式下工作:

  • 按下模式(0或"Press"):按键按下时命令将执行一次
  • 按下/释放模式(1或"PressRelease"):按键按下时命令将执行一次,按键释放时将再次执行
  • 保持模式(2或"Hold"):按键按住期间每帧都会执行命令

"label"(可选,默认值:""):模组选项菜单中该选项的标签。若省略此字段或留空,则将使用命令本身作为标签。

"hidden"(可选,默认值:false):若设为true,该选项将在模组设置菜单中隐藏,但快捷键仍保持激活状态。

命令分隔符

您可以在"命令"字段中使用两种分隔符 - 分号(;)和竖线(|)。

如果你需要按一次键执行多个命令,可以用分号将它们分开,例如:"command": "item titanium 5; item silver 10; item gold 15"。

所有这些命令将作为一个单一动作执行(每个命令在自己的帧上)。此外,你可以使用等待命令在命令之间添加延迟(更多信息请参见第6.1节)。

对于更复杂的行为,您可以使用竖线作为分隔符。竖线将命令字符串拆分为独立命令的列表。列表中的每个命令将在单独的热键激活时依次执行。

例如,假设你有这个命令字符串:"command": "speed 10 | speed 1" 并为热键使用默认的 "Press" 模式。那么,当你第一次按下热键时,将执行命令 "speed 10"。

在下次按下热键时,将执行命令"speed 1"。第三次按下将再次执行"speed 10",依此类推。

使用相同的命令字符串和"PressRelease"模式,第二个命令"speed 1"将在您释放热键时执行。

使用"保持"模式时,在热键按住期间,第一和第二条指令将在每一帧交替执行。

你可以在同一个命令字符串中使用两种分隔符,例如 "daynightspeed 10; speed 10 | daynightspeed 5; speed 5 | daynightspeed 1; speed 1"。竖线的优先级高于分号。

新命令

本节介绍此模组新增的控制台命令。

必需参数用尖括号括起(例如<width>),可选参数用方括号括起(例如[itemtype])。

6.1. 通用命令

addhotkey <command> 添加一个带有指定命令的热键并打开选项菜单。从控制台使用它,可以快速向hotkeys.json中添加一个热键模板。 示例:addhotkey item titanium 10

setresolution <width> <height> [fullscreen:{yes|no}] 设置Subnautica窗口分辨率。第三个参数默认为true。 示例:setresolution 1280 720 false

setwindowpos <x> <y> 设置Subnautica窗口位置。 示例: setwindowpos 10 10

fov <value> 改变视野范围。潜水镜在视野值较低时会遮挡视线,可使用devtools_hidegui命令将其隐藏(详见6.5节)。 示例:fov 60

showmessage <message> 在屏幕左上角显示消息。 示例:showmessage 你好,世界!

clearmessages 清除当前在屏幕左上角显示的所有消息。

showmodoptions 打开选项菜单并切换到"模组"选项卡。

lastcommand [index] 执行最后输入的控制台命令。参数是从控制台历史记录末尾开始的命令的零基索引(默认为0)。 示例(执行倒数第二个命令):lastcommand 1

wait <seconds> 在由分号分隔的命令之间添加延迟(更多信息请参见第5节)。 示例(在两个命令之间添加半秒延迟):command1; wait 0.5; command2

6.2. 物品/槽位命令

bindslot <slotID> [itemtype] 将库存中的特定物品分配给快速栏槽位ID(槽位ID是从零开始的索引)。如果省略物品类型,则槽位将清除之前的绑定。 示例(将手电筒绑定到第一个快捷栏):bindslot 0 flashlight

equipslot [slotID] 将物品装备到快速槽 slotID 中(slotID 是从零开始的索引)。如果省略 slotID,则当前装备的物品将被收起。 示例(在第一个槽位装备物品):equipslot 0

useitem <itemtype> [itemtype2] .. [itemtypeN] 使用背包中的消耗品或装备可装备物品。如果指定了多个物品类型,将使用列表中第一个找到的物品。 示例(喝一瓶水):useitem filteredwater disinfectedwater bigfilteredwater

6.3. 载具命令

vehicle_enter 进入附近的海蛾号或海虾号的命令。

vehicle_upgrades 打开附近海卡车或虾式机甲升级界面的命令。

seatruck_forcedexit 使用此命令无论连接了多少模块都可以从海蛾号外部退出。仅在玩家驾驶海蛾号时有效。

seatruck_dropmodules [keep_modules] 从海蛾号断开模块连接,但保留前 keep_modules 数量的模块连接(默认值为零)。仅在玩家驾驶海蛾号时生效。 示例(断开除前两个模块外的所有模块):seatruck_dropmodules 2

seatruck_dropmodules_end [drop_modules] 断开与海卡车的 drop_modules 数量模块的连接,从卡车的末端开始计数(默认为1)。仅在玩家驾驶海卡车时有效。 示例(断开最后一个模块的连接): seatruck_dropmodules_end 1

seatruck_forcedconnect [maxdistance] [maxangle] 将最近的松散模块连接到海卡车上。模块应距离卡车后部小于最大距离(默认距离为10)。模块与卡车方向之间的角度应小于最大角度(默认角度为30度)。建议使用默认值。仅当玩家驾驶海卡车时有效。

6.4. Game* 命令

game_startnew [game_mode:{survival|freedom|hardcore|creative}] 在指定游戏模式下开始新游戏。仅在主菜单中有效。参数默认为'creative'。 示例: game_startnew survival

game_load [saveslot] 加载指定槽位ID的已保存游戏(你可以使用UITweaks查看存档的槽位ID)。仅在主菜单中有效。默认加载最后保存的游戏。 示例: game_load 10

game_save 将当前游戏保存到其存档位。

game_quit [to_desktop:{true|false}] 退出游戏。参数默认为 false(退出到主菜单)。 示例:game_quit true

6.5. 开发者工具

devtools_toggleterrain 切换调试信息菜单(原版中为F1键)。

devtools_togglegraphics 切换调试图形菜单(原版中为F3)。

devtools_toggleframegraph 切换性能图表。

devtools_hidegui [state:{none|mask|ui|maskui|all}] 0 或 none - 不隐藏任何内容
1 或 mask - 隐藏潜水员面具
2 或 ui - 隐藏HUD界面
3 或 maskui - 隐藏面具和HUD界面
4 或 all - 隐藏面具、HUD界面和玩家模型

如果省略状态参数,命令将循环遍历所有状态。 示例:devtools_hidegui mask

命令示例

本节展示了用于游戏游玩和模组开发的各种命令使用示例。您可以将它们作为自己命令的起点。这些及其他示例命令可在模组文件夹中的 hotkeys.sample.json 中找到(您可以复制部分命令或直接将其重命名为 hotkeys.json)。

"bindslot 0 flashlight; equipslot 0 | bindslot 1 propulsioncannon; equipslot 1"

"bindslot 0 seaglide; equipslot 0; autoforward true | bindslot 0 flashlight; equipslot 0; autoforward false"

切换海蛾号和手电筒的命令(同时切换自动前进)

"devtools_hidegui mask; fov 5 | fov 60; devtools_hidegui none"

放大镜头的命令(在各种情况下都很有用)。潜水镜在低视野值下效果不佳,因此需要隐藏它。您可能希望将其与按下释放热键模式一起使用。

"setresolution 1280 720 false; setwindowpos 10 10 | setresolution 2560 1440"

切换全屏模式的命令(主要在模组开发时有用)。同时将游戏窗口移动到角落。

"spawn exosuit; warpforward 10; speed 10; vehicle_enter; wait 2; speed 1; clearmessages"

生成海虾号并进入其中的命令(用于模组开发时使用)。使用 speed 和 wait 命令来加速生成和进入的动画(wait命令受speed命令影响,因此实际等待0.2秒)。

要求:

  • QMod管理器
  • SML助手

安装:

将压缩包解压到您的 QMods 文件夹中

更新检查:

此模组会定期通过互联网检查更新。 您可以在 mod.json 中禁用它(将 "UpdateCheck" 设置为 false)。

源代码:

https://github.com/zorgesho/SubnauticaMods/tree/master/CustomHotkeys