鼓掌之间 发表于 2026-3-24 15:48

修复被错误禁用/删除的游戏引用,减少微卡顿与各类异常问题(2026-08-22更新)

本帖最后由 鼓掌之间 于 2026-8-22 13:57 编辑

转自:https://www.nexusmods.com/skyrimspecialedition/mods/175062

这是一款无脚本的SKSE插件,用于修复被错误禁用/删除的游戏引用,减少微卡顿与各类异常问题。可在游戏内直接动态扫描并修复所有已加载的场景单元格,支持高度自定义配置。

---

功能说明
禁用引用完整性修复工具是一款轻量级SKSE插件,专门修复因损坏的引用、以及放置在《上古卷轴》世界空间地面以下的导航网格数据引发的微卡顿问题。在大型MOD组合中,部分记录的Z轴坐标最终会低于引擎边界(Z轴数值<-30000),这会让引擎在后台持续运算,进而引发卡顿峰值。本插件会在这些引用的模型与贴图加载前完成拦截,自动修正其中的无效数据。

---

运行需求
- SKSE64(《上古卷轴》64位脚本扩展工具)
- 地址库(Address Library)
- Visual C++ 运行库

---

修复内容
本插件的设计灵感大量源自Z-Floor Patcher(Z轴地面补丁),它遵循严格明确的规则,确保仅修复存在问题的记录,规则如下:
1. 若某条记录被标记为「初始禁用」,且非持久化/无父对象/未关联任务,同时Z轴坐标≠-30000,则自动将其Z轴坐标设为-30000
2. 若某条记录的Z轴坐标≤-30000,但未被标记为「初始禁用」,则为其添加该标记
3. 若某条记录被标记为「已删除」,且不属于导航网格,则移除其「已删除」标记,添加「初始禁用」标记,并将其坐标移至Z轴-30000
4. 遵循Z轴地面补丁的规范,将所有初始禁用的导航网格的全部顶点移至Z轴-30000
5. 对于所有被本插件修改的引用,都会将其绑定至玩家引用(playerRef)作为父对象,并添加「启用状态与父对象相反」的标记,确保它们不会因意外情况或其他因素被重新启用。这是一项同步安全机制,很多处理禁用引用的插件均采用该设计。

《上古卷轴》可以兼容很多数据异常,但错误的放置坐标尤为棘手——因为这些对象依然会被渲染。尤其是被标记为「已删除」的引用,在部分情况下还会导致游戏崩溃。

简单来说,本插件会修复游戏内未被正确禁用、因此仍在被渲染的对象;同时修复被标记为「已删除」的对象(永远不应该用这种方式移除对象,会引发各类问题);还会修复顶点垂直坐标过低的导航网格。

禁用引用完整性修复工具并非万能的“性能魔法”MOD,它仅修复MOD作者留下的细微错误,确保引擎只渲染玩家需要看到的内容。

---

核心运行机制
本插件修改记录标记与坐标的核心功能,代码源自《基础对象交换器(Base Object Swapper)》的开源代码。

插件分为两个运行阶段:
- 主阶段:通过挂钩InitItemImpl与Load3D虚函数表,在引用的模型与贴图加载前完成拦截。这是实现防卡顿的核心环节,所有Z轴坐标为-30000、但未带「初始禁用」标记的引用,都会在此处被无条件拦截处理,不会因排除逻辑被静默跳过。
- 次阶段:在场景加载事件、存档加载时运行。负责执行正确的Disable()禁用调用、绑定启用父对象、修正导航网格顶点,同时作为挂钩机制遗漏内容的安全网。该阶段在模型加载完成后才会触发,因此无法避免初始的加载开销,但能保证后续游戏状态的正确性。

这种设计既保证了修正的自动化,又避免了大范围的盲目修改。本插件是完全无脚本的轻量级SKSE插件:不含任何脚本、无MOD配置菜单(MCM)、无额外UI组件(无需SKSE Framework、Prisma UI等)、不新增任何游戏玩法系统,采用事件驱动机制而非持续轮询,仅在处理场景时才会运行。

---

配置说明
所有配置均可在DisabledReferenceIntegrityFix.ini文件中修改。

基础配置项:

enable_logging = true                ; 启用日志功能
verbose_logging = false            ; 启用详细日志
log_level = 3                        ; 日志等级

fix_references = true                ; 启用引用修正逻辑
fix_navmeshes = true               ; 启用地面以下导航网格顶点修正(实验性功能)
auto_fix_on_cell_load = true         ; 探索世界的过程中持续保持防护生效

patch_interior = true                ; 扫描并修复室内场景
patch_exterior = true                ; 扫描并修复室外场景

include_deleted_refs = false         ; 默认关闭。已删除记录的恢复属于高级功能,仅了解其利弊后再启用
fix_all_init_disabled = false      ; 对初始禁用引用采用更激进的处理方式,非特殊需求请保持关闭

max_refs_per_batch = 0               ; 若使用超大型MOD组合,想要更平缓的增量清理,可通过该参数限制单场景的单批次最大处理引用数


---

排除规则与控制
默认情况下,仅标记类引用会被排除在修正范围外,其他任何位于Z轴-30000、但未带「初始禁用」标记的表单类型,都会被处理。

你可以通过INI文件排除已知的敏感内容:
- 按插件名称排除
- 按FormID排除

这让你可以保留已知特殊场景的内容不被修改,同时享受其他内容的自动清理。DynDOLOD.esp已被默认设为忽略,因为目前暂不确定它修改的初始禁用记录是否允许改动坐标。

---

日志与诊断功能
插件内置了可配置的日志系统:
- 标准模式:提供简洁实用的运行摘要
- 详细模式:用于深度故障排查
- 日志等级:可自定义输出内容,从仅报错到全追踪细节。1=错误,2=警告,3=信息,4=调试,5=追踪

如果你在测试卡顿改善效果,日志可以帮你确认扫描与修复的内容。日志会记录记录类型与FormID,让你可以自行查看哪些内容存在问题。

如果你想在游戏内验证MOD是否生效,可以使用控制台指令Prid。该指令可以在控制台中选中对应引用,无论它处于启用/禁用状态。之后配合《更详细信息控制台(More Informative Console)》MOD,即可实时查看引用的状态与Z轴坐标。
使用示例:

Prid 0xFECF0871


调试用的日志示例可查看:

DisabledReferenceIntegrityFix v1-1-0-0
Early reference hooks installed (InitItemImpl + Load3D)
Plugin: Z-Floor Patcher v1.0.0
Author: Alaxouche
Description: SKSE plugin to fix incorrectly disabled records

Attempting to register messaging interface...
OK - Messaging interface obtained
OK - Message handler registered successfully
Loaded
initSeen:1 initFixedPreLive:0 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
stage=init reason=below_floor_gate ref=0x01000DBC oldZ=-30000.000 newZ=-30000.000 cell=0x00009659 cellType=ext cellXY=(4, -5) base=0x8500FE2D srcRef=wip Skyrim Regional Forests Framework 1.0.esp srcBase=wip Skyrim Regional Forests Framework 1.0.esp
stage=init reason=below_floor_gate ref=0xFE41D4E1 oldZ=-30000.000 newZ=-30000.000 cell=0x000099C4 cellType=ext cellXY=(-1, -1) base=0x04039F87 srcRef=Serpents_Covenant_Merged.esp srcBase=Dragonborn.esm
stage=init reason=below_floor_gate ref=0x000C0627 oldZ=-30000.000 newZ=-30000.000 cell=0x00009712 cellType=ext cellXY=(5, -11) base=0x0001819B srcRef=Ivy - Riverwood Windmill Garden.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x000C0628 oldZ=-30000.000 newZ=-30000.000 cell=0x00009712 cellType=ext cellXY=(5, -11) base=0x0001B0A9 srcRef=Ivy - Riverwood Windmill Garden.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x000C053C oldZ=-30000.000 newZ=-30000.000 cell=0x00009712 cellType=ext cellXY=(5, -11) base=0x0001B0A9 srcRef=Ivy - Riverwood Windmill Garden.esp srcBase=Skyrim.esm
initSeen:19580 initFixedPreLive:5 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:38398 initFixedPreLive:5 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
stage=init reason=below_floor_gate ref=0x00077E93 oldZ=-30000.000 newZ=-30000.000 cell=0x000093BF cellType=ext cellXY=(-11, 15) base=0x000C5860 srcRef=Environs - Hroggars House.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x01001709 oldZ=-30000.000 newZ=-30000.000 cell=0x000093BF cellType=ext cellXY=(-11, 15) base=0x8500AA2E srcRef=Environs - Hroggars House.esp srcBase=wip Skyrim Regional Forests Framework 1.0.esp
stage=init reason=below_floor_gate ref=0xFECF0818 oldZ=-30000.000 newZ=-30000.000 cell=0x000096F3 cellType=ext cellXY=(5, -10) base=0x1F10E2E6 srcRef=Northern Roads - Lux Via - Riverwood Wooden Bridge - Covered Bridge patch.esp srcBase=Lux Via.esp
initSeen:56343 initFixedPreLive:8 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
stage=init reason=below_floor_gate ref=0x000C3C6E oldZ=-30000.000 newZ=-30000.000 cell=0x00009883 cellType=ext cellXY=(8, -23) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x000C3C69 oldZ=-30000.000 newZ=-30000.000 cell=0x00009883 cellType=ext cellXY=(8, -23) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x000C3C65 oldZ=-30000.000 newZ=-30000.000 cell=0x00009883 cellType=ext cellXY=(8, -23) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x0001D70A oldZ=-30000.000 newZ=-30000.000 cell=0x00009440 cellType=ext cellXY=(-8, 11) base=0x00026FDD srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x00061415 oldZ=-30000.000 newZ=-30000.000 cell=0x0000943E cellType=ext cellXY=(-6, 11) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x00061417 oldZ=-30000.000 newZ=-30000.000 cell=0x0000943E cellType=ext cellXY=(-6, 11) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x00061413 oldZ=-30000.000 newZ=-30000.000 cell=0x0000943E cellType=ext cellXY=(-6, 11) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x00061419 oldZ=-30000.000 newZ=-30000.000 cell=0x0000943E cellType=ext cellXY=(-6, 11) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x00061410 oldZ=-30000.000 newZ=-30000.000 cell=0x0000943E cellType=ext cellXY=(-6, 11) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x00061418 oldZ=-30000.000 newZ=-30000.000 cell=0x0000943E cellType=ext cellXY=(-6, 11) base=0x00050D03 srcRef=MoveableChain.esp srcBase=Skyrim.esm
initSeen:73430 initFixedPreLive:18 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:89584 initFixedPreLive:18 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:105715 initFixedPreLive:18 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:121226 initFixedPreLive:18 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:136622 initFixedPreLive:18 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
stage=init reason=below_floor_gate ref=0x5A000808 oldZ=-30000.000 newZ=-30000.000 cell=0x0000BCB0 cellType=ext cellXY=(41, -23) base=0x00049441 srcRef=Riften Docks Overhaul.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x5A000881 oldZ=-30000.000 newZ=-30000.000 cell=0x0000BCB0 cellType=ext cellXY=(41, -23) base=0x00097F68 srcRef=Riften Docks Overhaul.esp srcBase=Skyrim.esm
stage=init reason=below_floor_gate ref=0x5A000884 oldZ=-30000.000 newZ=-30000.000 cell=0x0000BCB0 cellType=ext cellXY=(41, -23) base=0x00093D2C srcRef=Riften Docks Overhaul.esp srcBase=Skyrim.esm
initSeen:152350 initFixedPreLive:21 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:166821 initFixedPreLive:21 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:180878 initFixedPreLive:21 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
initSeen:194101 initFixedPreLive:21 initSkip(3d:0 attached:0 refsLoaded:0) load3dGated:0 | diag(cairOk:0 belowDis:0 excl:0) | fallbackCells:0 fallbackRefFixes:0 navmeshEventCells:0 navmeshEventVerts:0
stage=init reason=below_floor_gate ref=0x00015B2A oldZ=-30000.000 newZ=-30000.000 cell=0x00009292 cellType=ext cellXY=(-7, 24) base=0x8500592E srcRef=wip Skyrim Regional Forests Framework 1.0.esp srcBase=wip Skyrim Regional Forests Framework 1.0.esp
stage=init reason=below_floor_gate ref=0xFE18D999 oldZ=-30000.000 newZ=-30000.000 cell=0x00009A07 cellType=ext cellXY=(-2, -3) base=0xFE382824 srcRef=Environs - Tundra Farmhouse.esp srcBase=Dynamic Things Alternative.esp

---

兼容性
本插件为《上古卷轴5 特别版/周年版/VR版》制作,兼容1.5.97与1.6.1170版本,其他版本未经测试。

通用兼容性说明:
- 兼容所有创建、修改记录的MOD
- 可作为加载顺序清理与冲突解决的补充,但无法替代它们
- 与其他SKSE插件暂无已知冲突

若你启用了实验性设置,请先在自己的游戏环境中测试。

---

性能预期与局限性
本MOD可以正确禁用无用的记录,让它们不再被渲染——这些问题大多由其他MOD引发。

预期效果
- 减少微卡顿
- 降低由已删除记录引发的崩溃与BUG概率
- 效果随安装的MOD数量递增,本MOD仅修复非原版游戏的内容。除非使用的MOD存在严重的数据损坏,否则大概率不会感受到极其明显的性能与稳定性提升。

非预期效果
- 无法修复无关的性能瓶颈(脚本、绘制调用、贴图、CPU上限等)
- 它不是通用的帧率提升工具,只是一款记录修复工具

尽管有极其严格的规则体系,本插件仍有可能误触不该修改的记录。部分记录虽被禁用,但未被移至Z轴-30000,是因为它们被任务使用、有关联父对象、属于持久化内容等。部分记录类型(如标记类)绝对不应被修改。如果你发现任何问题,请反馈给作者,作者会深入排查并将这些引用加入插件的排除列表,你也可以自行将特定记录或插件加入黑名单。

> 请注意:如果你有足够的修改经验,始终建议在XEdit中手动修复这些问题,而非完全依赖本工具。本工具仅作为针对特定记录引发问题的额外防护手段。

---

常见问题FAQ
Q:可以在存档中途安装吗?
A:可以。

Q:我应该立刻启用所有选项吗?
A:请从默认设置开始,先测试游玩,仅当你有明确需求时,再启用实验性选项。

Q:我需要一直开着详细日志吗?
A:不需要。正常游玩时请关闭详细日志,仅在调试时临时启用。

---

下载地址:

**** Hidden Message *****

姚嘞个摇1 发表于 2026-3-24 15:58

看到楼主这么努力分享,我只能顶个贴感谢一下了!感谢论坛,感谢LZ热心分享!

lmthunder 发表于 2026-3-24 20:17

这到底有多少修复MOD。。。。

xu28 发表于 2026-3-24 21:03

谢谢分享

liuylee 发表于 2026-3-24 21:44

11111111111111111111111

972486060 发表于 2026-3-25 10:48

谢谢分享

背后无水 发表于 2026-3-25 12:25

感谢分享

a7803785 发表于 2026-3-25 13:45

感谢分享

放开那个⑨ 发表于 2026-3-25 13:53

6666666666666666666666

侽爵a 发表于 2026-3-25 14:34

感谢分享

Messer 发表于 2026-3-25 17:29

xxffxxxxxxxxxxxx

mfkadnqsfi 发表于 2026-3-25 17:43

感谢分享

3dm_27769278 发表于 2026-3-25 18:12

感谢分享

ft1139964 发表于 2026-3-25 19:09

感谢分享

3dm_21679563 发表于 2026-3-25 20:16

感谢分享

零式尊者X 发表于 2026-3-25 21:39

具体在游戏中要如何使用呢?

懵圈懵笔 发表于 2026-3-26 12:48

水水水水水水水水水水水

3dm_14252599 发表于 2026-3-27 15:26

66666666666666

eva019_19820105 发表于 2026-3-27 22:14

----------------------------------------------

nimagehei 发表于 2026-3-28 01:57

111111111166666666666688888888888

d1967217 发表于 2026-3-28 15:21

感谢分享

O盗盗O 发表于 2026-3-28 16:43

修复被错误禁用/删除的游戏引用,减少微卡顿与各类异常问题(2026-03-26更新)

cangxueyue3 发表于 2026-3-28 19:18

6666666666666666

鼓掌之间 发表于 2026-3-30 15:46

2026-03-30更新

sealloveyou 发表于 2026-3-30 18:18

感谢分享!!

三朝元老 发表于 2026-3-30 22:04

666666666666666666

keita19860 发表于 2026-4-2 00:41

这个模组我还没看到用处,可能我还没走出新手村吧,玩老滚真不是玩里面内容是玩模组~

msvqr 发表于 2026-4-5 18:46

谢谢分享

大毛老湿 发表于 2026-4-7 20:08

6666666666666666666666666

鼓掌之间 发表于 2026-4-9 11:02

2026-04-09更新
页: [1] 2 3
查看完整版本: 修复被错误禁用/删除的游戏引用,减少微卡顿与各类异常问题(2026-08-22更新)