SJYssr

Listen Obligate Valued Excuse

文章

27

标签

10

评论

15

文章目录

数据统计

成立

216天

文章

27篇

评论

15条

标签

10个

最近文章

LOL走A

英雄联盟自动化走A辅助开发全解Python实现

注: 此文章只简单介绍,完整项目请转到 github

一、项目背景与核心功能

开发背景

玩LOL好累好累,一气之下写了个走A脚本
在MOBA类游戏中,走A(移动攻击)是进阶玩家的必备技巧。传统手动操作存在两大痛点:

  • 攻速与操作节奏难以精准匹配
  • 高频操作导致手部疲劳
    本项目通过逆向分析游戏数据接口+自动化输入模拟,实现智能走A辅助。

    功能亮点

    功能模块技术实现优势说明
    攻速动态适配本地API轮询+JSON解析实时同步游戏数据
    输入精准控制Windows API调用0.01秒级精度控制
    改键模式虚拟键位映射规避反作弊检测
    后台挂机系统托盘+最小化隐藏不影响其他操作

    二、核心技术实现

    系统架构

    graph TD
      A[主线程] --> B[GUI界面]
      A --> C[攻速监听线程]
      A --> D[键盘钩子线程]
      C --> E[requests轮询API]
      D --> F[pyWinhook事件捕获]
      B --> G[wxPython控件交互]

    关键技术点解析

  • 攻速动态计算

    # 攻击周期计算模型
    def update_attack_params(self):
      self.dc = 1.0 / self.GongSu  # 总攻击周期
      self.qy = self.dc * self.QianYao  # 前摇时间(攻击动作)
      self.hy = self.dc - self.qy + self.YDBC  # 后摇时间(移动补偿)
    # 独立线程持续监听
    def listenerAttackSpeed(self):
      while True:
          time.sleep(0.2)
          speed = getAttackSpeed()
          if speed and speed > 0:
              self.GongSu = speed
              self.update_attack_params()
  • 输入事件模拟

    # Windows输入事件结构体定义
    class Input(Structure):
      _fields_ = [("type", c_ulong),
                  ("ii", Input_I)]
    # 鼠标点击函数
    def simulated_click(key_code, interval):
      inputs = Input * 2
      extra = c_ulong(0)
      # 按下事件
      ii_down = Input_I()
      ii_down.ki = KeyBdInput(0, key_code, 0x0008, 0, pointer(extra))
      # 抬起事件 
      ii_up = Input_I()
      ii_up.ki = KeyBdInput(0, key_code, 0x0008 | 0x0002, 0, pointer(extra))
      # 发送事件
      x = inputs( (1, ii_down), (1, ii_up) )
      windll.user32.SendInput(2, pointer(x), sizeof(x[0]))
      time.sleep(interval)
  • 键盘钩子监听

    def key_listener(self):
      def OnKeyboardEvent(event):
          # 判断触发键状态
          if event.Key == self.currentKey:
              self.press_state = (event.Message == pyWinhook.HookConstants.WM_KEYDOWN)
          # 处理功能键
          elif event.Key == 'Escape' and not self.IsIconized():
              self.Iconize(True)
          return True
      hm = pyWinhook.HookManager()
      hm.KeyDown = OnKeyboardEvent
      hm.KeyUp = OnKeyboardEvent
      hm.HookKeyboard()
      pythoncom.PumpMessages()

    性能优化策略

  • 事件队列分离:输入事件与GUI事件分线程处理
  • 动态休眠:根据攻速自动调整sleep时间
  • 标志位检测:使用原子操作替代锁机制

    # 标志位控制示例
    if self.press_state and not self.isPause:
      self.click(0x2c, self.qy)  # X键攻击
      self.click(0x2d, self.hy)  # Z键移动
    else:
      time.sleep(0.01)  # 降低CPU占用

    三、关于改建

  • 快捷攻击型移动,选择设置2修改为 Z 键
  • 控制玩家移动点击,选择设置2修改为 X 键
    anjian_set1 .jpg
  • 只以英雄为目标设置修改为 C 键
    anjian_set2.jpg
  • 最好把窗口设置为无边框模式或者窗口模式
  • 建议使用前先开一把训练模式试一下

    四、界面展示

  • LOL_auto_runA.png

    如果没有效果请检查
  • 是否用管理员权限运行
  • 是否开启了走A
  • 按键是否修改正确
    项目地址:GitHub仓库

    五、开源协议与声明

    ⚠️ 免责声明

    • 本代码遵循 GPL-3.0 License 协议,允许开源/免费使用和引用/修改/衍生代码的开源/免费使用,不允许修改和衍生的代码作为闭源的商业软件发布和销售,禁止使用本代码盈利,以此代码为基础的程序必须同样遵守 GPL-3.0 License协议
    • 本代码仅用于学习讨论,禁止用于盈利非法用途
    • 他人或组织使用本代码进行的任何违法行为与本人无关
    • 使用本项目造成的任何后果由使用者自行承担

    赞赏支持

    如果您觉得此项目对您有所帮助,可以进行赞赏支持:

    Made with ❤️ by SJYssr


LOL走A

发布于

August 8, 2025

分类

代码分享

版权协议

MIT

#开源
评论
😀

感谢支持!

微信二维码

请使用微信扫描二维码打赏。

支付宝二维码

请使用支付宝扫描二维码打赏。