为方便使用,脚本精灵所有的功能都集中在控制条上,控制条可任意拖动,缩小,吸附。并且不与其他应用或者游戏冲突,使用起来就像游戏自带的工具一样方便。 可随时切换脚本、测试脚本、导入脚本、播放脚本、录制脚本、截图等,不需要退出游戏。
控制条分为三种状态:展开态、缩小态、吸附态。在展开的状态下,10秒后自动变为收缩态,在收缩态下移动到屏幕边缘会转变为吸附态。
点击控制条的第二个按钮即可进入脚本管理面板,脚本分为二进制脚本和明文脚本,明文脚本一般为录制的脚本。二进制脚本是 经过脚本精灵开发工具加密和压缩的脚本。脚本管理提供设置当前脚本、删除脚本、导入脚本、切换脚本等功能。
控制条的第三个按钮为控制脚本播放的按钮,在播放前,先要设置一个当前脚本,明文脚本和二进制脚本都可以。 点击播放后,可以选择播放一次或者循环播放。播放开始后播放按钮变为停止按钮。播放结束后,重新变为播放按钮。
脚本精灵提供一个电脑端的开发工具,提供一个脚本编辑器,具有工程管理、关键字高亮、函数库高亮、脚本检错、编译加密脚本、 远程屏幕、远程截屏、远程取色、远程取坐标、远程导入等功能。如果有wifi支持,完全不需要用数据线。
脚本精灵的的脚本引擎基于Lua 5.2.2,并对其进行了一些修改,将编译器也集成在一起,并支持中文函数名、中文变量名。 保留了Lua 5.2.2所有的语法规范和内置库函数。
模拟点击屏幕
touchClick(x,y)
touchClick(100,100); --触摸点击坐标(100,100)
模拟按下手指
touchDown(x,y,id)
touchDown(100,100); --手指0按下坐标(100,100) touchDown(200,200,1); --手指1按下坐标(200,200)
模拟弹起手指
touchUp(id)
touchUp(); --手指0弹起 touchUp(1); --手指1弹起
模拟手指在屏幕上滑动,滑动前需要先调用触摸按下函数
touchMove(x,y,id)
touchDown(100,100); --手指0按下坐标(100,100) touchDown(200,200,1); --手指1按下坐标(200,200) touchMove(300,300); --手指0滑动到坐标(300,300) touchMove(50,50,1); --手指1按下坐标(200,200) touchUp(0); --手指0弹起 touchUp(1); --手指1弹起
在当前屏幕上获得焦点的文本框中输入一个文本字符串,目前只支持字母、数字和空格
input(text)
input("10086"); --输入10086
input("ab 11"); --输入ab 11
模拟点击设备上的按键,如0-9的数字,a-z的字母,返回键,确认键、HOME键等
input(code)
input(4); --点击返回键
获取屏幕上指定坐标的颜色值
getColor(x,y)
local color = getColor(100,100); --获取屏幕上坐标(100,100)处的颜色值
获取屏幕上指定坐标的颜色的RGB值
getColorRGB(x,y)
local r,g,b = getColorRGB(100,100); --获取屏幕上坐标(100,100)处的颜色值的RGB值分别存入r,g,b三个变量中
判断指定坐标的颜色。PS:使用该函数(多点确定一个图或多个图)代替寻图函数可以大大的提高脚本的执行速度和性能。
isColor(x,y,color)
--判断屏幕上坐标(100,100)处的颜色值是否为0xFFFFFF,是就点击坐标(200,200) if isColor(100,100,0xFFFFFF) then touchClick(200,200); end
在屏幕中寻找指定的图片,精确度为100%,即不能有一个字节的不匹配才算找到图片。 图片路径必须是相对脚本工程的路径,图片路径参考图片路径
findImage(path)
--在屏幕中寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImage("截图/1.bmp")
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中用精确寻图的方式寻找指定的图片,如果找到则自动计算该图片的中心坐标并点击
clickImage(path)
clickImage("截图/1.bmp") --点击图片[截图/1.bmp]
在屏幕中指定矩形范围内精确寻图,其他信息参见精确寻图
findImage(path,x1,y1,x2,y2)
--在屏幕中(100,100,200,200)范围内寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImage("截图/1.bmp",100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中模糊寻找指定图片,允许一定程度的不匹配
findImageFuzzy(path,clarity)
--在屏幕中设置清晰度为95%,全屏模糊寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",95)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定矩形范围内模糊寻图,更多信息请参见模糊寻图
findImageFuzzy(path,clarity,x1,y1,x2,y2)
--设置清晰度为95%,在屏幕中(100,100,200,200)范围内模糊寻找图片[截图/1.bmp],如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",95,100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
else
toast("没有找到图片[1.bmp]");
end
在屏幕中寻找指定图片,可以忽略一个颜色值。也称为透明寻图、背景寻图。
findImageIrregular(path,ignoreColor)
--在屏幕中不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageIrregular("截图/1.bmp",0xFFFFFF)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定范围内不规则寻图。更多信息请参见不规则寻图。
findImageIrregular(path,ignoreColor,x1,y1,x2,y2)
--在屏幕中(100,100,200,200)范围内不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",0xFFFFFF,100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定范围内不规则寻图。更多信息请参见 模糊寻图 和 不规则寻图。
findImageFuzzyIrregular(path,clarity,color)
--设置清晰度为95%,在屏幕中模糊并且不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzy("截图/1.bmp",95,0xFFFFFF)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
在屏幕中指定范围内模糊不规则寻图。更多信息请参见 模糊不规则寻图。
findImageFuzzyIrregular(path,clarity,color,x1,y1,x2,y2)
--设置清晰度为95%,在屏幕中(100,100,200,200)范围内模糊并且不规则寻找图片[截图/1.bmp],忽略颜色0xFFFFFF(背景色),如果找到则提示图片坐标并点击,没有找到则提示没有找到
local flag,x,y = findImageFuzzyIrregular("截图/1.bmp",95,0xFFFFFF,100,100,200,200)
if flag then
toast(string.format("在坐标(%d,%d)找到了图片[1.bmp]",x,y));
touchClick(x,y); --触摸点击坐标(x,y)
else
toast("没有找到图片[1.bmp]");
end
脚本休眠指定毫秒数。
sleep(n)
toast("1100毫秒后,脚本继续执行..."); --提示信息,提示完后休眠1100毫秒
sleep(1000); --休眠1000毫秒,即1秒
sleep(100); --休眠100毫秒,即1/10秒
获取屏幕分辨率。
getResolutionRatio()
local w,h = getResolutionRatio(); --获取屏幕分辨率
toast(string.format("当前屏幕分辨率为:%dx%d",w,h)); --显示获取到的屏幕分辨率
获取屏幕色位,即获取当前屏幕设备一个颜色值占多少位。16/24/32
getBitsPerPixel()
local bits = getBitsPerPixel(); --获取屏幕色位
toast(string.format("当前屏幕分辨率为:%d",bits)); --显示获取到的屏幕色位
在屏幕中弹出文本提示,2.5秒后消失
toast(text)
toast("hello"); --显示hello
设备震动提示
vibrate(m)
vibrate(2000); --震动2秒
获取设备综合唯一串,该串由脚本精灵根据当前设备硬件信息、操作系统信息、品牌数据综合计算而来,不同的两台设备得到的值必然不同
getUDID()
--获取当前UDID与指定的串"AFLJE324234LJNAD654343434SLSDL"比较,如果不相等,则提示未授权,然后退出脚本
if getUDID() ~= "AFLJE324234LJNAD654343434SLSDL" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前UDID串与指定串相等,可以继续往后执行脚本
获取设备网卡物理地址(MAC)
getWifiMAC()
--获取当前Wifi设备的MAC串与指定的串"aa:bb:cc:dd"比较,如果不相等,则提示未授权,然后退出脚本
if getWifiMAC() ~= "aa:bb:cc:dd" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前蓝牙设备MAC与指定串相等,可以继续往后执行脚本
获取蓝牙设备物理地址(MAC)
getBluetoothMAC()
--获取当前蓝牙设备的MAC串与指定的串"aa:bb:cc:dd"比较,如果不相等,则提示未授权,然后退出脚本
if getBluetoothMAC() ~= "aa:bb:cc:dd" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前蓝牙设备MAC与指定串相等,可以继续往后执行脚本
获取设备IMEI串
getIMEI()
--获取当前设备的IMEI串与指定的串"34345345345"比较,如果不相等,则提示未授权,然后退出脚本
if getIMEI() ~= "34345345345" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前设备IMEI串与指定串相等,可以继续往后执行脚本
获取脚本精灵根据设备信息计算而来的串
getDeviceInfo()
--获取当前设备的设备信息串与指定的串"34345345345"比较,如果不相等,则提示未授权,然后退出脚本
if getDeviceInfo() ~= "34345345345" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前设备信息串与指定串相等,可以继续往后执行脚本
获取当前设备的AndroidID
getAndroidID()
--获取当前设备的设备信息串与指定的串"23f23bjsadf3434"比较,如果不相等,则提示未授权,然后退出脚本
if getDeviceInfo() ~= "23f23bjsadf3434" then
toast("当前用户未授权..."); --提示当前用户未授权
os.exit(); --停止并退出脚本
end
toast("用户已通过授权认证..."); --执行到了这里表示当前设备AndroidID串与指定串相等,可以继续往后执行脚本
启动一个线程,相当于同时运行多个脚本
startThread(fun_name)
--定义线程函数
function my_thread(){
--线程里面定义一个死循环,或者其他功能代码
while true do
...
end
}
startThread("my_thread"); --指定线程函数为my_thread,启动线程
--执行到此处后,后面的代码和my_thread里面的代码将会同时运行
...
启动一个线程,相当于同时运行多个脚本
startThread(fun_name)
--定义线程函数
function my_thread(){
--线程里面定义一个死循环,或者其他功能代码
while true do
...
end
}
startThread("my_thread"); --指定线程函数为my_thread,启动线程
--执行到此处后,后面的代码和my_thread里面的代码将会同时运行
...
强制将当前脚本指定为兼容模式,只对当前脚本有效。
setCompatMode(b)
--强制指定当前脚本为兼容模式,兼容模式下有一些特定的函数。根据脚本的实际情况,有时候使用兼容模式找图找色效率更高 setCompatMode(true)
判断当前是否为兼容模式。(包括用户设置的或者脚本通过setCompatMode()函数强制设置的)
isCompatMode()
--兼容模式与优化模式的截图和色彩有时候会有差别,用isCompatMode()函数可以根据当前模式来选择要比对的图片或者颜色
--自定一个点击图片函数,根据当前模式和分辨率自动匹配要寻找的图片,准备好对应路径的图片后,调用时只需要传入图片名称就可以自动匹配适合当前手机或者平板的图片了
function myClickImage(img)
w,h = getResolutionRatio();
if isCompatMode() then
path = "兼容模式/"..w.."x"..h.."/";
else
path = "优化模式/"..w.."x"..h.."/";
end
path = path..img..".bmp";
return clickImage(path);
end
--调用,如果当前分辨率为480x854,模式为优化模式,则该函数会点击图片"优化模式/480x584/开始.bmp"
myClickImage("开始");
即设置是否自动获取屏幕比对数据,值在兼容模式下有效。在兼容模式下,寻图找色时需要大量拷贝内存,这样速度会很慢。实际情况下,比对图片或者找色不需要每次都重新截取屏幕数据,该函数设置为false后,所有的寻图找色函数都不再自动截屏,需要更新屏幕比对数据,调用screencap()函数即可
setAutoScreencap(b)
--该函数需要与screencap()函数配合使用,示例在screencap()函数中给出。
截取当前屏幕更新到比对缓冲区。该函数只有在兼容模式下,setAutoScreencap(false)时才有效。
screencap()
--screencap()和setAutoScreencap函数只有在兼容模式下有效,但是在优化模式下调用也不会有问题,因此这两个函数可以兼容这两种模式。
--当有连续的颜色比对或者图片比对,他们之间又没有流程顺序关系的话,可以将他们放在一屏上比对,可以避免每个比对都要重新截屏
setAutoScreencap(false); --设置当前为非自动截屏模式
while true do
screencap() --每循环一次更新一次比对缓冲区
if isColor(10,10,0xFF0000) and isColor(40,60,0xABA342) then
touchClick(40,60);
end
clickImage("截图/1.bmp");
clickImage("截图/2.bmp");
clickImage("截图/3.bmp");
clickImage("截图/4.bmp");
clickImage("截图/5.bmp");
clickImage("截图/6.bmp");
clickImage("截图/7.bmp");
clickImage("截图/8.bmp");
clickImage("截图/9.bmp");
clickImage("截图/10.bmp");
end
--在兼容模式下,以上代码每次循环只需要截取1次屏幕。如果没有设置setAutoScreencap(false)和调用screencap(),
--则每循环一次要截屏12次(找色、点击图片),而截屏是非常耗时间的。使用这两个函数,这段代码的速度相当于快了12倍。
| 虚拟码 | 常量 | 说明 |
|---|---|---|
| 0 | VK_UNKNOWN | 无 |
| 1 | VK_MENU | 菜单键 |
| 2 | VK_SOFT_RIGHT | |
| 3 | VK_HOME | HOME键 |
| 4 | VK_BACK | 返回键 |
| 5 | VK_ENDCALL | 挂电话键 |
| 6 | VK_0 | 数字0 |
| 7-16 | VK_0 - VK_9 | 数字0-9 |
| 17 | VK_STAR | |
| 18 | VK_POUND | |
| 19 | VK_DPAD_UP | |
| 20 | VK_DPAD_DOWN | |
| 21 | VK_DPAD_LEFT | |
| 22 | VK_DPAD_RIGHT | |
| 23 | VK_DPAD_CENTER | |
| 24 | VK_VOLUME_UP | 音量+ |
| 25 | VK_VOLUME_DOWN | 音量- |
| 26 | VK_POWER | 电源键 |
| 27 | VK_CAMERA | 照相键 |
| 28 | VK_CLEAR | 清除键 |
| 29-54 | VK_A - VK_Z | 字母A-Z |
| 66 | VK_ENTER | 确认键 |
| 84 | VK_SEARCH | 搜索键 |