三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

HsMod:基于BepInEx与Harmony的炉石传说运行时修改框架技术解析

HsMod:基于BepInEx与Harmony的炉石传说运行时修改框架技术解析

HsMod:基于BepInEx与Harmony的炉石传说运行时修改框架技术解析

【免费下载链接】HsModHearthstone Modification Based on BepInEx项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod

HsMod是一个基于BepInEx框架和Harmony库开发的炉石传说游戏运行时修改系统,采用C# .NET 4.8技术栈实现。该项目通过动态代码注入和IL指令修改技术,在保持游戏客户端完整性的前提下,提供了超过50项游戏功能增强和界面定制能力。不同于传统的游戏修改器,HsMod采用了非侵入式的运行时补丁机制,实现了对Unity游戏引擎和炉石传说客户端的高度可扩展性集成。

技术架构与实现原理

BepInEx框架集成

HsMod作为BepInEx 5.x的插件模块,利用了该框架的预加载器机制和运行时补丁系统。BepInEx作为Unity游戏的通用修改框架,提供了以下关键技术特性:

  • 预加载器(Preloader):在游戏主程序集加载前注入,为后续插件提供运行环境
  • 插件管理器:统一的插件加载、初始化和生命周期管理
  • 配置系统:基于BepInEx.Configuration.ConfigFile的持久化配置存储
  • 日志系统:统一的调试和错误日志输出

项目配置文件HsMod.csproj中引用了关键的BepInEx核心组件:

<Reference Include="BepInEx"> <HintPath>BepInExCore\BepInEx.dll</HintPath> </Reference> <Reference Include="BepInEx.Harmony"> <HintPath>BepInExCore\BepInEx.Harmony.dll</HintPath> </Reference> <Reference Include="BepInEx.Preloader"> <HintPath>BepInExCore\BepInEx.Preloader.dll</HintPath> </Reference>

Harmony动态代码注入

HsMod的核心技术基于Harmony库实现的方法拦截和修改。Harmony提供了三种主要的补丁类型:

  • 前缀补丁(Prefix):在目标方法执行前运行,可以修改参数或阻止原方法执行
  • 后缀补丁(Postfix):在目标方法执行后运行,可以修改返回值
  • 转置补丁(Transpiler):修改方法的IL指令,实现底层逻辑修改

Patches/PatchHearthstone.cs中可以看到典型的Harmony补丁实现:

[HarmonyPrefix] [HarmonyPatch(typeof(Options), "GetBool", new Type[] { typeof(Option) })] public static bool PatchOptionsGetBool(Option __0, ref bool __result) { if (isBlockStreamerMode.Value && __0 == Option.STREAMER_MODE) { __result = false; return false; // 阻止原方法执行 } return true; // 允许原方法继续执行 }

模块化补丁系统

HsMod采用了高度模块化的补丁设计,每个功能模块都有独立的补丁文件:

补丁模块主要功能技术实现
PatchHearthstone.cs核心游戏功能修改游戏选项、实体属性、界面控制
PatchBattlegrounds.cs酒馆战棋增强MMR显示、快捷键绑定、数据统计
PatchMercenaries.cs佣兵模式优化皮肤管理、界面缩放控制
PatchAntiCheat.cs反作弊处理客户端验证绕过、安全机制处理
PatchEmote.cs表情系统修改冷却时间控制、快捷键支持
PatchDevOptions.cs开发者模式调试功能、开发工具集成

配置管理系统

项目实现了完整的配置管理系统,通过PluginConfig.cs定义了超过100个可配置参数:

public class PluginConfig { // 时间控制配置 public static ConfigEntry<float> timeGear; public static ConfigEntry<bool> isTimeGearEnable; // 界面配置 public static ConfigEntry<bool> isShowFPS; public static ConfigEntry<bool> isBlockPopups; // 游戏功能配置 public static ConfigEntry<bool> isAutoGoldCard; public static ConfigEntry<bool> isAutoDiamondCard; // 网络配置 public static ConfigEntry<int> webServerPort; public static ConfigEntry<string> webServerBind; }

核心功能实现技术细节

游戏时间控制系统

时间控制功能通过修改Unity的Time.timeScale属性实现,支持1-32倍速调节:

[HarmonyPrefix] [HarmonyPatch(typeof(TimeScaleMgr), "SetTimeScale")] public static bool PatchSetTimeScale(float scale) { if (isTimeGearEnable.Value && timeGear.Value > 0) { Time.timeScale = timeGear.Value; return false; // 阻止原方法执行 } return true; }

Web服务架构

HsMod内置了轻量级Web服务器,提供实时游戏信息监控和远程配置管理:

  • 端口:默认58744,支持自定义绑定地址
  • 协议:基于HTTP的RESTful API
  • 数据格式:JSON响应,支持多语言界面
  • 安全机制:本地网络访问限制,无外部数据收集

Web服务核心类结构:

  • WebServer.cs:HTTP服务器实现
  • WebApi.cs:API端点处理
  • WebPage.cs:HTML页面渲染
  • LocalizationManager.cs:多语言支持

皮肤系统实现

皮肤修改功能通过动态替换游戏资源路径实现:

[HarmonyPrefix] [HarmonyPatch(typeof(EntityBase), nameof(EntityBase.GetPremiumType))] public static bool PatchGetPremiumType(EntityBase __instance, ref TAG_PREMIUM __result) { return Utils.GetPremiumType(ref __instance, ref __result); }

皮肤配置文件HsSkins.cfg采用JSON格式存储,支持实时热重载:

{ "heroSkins": { "defaultHero": "customHeroAsset", "tavernHero": "customTavernAsset" }, "effects": { "finisherEffect": "customFinisher", "coinSkin": "customCoin" } }

多语言支持系统

项目实现了完整的国际化支持,包含13种语言文件:

语言代码语言名称文件路径
zhCN简体中文Languages/zhCN.json
enUS英语(美国)Languages/enUS.json
jaJP日语Languages/jaJP.json
koKR韩语Languages/koKR.json
frFR法语Languages/frFR.json
deDE德语Languages/deDE.json

语言管理系统通过LocalizationManager.cs实现,支持运行时语言切换和动态文本加载。

部署与构建指南

编译环境要求

  • .NET SDK:8.x版本
  • 目标框架:.NET Framework 4.8
  • 构建工具:MSBuild或dotnet CLI

编译命令

git clone --depth 1 --branch bepinex5 https://gitcode.com/GitHub_Trending/hs/HsMod cd HsMod dotnet build --configuration Release --no-restore

运行时依赖

项目需要以下关键依赖库:

  1. BepInEx核心组件

    • BepInEx.dll- 插件框架核心
    • 0Harmony.dll- Harmony库实现
    • Mono.Cecil.dll- IL指令修改工具
  2. 游戏运行时库

    • Assembly-CSharp.dll- 炉石传说主程序集
    • UnityEngine.dll- Unity引擎核心
    • Blizzard.T5.*.dll- 暴雪游戏框架
  3. 系统库

    • mscorlib.dll- .NET Framework核心
    • System.*.dll- .NET系统库

跨平台支持

HsMod支持Windows、macOS和Linux平台,通过不同的运行时库实现兼容性:

平台运行时库目录特殊配置
WindowsUnstrippedCorlib/标准.NET Framework
macOS/LinuxUnstrippedCorlibUnix/Mono运行时环境

性能优化与内存管理

缓存机制优化

项目实现了多层缓存系统以减少重复计算:

  1. 配置缓存:配置值在内存中缓存,减少磁盘I/O
  2. 资源缓存:游戏资源路径缓存,加速皮肤加载
  3. 网络缓存:Web API响应缓存,减少重复请求

内存管理策略

  • 对象池技术:重用频繁创建的对象,减少GC压力
  • 延迟加载:按需加载语言文件和皮肤资源
  • 资源释放:及时释放不再使用的游戏对象

性能监控指标

通过内置的Web服务提供实时性能数据:

指标监控方法优化目标
帧率UnityTime.deltaTime计算保持60FPS稳定
内存使用GC.GetTotalMemory()监控控制内存增长
加载时间关键路径计时减少初始化延迟

安全与兼容性设计

反作弊系统处理

PatchAntiCheat.cs实现了对炉石传说反作弊系统的兼容性处理:

[HarmonyPrefix] [HarmonyPatch(typeof(AntiCheatManager), "Initialize")] public static bool PatchAntiCheatInitialize() { if (isAntiCheatDisabled.Value) { return false; // 阻止反作弊系统初始化 } return true; }

版本兼容性机制

HsMod采用四段式版本号系统确保与游戏版本的兼容性:

版本格式:主版本.子版本.功能版本.构建版本 示例:3.0.1.5 - 主版本:对应炉石传说大版本(如3对应26.x) - 子版本:游戏小版本更新次数 - 功能版本:HsMod功能更新次数 - 构建版本:修复版本号

错误处理与恢复

项目实现了全面的错误处理机制:

  1. 异常捕获:所有Harmony补丁都有try-catch包装
  2. 配置回滚:配置文件损坏时自动恢复默认值
  3. 安全模式:关键错误时降级运行,避免游戏崩溃

调试与开发工具

日志系统

HsMod集成了BepInEx的日志系统,提供多级日志输出:

Utils.MyLogger(BepInEx.Logging.LogLevel.Info, $"功能初始化完成"); Utils.MyLogger(BepInEx.Logging.LogLevel.Error, $"错误信息: {ex.Message}");

日志文件位于BepInEx/Logs/HsMod.log,包含详细的调试信息。

开发模式

通过PatchDevOptions.cs启用的开发者功能:

  • 调试界面:显示游戏内部状态信息
  • 内存查看器:实时监控游戏对象状态
  • 网络监控:捕获和分析游戏网络通信

性能分析工具

项目包含的性能分析功能:

  1. 帧率监控:实时显示游戏帧率信息
  2. 内存分析:跟踪对象创建和销毁
  3. 网络延迟:监控游戏服务器通信延迟

技术对比分析

与传统修改器的对比

特性传统修改器HsMod
修改方式直接修改游戏文件运行时内存补丁
安全性易被检测动态注入,更难检测
更新频率需要重新打包配置文件热更新
兼容性依赖特定版本版本自适应
功能扩展有限模块化,易于扩展

与其他炉石插件的对比

插件名称技术架构功能范围维护状态
MixMod基于Assembly-CSharp修改基础功能社区维护
Apollo Mod独立注入器有限功能停止更新
HsModBepInEx + Harmony全面功能持续维护

故障排查与调试指南

常见问题解决方案

问题1:插件加载失败

# 检查依赖库 ls -la Hearthstone/BepInEx/unstripped_corlib/ # 验证BepInEx配置 cat Hearthstone/doorstop_config.ini

问题2:功能不生效

  1. 检查配置文件路径:BepInEx/config/HsMod.cfg
  2. 验证补丁应用状态:查看BepInEx/Logs/HsMod.log
  3. 检查版本兼容性:确保插件版本与游戏版本匹配

问题3:游戏崩溃

  1. 启用安全模式:删除配置文件重新配置
  2. 检查冲突插件:禁用其他BepInEx插件
  3. 查看崩溃日志:Hearthstone/Output_log.txt

调试命令

通过Web API提供的调试接口:

# 获取插件状态 curl http://localhost:58744/api/status # 查看配置 curl http://localhost:58744/api/config # 重新加载配置 curl -X POST http://localhost:58744/api/reload

架构演进与未来规划

当前架构优势

  1. 模块化设计:每个功能独立补丁,易于维护和扩展
  2. 配置驱动:所有功能通过配置文件控制,无需重新编译
  3. 多平台支持:Windows、macOS、Linux全面兼容
  4. 向后兼容:版本号系统确保与旧版本兼容

技术债务与改进方向

  1. 代码重构:统一补丁管理机制
  2. 性能优化:减少内存占用和CPU使用率
  3. 测试覆盖:增加单元测试和集成测试
  4. 文档完善:完善API文档和开发指南

路线图

  • 短期目标:优化Web服务性能,增加RESTful API
  • 中期目标:实现插件热重载,无需重启游戏
  • 长期目标:开发可视化配置编辑器,降低使用门槛

结语

HsMod项目展示了基于BepInEx和Harmony的游戏修改框架的强大能力。通过精细的运行时补丁技术,在保持游戏客户端完整性的同时,提供了丰富的功能扩展。项目的模块化架构、配置管理系统和Web服务集成,为游戏修改插件开发提供了优秀的技术范例。

对于游戏修改技术开发者而言,HsMod的源码提供了宝贵的参考价值,涵盖了从基础注入到高级功能实现的完整技术栈。对于普通用户,项目提供了稳定可靠的功能增强,显著提升了炉石传说的游戏体验。

项目的持续维护和社区参与确保了技术的前沿性和功能的实用性,使其成为炉石传说修改领域的标杆项目。

【免费下载链接】HsModHearthstone Modification Based on BepInEx项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表