MCM快捷方式NG
MCM 快捷方式 NG 是一个SKSE插件,允许你通过单次按键、组合键或控制器按钮来打开模组配置菜单(MCM)、特定的MCM模组,甚至是特定的MCM模组页面。
别再为了调整一个设置而滚动冗长的模组列表了。把你最常用的MCM映射到快捷键上,一键即可访问。功能特性- 原生C++性能: 与依赖Papyrus的现有替代方案不同,此模组采用C++(CommonLibSSE-NG)构建。它更加快速、轻量,并且 不会崩溃到桌面 (我希望,我测试了一堆。)
- 直接访问:
- 打开MCM主着陆页面。
- 打开特定模组的设置。
- 打开模组设置中的特定页面。
- 灵活按键组合: 每个快捷键最多支持3个按键。配置中标注为“修饰键”,但任何按键均可使用。您可以设置需要同时按住“X”和“Y”再按下“Z”的快捷键。
- 松开时激活: 快捷键仅在所有按键都按下时触发 已发布 并且如果在快捷键输入期间没有按下其他按键。这可确保精确控制并防止与其他输入产生冲突。
- 输入类型分配: 在JSON中,快捷键被明确区分为键盘或控制器输入,以便您为每种设备创建独立的映射而不会产生冲突。
- 顺序激活: 强制特定按键按下顺序的选项(修饰键1 -> 修饰键2 -> 热键)。
- 延迟: 可配置跳转到特定页面之前的等待时间。这确保大型MCM有足够时间初始化脚本并加载数据,然后模组再尝试切换页面。
- 菜单感知: 配置在特定菜单(物品栏、对话、魔法菜单、地图)中禁用的快捷键。
- 热重载设置: 按住任意已启用的快捷键(时长可在INI中配置)即可重新加载模组设置,无需重启游戏。
- Papyrus API: 包含供模组作者通过脚本打开特定MCM或页面的函数。
- 修复快速滚动Bug: 自动修复快速滚动bug,该bug在papyrus脚本使用UI.Invoke()或SKSE插件使用RE::UIMessageQueue::GetSingleton()->AddMessage(menuName, RE::UI_MESSAGE_TYPE::kShow, nullptr)时可能发生,只要打开的菜单具有kUsesCursor或kUpdateUsesCursor标志。
配置配置通过位于以下位置的两个文件进行处理:
Data/SKSE/Plugins/。(可在“默认INI和JSON”可选下载中获取)
MCMShortcutNG.ini(常规设置)控制模组的全局行为。
- 设置重载阈值(毫秒): 你必须多久 握住 触发设置重载的快捷键组合。
- 也可以关闭已打开的MCM: 如果 真,在特定菜单打开时按下快捷键将关闭该菜单。
- 返回之前关闭的菜单: 如果 是的,关闭MCM将使你返回到之前的菜单(例如,物品栏)。
- 日志级别: 设置为 3 查看条目时可显示所有模组名称,或 4 识别键位代码。
- 打印当前菜单和页面名称的热键: 将其设置为DirectX扫描码(例如49代表‘N’)。在MCM中按下时,会触发游戏内通知,显示模组名称和页面名称。设置为0以禁用。
2. MCMShortcutNG.json(快捷方式)这是您定义热键的地方。另外,请参见下面的JSON示例。
关键参数:- 修饰符与快捷键:
- 使用键盘时,请按 DirectX 扫描码 整数。 这里是一份扫描码列表(UESP).
- 你可以将任何不想使用的修饰符设为0来禁用它们。
- 手柄或非标准按键:设置 日志级别 = 4 在INI中,启动游戏,按下所需的按键/按钮,然后查看日志以获取其代码。
- 注意: “修饰键”不必非得是Shift/Ctrl/Alt。你可以选择任意按键作为修饰键。
- 控制器: 设置为 false 针对键盘/鼠标, 真 使用游戏手柄操控。
- 按键顺序至关重要: 如果 真实,你必须严格按照“修饰键1 -> 修饰键2 -> 热键”的顺序依次按下,否则只需同时按住它们,顺序不限。
- 模组名称/页面名称: 特定目标。将Mod名称设为“无”以打开MCM主列表/起始页。
- 返回关闭: 使快捷键在打开自身模组/页面后,能够关闭之前打开的任意模组/页面,并在下次激活时重新打开被关闭的模组/页面。通过ESC/Tab键关闭日志菜单将重置快捷键,使其重新打开自身的模组/页面。
- 模组/页面打开延迟: 以毫秒为单位的时间 等待 在打开菜单或页面之前。
- 为什么? 有些模组的MCM菜单非常庞大,包含大量Papyrus脚本。如果模组在MCM加载完成前就尝试打开页面,可能会失败。如果某个特定页面快捷键无法使用,请增大此值;当日志级别为3或以上时,日志可能会就此给出警告。
重要: 快捷键触发期间无法按下其他按键,且快捷键仅触发一次。
所有按键已释放。如何查找Mod和页面名称你需要模组的内部名称和页面,JSON才能正常工作。
方法一:游戏内通知(最简单)1. 设置
打印当前菜单和页面名称的热键 在INI中(例如,49代表'N')。
2. 打开所需的MCM页面并按快捷键。
3. 将出现一个通知框。
- 模组名称: 这是准确的。 仅当您安装了Menu Maid 2时 (自0.0.10版本起,此功能可能始终使用非翻译键)。
- 如果你 不要 拥有Menu Maid 2时,通知可能仍会显示翻译后的名称(例如“Immersive HUD”),而JSON实际要求的是内部翻译键(例如, $fzIH_ModName)不过,并非每个模组都使用翻译键来显示模组名称,因此你可能并不需要。再次强调,只有在未安装 Menu Maid 2 时,你才需要为模组名称添加翻译键;否则,你可以使用翻译键或已翻译名称。在这种情况下,若未安装 Menu Maid 2,请使用下面的方法2。
- 页面名称: 这始终是准确的。你可以直接将其复制到你的JSON中。
方法2:日志(始终准确)如果你不使用Menu Maid 2,则必须通过日志找到正确的Mod名称字符串。
设置
日志级别 = 3 在INI文件中。
2. 设置一个快捷方式,使用无效的模组名称,例如“idk”(这样它将搜索所有模组名称)。
3. 运行快捷方式。
4. 检查
我的游戏/上古卷轴5:天际特别版/SKSE/MCMShortcutNG.log.
5. 查找以
modName:.
[01:21:23.627] [32940] [D] > 模组名称:$fzIH_ModName,索引:7
…
[01:21:24.132] [54904] [D] > 页面名称:$fzIH_PageGeneral,索引:0
在这种情况下,你需要放置
"$fzIH_ModName" 作为模组名称及
"$fzIH_PageGeneral" 作为JSON中的页面名称,用于打开沉浸式HUD的“通用”页面。
示例 JSON注意:注释(文本位于 //) 在以下示例中仅用于解释说明。 不要在你的实际JSON文件中包含注释 否则将无法加载。剧透:
显示
[
{
"_KeyCodeComment": "键位代码列表可在此处查看:https://ck.uesp.net/wiki/Input_Script"
"_KeyCodeComment2": "其他按键代码可通过将日志级别设为4、敲击按键并查看日志来找到。"
},
{
"Modifier 1": 42, // 左Shift
"Modifier 2": 0, // 未使用
"Hotkey": 219, // 左Windows键
"按键顺序重要":false,
"Controller": false,
"Mod Name": "无", // 打开主MCM
"模组开启延迟": 50,
"页面名称": "无",
"页面打开延迟": 500,
"在物品栏中禁用": false,
"对话中禁用": false,
"禁用魔法": false,
"Disable In Map": false,
"从收藏中禁用": false,
"可以重载设置": true,
"返回已关闭": true // 关闭当前活动的模组/页面,并在下次激活时重新打开。
},
{
"Modifier 1": 29, // 左Ctrl
"Modifier 2": 0,
"Hotkey": 219, // 左Windows键
"按键顺序很重要":false,
"Controller": false,
"Mod Name": "快速拾取 IE" // 打开特定模组
"模组打开延迟": 50,
"Page Name": "无",
"页面打开延迟": 500,
"在物品栏中禁用": false,
"对话中禁用": false,
"禁用魔法": false,
"Disable In Map": false,
"在收藏中禁用":false,
"可以重新加载设置":true,
"返回已关闭":false
},
{
"修改器 1": 0, // 无修饰
"修饰符2": 0,
"快捷键": 47, // V 键
"按键顺序重要":false,
"控制器": false,
"Mod Name": "$fzIH_ModName" // 沉浸式HUD(翻译文本,如使用MM2也可用“Immersive HUD”)
"模组打开延迟": 50,
"页面名称": "$fzIH_PageGeneral" // 通用页面
"页面打开延迟": 500,
"Disable In Inventory": false,
"对话中禁用": false,
"禁用魔法状态": false,
"在地图中禁用": false,
"禁用收藏": false,
"Can Reload Settings": true,
"返回已关闭":false
}
]
Papyrus API检查此模组是否已安装 使用此功能,您可以在尝试调用后续其他papyrus函数之前,检查此模组是否已安装。此函数返回
true 如果此模组已安装且
false 如果不是的话。
MCMShortcutNG.IsInstalled()
2. 通过脚本打开MCM你可以通过在Papyrus脚本中调用以下函数来打开任意MCM模组或页面。模组和页面名称遵循与JSON快捷方式相同的规则(我会为模组名称使用翻译字符串,以便同时兼容Menu Maid 2的用户和非用户)。此函数返回
真 如果它试图打开MCM或
假 如果 MCM 快捷键 NG 当前正忙于尝试打开另一个 MCM。
MCMShortcutNG.OpenMCM("modName", modDelay, "pageName", pageDelay)
示例(打开沉浸式HUD的常规页面):MCMShortcutNG.OpenMCM("$fzIH_ModName", 50, "$fzIH_PageGeneral", 500)
3. 修复滚动速度Bug如果您正在使用菜单打开
UI.InvokeString("HUD 菜单", "_global.skse.OpenMenu", "X 菜单名称"), 你可能会遇到“WASD/手柄滚动速度 bug”。
你可以通过调用以下函数来修复这个问题(:
MCMShortcutNG.FixKeys()
注意:此模组应能自动修复任何带有正确标志(kUsesCursor或kUpdateUsesCursor)的菜单所存在的Bug,因此通常情况下无需进行此操作。源MaskPlague/MCM-Shortcut-NG