HsMod数据持久化方案:ConfigValue实现用户配置保存
在游戏插件开发中,用户配置的持久化存储是提升体验的关键功能。HsMod作为基于BepInEx框架的《炉石传说》插件,采用ConfigValue机制实现配置的自动加载与保存,确保用户设置在游戏重启后依然生效。本文将从配置定义、数据绑定到持久化流程,全面解析HsMod的配置管理方案。
配置系统核心组件
HsMod的配置系统围绕PluginConfig类构建,该类位于HsMod/PluginConfig.cs,通过BepInEx的ConfigEntry<T>泛型接口实现类型安全的配置管理。核心组件包括:
- 配置定义:使用静态
ConfigEntry<T>字段声明配置项,支持bool、int、string等多种类型 - 数据验证:通过
AcceptableValueRange<T>限制数值范围,如帧率限制[1-2333] - 本地化支持:结合HsMod/LocalizationManager.cs实现多语言配置说明
- 持久化存储:自动映射到插件目录下的config文件,格式为UTF-8编码的键值对
// 配置示例:帧率限制(HsMod/PluginConfig.cs L183)
targetFrameRate = config.Bind(
LocalizationManager.GetLangValue("targetFrameRate.label"),
LocalizationManager.GetLangValue("targetFrameRate.name"),
-1,
new ConfigDescription(
LocalizationManager.GetLangValue("targetFrameRate.description"),
new AcceptableValueRange<int>(-1, 2333)
)
);
配置加载流程解析
HsMod在插件启动时执行配置初始化,流程如下:
- 配置文件绑定:在
Plugin.Awake()方法中调用ConfigBind(),将配置项与物理文件关联 - 默认值设置:为未定义的配置项提供默认值,如
isPluginEnable默认启用插件 - 本地化适配:通过
LocalizationManager.GetLangValue()加载多语言配置说明 - 运行时修改:支持通过快捷键(如F4)动态重载配置,无需重启游戏
sequenceDiagram
participant Plugin as 插件主程序
participant Config as 配置系统
participant File as 配置文件
participant Local as 本地化服务
Plugin->>Config: 调用ConfigBind()
Config->>File: 读取config文件
alt 文件不存在
Config->>Config: 设置默认值
end
Config->>Local: 获取本地化描述
Local-->>Config: 返回多语言文本
Config-->>Plugin: 配置项就绪
Plugin->>Config: 运行时修改配置
Config->>File: 自动保存变更
高级配置特性
1. 配置模板系统
HsMod提供预设配置模板,通过configTemplate字段快速切换配置方案:
// 配置模板定义(HsMod/Utils.cs L70-78)
public enum ConfigTemplate {
[Description("默认")]
DoNothing,
[Description("挂机")]
AwayFromKeyboard,
[Description("反挂机")]
AntiAwayFromKeyboard
}
模板应用场景包括:
- 挂机模式:自动启用时间齿轮与自动操作
- 竞技模式:禁用所有可能影响平衡的功能
- 开发模式:开启调试日志与内部接口
2. 热重载机制
通过WebServer.Restart()和PatchManager.PatchSettingDelegate()实现配置热更新:
// 热重载触发(HsMod/Main.cs L179)
if (Input.GetKeyUp(KeyCode.F4)) {
LoadSkinsConfigFromFile();
WebServer.Restart();
UIStatus.Get().AddInfo("配置已重载");
}
3. 类型安全保障
通过泛型ConfigEntry<T>确保配置类型一致性,支持的类型包括:
- 基础类型:bool(isPluginEnable)、int(timeGear)、string(webPageBackImg)
- 枚举类型:KeyboardShortcut(快捷键)、Utils.CardState(卡牌状态)
- 自定义类型:通过TypeConverter实现复杂对象的序列化
最佳实践与避坑指南
配置项命名规范
遵循功能.模块.属性命名模式,如:
HsMod.Init.Language:初始化相关配置skin.Hero:皮肤相关配置webServer.Port:网络服务配置
敏感配置保护
对于高级配置项,通过Advanced标签隐藏,防止普通用户误操作:
// 高级配置示例(HsMod/PluginConfig.cs L160)
pluginInitLanague = config.Bind(
"HsMod",
"HsMod.Init.Language",
"UNKNOWN",
new ConfigDescription(
"(!!! DON'T EDIT IT) 初始化语言",
null,
new object[] { "Advanced" }
)
);
多场景配置适配
根据游戏模式动态调整配置生效范围,如:
// 模式化配置(HsMod/Main.cs L245)
if (GameMgr.Get().IsBattlegrounds() && keyShutUpBob.Value.IsDown()) {
isShutUpBobEnable.Value = !isShutUpBobEnable.Value;
}
配置文件结构解析
生成的配置文件位于BepInEx/config目录,格式如下:
## 插件启用状态
# 标签: 插件设置
# 描述: 启用或禁用HsMod插件
# 默认值: True
HsMod.IsPluginEnable = True
## 帧率限制
# 标签: 显示设置
# 描述: 设置游戏最大帧率(-1为不限制)
# 范围: -1 ~ 2333
# 默认值: -1
TargetFrameRate = 60
配置文件采用INI格式,支持:
- 分组管理(
[HsMod]) - 注释说明(
# 描述) - 类型标注(
范围: -1 ~ 2333)
扩展应用:皮肤配置管理
HsMod将皮肤相关配置单独管理,通过skinCoin、skinHero等字段实现个性化皮肤设置:
// 皮肤配置(HsMod/PluginConfig.cs L231-239)
skinCoin = config.Bind(
LocalizationManager.GetLangValue("skinCoin.label"),
LocalizationManager.GetLangValue("skinCoin.name"),
-1,
LocalizationManager.GetLangValue("skinCoin.description")
);
skinHero = config.Bind(
LocalizationManager.GetLangValue("skinHero.label"),
LocalizationManager.GetLangValue("skinHero.name"),
-1,
LocalizationManager.GetLangValue("skinHero.description")
);
皮肤配置支持动态加载,通过LoadSkinsConfigFromFile()方法应用用户自定义皮肤方案。
总结与扩展建议
HsMod的ConfigValue方案实现了:
- 类型安全的配置管理
- 多语言支持的用户界面
- 动态重载的开发效率
- 模式化的配置模板
建议扩展方向:
- 配置导出/导入:添加JSON格式的配置备份功能
- 配置同步:通过WebServer实现多设备配置同步
- 配置分享:支持生成配置方案二维码分享
通过本文介绍的ConfigValue机制,开发者可以快速实现插件的配置管理功能,同时为用户提供安全、灵活的个性化设置体验。完整配置系统实现可参考HsMod/PluginConfig.cs源代码。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00