UI扩展和HUD

UI扩展和HUD

Modded Lua files with callbacks 允许不止一个模组更改同一个 UI 元素。将 HUD 元素添加到顶层菜单的功能。允许其他模组创建引导任务(即 missiontype.guidance),这些任务将

模组制作者资源

UI Extensions and HUD

https://www.nexusmods.com/x4foundations/mods/552
代码:https://github.com/kuertee/x4-mod-ui-extensions
作者:kuertee

贡献者:AlexandreTK, ChemODun, Damonya, DrWhoKnows, DmytroK, Erixon, Faremen, Forleyor, HYLT2233, IALuir, Mycu, Runekn, sticeIO

更新

v9.0.0.3,2026年6月15日:

  • 错误修复:登船菜单有时会损坏。

玩家须知

在激活此模组之前,请先禁用受保护 UI 模式。
不幸的是,由于此模组的构建方式,在模组激活时禁用或启用受保护 UI 模式会阻止菜单加载。

模组开发者须知

  1. 受保护 UI 模式:使用 UI Extensions 的模组需要在扩展菜单中禁用受保护 UI 模式设置。
  2. 加载自定义 Lua:ModSupportAPIs 的 Lua_Loader(及其扩展的 <raise_lua_event name="'Lua_Loader.Load'" param="'X'"/>)不再生效。
  3. UI.XML 文件:要加载自定义 lua 文件,请使用 ui.xml,具体描述见:https://wiki.egosoft.com:1337/X%20Rebirth%20Wiki/Modding%20support/UI%20Modding%20support/Getting%20started%20guide/
    • 注意:该指南是针对 X Rebirth 的。但在 X4 中的使用方式类似。
    • 以下是我另一个模组 Alternatives To Death 的 extensions\kuertee_alternatives_to_death\ui.xml 文件示例:
    <?xml version="1.0" encoding="UTF-8"?>
    <addon name="kuertee_alternatives_to_death" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../ui/core/addon.xsd">
      <environment type="menus">
        <file name="ui/gameoptions_uix.lua" />
        <file name="ui/menu_toplevel_uix.lua" />
        <dependency name="ego_detailmonitor" />
      </environment>
    </addon>
    
    • 现在游戏会加载自定义 lua 文件(而非由 UIX 加载),请确保在加载后调用所有 init() 函数。
    • 注意:在 7.5 版本之前,UIX 会加载自定义 lua 文件,并且如果像我这样设置,UIX 也会调用它们的 init() 函数。
    • 例如:不再在模组自定义 lua 文件的底部使用 "return ModLua",而是调用 "ModLua.init()"。例如:参见 UIX 的 Nexus Mods 页面(https://www.nexusmods.com/x4foundations/mods/552)上的 kuertee_uix_mod_sample。

玩家安装说明

  • 在“设置 > 扩展”菜单中禁用受保护 UI 模式。
  • 正常安装 UI Extensions。
  • 从 github 解压包时,请确保安装模组的文件夹是:"(X4 游戏目录)/extensions/kuertee_ui_extensions/"。从 Nexus Mods 解压包时,也会默认解压到 "(X4 游戏目录)/extensions/kuertee_ui_extensions/"。但请务必确认该路径正确。
  • 阅读“此模组内置的变更(针对玩家)”部分。

开发者安装说明

有关如何为 UIX 进行模组开发的概述:

  1. 像玩家一样安装模组。
  2. 将 "(X4 游戏目录)/extensions/kuertee_ui_extensions/ui" 文件夹复制到 "(X4 游戏目录)/ui" 文件夹中。这将把 UIX 的 XPL 文件覆盖到游戏目录中。
  3. 使用 "-prefersinglefiles" 选项启动游戏。这将使游戏使用 UIX 的 XPL 文件,而不是使用基础游戏中位于 cat/dat 文件中的对应文件。
  4. 查看任意 XPL 文件中的回调。搜索 "callback"。在游戏文件夹的任意 XPL 文件中添加你需要的回调。如果你需要向 UIX 尚未包含的菜单文件添加回调,请告知我(通过 Discord、Nexus 或 kuertee@gmail.com)。
  5. 完成回调添加后,将修改后的 XPL 文件发送给我。
  6. 我会将它们合并到 UIX 主文件中。
  7. 我们会协调发布日期,以便包含你回调的新版 UIX 模组能与你发布你的模组的时间相近。

面向高级开发者的替代安装说明:

  1. 将 github 文件拉取到 "(X4 游戏目录)/extensions/kuertee_ui_extensions" 文件夹中。
  2. 运行 "dev-make_symlink_files.bat" 以复制 "(X4 游戏目录)/extensions/kuertee_ui_extensions/ui" 中的 UIX XPL 文件到 "game/ui" 文件夹。这将创建链接文件,UIX 文件夹中的任何更改都会自动镜像到游戏文件夹中的文件。
  3. 查看任意 XPL 文件中的回调。搜索 "callback"。在模组文件夹的任意 XPL 文件中添加你需要的回调。如果你需要向 UIX 尚未包含的菜单文件添加回调,请告知我(通过 Discord、Nexus 或 kuertee@gmail.com)。
  4. 完成回调添加后,将你的更改提交到 github。
  5. 我们会协调发布日期,以便包含你回调的新版 UIX 模组能与你发布你的模组的时间相近。

如有任何问题,最好在 Egosoft 的非官方 Discord 模组频道 @ 我:https://discord.gg/RzAGhcY

请阅读“此模组内置的变更”部分。

功能

带有回调的已修改 Lua 文件,允许多个模组同时修改同一个 UI 元素。

向顶层菜单添加 HUD 元素的功能。

允许其他模组创建引导任务(即 missiontype.guidance),这些任务将列在“引导任务”标签页中。同时在“引导任务”标签页列出的任务中启用“设为活跃”和“设为非活跃”按钮。例如我的模组:

  • 战利品采矿
  • 飞船扫描仪
  • 信号泄漏猎人 - 增加范围
  • 空间站扫描仪
  • 用于部署的航点字段

模组效果

这是一个模组制作者资源/API。此模组本身不影响游戏。

模组制作者可以使用此 API 来修改游戏的 Lua 文件,并帮助提高与此 API 兼容的其他模组的兼容性。

如果没有此 API,某些 Lua 元素只能由一个模组修改。例如,我的模组“NPC 反应:NPC 出租车”和“从传送室传送”会在传送室面板底部添加按钮。由于 Lua 的 display() 函数会构造其框架、表格、行和内容,然后立即调用 frame:display() 函数,因此两个模组无法同时“重写”display() 函数并期望两者的“重写”都能工作。

有了此 API,特别是其回调功能,这是可能的。

此 API 中的文件将被称为 UIX。

使用概述

在模组的 Lua 文件中:

  1. 创建指向要修改的基础游戏菜单的指针。
  2. 注册一个回调。
  3. 在回调中编写你的更改。
  4. 返回回调期望的内容(如果有的话)。
  5. 如果需要在 UIX 中已存在的函数中添加新回调,只需在需要的位置插入新回调。
  6. 如果需要在 UIX 中尚不存在的函数中添加新回调,则从基础游戏的菜单中复制该函数。
  7. 将该函数粘贴到相关的 UIX 中。
  8. 在需要的位置插入回调。
  9. 将更改推送到 Git。

加载 UIX 和模组的 lua 文件:

v7.5 及以上版本:

在模组的 ui/ui.xml 文件中指定要加载的 UI 文件(请参见上面的 v7.5 玩家须知 部分)。

v7.5 之前版本:

在模组的 MD 文件中:

  1. 使用 SirNukes Mod Support APIs 加载所需的 UIX。例如:<raise_lua_event name="'Lua_Loader.Load'" param="'extensions.kuertee_ui_extensions.ui.kuertee_menu_transporter'" />
  2. 使用 SirNukes Mod Support APIs 加载模组的 Lua。例如:<raise_lua_event name="'Lua_Loader.Load'" param="'extensions.kuertee_npc_reactions.ui.kuertee_npc_reactions'"/>

在你的模组发布中:
将此模组设置为你的模组所需下载的模组。

文档

即将推出。

但回调及其函数参数和预期返回值在每个新的 Lua 文件中都已列出。了解它们何时在代码中执行很简单,只需在代码中搜索它们即可。可以在使用它们的我的模组中查看使用示例。我的模组“NPC 反应/NPC 出租车”和“从传送室传送”都更改了“TransporterMenu”。

但以下是 UIX 提供的新功能(与通过回调的模组特定更改无关)的文档。

此模组内置的变更(针对玩家)

地图菜单:登船菜单:船只分配调整

确保选中船只的下属船只获得其直接指挥官的登船行为。在基础游戏中,当选择例如“飞船 A”及其下属船只以及这些飞船的舰队指挥官(即“飞船 A”的指挥官)时,“飞船 A”的下属有时会获得指挥官的行为(例如“保持距离”)而不是“飞船 A”的行为(例如“瞄准炮塔”)。此调整允许玩家在舰队中为不同编队单独分配登船行为,而无需每个编队都在不同的舰队中。注意:也请查看 Kuda 的新登船行为更改(https://www.nexusmods.com/x4foundations/mods/839)。例如:登船任务中处于攻击命令状态的飞船现在会停止攻击,从而最大程度降低登船目标被摧毁的可能性。

地图菜单:登船菜单:“所有”船只设置

设置“所有”船只条目,将其设置传播到所有攻击船只。

地图菜单:距离工具

  • 单击地图或列表上的对象或位置。
  • 右键单击地图或列表上的另一个对象或位置。
  • 将列出两点之间的距离或跳跃次数。

地图菜单:信息:完整船员列表

船上人员列表可以展开和收起。

地图菜单:交互菜单:地图居中/目标地点

右键单击对象,单击“地图居中”可将对象在地图上居中,而不会更改你选定的对象。此功能可用于星区。当用于星门时,“目标地点居中”操作会将地图居中到星门的出口位置。(基于 Brinnie 的模组请求:https://forum.egosoft.com/viewtopic.php?t=471439&sid=a3f501f4bd3cc9a74a01dd4eb5107998。)

地图菜单:交互菜单:批量重命名

注意:与基础游戏的单个重命名功能类似,如果确认空白条目,将把对象的名称恢复为其默认名称。

重命名多个对象时,名称中的以下特殊文本将被替换为相应的值:

  • $name:对象当前名称。
  • $name_AR:对象在 UniTrader's Advanced Renaming 中使用的内部名称。
  • $i:对象在列表中按每秒伤害值降序排列的位置。

示例:

  • "Red $i" 将把所有对象命名为 "Red X",其中 X 是对象在列表中的顺序。
  • "$name $i" 将在对象当前名称后添加其在列表中的顺序。

地图菜单:任务提供/任务管理器

任务列表具有“全部展开/全部收起”按钮。

地图菜单:任务管理器 > 引导任务

现在,任何具有 "missiontype.guidance" 的任务都将列在“任务引导”标签页中。在基础游戏中,“任务引导”标签页仅列出通过鼠标右键手动创建的引导任务。

“设为非活跃”和“设为活跃”按钮现在可用于“任务引导”标签页中列出的任务。基础游戏使这些按钮对引导任务不可用。

地图菜单:所属资产 > 可部署物

可部署物列表按名称分组,可以展开和收起。

地图菜单:按武器排序

所属资产列表可以按对象的每秒伤害值排序。这与批量重命名功能中使用的排序类型相同。

地图菜单:按距离排序

所属资产列表可以按与玩家或最后选定对象的距离排序。

地图菜单:缩放功能调整

  1. 重置为俯视图:当前功能:将地图平移到玩家位置。与基础游戏相同。
  2. 区域视图:当前功能:在 7 个缩放级别之间缩小。覆盖的基础游戏功能:将地图平移到玩家位置,缩放级别近似于玩家位置所在的区域视图。
  3. 星区视图:当前功能:在 7 个缩放级别之间放大。覆盖的基础游戏功能:将地图平移到玩家位置,缩放级别近似于玩家位置所在的星区视图。
  4. 双击地图上的对象将切换 2 个缩放级别:
    • “近距视图”
    • 以及“区域视图”,显示该区域的很大一部分
  5. 双击地图上的星区将切换 2 个缩放级别:
    • “星区视图”,始终显示主要对象图标
    • 以及“本地星团视图”

此模组内置的变更(针对开发者)

交互菜单:添加自定义动作/命令组(通过 MD)

  1. <event_ui_triggered screen="'Interact_Menu_API'" control="'reloaded'" /> 处,添加以下自定义动作/命令。
  2. 添加新的自定义动作/命令组 ID:<raise_lua_event name="'Interact_Menu_API.Add_Custom_Actions_Group_Id'" param="'my_custom_actions_group_id'" />
  3. 添加新的自定义动作/命令组名称:<raise_lua_event name="'Interact_Menu_API.Add_Custom_Actions_Group_Text'" param="'我的自定义动作/命令组'" />
  4. 在 Mod Support API 的 Add_Action 函数中使用新的 ID,如下所示:
    ...
      <signal_cue_instantly cue="md.Interact_Menu_API.Add_Action" param = "table[
        $id = 'my_custom_action_1',
        $section = 'my_custom_actions_group_id',
        $text = '我的自定义动作 1',
        $mouseover = '我的自定义动作 1 鼠标悬停文本',
        $callback = My_Custom_Action_1_Cue
      ]" />
      <signal_cue_instantly cue="md.Interact_Menu_API.Add_Action" param = "table[
        $id = 'my_custom_action_2',
        $section = 'my_custom_actions_group_id',
        $text = '我的自定义动作 2',
        $mouseover = '我的自定义动作 2 鼠标悬停文本',
        $callback = My_Custom_Action_2_Cue
      ]" />
    ...
    
  5. 自定义命令将同时添加到“自定义动作”和“自定义命令”子菜单中。
  6. 要仅添加到一个子菜单,请在节名称前加上 "actions_" 或 "orders_"。例如:"actions_my_custom_actions" 将只将自定义动作添加到“自定义动作”子菜单。而 "orders_my_custom_orders" 将只将自定义命令添加到“自定义命令”子菜单。

向自定义动作/命令组添加嵌套子组(通过 MD)

子组允许在自定义动作/命令组内部创建多级导航面板。每个子组显示为一个导航按钮;点击它会进入一个子面板,并带有返回导航标题。

  1. 按上述“添加自定义动作/命令组”中的说明注册顶级组。
  2. 在同一 event_ui_triggered 处理程序中,在其内部注册一个子组:
    <raise_lua_event name="'Interact_Menu_API.Add_Custom_Actions_SubGroup_Id_to_Group_Id'" param="'my_custom_actions_group_id;my_sub_group_id'" />
    <raise_lua_event name="'Interact_Menu_API.Add_Custom_Actions_SubGroup_Text'" param="'我的子组'" />
    
    Id 事件的 param 格式为 "parentId;subGroupId" —— 父组必须首先注册,但兄弟组之间的注册顺序无关紧要。
  3. 以相同方式嵌套更多层级,将前一个子组作为父组引用:
    <raise_lua_event name="'Interact_Menu_API.Add_Custom_Actions_SubGroup_Id_to_Group_Id'" param="'my_sub_group_id;my_deep_group_id'" />
    <raise_lua_event name="'Interact_Menu_API.Add_Custom_Actions_SubGroup_Text'" param="'我的深层组'" />
    
  4. 使用其 id 作为 Mod Support API 的 Add_Action 中的 $section,将动作添加到任何层级:
    <signal_cue_instantly cue="md.Interact_Menu_API.Add_Action" param="table[
      $id       = 'my_sub_group_action',
      $section  = 'my_sub_group_id',
      $text     = '我的子组动作',
      $callback = My_Sub_Group_Action_Cue
    ]" />
    
  5. 子组注册是持久的(在菜单打开之间保持)。动作注册必须在每次 md.Interact_Menu_API.Get_Actions 信号时重复。
  6. 返回导航标题在鼠标悬停时显示完整的面包屑路径。导航深度上限为 10 级。

向自定义动作/命令组添加嵌套子组(通过 Lua)

从 Lua 中,可以使用 InteractMenu Lua API 构建相同的多级结构。

  • 顶级组(在 custom_actions / custom_orders 中显示为导航按钮):在脚本加载时调用 menu.Add_Custom_Actions_Group(id, text) 一次。这是幂等的——在每次重新加载时调用是安全的。
  • 嵌套子组(第 2 级及更深):在 prepareSections_on_end 回调内部调用 menu.insertInteractionGroup(parentId, groupId, groupText)。这必须在每次菜单打开时重复,因为 menu.actions 每次都会重建。
  • 动作:在同一 prepareSections_on_end 回调内部调用 menu.insertInteractionContent(sectionId, entry)
local SECTION_PARENT = "my_parent"
local SECTION_CHILD  = "my_child"

local function init()
    local m = Helper.getMenu("InteractMenu")

    -- 注册顶级组一次(在菜单打开之间持久存在):
    m.Add_Custom_Actions_Group(SECTION_PARENT, "My Parent Group")

    -- 每次菜单打开时注册嵌套组和动作:
    m.registerCallback("prepareSections_on_end", function()
        m.insertInteractionGroup(SECTION_PARENT, SECTION_CHILD, "My Sub-Group")
        m.insertInteractionContent(SECTION_PARENT, {
            text = "父组动作", active = true,
            script = function() DebugError("父组动作被点击") end
        })
        m.insertInteractionContent(SECTION_CHILD, {
            text = "子组动作", active = true,
            script = function() DebugError("子组动作被点击") end
        })
    end, "my_mod_id")
end
init()

添加具有多级子组的自定义根节(通过 Lua)

要添加一个完全自定义的根节(不在 custom_actions/custom_orders 内部)并带有多级导航:

  1. prepareSections_on_start 中,注入一个带有 subsections = {} 的节到 config.sections 中(用一个标志保护,只注入一次)。同时将顶级子节条目推入 section.subsections。这两个表都是持久的。
  2. prepareSections_on_end 中,为所有嵌套层级和动作调用 insertInteractionGroupinsertInteractionContent。这些必须在每次菜单打开时重复。
local mySection = { id = "my_root", text = "我的节", isorder = false, subsections = {} }
local sectionAdded = false

local function init()
    local m = Helper.getMenu("InteractMenu")

    m.registerCallback("prepareSections_on_start", function(sections)
        if not sectionAdded then
            table.insert(sections, mySection)
            table.insert(mySection.subsections, { id = "my_l1", text = "第一级组" })
            sectionAdded = true
        end
    end, "my_mod_id")

    m.registerCallback("prepareSections_on_end", function()
        m.insertInteractionGroup("my_l1", "my_l2", "第二级组")
        m.insertInteractionContent("my_l1", {
            text = "第一级动作", active = true,
            script = function() DebugError("L1 被点击") end
        })
        m.insertInteractionContent("my_l2", {
            text = "第二级动作", active = true,
            script = function() DebugError("L2 被点击") end
        })
    end, "my_mod_id")
end
init()

地图菜单:selectComponent 模式

现在可以直接在地图菜单中使用 selectComponent 模式。在基础游戏中,此模式的使用仅限于由任务导演(md)触发的对话。例如:<open_conversation_menu menu="MapMenu" param="[0, 0, true, player.entity, null, 'selectComponent', ['kTFTR_set_destination', [class.ship_s, class.ship_m, class.ship_l, class.ship_xl, class.station]]]" />。这随后会触发一个 event_conversation_next_section 事件,其中 menu.modeparam[1] 作为对话的节。在此版本中,可以直接从地图菜单调用此模式。

使用方法:

  1. 调用 mapMenu.setSelectComponentMode (returnsection, classlist, category, playerowned, customheading, screenname)
  2. 参数在基础游戏的 menu_map.lua 文件顶部有描述。在 UIX 的 kuertee_menu_map.lua 文件顶部有更详细的描述。
  3. 要在玩家选择对象后触发一个 "AddUITriggeredEvent",请在 mapMenu.setSelectComponentMode 调用中设置 screenname。
  4. 要禁用玩家选择对象后的默认 event_conversation_next_section,请在 mapMenu.setSelectComponentMode 调用中将 returnsection 设置为 nil。

安装

  • 解压到 'X4 Foundations/extensions/kuertee_ui_extensions/'。

卸载

  • 删除模组文件夹。

故障排除

  1. 允许游戏将事件记录到文本文件,方法是在启动参数中添加 "-debug all -logfile debug.log"。
  2. 如果模组存在“扩展选项”条目,请启用特定于模组的调试日志。
  3. 运行足够长时间,以便模组记录其事件。或强制触发你所遇到的错误。
  4. 将位于我的文档\Egosoft\X4\(你的玩家特定编号)\debug.log 的日志发送到我的电子邮箱(kuertee@gmail.com),并在主题行中包含模组名称。

致谢

kuertee
贡献者:AlexandreTK, ChemODun, Damonya, DrWhoKnows, DmytroK, Erixon, Faremen, Forleyor, HYLT2233, IALuir, Mycu, Runekn, sticeIO。
法文本地化:Calvitix。

历史

v9.0.0.1,2026年6月11日:

  • 兼容性:9.0。
    自上一个 v8.0.4.3(2025年4月6日)版本以来,在之前的 9.0 beta 中发布的更改:
  • 新功能:为 sticeIO 的模组添加回调。
  • 调整:为 IALuir 的模组调整回调。
  • 新功能:地图菜单 > 所属资产 > 按武器排序。所属资产列表可以按对象的每秒伤害值排序。这与批量重命名功能中使用的排序类型相同。
  • 新功能:登船菜单:设置“所有”船只条目,将其设置传播到所有攻击船只。
  • 新功能:交互菜单中的分层子组(通过 Lua/MD 可用),由 ChemODun 贡献。更多详情请参见“添加嵌套子组*”和“添加自定义根节*”部分。
  • 新功能:地图菜单 > 所属资产 > 可部署物:可部署物列表按名称分组,可以展开和收起。
  • 新功能:地图菜单 > 信息 > 完整船员列表:船上人员列表可以展开和收起。

v9.0.0.0.12.4,2026年6月5日:

  • 兼容性:合并了 9.0 RC 4 UI 文件。感谢 ChemODun!

v9.0.0.0.12.1,2026年5月28日:

  • 错误修复:地图菜单:选择多个对象导致地图持续刷新。

v9.0.0.0.12,2026年5月28日:

  • 兼容性:合并了 9.0 RC 1 UI 文件。感谢 ChemODun!
  • 新功能:为 sticeIO 的模组添加回调。
  • 调整:为 IALuir 的模组调整回调。
  • 新功能:地图菜单 > 所属资产 > 按武器排序。所属资产列表可以按对象的每秒伤害值排序。这与批量重命名功能中使用的排序类型相同。
  • 错误修复:地图菜单:当选定的对象变为无效时(例如,在停用可部署物后拾取它)会崩溃。

v9.0.0.0.11.1,2026年5月22日:

  • 错误修复:船只配置菜单:合并新的基础 UI 文件移除了所有模组回调。

v9.0.0.0.11,2026年5月21日:

  • 兼容性:更新到基础 lua 文件的 9.0 beta 11。
  • 新功能:登船菜单:设置“所有”船只条目,将其设置传播到所有攻击船只。
  • 错误修复:地图菜单:当“按与对象的距离排序”处于活动状态,然后对象变为无效时(例如,在拾取可部署物后)UI 会崩溃。

v9.0.0.0.10,2026年5月13日:

  • 兼容性:更新到基础 lua 文件的 9.0 beta 10。
  • 新功能:交互菜单中的分层子组(通过 Lua/MD 可用),由 ChemODun 贡献。更多详情请参见“添加嵌套子组*”和“添加自定义根节*”部分。
  • 错误修复:外交菜单:由 ChemODun 修复了潜在的崩溃问题。

v9.0.0.0.8.6,2026年5月10日:

  • 新功能:由 ChemODun 添加的新回调。

v9.0.0.0.8.5,2026年5月7日:

  • 兼容性:更新到基础 lua 文件的 9.0 beta 9。
  • 错误修复:地图菜单 > 信息菜单:自定义回调函数后缺少 "row" 参数。
  • 错误修复:哎呀!我忘记将下面两个错误修复(来自上一次更新)的修复文件打包到 subst 文件中。抱歉,我的错。
  • 错误修复:UIX 的按与对象的距离排序有时会破坏对象列表。由 ChemODun 修复。谢谢!
  • 错误修复:地图 > 任务提供/任务管理器中的另一个错误:如果某个任务类型中没有任务,菜单会崩溃。

v9.0.0.0.8.3,2026年5月5日:

  • 错误修复:地图 > 任务提供/任务管理器:如果某个任务类型中没有任务,菜单会崩溃。
  • 错误修复:地图 > 任务提供/任务管理器:任务的展开/收起标志的内部变量列表未能正确清理。

v9.0.0.0.8.2,2026年5月5日:

  • 错误修复:地图 > 所属资产菜单中缺少回调,导致使用该回调的模组无法工作。由 ChemODun 修复。
  • 错误修复:外交菜单中的错误,错误地将 nil 数据发送给回调函数。由 ChemODun 修复。
  • 错误修复:地图 > 信息菜单中的错误,将错误数据发送给回调函数。由 DrWhoKnows 修复。

v9.0.0.0.8,2026年5月4日:

  • 调整:批量重命名现在为对象名称的 "$i" 部分添加前导零。以前,它使用原始文本数字,导致船舶无法正确排序。
  • 新功能:地图菜单 > 所属资产 > 可部署物:可部署物列表按名称分组,可以展开和收起。
  • 新功能:地图菜单 > 信息 > 完整船员列表:船上人员列表可以展开和收起。
  • 错误修复:交互菜单中缺少批量重命名功能。
  • 错误修复:游戏选项菜单中缺少回调,导致类似 Grouped Saved Files 的模组无法工作。
  • 错误修复:船只配置菜单中可能存在的错误,可能阻止了类似 Mycu 的 Equipment Tooltips 模组工作。
  • 错误修复:玩家信息菜单中缺少回调,导致类似 Social Standing And Citizenships 的模组无法工作。
  • 错误修复:外交菜单中缺少回调,导致类似 Reputations And Professions 的模组无法工作。
  • 错误修复:地图 > 管理地块菜单中的错误,阻止了允许非常大地块尺寸的模组(例如 Star Wars Interworlds)工作。注意:Star Wars Interworlds 的上一个工作版本尚未与 9.0 beta 兼容。

v8.0.4.3,2025年4月6日:

  • 新功能:由 ChemOdun 添加的新回调。

v8.0.4.2,2025年3月11日:

  • Subst.* 文件已更新。抱歉上次更新忘记做了。:D
  • 新功能:可折叠/可展开的飞船船员列表。

v8.0.4.1,2025年3月9日:

  • 为 Faremen 即将推出的模组添加新回调。

v8.0.4.0,2025年2月7日:

  • 为 ChemODun 未发布的模组添加新回调。
  • 为 HYLT2233 未发布的模组添加新回调。

v8.0.3.5,2025年12月16日:

  • 新的 UIX 函数:ChemODun 用于获取菜单文件本地配置的函数。

v8.0.3.4,2025年12月9日:

v8.0.3.1,2025年11月11日:

  • 新功能:地图菜单:Damonya 为 Enhanced AutoMine/AutoTrade 模组添加的新回调。
  • 调整:外交菜单:支持 Additional Agent Actions 模组的 v8.0.3.1 版本。

v8.0.3.0,2025年10月31日:

  • 调整:空间站配置菜单:按名称字母顺序列出模块。
  • 错误修复:空间站概览菜单:当我的 Trade Analytics 模组处于活动状态时,此菜单有时无法打开。

v8.0.2.3,2025年10月20日:

  • 错误修复:Mycu 为 Verbose Transaction Log 模组添加的回调仍然损坏。
  • 新功能:外交菜单:为我的 Additional Agent Actions 模组添加回调。

v8.0.2.2,2025年10月17日:

  • 错误修复:船只配置菜单左侧栏菜单仍然有问题。

v8.0.2.1,2025年10月17日:

  • 错误修复:船只配置菜单:错误修复:左侧栏菜单中缺少按钮。

v8.0.2.0,2025年10月16日:

  • 新功能:为 Forleyor 的新模组添加回调。
  • 错误修复:重新添加了 Mycu 的回调(我今年早些时候不小心移除了),用于 Verbose Transaction Log 模组。
  • 新功能:为 Additional Agent Actions 模组在外交菜单中添加回调。
  • 调整:船只配置菜单:移除所选船只宏中没有的武器挂载点的组件类型。

v8.0.1.0,2025年9月28日:

  • 调整:8.0 热修复 1 兼容性。
  • 调整:“地图居中”和“目标地点居中”菜单项现在列在引导菜单项之后——正如它们应该的那样。
  • 错误修复:“地图居中”和“目标地点居中”现在仅在地图打开时列出——正如它们应该的那样。
  • 澄清更改的缩放热键和修改后的双击缩放功能:
    地图菜单:缩放功能调整
  1. 重置为俯视图:当前功能:将地图平移到玩家位置。与基础游戏相同。
  2. 区域视图:当前功能:在 7 个缩放级别之间缩小。覆盖的基础游戏功能:将地图平移到玩家位置,缩放级别近似于玩家位置所在的区域视图。
  3. 星区视图:当前功能:在 7 个缩放级别之间放大。覆盖的基础游戏功能:将地图平移到玩家位置,缩放级别近似于玩家位置所在的星区视图。
  4. 双击地图上的对象将切换 2 个缩放级别:
    • “近距视图”
    • 以及“区域视图”,显示该区域的很大一部分
  5. 双击地图上的星区将切换 2 个缩放级别:
    • “星区视图”,始终显示主要对象图标
    • 以及“本地星团视图”

v8.0.0.11,2025年9月24日:

  • 新功能:为 Forleyor 新未发布的模组添加新回调。
  • 错误修复:导致 UserQuestion 菜单有时无法显示的错误。例如,辅助功能菜单。

v8.0.0.8,2025年9月11日:

  • 调整:8.0 最终版兼容性调整。
  • 来自 beta 版本的更改日志:
  • 新功能:如果两个位置位于不同星系,距离工具现在显示它们之间的星系数量。
  • 新功能:距离工具现在可以用于列表中的对象。以前,它仅适用于在地图上单击的对象。
  • 错误修复:距离工具现在从选定的对象开始计算。以前,它会从最后左键或右键单击的位置或对象开始计算。
  • 错误修复:距离工具仅在地图打开时列出。以前,它在第一人称视角打开交互菜单时也会列出。
  • 新功能:地图缩放功能调整:(1) 区域视图和星区视图热键在 7 个缩放级别之间快速缩放。它们也不会像基础游戏那样平移到玩家位置。(2) 双击地图上的对象或星区将在适合它们的 2 个缩放级别之间切换。(大多数时候我希望地图缩放级别处于平滑缩放按钮无法提供的不同级别。)
  • 新功能:Mycu 在研究菜单中为未发布的模组/功能添加