)
【免费下载链接】sona基于Pengu loader的英雄联盟客户端增强插件LOL助手sona助手LOL插件A LOL plugin base on Pengu loader; sona plugin;项目地址https://gitcode.com/gh_mirrors/sona4/sona点击查看免费下载Sona 是一款基于 Pengu Loader 的英雄联盟客户端增强插件LOL 助手内置自动接受对局、秒抢英雄、牛马检测器等几十个可开关的功能。本文将用「隐藏赛事直播弹窗」这个真实功能作为范例带你完整走一遍 Sona 的功能注册模式——从定义配置项、编写功能模块、注册开关到接入设置面板四步即可为自己的插件新增一个功能模块。Sona 的面板集成战绩查询、秒抢英雄、队友分析等丰富功能所有功能都可以通过一个开关即开即关功能注册模式Sona 插件的架构精髓先建立整体认知。Sona 的每个功能都遵循同一套生命周期store 配置项定义 默认值 ↓ 功能模块文件updateXxx(enabled) 开关函数 ↓ features.ts 注册中心初始化 监听变化 ↓ 设置面板 UI开关控件核心思想可以用一句话概括每个功能就是一个独立模块文件对外只暴露一个开关函数注册中心负责在启动时按当前配置调用它、并在配置变化时再次调用它。好处非常直接开关注入、关断注入——功能未启用时完全不占资源配置自动持久化——开关状态随账号保存重启客户端自动恢复互不干扰——模块间只通过store和injector两个单例通信删掉任何单个模块都不影响其他功能。支撑这套模式的三大基础设施基础设施文件作用store配置中心src/lib/store.ts类型安全的配置读写 持久化 变化监听injector注入管理器src/lib/InjectorManager.ts全局 MutationObserver 守护DOM 被客户端刷新后自动补回自愈features.ts注册中心src/lib/features.ts统一初始化所有功能的开关与监听第一步在 store 中定义配置项所有配置项集中定义在 src/lib/store.ts 的SonaConfig接口和DEFAULT_CONFIG默认值表中基于 Pengu Loader 的 DataStore API 实现持久化。以hideEsportsPopup关闭赛事直播弹窗为例只需要两处// SonaConfig 接口中定义类型 /** 关闭右下角赛事直播弹窗 */ hideEsportsPopup: boolean // DEFAULT_CONFIG 中给出默认值 hideEsportsPopup: truestore提供的三个核心方法贯穿整个功能生命周期见 store 使用注释const value store.get(hideEsportsPopup) // 读取 store.set(hideEsportsPopup, true) // 写入自动持久化 store.onChange(hideEsportsPopup, (value) { /* ... */ }) // 监听变化这样定义后你在功能模块里调用的每一个store.set都会自动落盘用户下次启动客户端时状态自动恢复完全不用关心存储细节。第二步编写功能模块文件功能模块统一放在 src/lib/features/ 目录一个功能一个文件用 kebab-case 命名如auto-accept.ts、bench-no-cooldown.ts。我们以最精简的 hide-esports-popup.ts 为模板。一个合格的功能模块包含两部分注入任务开关函数。import { logger } from /index import { injector } from /lib/InjectorManager /** 注入任务返回 true 表示注入成功/已存在false 表示还没找到位置 */ function tryRemoveEsportsPopup(): boolean { const popup document.querySelector(iframe#tv-official-pop) if (popup) { popup.remove() logger.info([HideEsportsPopup] 已移除右下角赛事弹窗) } return true } let registered false /** 功能开关由 features.ts 在初始化与配置变化时调用 */ export function updateHideEsportsPopup(enabled: boolean) { if (enabled !registered) { registered true injector.register(tryRemoveEsportsPopup) } else if (!enabled registered) { registered false injector.unregister(tryRemoveEsportsPopup) } }这里有三个关键设计约定tryInjectXxx必须是幂等函数——它会被全局 MutationObserver 在每帧 DOM 变化时反复调用所以用已存在就提前返回 true的方式防重复注入。被客户端刷掉的 DOM 会在下一帧自动补回这就是 Sona 的DOM 自愈机制实现见 InjectorManager.start()开关函数只管理生命周期——开启时injector.register(task)关闭时injector.unregister(task)并用registered标志防止重复注册需要 LCU 数据时走单例——若功能要调接口或监听游戏阶段变化用 src/lib/lcu.ts 的lcu单例REST WebSocket 双通道例如监听阶段变化lcu.observe(LcuEventUri.GAMEFLOW_PHASE_CHANGE, cb)参考 features.ts 中的阶段监听写法。第三步在注册中心登记功能src/lib/features.ts 是全插件的总调度台其initFeatures()由插件入口load()调用一次见 src/index.tsx 的 load 生命周期。initFeatures()内部对每个功能都是同一对两行代码——先按当前配置执行一次再挂上变化监听updateHideEsportsPopup(store.get(hideEsportsPopup)) // 启动时按持久化值开/关 store.onChange(hideEsportsPopup, updateHideEsportsPopup) // 之后开关变化时自动响应可参考 initFeatures 完整注册列表。你的新功能只需要在这里追加同样的两行就完成了注册——以后用户在面板上拨动开关store.set触发onChangeupdateXxx被自动调用注入随之挂载或卸载全程无需手动干预。 小技巧如果功能依赖其他配置例如rankQueue、rankTier影响段位伪装效果可以对它们再挂一个store.onChange在变化时重新应用当前功能参考 段位伪装的多键监听。第四步接入设置面板 UI最后让用户能摸到开关。Sona 的 React 面板由 src/components/ 下的页面组成功能开关通常放在 ToolsPage.tsx 的工具页。接入一个开关需要三处以赛事直播弹窗开关为例见 ToolsPage 中的 SettingCard 用法读取初始值 挂监听保持 UI 与 store 同步const [hideEsportsPopup, setHideEsportsPopup] useState(store.get(hideEsportsPopup)) // 组件卸载时统一 store.onChange(hideEsportsPopup, setHideEsportsPopup)添加 SettingCard SonaSwitch 控件SettingCard title{t(tools.hideEsportsPopup.title)} description{t(tools.hideEsportsPopup.description)} SonaSwitch checked{hideEsportsPopup} onChange{(v) { setHideEsportsPopup(v); store.set(hideEsportsPopup, v) }} / /SettingCard补充多语言词条——在 src/i18n/locales.ts 中为tools.xxx.title与tools.xxx.description添加中英文条目保证面板支持简体中文/英文/跟随客户端三种语言。功能生效后客户端实际呈现的效果类似下图图中为组队界面增强功能展示战绩分析类模块的注入效果四步清单快速回顾步骤文件做什么① 定义配置src/lib/store.tsSonaConfig加类型 DEFAULT_CONFIG加默认值② 功能模块src/lib/features/ 新建文件写幂等的tryInjectXxx 导出updateXxx(enabled)③ 注册开关src/lib/features.tsinitFeatures()中追加 get onChange 两行④ 面板开关ToolsPage.tsx locales.tsSettingCard/SonaSwitch 控件 中英文词条完成以上四步你就拿到了一个随配置自动启停、被刷掉能自愈、重启后状态自动恢复的完整功能模块——这正是 Sona 能稳定承载几十个增强功能的底层原因。结语Sona 的功能注册模式本质上是一种配置驱动的生命周期管理store管状态与持久化injector管 DOM 自愈features.ts管开关调度UI 只管展示。理解并遵循这套模式无论你想给 Sona 这类英雄联盟增强插件添加隐藏某个入口这样的小功能还是队友战绩分析这样的大功能套路都是这同样的四步。动手试试吧 赞分享【免费下载链接】sona基于Pengu loader的英雄联盟客户端增强插件LOL助手sona助手LOL插件A LOL plugin base on Pengu loader; sona plugin;项目地址https://gitcode.com/gh_mirrors/sona4/sona点击查看免费下载相关推荐Typora插件完整教程终极功能增强指南Typora插件完整教程终极功能增强指南 Typora作为广受欢迎的Markdown编辑器其简洁的界面和实时预览功能深受技术文档编写者和内容创作者的喜爱。通开发工具插件系统戴森球计划终极蓝图库3000精选工厂设计让你的太空帝国快速成型戴森球计划终极蓝图库3000精选工厂设计让你的太空帝国快速成型 还在为戴森球计划中复杂的工厂布局而烦恼吗面对空荡荡的星球和错综复杂的生产链是不是感到无从数据集Solar2D多平台发布指南从Android到iOS的完整流程Solar2D多平台发布指南从Android到iOS的完整流程 Solar2D原Corona SDK是一款功能强大的跨平台游戏引擎让开发者能够轻松构建同游戏开发跨平台图形学上一篇Swagger UI 扩展新 OAS 版本支持完整指南从规范分析到插件实现的 17 步实战下一篇终极指南如何选择LLM模型部署方案 - 本地运行vs云端服务完全对比创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考