选项助手

选项助手

辅助库,用于构建SirNukes Simple_Menu_API选项菜单。提供可复用的MD库,包括复选框、下拉菜单、滑块和节标题行。

模组制作者资源

选项助手

一个为 X4: 基石 设计的库模组,提供可复用的 MD(任务导演)脚本库,用于构建 SirNukes 模组支持 API 的选项菜单。

不必在每个模组中重复编写小部件构建的样板代码,而是使用 Options_Helper 库来声明菜单部分,并为每种小部件类型设置单个处理程序提示。

需求

  • X4: 根基 版本 8.00 或更新
  • SirNukes Mod支持API 版本1.95或更高版本

安装

options_helper/ 文件夹放置在你的 X4 扩展目录中,与其他模组放在一起。


API 参考

所有库都位于 md.Options_Helper 命名空间中。构建小部件的库使用 purpose="run_actions"(通过 <run_actions ref="..."> 调用),而布局和事件处理库使用 purpose="include_actions"(通过 <include_actions ref="..."> 调用)。

布局库

Add_Empty_Rowinclude_actions

为当前选项菜单添加一个细的视觉分隔行(边框高度)。

<include_actions ref="md.Options_Helper.Add_Empty_Row" />

添加标题行运行操作

添加一个居中显示的章节标题行,随后是一个空的分隔行。

  • 标题 (必填) - 文本字符串或文本数据库引用 {page, id}
  • 列数 (默认: 12) - 菜单中的列数
<run_actions ref="md.Options_Helper.Add_Title_Row">
    <param name="title" value="{1972092401, 100}" />
    <param name="columns" value="12" />
</run_actions>

小工具库

添加复选框执行操作

添加一个带有文本标签的复选框组件,标签显示在右侧。当 col == 1 时自动开始新行。

  • id (必填) - 字符串标识符 - 用于构建组件ID和回显键 $
  • col (默认值: 1) - 复选框小部件的列
  • textColSpan (默认值:1 - 标签文本单元格的列跨度
  • text (默认:'' - 标签文本或文本数据库引用
  • data (必填) - 包含键 $ 当前值的表格
  • active (默认值: true) - 控件是否可交互
  • 手柄 (默认:null) - 点击时触发信号

处理程序回显字段:

  • event.param.$echo.$valueId - 表格键字符串,例如 '$mySetting'
  • event.param.$checked - 整数 01,在点击之后
<run_actions ref="md.Options_Helper.Add_Checkbox">
    <param name="id" value="'mySetting'" />
    <param name="col" value="1" />
    <param name="textColSpan" value="11" />
    <param name="text" value="{1972092401, 110}" />
    <param name="data" value="@$mySettings" />
    <param name="handle" value="Handle_Checkbox" />
</run_actions>

添加下拉菜单执行操作

在同一行中添加一个标签文本单元格后跟一个下拉小部件。当 col == 1 时,自动开始新行。

  • id (必填) - 字符串标识符 - 用于构建组件ID和回显键 $
  • 选项 (必填) - [$text = ..., $value = ...] 选项条目列表
  • 当前索引 (默认值: 1) - 初始选中选项的从1开始的索引
  • col (默认:1 - 标签文本单元格的列
  • textColSpan (默认值:1 - 标签的列跨度
  • 文本 (默认:'' - 标签文本或文本数据库引用
  • dropdownColSpan (默认:1 - 下拉菜单小部件的列跨度
  • active (默认值: true) - 是否启用部件的交互功能
  • 手柄 (默认值: null) - 选项确认时触发的提示信号

处理程序回显字段:

  • event.param.$echo.$valueId - 表格键值字符串,例如 '$myOption'
  • event.param.$option.$value - 所选选项的值
<run_actions ref="md.Options_Helper.Add_Dropdown">
    <param name="id" value="'myOption'" />
    <param name="options" value="$myOptions" />
    <param name="currentIndex" value="$currentIndex" />
    <param name="col" value="1" />
    <param name="textColSpan" value="7" />
    <param name="text" value="{1972092401, 120}" />
    <param name="dropdownColSpan" value="5" />
    <param name="handle" value="Handle_Dropdown" />
</run_actions>

添加滑块执行操作

添加一个不可选的标签行,后跟一个滑块控件行。始终创建一对两行。

  • id (必填) - 字符串标识符 - 用于构建组件ID和回显键 $
  • text (默认:'' - 显示在滑块上方的标签文本或文本数据库引用
  • 最小值 (默认值: 0) - 滑块最小值
  • 最大值 (默认:100 - 滑块的最大值
  • 步长 (默认值: 1) - 滑块位置之间的步进增量
  • 后缀 (默认值:'' - 附加到显示的当前值后的字符串
  • 列跨度 (默认值: 1) - 标签和滑块单元格的列跨度
  • 数据 (必填) - 包含键 $ 当前值的表格
  • 只读 (默认值:false) - 滑块是否仅用于显示
  • 手柄 (默认值:) - 滑块确认时的提示信号

处理程序回显字段:

  • event.param.$echo.$valueId - 表格键字符串,例如 '$mySlider'
  • event.param.$value - 已确认长浮点数值
<run_actions ref="md.Options_Helper.Add_Slider">
    <param name="id" value="'myThreshold'" />
    <param name="min" value="0" />
    <param name="max" value="1000000" />
    <param name="step" value="1000" />
    <param name="text" value="{1972092401, 130}" />
    <param name="suffix" value="' Cr'" />
    <param name="colSpan" value="12" />
    <param name="data" value="@$mySettings" />
    <param name="handle" value="Handle_Slider" />
</run_actions>

事件处理库

这三个库是 include_actions——它们在您的处理程序提示中内联运行,其中 event.param 在作用域内。调用前,将 $resultTable 分配给您想要写入的表。

Process_Dropdown_Changedinclude_actions

读取 event.param.$echo.$valueIdevent.param.$option.$value,将选定的值写入 $resultTable

<cue name="Handle_Dropdown" instantiate="true">
    <conditions><event_cue_signalled /></conditions>
    <actions>
        <set_value name="$resultTable" exact="@$mySettings" />
        <include_actions ref="md.Options_Helper.Process_Dropdown_Changed" />
        <remove_value name="$resultTable" />
    </actions>
</cue>

Process_Slider_Changedinclude_actions

读取 event.param.$echo.$valueIdevent.param.$value,将确认后的滑块值写入 $resultTable

<cue name="Handle_Slider" instantiate="true">
    <conditions><event_cue_signalled /></conditions>
    <actions>
        <set_value name="$resultTable" exact="@$mySettings" />
        <include_actions ref="md.Options_Helper.Process_Slider_Changed" />
        <remove_value name="$resultTable" />
    </actions>
</cue>

流程_复选框_已更改包含操作

读取 event.param.$echo.$valueIdevent.param.$checked(整数 0/1),将选中状态写入 $resultTable

<cue name="Handle_Checkbox" instantiate="true">
    <conditions><event_cue_signalled /></conditions>
    <actions>
        <set_value name="$resultTable" exact="@$mySettings" />
        <include_actions ref="md.Options_Helper.Process_Checkbox_Changed" />
        <remove_value name="$resultTable" />
    </actions>
</cue>

完整使用示例

<!-- 在 API 重新加载时注册你的菜单 -->
<cue name="Register_Menu" instantiate="true">
    <conditions>
        <event_cue_signalled cue="md.Simple_Menu_API.Reloaded" />
    </conditions>
    <actions>
        <signal_cue_instantly cue="md.Simple_Menu_API.Register_Options_Menu"
            param="table[
                $id = 'my_mod_options'
                $columns = 12,
                $title  = '我的模组选项',
                $onOpen = My_Menu_打开
            ]" />
    </actions>
</cue>

<!-- 打开时构建菜单内容 -->
<cue name="My_Menu_Open" instantiate="true">
    <conditions><event_cue_signalled /></conditions>
    <actions>
        <include_actions ref="md.Options_Helper.Add_Empty_Row" />
        <run_actions ref="md.Options_Helper.Add_Title_Row">
            <param name="title" value="'常规设置'" />
        </run_actions>
        <run_actions ref="md.Options_Helper.Add_Checkbox">
            <param name="id" value="'enabled'" />
            <param name="col" value="1" />
            <param name="textColSpan" value="11" />
            <param name="text" value="'启用功能'" />
            <param name="data" value="@$mySettings" />
            <param name="handle" value="Handle_Checkbox" />
        </run_actions>
        <run_actions ref="md.Options_Helper.Add_Slider">
            <param name="id" value="'threshold'" />
            <param name="min" value="0" />
            <param name="max" value="100000" />
            <param name="step" value="1000" />
            <param name="text" value="'最小阈值'" />
            <param name="suffix" value="' Cr'" />
            <param name="colSpan" value="12" />
            <param name="data" value="@$mySettings" />
            <param name="handle" value="Handle_Slider" />
        </run_actions>
    </actions>
</cue>

<!-- 处理程序 -->
<cue name="Handle_Checkbox" instantiate="true">
    <conditions><event_cue_signalled /></conditions>
    <actions>
        <set_value name="$resultTable" exact="@$mySettings" />
        <include_actions ref="md.Options_Helper.Process_Checkbox_Changed" />
        <remove_value name="$resultTable" />
    </actions>
</cue>

<cue name="Handle_Slider" instantiate="true">
    <conditions><event_cue_signalled /></conditions>
    <actions>
        <set_value name="$resultTable" exact="@$mySettings" />
        <include_actions ref="md.Options_Helper.Process_Slider_Changed" />
        <remove_value name="$resultTable" />
        <!-- 在此处保留 $mySettings -->
    </actions>
</cue>

鸣谢

鸣谢

  • EGOSOFT - 为X系列打造。
  • SirNukes - 感谢提供支持UI挂钩的 模组支持API