本人微信公众号"aeolian"~

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

工具下载

官网地址

连接模拟器

studio连接

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

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

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

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

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

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

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

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

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

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

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

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

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

常用模拟器端口号

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

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

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

查看官网连接模拟器

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

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

连接成功标示

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

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

拾色器

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

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

颜色比对常用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方法,即区域多点找色

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

 游戏:萌犬变变变

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

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

代码如下

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

多点比色,用来判断界面

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

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

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

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

toast

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

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

逐行获取文本文件数据

逐行读取文本代码如下

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    

防锁屏

判断屏幕是否为锁定状态 

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

代码如下

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

 

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *