• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

基于Lua语言的触动精灵脚本开发

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

概要

触动精灵属于比较高级的脚本开发,如果比较简单的脚本开发可以使用Auto.js,无需root。

工具下载

官网地址

连接模拟器

studio连接

首先要先下载ADB模拟器连接IDE,注意,这里一定要用官网提供的ADB,安卓开发的adb不行!!!

下载好之后,打开studio,输入Access Key按照下面步骤执行

如果出现以下这种情况重复执行上面步骤

第一步,先进入到下载的目录下执行 adb connect 127.0.0.1:7555

运行完用adb devices查看是否连接,如果出现offline要断开重连,断开语句adb disconnect 127.0.0.1:7555

第二步,执行显示nLog日志.bat,然后执行执行连接编辑器.bat(相当于执行./adb.exe forward tcp:50005 tcp:50005)

第三步,安卓端运行触动精灵

上面的这些步骤可以用下面两行代码替换,如果取色器不能截图,换一个模拟器。

常用模拟器端口号

注意:mumu模拟器默认为横屏,可以通过设置屏幕为720*1080来实现竖屏

查看官网连接模拟器

在设备一栏中新增127.0.0.1,然后右击连接

连接成功标示

这里注意把虚拟机时间设为网络同步。

拾色器

连接好Studio后,连接拾色器,输入127.0.0.1:50005,注意这里一定要为50005!!!连接成功后窗口消失。点击抓图即可。

颜色比对常用api

拾色器快捷键

常用快捷键

  • `(数字1左边那个键)
    取一点颜色到剪贴板,取色后直接可以粘贴,默认情况下,该操作不会有可视化表现
  • 数字键(1 2 3 4 5 6 7 8 9 0)
    多点取色到剪贴板,以上十个数字键分别取 10 点色,取色之后直接 Ctrl + V 即可把取好的点色粘贴到脚本中
  • Shift + (1 2 3 4 5 6 7 8 9 0)
    清除相应位置的点色信息(会重置剪贴板中的内容)
  • 方向键(↑ ↓ ← →)
    移动鼠标指针定位 1 个像素
  • Shift + 光标键(↑ ↓ ← →)
    移动鼠标指针定位 10 个像素
  • Ctrl + 光标键(↑ ↓ ← →)
    移动鼠标指针定位 100 个像素
  • 回车键
    取色到剪贴板的第一个空白位置(如果没有空白位置则不会取色)
  • Ctrl + 鼠标左键-点击
    与上一条 回车键 功能一样
  • -
    缩小视图
  • =
    放大视图
  • R
    刷新列表中的已有坐标的颜色并使用简易标签于图像上标出相应的位置
  • W
    把取色列表重新写入剪贴板

其他快捷键

模拟点击事件

用取色器获取某个点的坐标,模拟点击按钮,代码如下

init(0)  --初始化(0,0)坐标
mSleep(3*1000)  --睡眠三秒,防止坐标没初始化好
--[[模拟点击事件]]--
touchDown(1080,582)  -- 点下某个像素点
mSleep(20)  -- 睡眠20ms
touchUp(1080,582)   --  从像素点上抬起抬起

智能找色脚本

用到findMultiColorInRegionFuzzy方法,即区域多点找色

 游戏:萌犬变变变

首先用颜色拾取器将箱子的三个点取下来(相当于识别物体),然后按住shift框选识别区域。点击生成脚本,复制最后一栏。

代码如下

init(0)  -- 启动初始坐标
mSleep(3*1000)   -- 睡眠三秒防止没有初始化成功
while (true) do  -- 无限执行
    --[[刚才颜色拾取器生成的脚本,返回的是第一个值的坐标]]--
    x,y = findMultiColorInRegionFuzzy( 0xbd8c5a, "-29|-47|0xbd8c5a,-51|-2|0x000000", 90, 34, 196, 668, 1042) 
    if(x~= -1 and y~= -1)  -- 根据多点颜色区域模糊查色返回的结果
    then
        touchDown(x, y)   -- 点击事件
        mSleep(20)
        touchUp(x, y)
    end
end

TSLib库

这个是触动精灵自己的,用法要看官方文档

首先在最上面加载TSLib库

require("TSLib")

封装一些通用函数

-- 根据坐标点击
function click(x,y)
    if(x~= -1 and y~= -1)  -- 根据多点颜色区域模糊查色返回的结果
    then
        touchDown(x, y)   -- 点击事件
        mSleep(20)
        touchUp(x, y)
    end
    mSleep(5*1000)
end
-- 打印坐标,调试用
function showClick(x,y)
    dialog(\'返回视屏坐标x\'..x..\',\'..y)
end

multiColor

多点比色,用来判断界面

require "TSLib"--使用本函数库必须在脚本开头引用并将文件放到设备 lua 目录下
--全部坐标点和颜色一致时返回 true,== true 可省略不写
--判断是否为某个界面
if multiColor({{75, 1026, 0x9b9b9b},{214,1028,0x9b9b9b},{341,1038,0xff3031},{357,1037,0xfff6f6},{507,1028,0x9b9b9b},{642,1032,0x9b9b9b}},80,false) == true then
        x,y = findMultiColorInRegionFuzzy( 0x191f25, "1|0|0x191f25,2|0|0x191f25,3|0|0x191f25", 90, 22, 190, 690, 958) --  查找指定区域内黑色的文字
     --showClick(x,y); 调用封装的函数,显示坐标轴
     click(x,y) --点击进入视屏
     mSleep(3*1000) --观看3分钟
     click(40,74); --点击返回
     touch():on(354,646):move(348,414):off()
     mSleep(5*1000)
end

便捷UI

便捷UI文档 

信息提示脚本

官网文档

信息提示脚本主要用于调试用,注意手机要开启悬浮框权限

dialog

阻塞式信息,会阻塞脚本,慎用

toast

异步信息,建议用这个,toast显示几秒,后面要用mSleep等待几秒,不然下面取色取到toast可能会出问题

逐行获取文本文件数据

逐行读取文本代码如下

for line in io.lines("main.lua") do
   print(line)
end

控制台输出指定文件的数据 

--获取文件路径,serPath为触动精灵所在目录
local file = userPath().."/res/密令.txt"  
    if file then 
        for line in io.lines(file) do  -- 遍历文件里的内容
            inputText(line)  -- 输出到控制台
            mSleep(2000)
        end
        dialog("输入完毕", 1)
        lua_exit()  -- 退出lua程序
    end    

防锁屏

判断屏幕是否为锁定状态 

代码如下

flag = deviceIsLock();      --如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可
if flag == 0 then
    dialog("未锁定",3);
else
    unlockDevice(); --解锁屏幕
end

主屏幕按键

API

pressHomeKey();    --Android 系统不需要填参数,自动点击抬起

报错友善提示

function main(...)
    error("这是一个错误演示!",2)  -- 手动抛出一个异常
    return 0
end

neo,errmsg = pcall(main)   -- 保护模式调用,第一个参数为是否返回异常,第二个参数为返回的异常信息
if neo then   -- 如果不返回异常
    dialog(errmsg, time)  
else 
    --返回异常时弹出友善提示框
    user_Choosen = dialogRet(\'很抱歉辅助出现异常,是否将错误信息写入剪切板以回报开发者!\',"积极回报","残忍拒绝" ,"",0)   
    if user_Choosen == 0  then   -- 如果点击确定
        writePasteboard(errmsg)  -- 复制到粘贴板
        dialog(\'错误信息已经写入剪切板!\',5)  -- 提示用户
    end
end

调用Http发送数据

local url = string.format("http://www.***com:9002/pubApi/uLogin?uName=%s&pWord=%s", account, password)  -- 生成url
local code, header, body = http.get(url, 10)  --发送请求,10秒超时.code、header、body不解释
if code == 200 then  -- 如果返回为200时
    if body == "False" then 
        return false
    end
    return true
end

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
关于lua正则表达式的一些诡异表现和思考发布时间:2022-07-22
下一篇:
秒杀代码,非lua脚本。发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap