|
暂无界面 请自己写..自用的话随便写个命令行就好了 !接下来会把官方卡组对接进去.慢慢来!贼流畅,用python写dm脚本效率其实还可以的比易语言稳定,异常更容易发现和处理!
- import os,time
- from win32com.client import Dispatch
- # 注册大漠到系统中.
- def regDM():
- '''
- 注册大漠插件,需要把文件dm.dll放在根目录
- :return: 返回大漠对象
- '''
- try:
- dm = Dispatch('dm.dmsoft')
- except:
- os.system('regsvr32 dm.dll')
- dm = Dispatch('dm.dmsoft')
- return dm
-
- # 从系统中卸载大漠
- def unRegDM():
- '''
- 从系统中卸载大漠插件
- :return:
- '''
- os.system('regsvr32 dm.dll /u')
- class AutoOPlayingChess():
- '''
- 自动购买棋子,后台鼠标,不占用前台用户的鼠标体验
- '''
- def __init__(self):
- self.dm=regDM()
- self.hwnd =0
- self.chess=[]
- def __del__(self):
- self.dm.UnBindWindow()
- def dmReg(self,reg_code, ver_info=''):
- '''
- 登录大漠.就是身份验证一下,从而使用插件的高级功能,如果你的是3.xx的免费版本,就不需要这步
- :param reg_code: 大漠后台的注册码
- :param ver_info: 附加信息,主要用于查询消费情况 填了更好查询,不填也无所谓
- :return: 返回1表示成功,其它值请查接口说明
- '''
- value = self.dm.reg(reg_code, ver_info)
- return value
- def SetDict(self,path,errorMsg=0):
- '''
- 设置字库,顺便关掉错误提示
- :param path: 字库路径
- :param errorMsg: 默认为关闭错误提示,如果要设置请填1
- :return:0失败,1成功!
- '''
- self.dm.SetShowErrorMsg(errorMsg)
- return self.dm.SetDict(0, path)
- def checkHwnd(self,processName):
- '''
- 循环寻找窗口,直到成功才返回
- :param processName: 进程名
- :return: 返回目标窗口句柄
- '''
-
- while self.hwnd==0:
- self.hwnd=self.dm.FindWindowByProcess(processName,'','')
- time.sleep(1)
- def chessAdd(self,chessName):
- '''
- 将名为chessName的棋子添加进购买库
- :param chessName: 棋子名
- :return:
- '''
- if chessName not in self.chess:
- self.chess.append(chessName)
- def delChess(self,i):
- '''
- 删除序号为i的购买池中的棋子
- :param i: 序号
- :return:
- '''
- del self.chess[i]
- def removeChess(self,chessName):
- '''
- 删除名字为chessName的购买池中的棋子
- :param chessName: 棋子名
- :return:
- '''
- self.chess.remove(chessName)
- def startAuto(self,starX=200,starY=100,color_format="ffffff-060606",sim=0.9):
- '''
- 启动自动购买棋子程序,默认1920*1080分辨率不需要改东西,,如果是更高的分辨率贼需要自己量参数
- :param starX: 识别开始的x坐标 商店1号棋子的名字 的x坐标.,可以小,但是不能大
- :param starY: 商店棋子名字距离屏幕最下方的距离 可以大 不能小
- :param color_format: 颜色格式串
- :param sim:相似度,取值范围0.1-1.0
- :return:如果返回False说明绑定失败.运行失败!
- '''
- dm_ret = self.dm.BindWindowEx(self.hwnd, "dx2",
- "dx.mouse.position.lock.api|dx.mouse.clip.lock.api|dx.mouse.input.lock.api|dx.mouse.state.api|dx.mouse.state.message|dx.mouse.api|dx.mouse.cursor",
- "normal", "dx.public.active.api", 0)
- if dm_ret == 0:
- print('绑定失败!')
- return False
- ret, ScreenWidth, ScreenHeight = self.dm.GetClientSize(self.hwnd)
- lScreenHeight = ScreenHeight - starY
- bd = False
- ls = []
- while True:
- if len(self.chess)>0:#判断自动购买棋子池是否有需要购买的棋子,有需要才有必要运行下面的代码
- sls = self.dm.OcrEx(starX, lScreenHeight, ScreenWidth, ScreenHeight, color_format, sim).split('|')
- print(sls)
- for item in sls:
- s = item.split('字库和dm.dll
- 打包:[url]https://www.lanzoui.com/iWnW1gq155i[/url]
- 百度链接: [url]https://pan.baidu.com/s/10mc2rT9Pq1IrkSb6Nq8_Og[/url] 提取码: 5i8x
- 持续更新中...只为练手和技术交流!纯源码,不编译!切勿用于非法用途!否则后果自负!本人不承担任何法律责任!
- )
- if s[0] in chess:
- print(s[0], bd)
- if ls != sls:
- bd = False
- if bd == False:
- for i in range(2):
- self.dm.MoveTo(int(s[1]) + 20, int(s[2]) - 20)
- self.dm.LeftClick()
- time.sleep(0.1)
- ls = self.dm.OcrEx(starX, lScreenHeight, ScreenWidth, ScreenHeight, color_format, sim).split('|')
- if ls == sls:
- bd = True
- else:
- bd = False
- break
-
- if __name__ == "__main__":
- chess=[]#模拟选中的棋子池,没界面模拟一下
- chess.append('卡特琳娜')
- chess.append('金克丝')
- chess.append('盖伦')
- chess.append('嘉文四世')
- chess.append('赵信')
- chess.append('瑟庄妮')
- chess.append('阿兹尔')
- chess.append('奈德丽')
- chess.append('蔚')
- #初始化必要数据
- reg_code = "luxiaolan63735f4be12fda045a12cf1b2927d5cbc19c" # 大漠后台的注册码,,这个就得自己去大漠注册了便宜的很..自用的话,我这可以暂时用用也就100块钱了,别一直漂我这个,
- ver_info = '52pojie' # 附加信息,主要用于查询消费情况 填了更好查询,不填也无所谓
- dictPath='1920.txt'#字库路径
- #----------------------------------------------------------------------------
- #创建自动购买棋子对象
- atpc = AutoOPlayingChess()
- #登录大漠,免费版的大漠就可以省略这一步
- value=atpc.dmReg(reg_code,ver_info)
- #设置好字库和配置
- atpc.SetDict(dictPath)
- #判断是否登录成功
- if value == 1:#免费版的就不要这个if了,,注意了免费版没办法后台鼠标
- print(f'验证成功!')
- # 接下来就可以自己查接口说明来使用里面的全部方法了
- atpc.checkHwnd('League of Legends.exe')
- #将需要购买的棋子放入池子中
- atpc.chess=chess
- #启动自动购买棋子程序
- atpc.startAuto()
- else:
- if value == -2:
- print('进程没有以管理员方式运行或者被第三方杀毒拦截. (建议关闭uac和杀毒软件),请用管理员权限运行本程序!')
- else:
- print(f'验证失败,失败代码为:{value},大概率是被杀毒拦截了!')
复制代码 字库和dm.dll
打包:https://www.lanzoui.com/iWnW1gq155i
百度链接: https://pan.baidu.com/s/10mc2rT9Pq1IrkSb6Nq8_Og 提取码: 5i8x
持续更新中...只为练手和技术交流!纯源码,不编译!切勿用于非法用途!否则后果自负!本人不承担任何法律责任!
|
|