Sona 插件新增功能模块教程:功能注册模式完整指南(附四步实操)
【免费下载链接】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),仅供参考

相关新闻

Spring Boot集成EMQX的MQTT重连机制深度解析

Spring Boot集成EMQX的MQTT重连机制深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 1:27:46 阅读更多 →
PTA数据结构刷题指南:从报错到满分的实战经验

PTA数据结构刷题指南:从报错到满分的实战经验

1. PTA数据结构到底在练什么PTA数据结构,全称是Programming Teaching Assistant平台上的数据结构题库。如果你正在读计算机相关专业,或者正在自学编程准备面试,大概率会跟它打交道。它本质上是一个在线判题系统里的一个专项题集,专…

2026/10/18 1:27:46 阅读更多 →
港股RISC-V第一股上市首日跌超11%:芯片IPO定价与产业前景透视

港股RISC-V第一股上市首日跌超11%:芯片IPO定价与产业前景透视

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 1:27:46 阅读更多 →

最新新闻

NPU/TPU硬件加速本质:软硬协同的决策框架与落地实践

NPU/TPU硬件加速本质:软硬协同的决策框架与落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:13:56 阅读更多 →
20倍光学变焦迷你机芯CM8210AP:小体积如何兼顾远距离高清观测

20倍光学变焦迷你机芯CM8210AP:小体积如何兼顾远距离高清观测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:13:56 阅读更多 →
智能穿戴APP开发服务商怎么选?四个维度评估硬件适配能力

智能穿戴APP开发服务商怎么选?四个维度评估硬件适配能力

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:13:56 阅读更多 →
MT5风控插件开发实战:架构、性能优化与稳定性部署

MT5风控插件开发实战:架构、性能优化与稳定性部署

1. 风控插件的定位与整体设计思路1.1 为什么风控插件是MT5搭建后的第一优先级MT5服务器部署完成、VPS稳了、交易终端连上了,这只能算完成了1%。真正决定这套平台能不能长期跑下去的关键,是风控插件。我见过太多团队在搭建阶段兴奋得不行,觉得…

2026/10/18 2:13:56 阅读更多 →
RH850 GHS编译链路全解析:从.c到.elf的工程实践

RH850 GHS编译链路全解析:从.c到.elf的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:13:56 阅读更多 →
2026年AI接口聚合服务深度横评:从调用稳定性看词元之河与硅基流动的中小团队适配度

2026年AI接口聚合服务深度横评:从调用稳定性看词元之河与硅基流动的中小团队适配度

2026年5月完成的一轮 AI 接口聚合服务实测横评,方法论为 72 小时连续压测、12 类典型调用场景模拟与 37 位一线开发者访谈。行业背景值得关注:据《中国AI基础设施白皮书(2026Q1)》,超过 68% 的中小技术团队在大模型应用…

2026/10/18 2:12:56 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →