鼓掌之间 发表于 2025-12-31 14:37

原生编辑器ID修复


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

一款SKSE插件,新增/扩展编辑器ID查询功能,并提升引擎字符串格式化的安全性

·概述
本Mod实现了编辑器ID与表单之间的完整查询功能,让引擎能充分利用这一特性。
这意味着你可以在控制台中使用编辑器ID,例如“帮助”命令也能搜索编辑器ID。现在你能查询的表单数量比以往大幅增加,包括对象引用,进而支持角色(即非玩家角色,自1.2.1版本起需在ini文件中手动启用)。
此外,本Mod还修复了部分字符串格式化调用中因缓冲区溢出/越界可能导致的游戏崩溃问题。

·安装
通过你偏好的Mod管理器下载并安装

·需求
- 天际脚本扩展器(SKSE64):https://skse.silverlock.org/
- 根据游戏版本选择对应的周年纪念版(AE)或特别版(SE)地址库:https://bbs.3dmgame.com/thread-6549645-1-1.html

·详细说明
“原生编辑器ID修复”分为三个主要组件,可通过附带的ini文件进行配置:

·1. 支持通过编辑器ID原生查询表单
此前已有类似Mod(如po3的优化插件)实现该功能,本Mod与这类Mod的核心区别在于实现方式。

·2. 支持通过表单原生查询编辑器ID
反向查询功能此前仅能通过外部工具实现,本Mod直接修改原生程序流程,让天际引擎本身支持调用新增的编辑器ID。此外,Mod复用了引擎的字符串缓存系统,并采用自定义查询表结构,大幅降低内存占用。在中等Mod加载量的测试环境中,相较于以往方案,可减少高达100MB的内存浪费(实际效果因配置而异)。

·3. 修复缓冲区溢出/越界问题,提升字符串格式化安全性
该问题源于老式非C标准的vsprintf函数调用(无需指定缓冲区大小)。若调用前对输入内容进行校验,通常不会出现问题,但多个场景中缺少相关校验,例如过长的编辑器ID可能导致游戏崩溃或栈损坏。为解决此问题,Mod为受影响的vsprintf调用指定了最大缓冲区大小,并在编辑器ID初始加载时截断过长内容。

如需查看具体实现方案,可下载附带的源代码。

·面向DLL Mod开发者
如需利用编辑器ID查询功能,可直接在所有TESForm派生类中调用对应的虚函数(本Mod源代码中命名为GetEditorID)。
若原生实现已被禁用,也可通过外部调用获取相关信息:只需在项目中包含API头文件,并调用对应函数(详见源代码压缩包中的NativeEditorIDFixAPI.hpp文件)。

下载地址:

**** Hidden Message *****









秀一沐泽 发表于 2025-12-31 15:04

66666666666666666666666666

fouriermaster 发表于 2026-1-1 00:01

希望楼主继续分享更多好用的东西!谢谢!感谢论坛,感谢LZ热心分享!

高塔黑龙 发表于 2026-1-1 18:13

感谢分享

a386387316 发表于 2026-1-1 22:41

66666666666666666666
页: [1]
查看完整版本: 原生编辑器ID修复