ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于LCU API与Node.js的开源游戏助手:Akari助手环境搭建与二次开发指南

基于LCU API与Node.js的开源游戏助手:Akari助手环境搭建与二次开发指南 1. 为什么我要折腾一个游戏助手工具打排位的时候最烦什么不是队友送人头也不是对面五个人蹲草丛而是选完英雄之后手忙脚乱切出去查对面阵容克制关系、翻自己之前的出装记录、算对面打野可能在哪一路。等切回来兵线已经到塔下了第一波经验直接漏掉。这种场景我相信每个认真打排位的玩家都经历过。后来我接触到了 Akari 助手这个项目它是一个基于 LCU API 的开源游戏效率工具用 Node.js 开发通过 Yarn 管理依赖。简单说它能在你打游戏的时候自动帮你完成一些重复性的信息查询和记录工作比如对局数据抓取、英雄胜率统计、队友历史战绩速览等等。最关键的是它是完全免费开源的代码放在公开仓库里任何人都可以查看、修改、二次开发。这篇文章适合几类人看一是想找一个靠谱的游戏辅助工具但不想花钱买付费软件的玩家二是对 LCU API 感兴趣、想自己动手写点小工具的开发者三是刚接触 Node.js 和 Yarn、想找一个真实项目练手的新手。不管你属于哪一类我都会从项目架构、核心原理、环境搭建、实操配置到常见问题排查一步步讲清楚。我踩过的坑、试过的参数、验证过的方案都会毫无保留地分享出来。注意本文讨论的是基于官方客户端接口的信息查询与效率提升工具所有操作均在客户端允许的范围内进行不涉及任何破坏游戏公平性的功能。2. 项目整体设计与技术选型拆解2.1 为什么选择 LCU API 作为核心数据源LCU API 是游戏客户端在本地运行时暴露的一套 HTTP 接口它本质上是一个 RESTful 风格的本地服务。客户端启动后会在本地监听一个端口通过这个端口可以获取到当前登录账号的信息、好友列表、对局状态、英雄数据、符文配置等等。Akari 助手的核心思路就是不去修改游戏内存不去注入进程而是像一个普通的本地 HTTP 客户端一样向 LCU API 发请求、拿数据、做展示。这种方案的优势非常明显。第一安全性高因为你不碰游戏进程本身只是读取客户端已经公开的数据不会触发反作弊机制。第二稳定性好LCU API 是官方提供的接口虽然文档不公开但社区已经逆向整理出了相当完整的接口列表只要客户端版本不大改接口基本不会变。第三开发成本低你只需要会发 HTTP 请求、解析 JSON 就行不需要懂逆向工程或者内存操作。当然也有局限性。LCU API 只能在客户端运行时使用而且需要拿到认证信息端口号和 Token。Akari 助手在启动时会自动读取客户端生成的锁文件lockfile从中提取端口和认证 Token整个过程对用户透明不需要手动配置。2.2 Node.js 在这个项目里扮演什么角色Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时它让 JavaScript 可以脱离浏览器在服务端运行。Akari 助手选择 Node.js 作为开发语言主要基于几个考量。首先是异步 I/O 模型。游戏助手需要频繁地向 LCU API 发请求同时还要处理 WebSocket 推送、定时轮询、文件读写等操作。Node.js 的事件驱动、非阻塞 I/O 特性非常适合这种场景不会因为某个请求卡住而阻塞整个程序。其次是生态丰富。npm 仓库里有大量现成的 HTTP 客户端库、WebSocket 库、JSON 处理工具开发者不需要从零造轮子。第三是跨平台。Node.js 在 Windows、macOS、Linux 上都能跑虽然 LCU API 目前主要是 Windows 客户端才有但开发环境不受限制。我实测下来在一台普通的 Windows 机器上Akari 助手运行时内存占用大约在 80-120MB 之间CPU 占用在空闲时几乎可以忽略不计对游戏性能的影响微乎其微。2.3 Yarn 作为包管理器的实际体验Yarn 是 Facebook 推出的 JavaScript 包管理器和 npm 相比它在依赖安装速度、版本锁定、缓存机制上有一些优势。Akari 助手使用 Yarn 来管理项目依赖项目根目录下会有yarn.lock文件来锁定每个依赖的确切版本。为什么不用 npm其实两者都能用但 Yarn 在以下几个方面体验更好。第一安装速度快Yarn 会并行下载依赖包并且有本地缓存第二次安装同一个包时几乎瞬间完成。第二版本锁定更严格yarn.lock确保团队中每个人安装的依赖版本完全一致避免“在我机器上能跑”的问题。第三输出信息更清晰Yarn 的进度条和错误提示比 npm 更友好。如果你之前只用过 npm切换到 Yarn 的成本几乎为零常用命令对比如下操作npm 命令Yarn 命令安装所有依赖npm installyarn添加依赖npm install 包名yarn add 包名添加开发依赖npm install -D 包名yarn add -D 包名移除依赖npm uninstall 包名yarn remove 包名运行脚本npm run 脚本名yarn 脚本名全局安装npm install -g 包名yarn global add 包名提示如果你在安装依赖时遇到网络问题可以配置国内镜像源来加速下载。具体方法在后面的环境搭建章节会详细说明。2.4 项目目录结构与模块划分Akari 助手的代码结构比较清晰典型的 Node.js 项目布局。根目录下主要有以下几个部分src目录存放源代码package.json定义项目元信息和依赖yarn.lock锁定依赖版本README.md是项目说明文档.env.example是环境变量模板。在src目录内部通常会按照功能模块划分。比如api目录封装 LCU API 的请求逻辑websocket目录处理实时事件推送services目录存放业务逻辑utils目录放通用工具函数config目录管理配置项。这种模块化设计的好处是当你想修改某个功能时只需要关注对应的模块不会牵一发而动全身。3. 环境搭建与依赖安装实操3.1 Node.js 安装版本选择与安装步骤Node.js 的版本选择很关键。Akari 助手通常要求 Node.js 18 或更高版本我推荐使用 18.20.4 LTS 或者 20.x LTS 版本。LTS 是长期支持版本稳定性和安全性都有保障不建议使用最新的实验性版本可能会遇到兼容性问题。Windows 下的安装步骤首先访问 Node.js 官网下载对应版本的 Windows Installer.msi 文件。双击运行一路下一步即可。安装完成后打开命令提示符或 PowerShell输入node -v和npm -v如果能正确显示版本号说明安装成功。macOS 下可以用 Homebrew 安装brew install node18。Linux 下推荐用 nvmNode Version Manager来管理多个 Node.js 版本这样可以方便地在不同项目之间切换。CentOS 7.9 等较老系统上安装 Node.js 18 可能需要先升级系统的 glibc 版本这一点要特别注意否则会遇到GLIBC_2.28 not found的错误。注意安装 Node.js 时不要勾选“自动安装必要工具”选项那个选项会安装 Python 和 Visual Studio Build Tools体积很大而且大部分情况下用不到。如果后续确实需要编译原生模块再单独安装也不迟。3.2 Yarn 安装与镜像源配置Node.js 安装好之后npm 已经自带了。用 npm 全局安装 Yarnnpm install -g yarn。安装完成后输入yarn -v验证。国内用户建议配置镜像源来加速依赖下载。Yarn 的配置命令是yarn config set registry https://registry.npmmirror.com。npm 的配置命令是npm config set registry https://registry.npmmirror.com。配置完成后可以用yarn config get registry来确认。如果你在公司内网或者网络环境特殊可能还需要配置代理。但这里要提醒一句代理配置要谨慎确保你的网络使用符合当地规定和公司政策。3.3 克隆项目与安装依赖拿到项目代码有两种方式。如果你会用 Git直接git clone仓库地址即可。如果不会也可以在项目主页找到“下载 ZIP”按钮下载后解压到本地目录。进入项目目录后运行yarn命令安装所有依赖。这个过程会读取package.json中的依赖列表从镜像源下载对应的包。第一次安装可能需要几分钟取决于网络速度。安装完成后项目目录下会多出一个node_modules文件夹里面就是所有依赖包。如果安装过程中遇到某个包下载失败可以先尝试yarn cache clean清除缓存后重试。如果还是不行检查一下镜像源配置是否正确或者手动指定某个包的下载地址。3.4 环境变量与配置文件准备项目根目录下通常会有一个.env.example文件里面列出了所有可配置的环境变量。你需要把它复制一份并重命名为.env然后根据自己的实际情况修改里面的值。常见的配置项包括LCU API 的连接方式自动检测或手动指定端口和 Token、日志级别debug/info/warn/error、数据缓存路径、WebSocket 重连间隔等。对于大多数用户来说保持默认值即可只有在你需要自定义某些行为时才需要修改。提示.env文件包含敏感信息比如认证 Token不要把它提交到公开的代码仓库。项目的.gitignore文件通常已经排除了.env但你自己要养成习惯不要手动把它加进去。4. 核心功能实现与关键环节解析4.1 LCU API 认证信息的自动获取机制前面提到LCU API 需要端口号和认证 Token 才能访问。这些信息在客户端启动时会写入一个名为lockfile的文件位置通常在客户端安装目录下。文件内容格式是进程名:进程ID:端口号:Token:协议用冒号分隔。Akari 助手启动后的第一件事就是定位这个文件。它会按照预设的路径列表依次查找找到后读取内容用冒号分割提取出端口号和 Token。然后构造一个 Base64 编码的认证头Basic ${Buffer.from(riot:${token}).toString(base64)}后续所有请求都带上这个头。这个机制的好处是完全自动化用户不需要手动输入任何信息。但要注意如果客户端没有启动或者 lockfile 被删除助手就无法连接。有些情况下客户端更新后 lockfile 的路径会变化这时候需要手动在配置里指定路径。4.2 WebSocket 实时事件订阅与处理光靠轮询 HTTP 接口效率太低而且会有延迟。LCU API 还提供了 WebSocket 接口可以订阅特定事件当事件发生时服务端会主动推送消息。Akari 助手利用这个机制来实现实时数据更新。WebSocket 的连接地址是wss://127.0.0.1:端口号连接时需要带上和 HTTP 请求相同的认证头。连接成功后发送订阅消息格式通常是[5, OnJsonApiEvent]表示订阅所有 JSON API 事件。之后每当游戏状态变化比如进入选人阶段、游戏开始、游戏结束客户端就会推送对应的事件数据。处理这些事件时要注意几点。第一事件数据量可能很大要做好过滤只处理你关心的事件类型。第二WebSocket 连接可能因为各种原因断开需要实现自动重连逻辑通常设置 3-5 秒的重连间隔。第三事件处理函数要尽量轻量避免阻塞主线程复杂的处理逻辑可以放到队列里异步执行。4.3 数据缓存与本地存储策略游戏助手需要频繁查询英雄数据、装备数据、玩家战绩等信息。如果每次都向 LCU API 发请求不仅效率低还可能给客户端造成不必要的负担。Akari 助手采用了本地缓存策略。对于静态数据比如英雄列表、装备属性在首次获取后就写入本地 JSON 文件或 SQLite 数据库后续直接读本地。对于动态数据比如玩家战绩设置一个合理的缓存过期时间比如 5 分钟过期后重新请求。缓存的存储位置通常在用户目录下的.akari文件夹或者项目目录下的data文件夹。你可以定期清理缓存来释放空间但注意不要删除正在使用的缓存文件否则可能导致程序异常。4.4 界面展示与用户交互设计Akari 助手的界面形式取决于具体实现。有些版本是命令行工具通过终端输出信息有些版本提供了简单的 Web 界面在浏览器里查看还有些版本集成了系统托盘图标右键菜单操作。不管哪种形式核心交互逻辑是相似的启动后自动连接客户端显示当前状态已连接/未连接根据游戏阶段展示不同的信息面板。比如在选人阶段显示队友和对手的近期战绩、常用英雄、胜率在游戏加载阶段显示双方阵容的克制关系在游戏结束后显示本局详细数据。如果你要自己修改界面建议先熟悉项目使用的前端框架如果有的话通常是 React 或 Vue。修改时注意保持响应式设计确保在不同分辨率下都能正常显示。5. 常见问题排查与避坑经验5.1 连接失败类问题这是最常见的问题表现为助手启动后一直显示“未连接”或“正在尝试连接”。排查思路如下。首先确认游戏客户端是否已经启动并登录。LCU API 只有在客户端运行时才可用如果客户端没开助手自然连不上。其次检查 lockfile 是否存在。如果客户端正在运行但找不到 lockfile可能是客户端安装路径比较特殊需要手动在配置里指定路径。第三检查防火墙是否拦截了本地回环地址的通信。有些安全软件会阻止本地程序之间的网络通信把助手添加到白名单即可。还有一种情况是客户端版本更新后LCU API 的认证方式发生了变化。这时候需要等待项目作者更新适配或者自己查看社区讨论找到临时解决方案。5.2 依赖安装类问题yarn install报错是新手最容易遇到的问题。常见的错误包括网络超时、包版本冲突、原生模块编译失败。网络超时通常是因为默认镜像源访问慢换成国内镜像源即可解决。包版本冲突表现为某个依赖要求 Node.js 版本不匹配或者两个包依赖了同一个包的不同版本。可以尝试删除node_modules和yarn.lock然后重新yarn install。原生模块编译失败通常是因为缺少 Python 或 C 编译工具按照错误提示安装对应的工具即可。注意不要随意升级项目依赖的版本尤其是主版本号升级。项目作者在package.json里指定的版本范围是经过测试的随意升级可能导致兼容性问题。5.3 运行时报错类问题程序能启动但运行中报错这类问题比较多样。常见的包括API 请求返回 404接口路径变了、WebSocket 连接被拒绝认证信息过期、JSON 解析失败返回数据格式异常。遇到这类问题第一步是看日志。Akari 助手通常会输出详细的日志信息包括请求的 URL、返回的状态码、错误堆栈等。根据日志定位到具体的代码位置再分析原因。如果日志级别不够详细可以在.env里把日志级别调到 debug。第二步是复现问题。尝试找到稳定的复现步骤比如“每次进入选人阶段就报错”这样更容易定位。第三步是搜索社区。项目通常有讨论区或问题反馈渠道你遇到的问题很可能别人已经遇到过了。5.4 性能与资源占用类问题有用户反馈助手运行一段时间后内存占用越来越高这通常是内存泄漏的表现。可能的原因包括事件监听器没有正确移除、缓存没有设置上限、定时器没有清除。排查方法是使用 Node.js 自带的内存分析工具或者 Chrome DevTools 的 Memory 面板。找到泄漏点后在代码里加上对应的清理逻辑。比如在 WebSocket 断开时移除所有事件监听器在缓存超过一定大小时淘汰最旧的数据。另一个性能问题是 CPU 占用过高通常是因为轮询间隔太短或者事件处理太频繁。适当增大轮询间隔或者在事件处理函数里加防抖逻辑可以有效降低 CPU 占用。5.5 常见问题速查表问题现象可能原因解决方法启动后一直未连接客户端未启动先启动游戏客户端并登录找不到 lockfile客户端路径特殊手动在配置中指定路径yarn install 超时默认源访问慢切换国内镜像源原生模块编译失败缺少编译工具安装 Python 和 Build ToolsAPI 返回 404接口路径变更更新项目到最新版本WebSocket 频繁断开网络不稳定增大重连间隔检查防火墙内存占用持续增长内存泄漏检查事件监听器和缓存CPU 占用过高轮询太频繁增大轮询间隔加防抖6. 二次开发与功能扩展思路6.1 如何阅读和理解项目源码拿到一个开源项目不要一上来就从头读到尾那样效率很低。我的习惯是先看README.md了解项目是干什么的然后看package.json了解依赖和脚本接着看入口文件通常是src/index.js或src/main.js了解程序启动流程。从入口文件出发顺着调用链往下看遇到不理解的模块再单独深入。重点关注几个核心模块API 封装层、WebSocket 处理层、业务逻辑层。把这几层的职责和交互关系搞清楚整个项目就理解得差不多了。阅读过程中善用编辑器的“跳转到定义”和“查找引用”功能可以快速理清模块之间的依赖关系。遇到看不懂的代码先猜它的意图然后通过日志或断点验证你的猜测。6.2 添加自定义数据面板的实操步骤假设你想在选人阶段显示一个额外的数据面板比如显示对手最近 10 局的 KDA 趋势。实现思路如下。第一步在 API 封装层添加一个方法用于查询指定玩家的最近对局数据。LCU API 有对应的接口传入召唤师名称或 PUUID 即可。第二步在业务逻辑层添加数据处理逻辑把原始数据转换成你需要的格式比如计算平均 KDA、绘制趋势线。第三步在界面层添加展示组件把处理好的数据渲染出来。第四步在事件处理逻辑里当检测到进入选人阶段时触发数据查询和面板更新。整个过程要注意错误处理比如玩家隐藏了战绩、API 请求超时等情况要有对应的降级方案不能让面板一直显示“加载中”。6.3 扩展数据导出与报表功能有些用户希望把对局数据导出成 CSV 或 Excel 文件方便做长期统计。这个功能不难实现。在游戏结束事件触发时收集本局的关键数据英雄、KDA、经济、伤害等追加写入一个 CSV 文件。CSV 的列头在文件创建时写入后续每次追加一行数据。如果要做更复杂的报表可以引入exceljs这样的库来生成 Excel 文件支持格式化、图表等功能。导出路径可以配置在.env里默认放在用户文档目录下。注意处理文件写入的并发问题如果同时有多局游戏结束要加锁或者用队列来保证写入顺序。6.4 参与开源贡献的注意事项如果你想给 Akari 助手提交代码有几个点要注意。第一先阅读项目的贡献指南通常在CONTRIBUTING.md里了解代码风格、提交规范、分支策略。第二从小的改动开始比如修复一个明显的 bug 或者改进一段文档不要一上来就提交大规模重构。第三提交前确保代码能通过项目的 lint 检查和测试。第四写清楚提交信息说明你改了什么、为什么改、怎么验证的。开源项目的维护者通常都是利用业余时间在做回复可能不及时要有耐心。如果你的 PR 被拒绝了不要灰心问问原因根据反馈修改后重新提交。7. 我个人的使用体会与建议用 Akari 助手有一段时间了最大的感受是它确实能省下不少切屏查数据的时间。以前打排位选人阶段要切出去看对面阵容、查队友战绩现在这些信息直接展示在眼前决策效率高了很多。而且因为是开源的我可以根据自己的需求改代码比如把常用的几个数据面板调整到更显眼的位置把不关心的信息隐藏掉。踩过的坑也不少。最开始装 Node.js 的时候选了最新版结果某个依赖不兼容折腾了半天才换回 LTS 版本。还有一次客户端更新后 lockfile 路径变了助手一直连不上后来在社区里看到有人发了解决方案手动指定路径就好了。这些经验告诉我用开源工具要有一定的动手能力遇到问题不要慌看日志、搜社区、自己调试大部分问题都能解决。最后分享一个小技巧如果你同时玩多个账号可以在.env里配置多个 profile每个 profile 对应一套配置比如不同的数据缓存路径、不同的界面布局。启动时通过命令行参数指定使用哪个 profile这样切换账号时不需要手动改配置。这个功能不是项目自带的是我自己加的一点小改动代码量不大但用起来很顺手。
返回列表