DLC检测性能优化补丁
转自:https://www.nexusmods.com/monsterhunterwilds/mods/3796
这是一款针对isAvailableDLC()和isNewBenefit()函数的原生C++补丁,通过缓存函数调用结果提升性能,可缓解每帧数百次的DLC检测操作。
·需求
REFramework框架
本MOD的封面图取自那些时不时冒出来的“恶意MOD”,但这款MOD是货真价实的优化工具,你若想自行编译,可获取开源代码。
本MOD绝非用于解锁DLC!
如果你知道解锁DLC的方法,那随便你,但请不要在评论区提及相关内容。但凡出现此类评论,我都会隐藏并举报。
发布本MOD的初衷是解决性能问题,而非助长盗版行为。
这是一款操作逻辑十分简单的REFramework插件,具体功能如下:
1.挂钩app.dlc.DlcService::isAvailableDLC(app.dlc.DlcProductId.ID)函数并缓存其返回结果。这意味着游戏对DLC的实际检测不会再每帧多次频繁调用Steam接口,而是直接调取缓存结果。该函数的调用次数不会减少,只是省去了Steam接口交互的相关开销。理论上,此优化为全局生效,而非仅限于支援柜台场景。
2.挂钩app.GUIManager::isNewBenefit()函数,使其始终返回“false”。该函数的作用本质上是让支援柜台的看板猫头上显示感叹号,提示玩家有新DLC内容。此优化同样能节省大量性能开销。
简单来说,当你靠近支援柜台时,游戏会针对每一项你未拥有的物品,单独检测是否属于新DLC内容,这会导致每帧都要对每个DLC条目单独调用一次Steam接口进行权限验证。
没错,上述检测操作是每帧都会执行的。
每帧要调用Steam接口数百次,就为了检查你是否在上一帧到当前帧的间隙购买了新DLC。
本MOD从两个方面解决该问题:一是缓存Steam接口的调用结果,避免重复请求;二是让看板猫的新内容检测直接返回“无新内容”,从源头减少高开销的检测操作。
我认为DLC接口调用并非只发生在支援柜台场景。我很确定,游戏加载高清材质包时也会触发这类调用。
有人说只有靠近支援柜台时才会出现帧率下降,实际效果因人而异。(我见过部分玩家使用后帧率提升了20帧)
本MOD仅对CPU性能受限的设备有效,对显卡性能受限的设备则基本没有作用。具体能提升多少帧率,主观性极强,无法给出确切数值。
该优化的实际影响深度尚未完全探明,需要你自行测试验证。
据称本MOD的有效作用范围是支援柜台周边50米内,但也有用户反馈,使用后无论在野外还是其他场景,整体性能都有提升。
开发这款MOD的契机,是Reddit论坛上有帖子探讨了DLC检测对游戏性能的影响。
目前该帖子的作者并未公开其发现的技术细节,因此我们MOD开发者只能通过自主测试,去推测他们的研究成果。
我更希望他们能公开具体的研究内容,比如实现方法、代码和技术细节等,这样我们就能进一步完善这款优化补丁。但话说回来,这些技术细节确实可能被用于解锁DLC——当然,就算不公开,有心人也能通过修改本MOD实现这个目的。我宁愿选择公开透明,盗版行为自有其存在的土壤,我不会因噎废食,放弃开发这类实用的优化工具。
即便卡普空要修复这个性能问题,大概率也要等到下一次计划内的游戏版本更新。这是他们如今一贯的行事风格。与其坐等遥遥无期的官方更新,不如现在就为玩家提供一款可用的优化补丁。
使用本MOD不会影响你已拥有的DLC内容,更不会凭空解锁所有DLC。如果你购买了新DLC,使用本MOD时需要重启游戏,游戏才能识别到新解锁的内容(重启前,游戏会一直调取缓存的旧数据)。
#·问:本MOD和《减少DLC检测次数》MOD有什么区别?
答:那款MOD仅针对isNewBenefit()函数进行优化,且是基于LUA脚本实现的。而本MOD同时优化了两个函数,且采用原生C++编写,理论上优化效果会更显著,但具体的帧率提升幅度无法确定。另外我认为,isNewBenefit()函数的作用范围应该仅限于支援柜台场景。而本MOD对isAvailableDLC()函数的补丁是全局生效的,该函数可在游戏任何场景被调用。
(那款MOD未对isAvailableDLC()函数进行优化,意味着游戏其他场景下的DLC检测和Steam接口调用无法被缓存,不过我并不清楚该函数在isNewBenefit()函数之外的场景中,每帧会被调用多少次。)
简而言之:本MOD是比那款MOD更完善的解决方案。
同时安装两款MOD毫无意义。最理想的情况也只是两款MOD挂钩同一个函数,这会增加少许性能开销,最终导致极其微弱的性能损失。
·安装说明
1.通过FluffyMOD管理器进行安装。
2.或直接将MOD的DLL文件解压至游戏目录下的\reframework\plugins\文件夹。
3.或通过其他方式注入该DLL文件。本MOD并非必须依赖REFramework框架运行,只是借助该框架实现自动加载。你可以通过任意方式注入DLL文件,MOD都能正常生效。
·故障排除
无论你将DLL文件放在哪个路径,也无论你给它取什么名字,MOD运行时都会生成一个日志文件,文件名与DLL文件相同,后缀名从DLL改为LOG。(例如DLC_Check_Performance_Patch.dll对应的日志文件为DLC_Check_Performance_Patch.log)
若MOD正常工作,日志文件内容应如下所示:
2026-01-15 14:54:21Initializing.
2026-01-15 14:54:21Attaching proxy.
2026-01-15 14:54:26Module base address: 140000000
2026-01-15 14:54:26Module size: 23CDF000
2026-01-15 14:54:26
2026-01-15 14:54:26
2026-01-15 14:54:26Scanning for app.dlc.DlcService::isAvailableDLC(app.dlc.DlcProductId.ID) bytes.
2026-01-15 14:54:28Found 1 match(es).
2026-01-15 14:54:28Inject address: 148014730 (MonsterHunterWilds.exe + 8014730)
2026-01-15 14:54:28Hooked app.dlc.DlcService::isAvailableDLC(app.dlc.DlcProductId.ID).
2026-01-15 14:54:28
2026-01-15 14:54:28Scanning for app.GUIManager::isNewBenefit bytes.
2026-01-15 14:54:30Found 1 match(es).
2026-01-15 14:54:30Inject address: 145CF6EA0 (MonsterHunterWilds.exe + 5CF6EA0)
2026-01-15 14:54:30Hooked app.GUIManager::isNewBenefit.
2026-01-15 14:54:30
2026-01-15 14:54:30Hooking done!
下载地址:
**** Hidden Message *****
66666666666666666666666666666666
66666666666666
试试看,不知道有没有作用
666666666666666666666666
6666666666666666666
感谢分享
66666666666666666666666666666666666
感谢分享 666666666666
谢谢分享
6666666666666666
66666666666666
用了DLC解锁补丁的需要打这个不? 感谢楼主的分享
好东西,感谢分享 666666666666666
333333333333333333333333333
6666666666666666
矮油 不错哟
sssssssssssssssssssssssssssssssssssssss
66666666666666
谢谢分享!谢谢!
66666666666666666666666666
111111111111111111111111111111111111111111111
11111111111111
666666666666
6666666666666
66666666666666666666
6666666666666666