一个BepInEx补丁程序,可移除RtD模组的不兼容限制,使其能与其他热门英灵神殿模组同时使用。
此补丁会移除 [BepIn不兼容] 来自RtD模组的属性,让你能够将它们与之前被阻止的模组一起使用。这些模组本身可以正常协同工作——这只是移除了限制。
重要提示: 这是一个补丁程序,不是普通插件!
无任意不兼容标记.dllBepInEx/插件补丁/ 文件夹(不是插件!)补丁程序采用双层方案,将Cecil IL补丁与Harmony运行时补丁相结合。所有修改仅在内存中进行——磁盘上的文件绝不会被改动。
启动时,你会看到:
正在处理 RtDVines.dll... 已从 RtDVines 中剥离 19 个不兼容属性 已阉割 RtDVines.Fail() 已从 RtDVines.Awake() 中移除 4 个 Fail() 调用 ✓ Cecil IL 补丁完成 - RtD 检测代码已失效 ✓ Harmony 回退:已准备好绕过不兼容检查 ✓ Harmony 回退:已准备好躲避 ContainsKey 检测 ✓ Harmony 回退:已准备好隐藏程序集名称 ✓ Harmony 回退:已准备好过滤 GetAssemblies ✓ 找到 RtD 模组:RtDVines ✓ 已成功绕过 1 个 RtD 模组的不兼容检查
RtD模组在它们的Awake()方法中添加了四个检测检查:
字节码完整性检查:验证其“格挡”方法未被修改
MethodInfo method = typeof(RtDMod).GetMethod("Block", ...); byte[] ilAsByteArray = method?.GetMethodBody()?.GetILAsByteArray(); if (method == null || ilAsByteArray == null || ilAsByteArray.Length <= 2) Fail();
插件信息字典检查在BepInEx的插件注册表中查找我们的GUID
如果(Chainloader.PluginInfos.ContainsKey("IAmOnTheInternetAndItIsScary.NoArbitraryIncompatibilityFlag"))则失败();
组件名称扫描在所有已加载的程序集中搜索我们的名称
如果(应用域.当前域.获取程序集().任意(a => a.获取名称().名称.包含("NoArbitraryIncompatibilityFlag"))) 失败();
模块名称扫描在所有已加载的程序集模块中搜索我们的名称
如果 (AppDomain.CurrentDomain.GetAssemblies().Any(a => a.ManifestModule.Name.IndexOf("NoArbitraryIncompatibilityFlag", StringComparison.OrdinalIgnoreCase) >= 0)) Fail();
补丁程序采用双层防御策略。Cecil层在BepInEx的预加载阶段运行,此时任何插件代码尚未执行。BepInEx将每个RtD DLL加载到内存中作为 程序集定义 物品,将其交给我们的 补丁() 方法,我们修改IL指令,BepInEx将修改后的版本加载到CLR中。磁盘上的原始DLL从未被改动。
塞西尔IL补丁(主防御)
移除不兼容属性:移除所有 [BepIn不兼容] 从类型自定义属性。这是主要目标——移除实际的不兼容性声明。
中性化失败() 方法: 将方法体替换为仅有 返回即使检测检查以某种方式执行,调用 失败() 什么也不做。
// 之前:private static void Fail() { throw new Exception("Mod integrity check failed."); } // 之后:private static void Fail() { return; // 什么都不做 }
去除静态构造函数抛出异常:NOPs在以下位置抛出语句 .cctor查找包含完整性检查字符串的静态构造函数并替换 加载字符串 + 创建异常对象 + 投掷 与 无操作 说明。
从 Awake() 中移除 Fail() 调用: 将所有调用置空 失败() 在Awake方法中。查找所有 调用失败 说明并将其替换为 无操作 (无操作)。
和谐运行时补丁(回退保护)
和谐层提供备用保护,以防塞西尔层遗漏某些内容,或未来的RtD模组使用不同的模式:
不兼容绕过:补丁 插件信息.不兼容项 返回空数组的 getter,用于 RtD 模组(通过 “Soloredis.” GUID 前缀识别)。
包含潜行:补丁 字典<字符串, 插件信息>.包含键 仅针对我们的特定GUID且仅当从RtD代码调用时返回false。使用堆栈跟踪分析来识别调用方。
程序集名称隐藏:补丁 获取程序集名称() 在从RtD模组调用时,返回“HiddenAssembly”而不是“NoArbitraryIncompatibilityFlag”。使用递归防护来防止在GetAssemblies调用期间出现问题。
程序集获取筛选:补丁 获取应用程序域中的程序集 仅在从RtD模组调用时,才从结果中过滤掉我们的程序集。使用递归防护(获取内部程序集 标志)以防止无限循环——前缀将标志设为真,后缀在过滤后将其设为假,而GetName_Postfix会检查此标志,当它为真时跳过处理。
问:这安全吗?
A:是的。补丁程序只是移除了兼容性限制。模组仍能正常运行,只是不再阻止其他模组了。
问:这会破坏我的游戏吗?
答:不会。如果你遇到任何问题,那都与这个补丁程序无关。你可以随时移除补丁程序以恢复原始行为。
问:这会修改磁盘上的文件吗?
答:不会。所有修改都仅在内存中进行。BepInEx 将 DLL 加载到内存中,我们修改 IL,修改后的版本被加载进游戏。原始文件保持不变。
问:RtD模组更新后需要重新安装吗?
A:不会。补丁程序每次启动时都会运行,并自动处理任何版本的RtD模组。
Q:我可以从旧版本的修补程序升级吗?
A:是的。只需用新的DLL替换旧的DLL即可,在 补丁程序 文件夹。
问:这个能和旧版本的RtD模组兼容吗?
是的。该补丁程序适用于当前所有RtD模组版本。
问:如果我想停止使用这个补丁工具怎么办?
A: 只需从该位置移除DLL文件 补丁程序 文件夹。RtD 模组将恢复其原有行为。
问:为什么会有这个补丁程序?
被屏蔽的模组与RtD模组兼容良好。这些不兼容限制是武断的,阻止了玩家使用能够正常协同工作的模组组合。
问:你会持续更新这个吗?
答:是的。只要这些模组持续被封锁,这个补丁工具就会持续更新以应对。由玩家制作,为玩家服务。
问:RtD作者声称使用此补丁会导致漏洞、低帧率、高内存占用和世界损坏。这是真的吗?
不。这完全是错误的。该补丁程序只会移除不兼容限制——它不会修改游戏逻辑、添加新内容或改变模组的工作方式。被阻止的模组会完全按照它们原本的方式运行。使用该补丁程序不会导致性能问题、不会增加内存占用,也不存在存档损坏的风险。
问:被禁用的模组真的能和RtD模组一起用吗?
A:是的。屏蔽列表中的所有模组一直都能与RtD模组完美兼容。这些不兼容限制是随意的,并非基于实际的技术冲突。玩家们一直在成功使用这些模组组合。

修改前置工具
2026-09-12 14:33:53
修改前置工具

史诗战利品
randyknapp2026-09-09 21:20:10
为英灵神殿添加战利品掉落、魔法物品和附魔。

制作 建造 熔炼 烹饪 燃料 从容器中取出
aedenthorn2025-06-30 08:34:14
让你在制作、建造、使用熔炉和窑炉、添加燃料、烹饪食物等时,可以使用附近容器中的资源。

种植一切
Advize2025-09-09 11:15:37
重写了bkeyes93的种植增强模组。允许你的种植者种植浆果丛、蓟、蒲公英、蘑菇、此前无法获取的树种以及其他装饰性植物。还包括许多其他杂项功能(详见

无限制传送门
frostedplaything4102023-09-02 17:39:40
无限制传送门是一个客户端模组,允许玩家通过传送门传送任何物品。该模组提供广泛的自定义选项,让玩家能够控制物品限制、移除限制,

农场格子
Sarcenzzz2023-06-14 11:38:34
允许所有通过种植器种下的植物自动对齐并放置在网格中,确保它们有足够的生长空间。

更好的UI
MKMasa2021-04-15 09:19:42
这个模组对游戏界面做了一些细微的调整。你可以编辑并选择想要启用的更新内容。

更好的射箭
Ishid42026-09-10 16:16:51
为弓术玩法添加了许多功能和改动,包括全新的箭袋系统、可回收的箭矢、更精准的瞄准以及逼真的箭矢物理效果。