移除损坏的对象

移除损坏的对象

这个模组添加了一个法术和/或被动技能,用于移除损坏的物体(如板条箱、椅子、门等),这些物体在损坏后通常无法互动。当加载存档或同伴时,该法术/被动技能会自动添加。

法术

补丁 #7 兼容

你是否曾在营地尝试新法术时不小心打碎了那棵坐着的树或一些木箱,结果被卡住? 你是否对那些被你打碎的木箱碎片试图融入地面时发出的刺耳声音感到厌烦? 好吧,我也是。 所以,在论坛和模组中寻找移除这些破碎物体的方法无果后,我决定自己动手做一个。

经过多次尝试和错误后,我找到了一种方法,可以通过脚本扩展器控制台遍历所有已加载的实体,识别出损坏的实体并删除它们。因此,我最终制作了一个仅供个人使用的模组,这样我就不必每次想删除某些东西时都输入 SE 命令了。 现在使用 Osiris 脚本以移除对脚本扩展器的依赖,并重新设计了逻辑以优化代码(现在遍历 DB_Destroyed 而非所有加载的实体)。

既然还没有人分享过类似的内容,我决定率先分享出来,希望你们会觉得有用!

演示

演示

版本

该模组有两个版本,均为独立运行,因此可同时使用其中一个或两个版本。

  • 法术版本:在"通用 - 职业动作"中添加了一个名为"移除破损物品"的法术。该法术拥有 18 米的施法半径和 9 米的作用范围,且施放无需消耗任何资源。
  • 被动版本:添加了一个可开关的被动效果,它会每秒钟释放一个 9 米范围的隐形光环,自动清除范围内的所有破损物品。

如何获取法术/被动技能

  • 它会自动添加到所有队伍角色(不包括召唤物)上
  • 当保存加载或同伴加入队伍时。
  • 由于它使用原生脚本(Osiris),因此没有特殊要求,应该与任何模组兼容。

这个版本与 Mod.io 上的版本有何区别?

无区别,它们是一样的。但由于 mod.io 不支持可选文件,所以被分成了两个模组。

如何安装模组

游戏内模组菜单

将 .pak 文件解压至 %UserProfile%\AppData\Local\Larian Studios\Baldur's Gate 3\Mods,打开游戏,进入模组管理窗口并在列表中勾选该模组。

BG3 模组管理器

只需通过 Mod 管理器导入并将其添加到活动列表中。顺序并不重要。

手动安装

剧透:点击展开

如果你真的想手动安装,请将 PAK 文件放入 %UserProfile%\AppData\Local\Larian Studios\Baldur's Gate 3\Mods

打开 %UserProfile%\AppData\Local\Larian Studios\Baldur's Gate 3\PlayerProfiles\Public\modsettings.lsx 并添加以下内容到 ModOrder 子节点中:

<node id="Module">
    <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
</node>
<node id="Module">
    <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
</node>

还有这些给模组的子项:

<node id="ModuleShortDesc">
  <attribute id="Folder" value="RemoveBrokenObjects" type="LSString" />
  <attribute id="MD5" value="" type="LSString" />
  <attribute id="Name" value="RemoveBrokenObjects" type="LSString" />
  <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
  <attribute id="Version64" value="36310271995674654" type="int64" />
</node>
<node id="ModuleShortDesc">
  <attribute id="Folder" value="RemoveBrokenObjectsPassive" type="LSString" />
  <attribute id="MD5" value="" type="LSString" />
  <attribute id="Name" value="RemoveBrokenObjectsPassive" type="LSString" />
  <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
  <attribute id="Version64" value="36310271995674654" type="int64" />
</node>

所以看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<save>
  <version major="4" minor="0" revision="9" build="331" />
  <region id="ModuleSettings">
    <node id="root">
      <children>
        <node id="ModOrder">
          <children>
            <node id="Module">
              <attribute id="UUID" value="28ac9ce2-2aba-8cda-b3b5-6e922f71b6b8" type="FixedString" />
            </node>
            <node id="Module">
              <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
            </node>
            <node id="Module">
              <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
            </node>
          </children>
        </node>
        <node id="Mods">
          <children>
            <node id="ModuleShortDesc">
              <attribute id="Folder" value="GustavDev" type="LSString" />
              <attribute id="MD5" value="9a704697f3b8d390347f0aea21d02074" type="LSString" />
              <attribute id="Name" value="GustavDev" type="LSString" />
              <attribute id="UUID" value="28ac9ce2-2aba-8cda-b3b5-6e922f71b6b8" type="FixedString" />
              <attribute id="Version64" value="144820164012315624" type="int64" />
            </node>
            <node id="ModuleShortDesc">
              <attribute id="Folder" value="RemoveBrokenObjects" type="LSString" />
              <attribute id="MD5" value="" type="LSString" />
              <attribute id="Name" value="RemoveBrokenObjects" type="LSString" />
              <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
              <attribute id="Version64" value="36310271995674654" type="int64" />
            </node>
            <node id="ModuleShortDesc">
              <attribute id="Folder" value="RemoveBrokenObjectsPassive" type="LSString" />
              <attribute id="MD5" value="" type="LSString" />
              <attribute id="Name" value="RemoveBrokenObjectsPassive" type="LSString" />
              <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
              <attribute id="Version64" value="36310271995674654" type="int64" />
            </node>
          </children>
        </node>
      </children>
    </node>
  </region>
</save>

如何卸载模组

每当角色离开队伍时,法术会被移除,游戏保存时也是如此,但移除它应该是安全的。我做了几次测试,可以毫无问题地加载我的存档。

如果您使用的是被动版本,请在卸载/更新前关闭被动模式并保存。

游戏内模组菜单

打开游戏,进入模组管理窗口并取消勾选列表中的模组。 如果需要,你也可以点击模组并点击右侧的卸载按钮,彻底删除 .pak 文件。

BG3 模组管理器

只需使用模组管理器删除它,别忘了导出新的模组顺序。

手动安装

从 Mods 文件夹中移除 PAK 文件,并从 modsettings.lsx 文件的安装部分删除相应的行。

支持的语言

目前支持英语和西班牙语。

额外

剧透:点击展开

如果你对这个模组曾经使用的脚本扩展器命令感兴趣,但又不想解压模组来查看它们,或者只是想一次性移除某些内容而不想安装这个模组后再卸载它,我把它们留在这里。只需在脚本扩展器中打开 Lua 控制台(你需要带有控制台的脚本扩展器版本),当存档加载后(按一次回车键,你应该会看到提示符">>"),复制粘贴这个命令,再按一次回车键即可。

移除所有已加载的损坏对象:

for _, ent in ipairs(Ext.Entity.GetAllEntitiesWithComponent("ServerItem")) do if ent.ServerItem.Destroyed then RequestDelete(ent.Uuid.EntityUuid) end end

以当前玩家为中心,移除半径 100 米内的所有损坏物体:

local max_distance = 100
local player_uuid = GetHostCharacter()
for _, ent in ipairs(Ext.Entity.GetAllEntitiesWithComponent("ServerItem")) do
    local distance = Osi.GetDistanceTo(ent.Uuid.EntityUuid, player_uuid)
    if ent.ServerItem.Destroyed and distance ~= nil and distance < max_distance then
        RequestDelete(ent.Uuid.EntityUuid)
    end
end

我的其他模组

特别感谢

  • Norbyte 为脚本扩展器和 lsib 工具提供支持。
  • ShinyHobo 开发了 BG3 模组多功能工具。
  • Pradoxal 提供了光环创意和计时器代码片段。
  • 感谢所有喜欢这个模组的人!