紫猫插件手机版帮助文档 | 信义之树

紫猫插件手机版帮助文档

2020年06月23日 星期二 16:43:36 按键精灵 6,230 次 0
命令名称: zm.About 介绍与下载
功能说明: 输出最新版插件更新内容,当传入命令字符串参数时,输出该命令的在线文档地址。
语法格式: 结果 = zm.About([命令])
命令参数: 命令: 字符串, 可选参数,紫猫插件里的命令名,例如`RndStr`、`ColorToHSV`等。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Call zm.About()
zm.About "RndStr" //显示zm.RndStr命令文档地址
备注: 只是一个插件介绍功能,除了想知道文档地址外,一般不需要使用。
V1.1720: 加入命令
V1.1722: 增加一个参数,实现输出显示在线文档地址。
命令名称: zm.Init 初始化插件环境
功能说明: 初始化插件环境,只需要执行一次
语法格式: 结果 = zm.Init()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次
备注: 用于初始化插件的运行环境,加载常用数据,加强插件的稳定性,加快插件命令执行效率,一般放脚本开头运行一次即可。
V1.1723b: 初次加入
V1.1730: 修复报错问题
V1.1750: 提高执行效率
V1.1802: 加入快速初始化命令
V1.1818: 仅在每天首次启动检查更新, 大幅度提高速度
V1.1820: 优化执行效率
命令名称: zm.FindStrBaiDu 百度云找字
功能说明: 使用百度云识别来实现找字功能, 不需要字库, 字体颜色之类的参数, 必须先使用 zm.ocrbaiduinit 进行初始化后使用, 默认参数使用 zm.setfindstr 修改
语法格式: 结果 = zm.FindStrBaiDu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If

Dim ret

//--------------------初级用法--------------------//
//默认全屏查找"紫猫学院"这4个字, 任何颜色都可以
ret = zm.FindStrBaiDu("紫猫学院")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "文字=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "文字=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "文字=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写
If zm.FindStrBaiDu(100, 200, 300, 400, "紫猫学院", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号=" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "文字=" & 返回数组(3)
    TracePrint "找到序号=" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "文字=" & 返回数组[4]
    TracePrint "找到序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "文字=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//对象后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//这句代码意思如下:
//在范围(100,200,300,400)里, 限时30000毫秒内循环查找("紫猫|学院")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_40")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindStrBaiDu(100, 200, 300, 400, "紫猫|学院", 30*1000, True, "显示", "@怪物1", 返回数组, "_40")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
Dim 史莱姆 = {"紫猫|学院", True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStrBaiDu 史莱姆

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindStrBaiDu() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindStr() 命令帮助
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStrBaiDu("喵星人") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "文字=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "文字=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "文字=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 本命令调用百度云的通用文字识别(含位置信息版)功能实现找字, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
V3.1903: 修复上版本的找字失败问题
命令名称: zm.FindStrTableBaiDu 百度云找字遍历
功能说明: zm.findstrbaidu 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindStrTableBaiDu([对象table])
命令参数: 对象table: table, 把 zm.findstrbaidu 的对象参数放入table数组中, 实现遍历找字
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆", true}
打怪["黑龙"] = {100,200,300,400, "黑龙", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindStrTableBaiDu(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 本命令调用百度云的通用文字识别(含位置信息版)功能实现找字, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
命令名称: zm.FindStrTableYouTu 优图找字遍历
功能说明: zm.findstryoutu 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindStrTableYouTu([对象table])
命令参数: 对象table: table, 把 zm.findstryoutu 的对象参数放入table数组中, 实现遍历找字
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey") Then
  TracePrint "设置优图AI识别成功"
Else
  TracePrint "设置优图AI识别失败"
End If

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆", true}
打怪["黑龙"] = {100,200,300,400, "黑龙", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindStrTableYouTu(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
本命令只适合正常屏幕方向使用, 横屏情况推荐使用 zm.findstrbaidu
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.FindStrTapBaiDu 百度云找字点击
功能说明: zm.findstrbaidu 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindStrTapBaiDu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If

//本命令内置找到后点击, 其他用法例子与zm.FindStrBaiDu()相同
Dim ret
ret = zm.FindStrTapBaiDu("紫猫学院")
If ret Then
    TracePrint "文字找到并执行了点击"
Else
    TracePrint "没有找到文字, 不执行点击"
End If
备注: 本命令调用百度云的通用文字识别(含位置信息版)功能实现找字, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
命令名称: zm.FindStrTapYouTu 优图找字点击
功能说明: zm.findstryoutu 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindStrTapYouTu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey") Then
  TracePrint "设置优图AI识别成功"
Else
  TracePrint "设置优图AI识别失败"
End If

//本命令内置找到后点击, 其他用法例子与zm.FindStrYouTu()相同
Dim ret
ret = zm.FindStrTapYouTu("紫猫学院")
If ret Then
    TracePrint "文字找到并执行了点击"
Else
    TracePrint "没有找到文字, 不执行点击"
End If
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
本命令只适合正常屏幕方向使用, 横屏情况推荐使用 zm.findstrbaidu
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.FindStrYouTu 优图找字
功能说明: 使用优图AI识别来实现找字功能, 对横屏识别效果不佳, 不需要字库, 字体颜色之类的参数, 必须先使用 zm.ocryoutuinit 进行初始化后使用, 默认参数使用 zm.setfindstr 修改
语法格式: 结果 = zm.FindStrYouTu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey") Then
  TracePrint "设置优图AI识别成功"
Else
  TracePrint "设置优图AI识别失败"
End If

Dim ret

//--------------------初级用法--------------------//
//默认全屏查找"紫猫学院"这4个字, 任何颜色都可以
ret = zm.FindStrYouTu("紫猫学院")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "文字=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "文字=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "文字=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写
If zm.FindStrYouTu(100, 200, 300, 400, "紫猫学院", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号=" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "文字=" & 返回数组(3)
    TracePrint "找到序号=" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "文字=" & 返回数组[4]
    TracePrint "找到序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "文字=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//对象后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//这句代码意思如下:
//在范围(100,200,300,400)里, 限时30000毫秒内循环查找("紫猫|学院")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_40")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindStrYouTu(100, 200, 300, 400, "紫猫|学院", 30*1000, True, "显示", "@怪物1", 返回数组, "_40")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
Dim 史莱姆 = {"紫猫|学院", True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStrYouTu 史莱姆

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindStrYouTu() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindStr() 命令帮助
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStrYouTu("喵星人") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "文字=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "文字=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "文字=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
本命令只适合正常屏幕方向使用, 横屏情况推荐使用 zm.findstrbaidu
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDu 百度云通用文字识别
功能说明: 无需制作字库, 使用百度云实现在线云识别文字, 支持范围识别、本地图片或URL链接图片识别, 请先调用 zm.ocrbaiduinit 设置后才使用本命令
语法格式: 结果 = zm.OcrBaiDu([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 暂不支持https链接, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明部分
返回值: 字符串: 返回识别结果, 多个字符串以`\n`分割, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置默认通用文字识别
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别文字
ret = zm.OcrBaiDu(0, 0, 0, 0)
TracePrint "识别结果:", ret

//例子2: 设置通用文字识别(高精度版)
zm.OcrBaiDuInit "请修改成你的API Key", "请修改成你的Secret Key", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
//本地图片识别文字
ret = zm.OcrBaiDu("/sdcard/紫猫.png")
TracePrint "识别结果:", ret

//例子3: 设置网络图片文字识别, 并开启检测图像朝向功能
Dim args = {"apikey":"请修改成你的API Key", "seckey":"请修改成你的Secret Key", "posturl":"https://aip.baidubce.com/rest/2.0/ocr/v1/webimage", "detect_direction":"true"}
zm.OcrBaiDuInit args
//URL图片链接识别文字并返回原生json
ret = zm.OcrBaiDu("http://bbs.anjian.com/templates/default/Images/logo1.png", t)
TracePrint "识别结果:", ret, "原生json:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的参数posturl, 实现支持通用文字识别(包括含位置信息版, 含生僻字版, 高精度版, 高精度含位置版, 网络图片文字识别)
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuAll 百度云文字识别
功能说明: 百度云识别高级函数, 实现百度云文字识别的所有接口命令, 请求URL和请求参数请通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuAll([x1, y1, x2, y2][, 图片路径])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回识别结果, 格式与百度云文档中返回值相同, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret

//例子1: 设置身份证识别接口与参数, 请严格按照API文档中的请求URL与请求参数填写
//也可以使用zm.OcrBaiDuIDCard()身份证识别专用函数实现
Dim args = {"apikey":"请修改成你的API Key", "seckey":"请修改成你的Secret Key", "posturl":"https://aip.baidubce.com/rest/2.0/ocr/v1/idcard","id_card_side":"front"}
If zm.OcrBaiDuInit(args) Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//使用一张本地的身份证正面照片
ret = zm.OcrBaiDuAll("/sdcard/sfz.png")
//返回值为原生json表, 故采用zm.VarInfo()查看, 具体请自行研究如何使用table表提取相关内容
TracePrint "识别结果:", zm.VarInfo(ret)

//例子2: 设置银行卡识别接口与参数, 请严格按照API文档中的请求URL与请求参数填写
zm.OcrBaiDuInit "请修改成你的API Key", "请修改成你的Secret Key", "https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard"
//截图识别银行卡
ret = zm.OcrBaiDuAll(0,0,0,0)
//返回值为原生json表, 故采用zm.VarInfo()查看, 具体请自行研究如何使用table表提取相关内容
TracePrint "识别结果:", zm.VarInfo(ret)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuBankCard 百度云银行卡识别
功能说明: 识别银行卡并返回卡号和发卡行, 内置固定的请求URL, 除图片外的请求参数通过 zm.ocrbaiduinit 设置
语法格式: 结果 = zm.OcrBaiDuBankCard([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式为{“bank\_card\_number”:”622500000000000″,”bank\_name”:”招商银行”,”bank\_card\_type”:1}, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别银行卡
ret = zm.OcrBaiDuBankCard(0, 0, 0, 0)
If ret then
    TracePrint "银行卡卡号:", ret["bank_card_number"]
    TracePrint "银行名:", ret["bank_name"]
    TracePrint "银行卡类型:", ret["bank_card_type"]
Else
    TracePrint "识别失败"
End If

//本地图片识别银行卡
ret = zm.OcrBaiDuBankCard("/sdcard/紫猫银行卡.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuBusiness 百度云营业执照识别
功能说明: 识别营业执照, 并返回关键字段的值, 包括单位名称/法人/地址/有效期/证件编号/社会信用代码等, 内置固定的请求URL
语法格式: 结果 = zm.OcrBaiDuBusiness([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“单位名称”:”紫猫编程学院”,”法人”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别营业执照
ret = zm.OcrBaiDuBusiness(0, 0, 0, 0)
If ret then
    TracePrint "单位名称:", ret["单位名称"]
    TracePrint "法人:", ret["法人"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//本地图片识别营业执照
ret = zm.OcrBaiDuBusiness("/sdcard/紫猫营业执照.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuDriving 百度云驾驶证识别
功能说明: 对机动车驾驶证所有关键字段进行识别, 内置固定的请求URL, 除图片外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuDriving([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“证号”:”345911220″,”姓名”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别驾驶证
ret = zm.OcrBaiDuDriving(0, 0, 0, 0)
If ret then
    TracePrint "姓名:", ret["姓名"]
    TracePrint "证件号:", ret["证件号"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别驾驶证
ret = zm.OcrBaiDuDriving("/sdcard/紫猫驾驶证.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuForm 百度云表格文字识别
功能说明: 已整合为同步请求, 自动识别表格线及表格内容, 结构化输出表头, 表尾及每个单元格的文字内容, 内置固定的请求URL, 除图片外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuForm([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 字符串: 返回表格下载地址或json文本, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别表格文字
ret = zm.OcrBaiDuForm(0, 0, 0, 0)
If ret then
    TracePrint "默认excel表格下载地址", ret
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 加入设置返回json文本
Dim args = {"result_type":"json"}
zm.OcrBaiDuInit args
//本地图片识别表格文字
ret = zm.OcrBaiDuForm("/sdcard/紫猫表格.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuHandWriting 百度云手写识别
功能说明: 识别屏幕上的手写文字, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuHandWriting([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 字符串: 返回屏幕上的文字内容, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If

//全屏识别文字
ret = zm.OcrBaiDuHandWriting(0, 0, 0, 0)
If ret then
    TracePrint "手写文字", ret
Else
    TracePrint "识别失败"
End If
备注: 本命令调用百度云的手写文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuIDCard 百度云身份证识别
功能说明: 识别身份证正背面, 内置固定的请求URL, 除图片和正背面id\_card\_side参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuIDCard(正背面, [x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: 正背面: 字符串, 必选, 身份证照片的正背面, 正面照片填写`”正面”`或`”front”`, 背面照片填写`”背面”`或`”back”`
x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“公民身份号码”:”345911220″,”姓名”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别身份证
ret = zm.OcrBaiDuIDCard("正面", 0, 0, 0, 0)
If ret then
    TracePrint "姓名:", ret["姓名"]
    TracePrint "公民身份号码:", ret["证件号"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别身份证
ret = zm.OcrBaiDuIDCard("back", "/sdcard/紫猫身份证.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuInit 设置百度云文字识别
功能说明: 初始化设置百度云文字识别key和请求参数, 一般只要调用一次, 除非需要用不同的识别模式与参数, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrBaiDuInit([高级属性, ][apikey, seckey][, 图片朝向][, posturl])
命令参数: 高级属性: 表, 可选, 高级参数, 一般不需要填写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见 http://ai.baidu.com/docs#/OCR-API/top 中的请求参数, 其中请求URL的键名为posturl
apikey: 字符串, 可选, 百度云文字识别控制台创建的API Key, 详见最下面的备注
seckey: 字符串, 可选, 百度云文字识别控制台创建的Secret Key, 详见最下面的备注
图片朝向: 布尔值, 可选, 是否开启检测图像朝向功能功能, 省略默认为true
posturl: 字符串, 可选, 百度云文字识别的请求URL, 用于不同模式的识别, 省略默认为`https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic`
返回值: 表: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//例子1: 设置默认通用文字识别
Dim r = zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key")
zm.TracePrint(r) //查看返回值

//例子2: 设置通用文字识别(高精度版)
zm.OcrBaiDuInit "请修改成你的API Key", "请修改成你的Secret Key", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"

//例子3: 通过高级属性设置默认通用文字识别, 并开启检测图像朝向功能
Dim args = {"apikey":"请修改成你的API Key", "seckey":"请修改成你的Secret Key", "posturl":"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic", "detect_direction":"true"}
If zm.OcrBaiDuInit(args) Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
本命令通过修改请求URL参数posturl与相关请求参数, 实现支持文字识别的所有功能
V1.1747: 加入命令
V2.1829: 加入图像朝向检测参数
V3.1832: 为统一命令格式, `zm.SetOcrBaidu()`改为`zm.OcrBaiduInit()`
V3.1839: 检测图像朝向功能默认为启用状态
命令名称: zm.OcrBaiDuNumbers 百度云数字识别
功能说明: 识别屏幕上的数字, 返回字符串数据类型, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuNumbers([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 字符串: 返回屏幕上的数字内容, 注意数据类型是字符串格式, 做大小比较请用`CDbl`之类的函数转换数值型
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If

//全屏识别数字
ret = zm.OcrBaiDuNumbers(0, 0, 0, 0)
If ret then
    TracePrint "数字", ret
Else
    TracePrint "识别失败"
End If
备注: 本命令调用百度云的数字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuPlate 百度云车牌识别
功能说明: 识别机动车车牌, 并返回签发地和号牌, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuPlate([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 数组: 返回优化后的识别结果, 格式类似于{“鄂A345911220”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别一张车牌
ret = zm.OcrBaiDuPlate(0, 0, 0, 0)
If ret then
    TracePrint "车牌号", ret(0)
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启多张车牌检测功能
Dim args = {"multi_detect":"true"}
zm.OcrBaiDuInit args
//本地图片识别多张车牌
ret = zm.OcrBaiDuPlate("/sdcard/紫猫车牌.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuReceipt 百度云通用票据识别
功能说明: 识别医疗票据/发票/的士票/保险保单等票据类图片中的所有文字, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuReceipt([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 数组: 返回优化后的识别结果, 格式类似于{“345911220″,”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别发票
ret = zm.OcrBaiDuReceipt(0, 0, 0, 0)
If ret then
    For i = 0 to UBound(ret)
        TracePrint ret(i)
    Next
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别的士票
ret = zm.OcrBaiDuReceipt("/sdcard/紫猫的士票.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuVehicle 百度云行驶证识别
功能说明: 对机动车行驶证正本所有关键字段进行识别, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuVehicle(正背面, [x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“品牌型号”:”保时捷GT37182RUCRE”,”所有人”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别行驶证
ret = zm.OcrBaiDuVehicle(0, 0, 0, 0)
If ret then
    TracePrint "所有人:", ret["所有人"]
    TracePrint "品牌型号:", ret["品牌型号"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别行驶证
ret = zm.OcrBaiDuVehicle("back", "/sdcard/紫猫行驶证.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouDao 有道智云OCR
功能说明: 无需制作字库, 使用有道智云实现在线云识别文字, 支持范围识别或指定图片识别, 必须先使用 zm.ocryoudaoinit 进行初始化
语法格式: 结果 = zm.OcrYouDao([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 不可与图片路径参数同时存在
y1: 数值型, 可选, 识别范围的左上角y坐标, 不可与图片路径参数同时存在
x2: 数值型, 可选, 识别范围的右下角x坐标, 不可与图片路径参数同时存在
y2: 数值型, 可选, 识别范围的右下角y坐标, 不可与图片路径参数同时存在
图片路径: 字符串, 可选, 要识别内容的图片路径, 不可与范围参数同时存在
返回json: 表, 可选, 一般不建议填写, 以表的形式返回原生结果, 详情请自行遍历查看
返回值: 字符串: 返回识别结果, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.OcrYouDaoInit "请修改成你的应用ID", "请修改成你的应用密钥"

Dim ret = zm.OcrYouDao(100,100,400,400)
TracePrint "识别结果为:", ret
备注: 本命令调用网易公司的有道智云OCR功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[有道智云官网](http://ai.youdao.com/)注册并登录
创建一个我的应用
再创建一个文字识别OCR实例, 并绑定应用
打开应用就可以看到应用ID和应用密钥
识别范围与图片路径参数只能二选一, 不可同时填写
V1.1745: 加入命令
V1.1746: 解决语法报错问题
V3.1849: 支持超级缩放
命令名称: zm.OcrYouDaoInit 设置有道智云OCR
功能说明: 初始化设置有道智云OCR的账户数据, 只要调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrYouDaoInit([列表, ][应用ID, 应用密钥])
命令参数: 列表: 表, 可选, 高级参数, 建议不写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见下方属性表
应用ID: 字符串, 可选, 有道智云后台创建的应用ID, 详见最下面的备注
应用密钥: 字符串, 可选, 有道智云后台创建的应用密钥, 详见最下面的备注

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
appKey | “” | 字符串 | 有道智云后台创建的应用ID
secKey | “” | 字符串 | 有道智云后台创建的应用密钥
langType | “zh-en” | 字符串 | 要识别的语言类型, 目前支持英文:en,和中英混合:zh-en
detectType | “1011” | 字符串 | 识别类型,目前只支持片段识别:1011
imageType | “1” | 字符串 | 图片类型,目前只支持Base64:1
docType | “json” | 字符串 | 服务器响应类型,目前只支持json
url | “http://openapi.youdao.com/ocrapi” | 字符串 | 有道智云OCR API HTTP地址

返回值: 表: 返回设置后的参数列表
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.OcrYouDaoInit "请修改成你的应用ID", "请修改成你的应用密钥"
备注: 本命令调用网易公司的有道智云OCR功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[有道智云官网](http://ai.youdao.com/)注册并登录
创建一个我的应用
再创建一个文字识别OCR实例, 并绑定应用
打开应用就可以看到应用ID和应用密钥
V1.1745: 加入命令
V3.1832: 为统一命令格式, `zm.SetOcrYouDao()`改为`zm.OcrYouDaoInit()`
命令名称: zm.OcrYouTu 优图通用OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别文字, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTu([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图通用OCR文档](https://ai.qq.com/doc/ocrgeneralocr.shtml)的响应参数部分
返回值: 字符串: 成功返回识别结果, 多行内容以`”\n”`分割, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")

Dim ret = zm.OcrYouTu(0, 0, 0, 0) //识别范围文字
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("/sdcard/紫猫.png") //识别本地图片
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("http://bbs.anjian.com/templates/default/Images/logo1.png") //识别网络图片
TracePrint "识别结果: ", ret

Dim t()
ret = zm.OcrYouTu(100, 100, 200, 200, t) //获取原生返回值t
TracePrint "部分原生返回值: ", zm.VarInfo(t)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBankCard 优图银行卡OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别银行卡, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBankCard([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图银行卡OCR文档](https://ai.qq.com/doc/ocrcreditcardocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuBankCard("/sdcard/银行卡.png")
TracePrint "银行卡数据: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBC 优图名片OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别名片, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBC([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图名片OCR文档](https://ai.qq.com/doc/ocrbcocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuBC("/sdcard/名片.png")
TracePrint "名片数据: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBusiness 优图营业执照OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别营业执照, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBusiness([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图营业执照OCR文档](https://ai.qq.com/doc/ocrbizlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuBusiness("/sdcard/名片.png")
TracePrint "营业执照数据: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuDriverLicense 优图行驶证驾驶证OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别行驶证与驾驶证, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuDriverLicense(类型, [x1, y1, x2, y2][图片路径][, 返回json])
命令参数: 类型: 数值型_或_字符串, 必选, 行驶证照片填写”行驶证”或0, 驾驶证照片填写”驾驶证”或1
x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图行驶证驾驶证OCR文档](https://ai.qq.com/doc/ocrdriverlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuDriverLicense(0, "/sdcard/行驶证.png")
TracePrint "行驶证: ", zm.VarInfo(ret)
ret = zm.OcrYouTuDriverLicense(1, "/sdcard/驾驶证.png")
TracePrint "驾驶证: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuHandWriting 优图手写OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别手写文字, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuHandWriting([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图手写OCR文档](https://ai.qq.com/doc/handwritingocr.shtml)的响应参数部分
返回值: 字符串: 成功返回识别结果, 多行内容以`”\n”`分割, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuHandWriting("/sdcard/名片.png")
TracePrint "手写数据: ", ret
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuIDCard 优图身份证OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别身份证, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuIDCard(正反面, [x1, y1, x2, y2][图片路径][, 返回json])
命令参数: 正反面: 数值型_或_字符串, 必选, 身份证照片的正反面, 正面照片填写”正面”或0, 反面照片填写”反面”或1
x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图行驶证驾驶证OCR文档](https://ai.qq.com/doc/ocrdriverlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuIDCard(0, "/sdcard/身份证正面.png")
TracePrint "正面: ", zm.VarInfo(ret)
ret = zm.OcrYouTuIDCard(1, "/sdcard/身份证反面.png")
TracePrint "反面: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuInit 初始化优图OCR
功能说明: 初始化设置腾讯优图OCR识别的账户AppID和AppKey, 一般只需调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrYouTuInit(AppID, AppKey)
命令参数: AppID: 字符串, 可选, 腾讯AI控制台创建的优图OCR AppID, 详见最下面的备注
AppKey: 字符串, 可选, 腾讯AI控制台创建的优图OCR AppKey, 详见最下面的备注
返回值: table: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")

Dim ret = zm.OcrYouTu(0, 0, 0, 0) //识别范围文字
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("/sdcard/紫猫.png") //识别本地图片
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("http://bbs.anjian.com/templates/default/Images/logo1.png") //识别网络图片
TracePrint "识别结果: ", ret

Dim t()
ret = zm.OcrYouTu(100, 100, 200, 200, t) //获取原生返回值t
TracePrint "部分原生返回值: ", zm.VarInfo(t)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.OcrYouTuPlate 优图车牌OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别车牌, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuPlate([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图营业执照OCR文档](https://ai.qq.com/doc/ocrbizlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuPlate("/sdcard/车牌.png")
TracePrint "车牌: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.SpeechSsYouTu 优图语音合成播放
功能说明: 使用优图提供的语音合成功能实现文字转声音并播放, 注意脚本停止会导致播放停止. 请先调用 zm.speechssyoutuinit 初始化后才使用本命令, 设置发音人等内容都在初始化命令中调整
语法格式: 结果 = zm.SpeechSsYouTu(文本内容[, 是否播放[, 是否删除]])
命令参数: 文本内容: 字符串, 准备合成语音的文本内容
是否播放: 布尔型, 可选, 是否自动播放音频, 注意脚本停止会导致播放停止
是否删除: 布尔型, 可选, 是否删除合成的文件, 注意前面必须要有是否播放参数
返回值: 字符串: 返回合成的语音文件路径, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化腾讯AI语音合成的账户数据, 只需执行一次, 请自行修改
zm.SpeechSsYouTuInit "请修改成你的AppID", "请修改成你的AppKey"
//合成并自动播放
zm.SpeechSsYouTu "欢迎使用紫猫插件手机版", True
Delay 5000 //防止脚本停止导致播放停止

//前面已经初始化过app数据, 现在修改默认发音人
zm.SpeechSsYouTuInit {"speaker":6}
//合成并自动播放
zm.SpeechSsYouTu "紫猫老师真帅!", True
Delay 5000 //防止脚本停止导致播放停止
备注: 本命令调用腾讯AI的语音合成接口
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 勾选`语音合成`
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.SpeechSsYouTuInit 初始化优图语音合成
功能说明: 初始化设置腾讯AI语音合成的账户AppID和AppKey, 一般只需调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.SpeechSsYouTuInit([高级属性][AppID, AppKey])
命令参数: 高级属性: table, 可选, 一般不需要填写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见下面表格
AppID: 字符串, 可选, 腾讯AI控制台创建的语音合成 AppID, 详见最下面的备注
AppKey: 字符串, 可选, 腾讯AI控制台创建的语音合成 AppKey, 详见最下面的备注
app_id: 字符串, 腾讯AI控制台创建的语音合成 AppID
app_key: 字符串, 腾讯AI控制台创建的语音合成 AppKey
interface: 字符串, 语音合成接口, 支持`”aai_tts”`和`”aai_tta”`, 默认为`”aai_tts”`
speaker: 数值型, `aai_tts`接口的语音发音人编码, 支持`1,5,6,7`, 默认为`1`
format: 数值型, `aai_tts`接口的语音格式编码, 支持`1,2,3`, 默认为`2`
volume: 数值型, `aai_tts`接口的语音音量, 支持`[-10, 10]`, 默认为`0`
speed_tts: 数值型, `aai_tts`接口的语音语速, 支持`[50, 200]`, 默认为`100`
aht: 数值型, `aai_tts`接口的语音降低/升高半音个数, 支持`[-24, 24]`, 默认为`0`
apc: 数值型, `aai_tts`接口的控制频谱翘曲的程度,改变说话人的音色, 支持`[0, 100]`, 默认为`58`
model_type: 数值型, `aai_tta`接口的语音发音人编码, 支持`0,1,2,6`, 默认为`0`
speed_tta: 数值型, `aai_tta`接口的语音语速, 支持`-2,-1,0,1,2`, 默认为`0`

键名 | 数据类型 | 解释
—-:|:——-:|:—-
**app_id** | _字符串_ | 腾讯AI控制台创建的语音合成 AppID
**app_key** | _字符串_ | 腾讯AI控制台创建的语音合成 AppKey
**interface** | _字符串_ | 语音合成接口, 支持`”aai_tts”`和`”aai_tta”`, 默认为`”aai_tts”`
**speaker** | _数值型_ | `aai_tts`接口的语音发音人编码, 支持`1,5,6,7`, 默认为`1`
**format** | _数值型_ | `aai_tts`接口的语音格式编码, 支持`1,2,3`, 默认为`2`
**volume** | _数值型_ | `aai_tts`接口的语音音量, 支持`[-10, 10]`, 默认为`0`
**speed_tts** | _数值型_ | `aai_tts`接口的语音语速, 支持`[50, 200]`, 默认为`100`
**aht** | _数值型_ | `aai_tts`接口的语音降低/升高半音个数, 支持`[-24, 24]`, 默认为`0`
**apc** | _数值型_ | `aai_tts`接口的控制频谱翘曲的程度,改变说话人的音色, 支持`[0, 100]`, 默认为`58`
**model_type** | _数值型_ | `aai_tta`接口的语音发音人编码, 支持`0,1,2,6`, 默认为`0`
**speed_tta** | _数值型_ | `aai_tta`接口的语音语速, 支持`-2,-1,0,1,2`, 默认为`0`

返回值: table: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化腾讯AI语音合成的账户数据, 只需执行一次, 请自行修改
zm.SpeechSsYouTuInit "请修改成你的AppID", "请修改成你的AppKey"
//合成并自动播放
zm.SpeechSsYouTu "欢迎使用紫猫插件手机版", True
Delay 5000 //防止脚本停止导致播放停止

//前面已经初始化过app数据, 现在修改默认发音人
zm.SpeechSsYouTuInit {"speaker":6}
//合成并自动播放
zm.SpeechSsYouTu "紫猫老师真帅!", True
Delay 5000 //防止脚本停止导致播放停止
备注: 本命令调用腾讯AI的语音合成接口
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 勾选`语音合成`
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.Delay 超级延时
功能说明: 脚本暂停延时一段时间,支持防检测的随机延迟时长。
语法格式: 结果 = zm.Delay(时长1[, 时长2])
命令参数: 时长1: 数值型, 需要延迟的最小时间,单位毫秒。
时长2: 数值型, 可选参数,需要延迟的最大时间,单位毫秒,省略默认为时长1的值。
返回值: 数值型:最终随机到延迟的时长。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.RndInitSeed() //初始化随机种子,只需执行一次,也可以使用zm.Init()初始化
TracePrint "固定延迟一段时间"
zm.Delay(1000) //固定延迟1000毫秒
TracePrint "随机延迟一段时间"
zm.Delay(1000, 2000) //随机延迟1000到2000毫秒
TracePrint "延迟结束"
备注: 大部分游戏检测属于行为检测,比如每隔固定一段时间就执行操作内容之类,所以需要使用随机延迟时间。
V1.1722: 插件加入本命令
V1.1730: 修复报错问题
命令名称: zm.GetScreenScale 获取超级缩放状态
功能说明: 获取通过 zm.setscreenscalezm.resetscreenscale 设置的超级缩放状态, 对按键自带的缩放命令无效
语法格式: 结果 = zm.GetScreenScale()
命令参数:
返回值: 数值型: -1表示没有缩放; 0表示传入坐标缩放, 传出坐标不缩放; 1表示传入坐标缩放, 传出坐标反向缩放
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.GetScreenScale() = -1 Then
  TracePrint "没有缩放"
Else
  TracePrint "缩放中"
End If
备注: 对按键自带缩放无效, 仅支持超级缩放状态。
V1.1803: 加入命令
命令名称: zm.ResetScreenScale 取消超级缩放
功能说明: 取消屏幕比例缩放设置, 一般与 zm.setscreenscale 配套使用。
语法格式: 结果 = zm.ResetScreenScale()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//在720x1280分辨率下开发脚本的超级缩放
zm.SetScreenScale 720, 1280

//取消超级缩放
zm.ResetScreenScale
备注: V1.1803: 加入命令
命令名称: zm.SetDelay 设置超级延时
功能说明: 设置超级延时zm.Delay()的默认值, 设置一次后, 所有zm.Delay()均受影响
语法格式: 结果 = zm.SetDelay(属性表)
命令参数: 属性表: 表, 例如{“min”:-50, “max”:50}表示所有zm.Delay()函数随机浮动-50到50之间, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
min | 0 | 数值型 | 随机浮动最小值
max | 0 | 数值型 | 随机浮动最大值
time | 0 | 数值型 | 默认延时时间

返回值: 表: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//设置一次后, 所有zm.Delay都有效, 除非再次改变设置
zm.SetDelay({"min":-30, "max":40})
zm.Delay(100)  //表示随机延时(100-30)到(100+40)毫秒范围

zm.SetDelay({"min":-30, "max":40})
zm.Delay(100, 200)  //表示随机延时100到200毫秒范围, 不受默认值影响

zm.SetDelay({"min":-30, "max":40})
zm.Delay(100, true)  //表示固定延时100毫秒, 不要随机

zm.SetDelay({"min":-300, "max":400, "time":1000})
zm.Delay()   //表示随机延迟(1000-300)到(1000+400)毫秒范围
备注: 设置一次后, 所有zm.Delay都有效, 除非再次改变设置
V3.1853: 初次加入命令
命令名称: zm.SetScreenScale 超级缩放
功能说明: 与按键自带的 setscreenscale 相比, 多了对zm.FindPic()和zm.FindStr()的支持, 另外还可以使用 zm.getscreenscale 获取缩放状态.

缩放找图和缩放找字仅针对传入与传出坐标进行缩放, 对应的图片与字库请自行设置多套数据供命令调用.

语法格式: 结果 = zm.SetScreenScale(开发宽度, 开发高度[, 输出缩放])
命令参数: 开发宽度: 数值型, 开发脚本时使用的设备横向分辨率。
开发高度: 数值型, 开发脚本时使用的设备纵向分辨率。
输出缩放: 数值型, 可选参数,默认为1。0表示只对传入函数的坐标(如范围坐标等)进行缩放,从函数传出的坐标(如返回坐标等)不缩放,即为当前设备的真实坐标。1表示对传入的坐标(如范围坐标等)进行缩放,对函数传出的坐标(如返回坐标)进行反向缩放。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//普通找色点击情况与按键自带例子的SetScreenScale()相同, 这里就不演示了
//下面是找图找字功能缩放的演示

'设置开发分辨率进行超级缩放
zm.SetScreenScale 720, 1280

'附件中存放各个分辨率的图片, 图片文件名格式为: 横向分辨率x纵向分辨率xDPI数值-图片名.png
Dim 图片前缀 = "Attachment:" & GetScreenX() & "x" & GetScreenY() & "x" & Device.GetDPI() & "-"
TracePrint "本设备的图片默认前缀为:", 图片前缀

'设置找图的图片前缀
zm.SetFindPic {"pic":图片前缀}

If zm.FindPic("图片1.png|Attachment:图片2.png|/sdcard/图片3.png", "显示") Then
    '如果只写图片名的话, 插件就会自动帮你把图片前缀加上去, 比如图片1.png会自动加前缀
    '通过不同分辨率不同图片文件名的方式实现调用查找对应图片
    '而图片2和图片3由于是完整路径, 所以就没有自动加图片前缀了
    TracePrint "找到图片了"
Else
    TracePrint "没找到图片"
End If

'附件中存放各个分辨率下的字库文件, 文件名格式与图片相同: 横向分辨率x纵向分辨率xDPI数值-字库.txt
Dim 字库前缀 = "Attachment:" & GetScreenX() & "x" & GetScreenY() & "x" & Device.GetDPI() & "-"
TracePrint "本设备的图片默认前缀为:", 字库前缀

'设置字库
ret = SetDictEx(0, 字库前缀 & "紫猫学院字库.txt")
TracePrint "0号字库设置结果:", ret
ret = UseDict(0)
TracePrint "切换0号字库设置结果:", ret

If zm.FindStr("紫猫", "FFFFFF", "显示") Then
    TracePrint "找到文字了"
Else
    TracePrint "没找到文字"
End If
备注: V1.1803: 加入命令
命令名称: zm.SetShowLog 设置日志输出
功能说明: 修改所有日志显示输出的默认参数值,支持以`显示|隐藏`做日志参数的命令。
语法格式: 默认值 = zm.SetShowLog(显示隐藏)
命令参数: 显示隐藏: 字符串_|_布尔值, 可取以下[true, false, “显示”, “隐藏”, “show”, “hide”]几个值
返回值: 字符串: 返回设置的默认参数值
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//设置后, 对所有带有日志输出显示参数的命令生效
zm.SetShowLog "显示"
zm.FindColor "123456"
zm.FindMultiColor "123456", "1|1|000000"
zm.FindPic "紫猫.bmp"
zm.FindStr "学|院", "隐藏"
备注: V1.1741: 加入命令
V2.1829: 支持布尔值参数设置是否显示
命令名称: zm.SetTap 设置超级点击
功能说明: 修改 zm.tap 的默认参数值, 并影响超级图色命令中的点击参数效果
语法格式: 结果 = zm.SetTap(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“t”:2000, “showlog”:”显示”}表示修改点击后默认延时时间为3000毫秒, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
minx | 0 | 数值型 | 点击x坐标的浮动随机数
maxx | 0 | 数值型 | 点击x坐标的浮动随机数
miny | 0 | 数值型 | 点击y坐标的浮动随机数
maxy | 0 | 数值型 | 点击y坐标的浮动随机数
t | 0 | 数值型 | 点击后默认延时时间, 单位毫秒
mintouch | 0 | 数值型 | 点击时, 按下与弹起之间的最小时间间隔, 单位毫秒
maxtouch | 50 | 数值型 | 点击时, 按下与弹起之间的最大时间间隔, 单位毫秒
norandom | false | 布尔型 | 是否禁用随机, 填写true后, 所有点击都失去随机效果
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值

返回值: 表: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//点击固定坐标100,200
zm.Tap 100, 200

//点击固定坐标100,200后延时3000毫秒
zm.Tap 100, 200, 3000

//在范围100,200,150,250内随机点击某个点, 并显示输出
zm.Tap 100, 200, 150, 250, "show"

//在范围100,200,150,250内随机点击某个点后延时4000毫秒
zm.Tap 100, 200, 150, 250, 4000

//设置固定坐标x浮动范围[-10,15], 固定坐标y浮动范围[-5,20], 点击后默认延时2000毫秒
zm.SetTap {"minx":-10, "maxx":15, "miny":-5, "maxy":20, "t":2000}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后默认延时2000毫秒
zm.Tap 100, 200

//在范围100,200,150,250内随机点击某个点并默认延时2000毫秒, 不受默认浮动范围影响
Dim t = zm.Tap(100, 200, 150, 250)
//查看实际点击坐标
TracePrint zm.VarInfo(t)

//设置按下与弹起之间的时间间隔为10到30毫秒, 默认日志输出为显示
zm.SetTap {"mintouch":10, "maxtouch":30, "showlog":"显示"}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后延时3000毫秒
zm.Tap 100, 200, 3000
备注: V1.1802: 加入命令
命令名称: zm.ShowMessage 超级浮窗
功能说明: 与自带的命令相比, 加入了依次显示信息和倒计时功能
语法格式: 结果 = zm.ShowMessage(信息[, 显示时长][, x, y][, 倒计间隔])
命令参数: 信息: table_或_string, 浮窗显示的内容, 如果是字符串, 当包含”#时间”时将启用倒计时功能; 如果是表, 则在显示时间内依次遍历显示
显示时长: number, 可选, 在屏幕上显示总时长, 单位毫秒, 省略默认3000毫秒
x: number, 可选, 设置显示框在屏幕上的左上角X坐标, 省略默认为屏幕中间
y: number, 可选, 设置显示框在屏幕上的左上角Y坐标, 省略默认为屏幕中间
倒计间隔: number, 可选, 填写必须小于0, 表示倒计时步长, 省略默认为-1000毫秒
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//倒计时5秒, 脚本也会对应延时5秒
zm.ShowMessage("脚本将在 #时间 秒后启用", 5000)

//遍历循环显示内容, 总耗时10秒, 脚本也会对应延时10秒
zm.ShowMessage({"1.先打开app", "2.点击登录", "3.输入帐号密码", "4.点击确定"}, 10*1000)
备注: V3.1902: 初次加入命令
命令名称: zm.Swipe 超级划动
功能说明: 快速精准无惯性的模拟划动操作,可切换模式支持网页划动。
语法格式: 结果 = zm.Swipe(横坐标x1, 纵坐标y1, 横坐标x2, 纵坐标y2[, 划动耗时[, 轨迹次数]][, 按住时间][, 模式][, 禁用轨迹])
命令参数: 横坐标x1: 数值型, 划动的起点x坐标
横坐标y1: 数值型, 划动的起点y坐标
横坐标x2: 数值型, 划动的终点x坐标
横坐标y2: 数值型, 划动的终点y坐标
划动耗时: 数值型, 可选,划动花费的时间,单位毫秒,省略默认为100毫秒
轨迹次数: 数值型, 可选,划动轨迹多少次, 省略默认为10, 若填写轨迹次数参数, 则前面必须写耗时参数
按住时间: 数值型, 可选, 第一点按住不放一段时间后再移动, 格式为小于-50的负数, 例如-500表示按住500毫秒, 省略默认为-50
模式: 数值型, 可选,-1为普通模拟,-2为硬件模拟,-3为翻页模拟, -4为空格翻页, -5为导航移动, 当普通模式无法划动时,可以试下切换至其他模式,省略默认为-1
禁用轨迹: 布尔型, 可选,是否模拟真实带轨迹移动, 对翻页模式无效, 省略默认为false表示禁用, 启用后耗时参数将会失效
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//用时500毫秒,从坐标100,500精准划动到坐标100,200
zm.Swipe 100, 500, 100, 200, 500

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下硬件模拟。
zm.Swipe 100, 500, 100, 200, 500, -2

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下翻页模拟。
zm.Swipe 100, 500, 100, 200, -3

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下空格翻页模拟。
zm.Swipe 100, 500, 100, 200, -4

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下导航移动模拟。
zm.Swipe 100, 500, 100, 200, -5

//遇到滑块验证等检测轨迹操作时, 可以开启轨迹功能
zm.Swipe 100, 200, 400, 200, true
备注: swipe 相比,本命令加入了无惯性与硬件模拟特点,可以实现精准定位划动,并且支持特殊页面与模拟真实轨迹操作。
一般情况下推荐使用普通模拟划动,除非普通模拟失效了,才考虑使用硬件模拟或翻页模拟。
滑块验证等操作推荐开启轨迹功能。
V1.1722: 插件加入本命令
V1.1730: 修复报错问题
V1.1750: 加入翻页模拟模式
V1.1816: 加入轨迹参数
V1.1821: 提高过滑块验证的准确率, 感谢`.`提供测试
V2.1826: 加入轨迹次数参数
V3.1835: 加入按住时间参数, 移动轨迹支持随机抖动
v3.1852: 加入空格翻页与导航移动模式
命令名称: zm.SwipeEx 多次划动
功能说明: zm.swipe 类似, 区别在于本命令支持指定多个坐标划动
语法格式: 结果 = zm.SwipeEx([xy, …][, 划动耗时[, 轨迹次数]][, 按住时间][, 模式][, 禁用轨迹])
命令参数: xy: table, 要划动经过的坐标点, 支持多个坐标参数, 格式为{x, y}, 详见例子
划动耗时: 数值型, 可选, 每个划动花费的时间, 单位毫秒, 省略默认为100毫秒
轨迹次数: 数值型, 可选, 每个划动轨迹多少次, 省略默认为10, 若填写轨迹次数参数, 则前面必须写耗时参数
按住时间: 数值型, 可选, 第一点按住不放一段时间后再移动, 格式为小于-50的负数, 例如-500表示按住500毫秒, 省略默认为-50
模式: 数值型, 可选, -1为普通模拟,-2为硬件模拟, 当普通模式无法划动时, 可以试下切换至硬件模拟, 省略默认为-1
禁用轨迹: 布尔型, 可选, 是否模拟真实带轨迹移动, 省略默认为false表示禁用
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//以真实轨迹从10,600划动到10,700到200,500到300,800
zm.SwipeEx {10, 600}, {10, 700}, {200, 500}, {300, 800}, True
备注: V3.1835: 初次加入
命令名称: zm.Tap 超级点击
功能说明: tap 更加强大的命令, 具体特色如下

– 担心被行为检测导致封号? 多种随机模式搭配防检测
– 每次点击后加延时命令麻烦? 直接把延时写到点击中
– 分割坐标字符串麻烦? 可以直接传入格式为”x,y”的坐标字符串参数
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 省略参数的默认值不理想? 可使用 zm.settap 来自定义修改

语法格式: 结果 = zm.Tap([对象,][坐标字符串][,x, y][, rx, ry][, 延时毫秒][, 禁用随机][, 显示日志][, 输出行号][, 备注])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
坐标字符串: 字符串, 可选, 与下面的x,y参数二选一填写, 坐标格式为`”x,y”`, 省略默认为`null`
x: 数值型, 可选, 要点击的x坐标, 填写对象参数后可省略
y: 数值型, 可选, 要点击的y坐标, 填写对象参数后可省略
rx: 数值型, 可选, 从x到rx范围中随机获取一个数作为横坐标x
ry: 数值型, 可选, 从y到ry范围中随机获取一个数作为纵坐标y
延时毫秒: 数值型, 可选, 点击后延时时间, 单位毫秒
禁用随机: 布尔型, 可选, 填写`true`时禁用任何随机功能, 填写`false`表示不禁用, 省略默认为`false`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
返回值: 表: 返回实际点击的坐标与延时表, 格式为{x,y,t,”x”:x,”y”:y,”t”:t}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//点击固定坐标100,200
zm.Tap 100, 200

//点击固定坐标100,200后延时3000毫秒
zm.Tap 100, 200, 3000

//点击字符串坐标100,200后, 延时300毫秒
zm.Tap "100,200", 300

//在范围100,200,150,250内随机点击某个点, 并显示输出
zm.Tap 100, 200, 150, 250, "show"

//在范围100,200,150,250内随机点击某个点后延时4000毫秒
zm.Tap 100, 200, 150, 250, 4000

//设置固定坐标x浮动范围[-10,15], 固定坐标y浮动范围[-5,20], 点击后默认延时2000毫秒
zm.SetTap {"minx":-10, "maxx":15, "miny":-5, "maxy":20, "t":2000}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后默认延时2000毫秒
zm.Tap 100, 200

//在范围100,200,150,250内随机点击某个点并默认延时2000毫秒, 不受默认浮动范围影响
Dim t = zm.Tap(100, 200, 150, 250)
//查看实际点击坐标
TracePrint zm.VarInfo(t)

//设置按下与弹起之间的时间间隔为10到30毫秒, 默认日志输出为显示
zm.SetTap {"mintouch":10, "maxtouch":30, "showlog":"显示"}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后延时3000毫秒
zm.Tap 100, 200, 3000, "@测试点击"
备注: V1.1802: 加入命令
V1.1816: 支持字符串参数坐标
V2.1829: 点击坐标无效时, 延时不生效
命令名称: zm.TracePrint 超级调试输出
功能说明: 调试输出加强版命令,支持输出数据类型、长度、数组、表。
语法格式: 结果 = zm.TracePrint(…)
命令参数: 行号: 字符串, 可选参数, 调试显示第几行代码, 格式为`”_行号”`, 例如`”_10″`表示第10行代码
参数: 任意类型, 要输出的内容,支持多个参数。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {1,2,3,4,5}
//如果第一个参数是下划线+行号的字符串,则显示当前脚本第几行。
//支持直接输出表或数组、支持多维数组。
zm.TracePrint "_5", a
//如果第一个参数不是下划线的,则不显示第几行
zm.TracePrint "紫猫"
//输出多个参数也可分别显示每个参数的数据类型、长度、值
zm.TracePrint "_9", "紫猫", "学院", 345911220, a
//也可以使用zm.VarInfo实现类似效果
TracePrint zm.VarInfo(a, "紫猫", null, 345911220)
备注: 由于行号参数过于麻烦,故推荐使用自带输出命令TracePrint配合 zm.varinfo 命令使用。
支持嵌套表或者多维数组的直接输出,格式是由中括号与大括号组成的。
V1.1720: 插件加入本命令。
V1.1722: 加入显示长度与第几行功能。
V1.1723: 支持嵌套表与多维数组,支持多参数显示信息。
命令名称: zm.BGRToColor 合成BGR颜色
功能说明: 合成三个BGR颜色分量到十六进制BGR字符串中
语法格式: 结果 = zm.BGRToColor(b, g, r)
命令参数: b: 数值型或字符串, 蓝色分量,数值型时表示十进制,字符串时表示十六进制。
g: 数值型或字符串, 绿色分量,数值型时表示十进制,字符串时表示十六进制。
r: 数值型或字符串, 红色分量,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:合成后的BGR格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.BGRToColor(10,20,30)
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.BGRToRGB BGR转RGB
功能说明: BGR格式颜色转换成RGB格式颜色
语法格式: 结果 = zm.BGRToRGB(bgr)
命令参数: bgr: 数值型或字符串, BGR格式的颜色,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:返回转换后的RGB格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.BGRToRGB("FF00AA")
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.ColorSim 计算颜色相似度
功能说明: 获取两个颜色之间的相似度, 注意两个参数颜色格式必须一致, 可能与按键自带的相似度算法不同
语法格式: 结果 = zm.ColorSim(颜色1, 颜色2)
命令参数: 颜色1: 字符串_或_数值型_或_table, BGR或RGB颜色, 字符串时表示十六进制, 数值时表示十进制, table时格式为{r, g, b}
颜色2: 字符串_或_数值型_或_table, BGR或RGB颜色, 字符串时表示十六进制, 数值时表示十进制, table时格式为{r, g, b}
返回值: 数值型: 返回两个颜色的相似度小数, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.ColorSim("FFFFFF", "000000")
TracePrint zm.ColorSim("FFFFFF", "FFFFFF")
TracePrint zm.ColorSim("FFFFFF", "EEEEEE")
备注: 可能与按键图色的相似度算法不同
V3.1832: 加入命令
命令名称: zm.ColorToHSV 分解HSV颜色
功能说明: 分解HSV颜色至H、S、V三个分量中。
语法格式: 结果 = zm.ColorToHSV(HSV[, 返回表])
命令参数: HSV: 字符串, HSV颜色,格式为“H.S.V”。
返回表: table, 可选参数,返回分解保存的表。
返回值: table:返回分解后的结果,可以通过键名h、s、v查看,也可以通过下标0、1、2查看。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.ColorToHSV("100.20.30")
TracePrint t(0), t(1), t(2)
TracePrint t["h"], t["s"], t["v"]
备注: V1.1720: 加入命令
V1.1813: 修复H结果未取整数问题, 感谢`学员2123`反馈
命令名称: zm.ColorToRGB 分解RGB颜色
功能说明: 分解RGB颜色至R、G、B三个分量中。
语法格式: 结果 = zm.ColorToRGB(RGB[, 返回表])
命令参数: RGB: 字符串或数值型, RGB颜色,字符串时为十六进制,数值时为十进制。
返回表: table, 可选参数,返回分解保存的表。
返回值: table:返回分解后的结果,可以通过键名r、g、b查看,也可以通过下标0、1、2查看。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.ColorToRGB("11BBDD")
TracePrint t(0), t(1), t(2)
TracePrint t["r"], t["g"], t["b"]
备注: V1.1720: 加入命令
命令名称: zm.GetPicSize 获取图片宽高
功能说明: 获取一张图片的宽度和高度, 支持PNG, BMP, GIF这3种图片格式, 支持附件路径
语法格式: 结果 = zm.GetPicSize(图片路径)
命令参数: 图片路径: 字符串, 图片的所在路径, 支持附件
返回值: table: 成功返回格式{宽度, 高度, “w”:宽度, “h”:高度, “type”:图片类型}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 图片宽高 = zm.GetPicSize("Attachment:紫猫.png") //也可以写本地路径
If 图片宽高 Then
  TracePrint "第1种写法: 宽度=", 图片宽高(0), ", 高度=", 图片宽高(1)
  TracePrint "第2种写法: 宽度=", 图片宽高["w"], ", 高度=", 图片宽高["h"]
Else
  TracePrint "获取失败"
End If
备注: V3.1831: 加入命令
命令名称: zm.HSVToRGB HSV转RGB
功能说明: 将HSV颜色转换成RGB颜色。
语法格式: 结果 = zm.HSVToRGB(HSV[, 是否BGR])
命令参数: HSV: 字符串, HSV颜色,格式为“H.S.V”。
是否BGR: 布尔型, 可选, true表示返回BGR颜色, false表示返回RGB颜色, 省略默认为false
返回值: 字符串:返回十六进制的颜色,格式由参数2决定。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HSVToRGB("100.10.20")
备注: V1.1720: 加入命令
命令名称: zm.IsDisplayDead 是否卡屏
功能说明: 获取指定范围时间内是否出现卡屏, 画面不变化的情况, 如果画面有变化则立即返回
语法格式: 结果 = zm.IsDisplayDead(x1, y1, x2, y2, 时长[, 相似度][, 判断间隔])
命令参数: x1: 数值型, 卡屏判断范围左上角x坐标
y1: 数值型, 卡屏判断范围左上角y坐标
x2: 数值型, 卡屏判断范围右下角x坐标
y2: 数值型, 卡屏判断范围右下角y坐标
时长: 数值型, 限时判断时长, 单位毫秒
相似度: 数值型, 可选, 画面变化相似度, 省略默认为`0.8`
判断间隔: 数值型, 可选, 每次对比判断的间隔毫秒, 必须大于1, 省略默认为`10`
判断模式: 数值型, 可选, 如果判断不准确, 可以更换模式, -1为快速模式, -2为精准模式, 省略默认为`-1`
返回值: 布尔型: 画面有变化则立即返回false, 画面一直没有变化则返回true, 出错返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//在5秒内判断屏幕100,100,200,200范围是否卡屏
Dim isDead = zm.IsDisplayDead(100,100,200,200,5000)
If isDead Then
    TracePrint "出现卡屏了"
Else
    TracePrint "没有卡屏"
End If
备注: V3.1832: 加入命令
V3.1837: 加入判断间隔时间参数, 降低CPU占用
V3.1849: 支持超级缩放
V3.1852: 加入了精准模式功能
命令名称: zm.RGBToBGR RGB转BGR
功能说明: RGB格式颜色转换成BGR格式颜色
语法格式: 结果 = zm.RGBToBGR(RGB)
命令参数: RGB: 数值型或字符串, RGB格式的颜色,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:返回转换后的BGR格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.RGBToBGR("FF00AA")
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.RGBToColor 合成RGB颜色
功能说明: 合成三个RGB颜色分量到十六进制RGB字符串中
语法格式: 结果 = zm.RGBToColor(r, g, b)
命令参数: r: 数值型或字符串, 红色分量,数值型时表示十进制,字符串时表示十六进制。
g: 数值型或字符串, 绿色分量,数值型时表示十进制,字符串时表示十六进制。
b: 数值型或字符串, 蓝色分量,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:合成后的RGB格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.RGBToColor(10,20,30)
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.RGBToHSV RGB转HSV
功能说明: 将RGB颜色转换成HSV颜色。
语法格式: 结果 = zm.RGBToHSV(RGB[, 是否BGR])
命令参数: RGB: 字符串或数值型, RGB颜色,字符串时是十六进制,数值时是十进制。
是否BGR: 布尔型, 可选, true表示参数1格式为BGR颜色, false表示参数1为RGB颜色, 省略默认为false
返回值: 字符串:返回“H.S.V”格式的颜色。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RGBToHSV("102030")
备注: V1.1720: 加入命令
命令名称: zm.CheckForUpdates 检查插件更新
功能说明: 检查紫猫插件是否有新版,并输出显示。
语法格式: 结果 = zm.CheckForUpdates()
命令参数:
返回值: 布尔型:未发现新版返回false,发现新版或检查失败返回true。
脚本例子:
复制代码
$lizi
备注:
命令名称: zm.CollectGarbage 清理脚本内存
功能说明: Lua的垃圾回收机制接口, 原型是collectgarbage()函数, 可通过第一个参数实现不同的操作, 默认为释放脚本内存功能
语法格式: 结果 = zm.CollectGarbage([操作类型[, 附加参数]])
命令参数: 操作类型: 字符串, 可选, 省略默认为执行一个完整的垃圾回收周期, 详细请百度搜索`lua collectgarbage`
附加参数: 字符串, 可选, 改变回收步骤周期等, 详细请百度搜索`lua collectgarbage`
返回值: 数值型: 返回执行结果, 由参数1决定返回内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint "当前脚本占用内存", zm.GetScriptMemory(), "kb"

Dim a = {"紫猫", "学院", "https://zimaoxy.com"}
TracePrint "创建数组后占用内存", zm.GetScriptMemory(), "kb"

a = Null
TracePrint "删除数组后占用内存", zm.GetScriptMemory(), "kb"

zm.CollectGarbage()

TracePrint "执行清理内存后占用内存", zm.GetScriptMemory(), "kb"
备注: 不建议频繁调用, 会降低脚本执行效率, 一般在加载大型资源前调用一次, 例如读取很大的一个文件之类的
V3.1852: 初次加入命令
命令名称: zm.Execute 执行shell命令
功能说明: 执行shell命令,原理是使用Lua的`os.execute()`内部函数实现。
语法格式: 结果 = zm.Execute(shell命令)
命令参数: shell命令: 字符串, 任意有效的shell命令字符串。
返回值: 字符串:返回shell命令输出结果。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//获取所有已装应用列表
TracePrint zm.Execute("ls /data/data")
备注: 该命令非常强大,请谨慎使用,更多shell命令请百度搜索`Andriod Shell`。
V1.1730: 初次加入。
命令名称: zm.GetLuaVersion 获取Lua版本
功能说明: 获取当前lua环境版本。
语法格式: 结果 = zm.GetLuaVersion()
命令参数:
返回值: 字符串:返回当前lua的版本。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetLuaVersion()
备注: V1.1720: 插件加入本命令。
命令名称: zm.GetScriptMemory 获取脚本占用内存
功能说明: 获取当前脚本所占用的内存, 单位kb
语法格式: 结果 = zm.GetScriptMemory()
命令参数:
返回值: 数值型: 返回当前脚本所占内存容量大小, 单位kb
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetScriptMemory()        //返回当前内存大小
备注: V3.1852: 初次加入命令
命令名称: zm.GetVersion 获取插件版本
功能说明: 获取当前紫猫插件版本。
语法格式: 结果 = zm.GetVersion()
命令参数:
返回值: 字符串:返回当前紫猫插件的版本号。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetVersion()
备注: V1.1720: 插件加入本命令。
命令名称: zm.OpenURL 打开网页
功能说明: 使用默认浏览器打开网页, 支持网址包含&字符, 支持IOS
语法格式: 结果 = zm.OpenURL(网址)
命令参数: 网址: 字符串, 待打开的网址
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.OpenURL "zimao.vip" //访问紫猫学院官网
备注: V1.1802: 加入命令
V2.1829: 函数名由 `zm.OpenWeb()`改为`zm.OpenURL`, 并支持IOS
V3.1852: 解决网址不支持`%`字符的问题
命令名称: zm.Type 获取数据类型
功能说明: 获取参数的数据类型。
语法格式: 结果 = zm.Type(数据)
命令参数: 数据: 任意类型, 等待获取数据类型的参数。
返回值: 字符串:返回以下几种可能值: “null”(一个字符串,而不是 null 值), “number”, “string”, “boolean”, “table”, “function”, “thread”, “userdata”。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.Type(null)
TracePrint zm.Type(345911220)
TracePrint zm.Type("紫猫")
TracePrint zm.Type({1,2,3})
TracePrint zm.Type(true)
备注: 如果你要判断是否可以转为数值类型,请使用 isnumeric
V1.1723: 初次加入
命令名称: zm.VarInfo 获取参数信息
功能说明: 获取所有参数的数据类型、长度、值,通常配合按键自带的TracePrint命令调试输出使用,除了普通变量输出外,还支持数组与表的直接输出。
语法格式: 结果 = zm.VarInfo(…)
命令参数: 参数: 任意类型, 要获取信息的参数,支持多个参数。
返回值: 字符串:返回每个参数信息合成的字符串,格式如下“【数据类型 长度】值,【数据类型 长度】值…”。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫":345911220,"学院":{"正在", "招生中"},"欢迎加入"}
Dim b = "123", c = 123, d = true, e
TracePrint zm.VarInfo(a,b,c,d,e)
备注: zm.traceprint 相比,缺少了调试输出功能,但是可以直接使用TracePrint命令输出更加灵活。
V1.1723: 初次加入
V2.1826: 优化返回字符串长度, 最长255, 以保证`TracePrint()`函数能正常输出显示信息
命令名称: zm.ThreadStatus 获取线程状态
功能说明: 获取多线程的状态,例如运行中,被取消了等等。
语法格式: 结果 = zm.ThreadStatus(线程ID)
命令参数: 线程ID: userdata, 启动线程后的返回值。
返回值: 字符串:有以下几种值

返回 | 解释
—|—
pending | 未启动
running | 正在运行中
done | 正常结束了
waiting | 等待
cancelled | 被强制终止了
error | 出错了

脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ThreadID
ThreadID = Thread.Start(threadA)
For 3
    TracePrint zm.ThreadStatus(ThreadID)
    Delay 1000
Next
Thread.Stop ThreadID
For 3
    TracePrint zm.ThreadStatus(ThreadID)
    Delay 1000
Next

Sub threadA()
    For 5
        TracePrint "执行多线程中..."
        Delay 1000
    Next
End Sub
备注: V1.1724: 初次加入
命令名称: zm.ThreadWait 等待线程
功能说明: 暂停当前线程,等待指定线程执行完毕或超时,与 thread.wait 相比多了超时参数。
语法格式: 结果 = zm.ThreadWait(线程ID[, 超时时间])
命令参数: 线程ID: userdata, 启动线程后的返回值。
超时时间: 数值型, 可选,等待超时时间,单位毫秒,省略默认为null,表示不限时。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ThreadID
ThreadID = Thread.Start(threadA)
zm.ThreadWait ThreadID, 2
For 3
    TracePrint zm.ThreadStatus(ThreadID)
    Delay 1000
Next

Sub threadA()
    For 5
        TracePrint "执行多线程中..."
        Delay 1000
    Next
End Sub
备注: V1.1738: 加入命令
命令名称: zm.SQLiteAddField 追加SQLite3字段
功能说明: 追加SQLite3数据表的字段名
语法格式: 结果 = zm.SQLiteAddField(数据库路径, 表名, 字段名)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
表名: 字符串, 要创建的数据表名
字段名: 表, 要追加的字段名,后面可跟数据类型,例如{“id INTEGER”}, 暂时只支持一次添加一个字段
返回值: 布尔值:成功返回true,失败返回false
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteCreateTbl(GetSdcardDir() & "/zimao.db", "student", {"id INTEGER","name TEXT"})
TracePrint ret

ret = zm.SQLiteAddField(GetSdcardDir() & "/zimao.db", "student", {"age INTEGER"})
TracePrint ret
备注: 若数据库不存在或字段名已存在, 则返回false
V1.1745: 加入命令
命令名称: zm.SQLiteCreateTbl 创建SQLite3数据表
功能说明: 创建SQLite3数据库的数据表,若数据库文件不存在,则自动创建。
语法格式: 结果 = zm.SQLiteCreateTbl(数据库路径, 表名, 字段名)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
表名: 字符串, 要创建的数据表名
字段名: 表, 要创建的字段名,后面可跟数据类型,例如{“id INTEGER”,”name TEXT”}
返回值: 布尔值:成功返回true,失败返回false
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteCreateTbl(GetSdcardDir() & "/zimao.db", "student", {"id INTEGER","name TEXT"})
TracePrint ret
备注: V1.1738: 加入命令
命令名称: zm.SQLiteDropTbl 删除SQLite3数据表
功能说明: 删除SQLite3数据库的数据表。
语法格式: 结果 = zm.SQLiteDropTbl(数据库路径, 表名)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
表名: 字符串, 要删除的数据表名
返回值: 布尔值:成功返回true,失败返回false
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteDropTbl(GetSdcardDir() & "/zimao.db", "student")
TracePrint ret
备注: V1.1738: 加入命令
命令名称: zm.ArrayInsert 插入数组元素
功能说明: 在一维数组的指定位置插入元素。
语法格式: 数组 = zm.ArrayInsert(一维数组, 待插入值[, 下标位置[, 是否传值调用]])
命令参数: 一维数组: 数组型, 原一维数组。
待插入值: 任意类型, 待插入到数组中的值。
下标位置: 数值型, 可选参数,表示插入的下标位置,省略默认为追加到数组末尾。
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回插入元素后的一维数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫", "学院"}
zm.ArrayInsert a, "编程", 1
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
V1.1720: 加入命令
V1.1739: 加入传值调用参数
命令名称: zm.ArrayRemove 删除数组元素
功能说明: 移除一维数组的某个下标元素。
语法格式: 数组 = zm.ArrayRemove(一维数组, 下标位置[, 是否传值调用])
命令参数: 一维数组: 数组型, 原一维数组。
下标位置: 数值型, 要删除元素的下标位置
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回删除指定元素后的数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫", "编程", "学院"}
zm.ArrayRemove a, 1
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
V1.1720: 加入命令
V1.1739: 加入传值调用参数
命令名称: zm.ArrayRemoveDuplicate 数组去重
功能说明: 删除一维数组中的重复成员值
语法格式: 数组 = zm.ArrayRemoveDuplicate(一维数组[, 是否忽略大小写[, 是否传值调用]])
命令参数: 一维数组: 数组型, 原一维数组。
是否忽略大小写: 布尔型, 可选参数,true为忽略大小写,false为不忽略大小写,省略默认为false。
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回删除重复成员后的数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫", "编程", "学院", "紫猫", 2, 0, 1, 2}
zm.ArrayRemoveDuplicate a
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
V1.1750: 加入命令
V1.1803: 去重后顺序不变
命令名称: zm.ArrayReplace 替换数组元素
功能说明: 替换一维数组中的指定元素内容, 错误返回null
语法格式: 结果 = zm.ArrayReplace(一维数组, 查找内容, 替换内容[, 是否模糊搜索[, 是否忽略大小写[, 替换数量]]])
命令参数: 一维数组: 数组型, 被查找的一维数组。
查找内容: 任意类型, 要查找的内容,请注意数据类型。
替换内容: 任意类型, 替换后内容,请注意数据类型。
是否模糊搜索: 布尔型, 可选参数,true为模糊匹配搜索,false为完整匹配搜索,省略默认为false。
是否忽略大小写: 布尔型, 可选参数,true为忽略大小写,false为不忽略大小写,省略默认为false。
替换数量: 数值型, 可选参数,-1为全部替换, 其他为替换次数, 省略默认为-1。
返回值: 数组型:返回替换后的数组。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {"紫猫", "老师", "QQ是多少"}
Dim tt = zm.ArrayReplace(t, "QQ", "345911220", true)

For i = 0 To UBOUND(tt)
	TracePrint tt(i)
Next
备注: V1.1820: 加入命令
命令名称: zm.ArraySearch 搜索数组元素
功能说明: 搜索一维数组的成员下标,根据返回个数参数的值决定返回内容。
语法格式: 结果 = zm.ArraySearch(一维数组, 搜索内容[, 是否模糊搜索[, 是否忽略大小写[, 返回个数]]])
命令参数: 一维数组: 数组型, 被查找的一维数组。
搜索内容: 任意类型, 要查找的内容,请注意数据类型。
是否模糊搜索: 布尔型, 可选参数,true为模糊匹配搜索,false为完整匹配搜索,省略默认为false。
是否忽略大小写: 布尔型, 可选参数,true为忽略大小写,false为不忽略大小写,省略默认为false。
返回个数: 数值型, 可选参数,null为返回第一个下标,0为返回所有下标数组,其他数值为返回该个数下标数组,省略默认为null。
返回值: 返回个数参数 | 返回值数据类型 | 返回值解释
——-|———|——
null | 数值型 | 返回找到的第一个下标,没找到返回-1
0 | 数值型数组 | 返回找到的所有下标,没找到返回长度-1的数组
其他大于0的数值 | 数值型数组 | 返回找到的指定个数下标数组,没找到返回长度-1的数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"Hello", "紫猫", "编程", "学院", "Hello"}

Dim index = zm.ArraySearch(a, "编程")
TracePrint index '返回数值2

index = zm.ArraySearch(a, "he", true)
TracePrint index '返回数值-1

index = zm.ArraySearch(a, "he", true, true)
TracePrint index '返回数值0

Dim iArr = zm.ArraySearch(a, "He", true, true, 0)
TracePrint zm.VarInfo(iArr) '返回数值型数组{0, 4}
备注: 目前仅支持一维数组。
V1.1720: 加入命令
命令名称: zm.ArraySort 数组元素排序
功能说明: 对一维数组进行排序,数组元素的数据类型必须一致。
语法格式: 结果 = zm.ArraySort(一维数组[, 是否降序[, 是否转数值[, 是否传值调用]]])
命令参数: 一维数组: 数组型, 待排序的数组。
是否降序: 布尔型, 可选参数,是否按降序排序,省略默认为false。
是否转数值: 布尔型, 可选参数,是否将数组元素转换成数值型,省略默认为false。
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回排序后的数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {1, 0, 2, 4, 3, 8, 5, 9, 7, 6}

zm.ArraySort a
TracePrint zm.VarInfo(a)

zm.ArraySort a, true
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
如果转数值失败会出错。
V1.1720: 加入命令
V1.1739: 加入传值调用参数
命令名称: zm.Clone 超级克隆
功能说明: 除了可以克隆数组外,还可以克隆表(table),支持深层嵌套的表。
语法格式: 结果 = zm.Clone(原表)
命令参数: 原表: 数组或表, 准备被克隆的数组或者表。
返回值: 表:克隆后的独立数组或表。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 表a, 表b, 表c
//对表a进行赋值
表a = {"姓名":"紫猫", "职业":"教师", "QQ":345911220}

//使用等号将表a赋值给表b
表b = 表a

//使用zm.Clone将表a克隆给表c
表c = zm.Clone(表a)

//分别改变3个表的一个键值
表a["姓名"] = "紫猫学院"
表b["职业"] = "编程教学"
表c["QQ"] = "欢迎加入"

//输出3张表的键值
TracePrint "表a键值:", 表a["姓名"], 表a["职业"], 表a["QQ"]
TracePrint "表b键值:", 表b["姓名"], 表b["职业"], 表b["QQ"]
TracePrint "表c键值:", 表c["姓名"], 表c["职业"], 表c["QQ"]
备注: 只克隆数组或表的值,不复制地址,与 clone 相比,多了支持表的深层克隆。
V1.1722: 插件加入本命令
命令名称: zm.PosExclude 排除指定范围坐标
功能说明: 在二维坐标数组中排除指定范围的坐标, 支持圆形范围和矩形范围
语法格式: 结果 = zm.PosExclude(原坐标数组, x1, y1[, 半径或x2[, y2]])
命令参数: 原坐标数组: table, 等待处理的坐标数组, 格式为{ {x,y},{x,y},{xy},…}, 兼容超级图色里的返回找到所有坐标格式
x1: 数值型, 表示左上角x坐标或圆心x坐标
y1: 数值型, 表示左上角y坐标或圆心y坐标
半径或x2: 数值型, 可选, 当不填写参数y2时, 表示圆心范围的半径, 当填写参数y2时表示矩形右下角x坐标
y2: 数值型, 可选, 矩形右下角y坐标
返回值: 坐标数组, table: 得到排除后剩下的坐标
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//以圆形15,15, 半径10排除坐标, 最终得到{{30,40}}
Dim t1 = zm.PosExclude({{10,20},{30,40}}, 15, 15, 10)

//以范围5,5,25,25排除坐标, 最终得到{{30,40}}
Dim t2 = zm.PosExclude({{10,20},{30,40}}, 5, 5, 25, 25)
备注: 常用于超级图色返回所有坐标的结果处理
V2.1829: 加入命令
V3.1902: 修复返回不正确问题
命令名称: zm.PosInclude 获取包含范围坐标
功能说明: 在二维坐标数组中获取包含范围的坐标, 支持圆形范围和矩形范围
语法格式: 结果 = zm.PosInclude(原坐标数组, x1, y1[, 半径或x2[, y2]])
命令参数: 原坐标数组: table, 等待处理的坐标数组, 格式为{ {x,y},{x,y},{xy},…}, 兼容超级图色里的返回找到所有坐标格式
x1: 数值型, 表示左上角x坐标或圆心x坐标
y1: 数值型, 表示左上角y坐标或圆心y坐标
半径或x2: 数值型, 可选, 当不填写参数y2时, 表示圆心范围的半径, 当填写参数y2时表示矩形右下角x坐标
y2: 数值型, 可选, 矩形右下角y坐标
返回值: 坐标数组, table: 得到包含指定范围的坐标
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//以圆形15,15, 半径10获取坐标, 最终得到{{10,20}}
Dim t1 = zm.PosInclude({{10,20},{30,40}}, 15, 15, 10)

//以范围5,5,25,25获取坐标, 最终得到{{10,20}}
Dim t2 = zm.PosInclude({{10,20},{30,40}}, 5, 5, 25, 25)
备注: 常用于超级图色返回所有坐标的结果处理
V2.1829: 加入命令
V3.1902: 修复返回不正确问题
命令名称: zm.PosSort 坐标排序
功能说明: 对二维坐标数组按远近进行排序, 支持升序, 降序
语法格式: 结果 = zm.PosSort(坐标数组[, x, y][, 是否降序])
命令参数: 坐标数组: table, 等待排序的坐标数组, 格式为{ {x,y},{x,y},{xy},…}, 传址调用, 兼容超级图色里的返回找到所有坐标格式
x: 数值型, 可选, 表示用于比较远近的x坐标, 省略默认为0
y: 数值型, 可选, 表示用于比较远近的y坐标, 省略默认为0
是否降序: 布尔型, 可选, 填写true表示从远到近, 填写false表示从近到远, 省略为false
返回值: 坐标数组, table: 得到排序后的坐标数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//按照与坐标0,0的远近升序, 最终得到{{10,20},{30,25}}
Dim t1 = zm.PosSort({{30,25},{10,20}}) 

//按照与坐标0,0的远近降序, 最终得到{{30,25},{10,20}}
Dim t2 = zm.PosSort({{30,25},{10,20}}, true)

//按照与坐标15,15的远近升序, 最终得到{{10,20},{30,40}}
Dim t3 = zm.PosSort({{10,20},{30,40}}, 15, 15)
备注: 常用于超级图色返回所有坐标的结果处理
V2.1829: 加入命令
命令名称: zm.TableClear 清空表
功能说明: 将一个数组或者table表清空所有成员
语法格式: 结果 = zm.TableClear(表)
命令参数: 表: 表, 待清空的表
返回值: 表: 成功返回长度-1的表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {1, 2, "a":{3, 4}}
Dim tt = zm.TableClear(t)

TracePrint zm.VarInfo(t)
TracePrint zm.VarInfo(tt)
备注: V2.1826: 加入此命令, 注意参数属于传址引用
命令名称: zm.TableUnpack 数组解包
功能说明: 返回传入参数数组的所有元素, 原型是Lua中的table.unpack(), 目前手机版变量赋值只能接收一个元素, 但可选参数的函数命令可以接收多个元素, 详见示例
语法格式: 结果 = zm.TableUnpack([数组, …][, 起始[, 终止]])
命令参数: 数组: table, 待处理的数组, 支持传入多个数组
起始: table, 可选, 截取表的起始位置, 从1开始计算, 省略默认为1
终止: table, 可选, 截取表的终止位置, 从1开始计算, -1表示最后一个元素位置, 省略默认为-1
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {"a":"hello", 345911220, true, "紫猫"}
//数组tt只能接受第一个元素, 因为按键语法不支持多个变量返回值
Dim tt = zm.TableUnpack(t)
TracePrint tt

//可以打印输出所有返回值, 因为TracePrint支持多个可选参数
//没有显示键名a的元素, 因为只支持数组内容部分
TracePrint zm.TableUnpack(t)

//可以利用{}语法合并两个数组元素到新的数组中
Dim t1 = {1, 2, 3}
Dim newT = {zm.TableUnpack(t, t1)}
TracePrint zm.VarInfo(newT)

//可以解决超级多点找色或多点比色参数过长问题
Dim 颜色1 = {"0DD200","4|2|FFFFFF,3|7|211003,27|1|1592FF"}
Dim 颜色2 = {"123456","40|27|FFFFFF,31|5|211003"}

//下面这两句代码实现效果完全相同
zm.FindMultiColor zm.TableUnpack(颜色1, 颜色2), "显示"
zm.FindMultiColor "0DD200","4|2|FFFFFF,3|7|211003,27|1|1592FF","123456","40|27|FFFFFF,31|5|211003","显示"
备注: V3.1835: 初次加入
命令名称: zm.FileBytes 获取文件字节大小
功能说明: 获取文件的字节大小
语法格式: 结果 = zm.FileBytes(文件路径)
命令参数: 文件路径: 字符串, 要获取大小的文件路径
返回值: 数值型: 返回文件的字节(b)大小
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, "欢迎加入紫猫学院"

Dim b = zm.FileBytes(path)

TracePrint "文件字节大小为:", b
备注: 1pb=1024tb, 1tb=1024gb, 1gb=1024mb, 1mb=1024kb, 1kb=1024b
V1.1818: 加入命令
命令名称: zm.FileDeleteLine 删除指定行文本
功能说明: 在一个文本文件中删除指定一行内容, 支持倒数行数
语法格式: 结果 = zm.FileDeleteLine(文件路径, 指定行)
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示删除第几行内容, 负数为倒数第几行内容
返回值: 表: 返回删除后的文本数组, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院","紫猫老师QQ: 345911220", "学院官网: zimao.vip"}

Dim txts1 = zm.FileDeleteLine(path, 1)
TracePrint zm.VarInfo(txts1)

Dim txts2 = zm.FileDeleteLine(path, -1)
TracePrint zm.VarInfo(txts2)
备注: V1.1818: 加入命令
命令名称: zm.FileEncode 获取文件编码
功能说明: 获取一个文件的编码, 可以用于 zm.fileinit 等命令, 目前仅支持`UTF-8`和`中文编码`(兼容gb2312等)
语法格式: 结果 = zm.FileEncode(文件路径[, 是否设置编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
是否设置编码: 布尔型, 可选, 是否将获取的编码设置为File系列命令的默认编码, 省略默认false
返回值: 字符串: 成功返回`”utf-8″`或`”gb18030″`, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim code = zm.FileEncode("/sdcard/测试编码文件.txt", True)
If code Then
  TracePrint "得到并设置文件编码为: ", code
Else
  TracePrint "获取编码失败"
End If
备注: 本命令目前仅支持`中文`和`utf-8`两种编码, 脚本只关心读取结果不出现乱码, 不在乎正确编码
V3.1832: 加入命令
V3.1837: 由`zm.FileGetEncode()`改名为`zm.FileEncode()`, 且加入是否设置编码可选参数
命令名称: zm.FileInit 初始化设置File参数
功能说明: 初始化设置File系列命令的默认参数内容, 对绝大多数File系列命令有效
语法格式: 结果 = zm.FileInit(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如填写`{“encode”:”电脑”}`可解决电脑文件乱码问题, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
encode | “utf-8” | 字符串 | 文件编码, 填写`{“encode”:”电脑”}`可解决电脑文件乱码问题
replacepath | {“^/storage/emulated/0/”:”/sdcard/”} | 表 | 解决路径无权限问题, 替换指定路径

返回值: 表: 返回设置成功后的默认参数表
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.FileInit {"encode":"电脑"}

//在电脑上新建文件, 写入几个中文内容后, 传入设备中读取
Dim path = "/sdcard/紫猫学院电脑文件.txt"

zm.FileWriteAppend path, "\r\n", "听说写入电脑文件的内容会乱码?"

Dim txt = zm.FileRead(path)

TracePrint "不会乱码的内容如下:", txt
备注: 命令原理是内部对字符进行了转码, 电脑对应的是gb18030, 如果你的文件是其他编码格式的, 可以自行填写对应编码
V1.1818: 加入命令
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
V3.1852: 加入 `replacepath:{“^/storage/emulated/0/”:”/sdcard/”}` 属性, 解决部分路径无权限问题
命令名称: zm.FileLinesNumber 获取文件总行数
功能说明: 获取文本文件的总行数
语法格式: 结果 = zm.FileLinesNumber(文件路径)
命令参数: 文件路径: 字符串, 要操作的文件路径
返回值: 数值型: 返回文本文件的总行数
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"第一行内容", "第二行内容", "第三行内容"}

Dim lines = zm.FileLinesNumber(path)

TracePrint "总行数:", lines
备注: V1.1818: 加入命令
命令名称: zm.FileRead 读取文本文件
功能说明: 读取文件所有内容, 支持设置文件编码
语法格式: 结果 = zm.FileRead(文件路径[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 字符串: 返回该文件的所有文本内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流QQ群: 7333555"}

Dim txt = zm.FileRead(path)

TracePrint "读取到的内容为:", txt

txt = zm.FileRead("/sdcard/电脑文件.txt", "电脑")

TracePrint "读取到的内容为:", txt
备注: 文件编码参数与 zm.fileinit 中的`”encode”:”utf-8″`参数相同
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReadBinary 读取二进制文件
功能说明: 以二进制读取文件内容
语法格式: 结果 = zm.FileReadBinary(文件路径)
命令参数: 文件路径: 字符串, 要操作的文件路径
返回值: 字符串: 返回读取到的二进制内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 读取路径 = "/sdcard/截图1.png"
Dim 写入路径 = "/sdcard/截图2.png"
SnapShot 读取路径

Dim bin = zm.FileReadBinary(读取路径)

zm.FileWriteBinary 写入路径, bin
备注: V1.1818: 加入命令
命令名称: zm.FileReadBinaryBase64 以Base64读取二进制文件
功能说明: 读取文件二进制内容, 并转为Base64编码, 受 zm.initbase64 影响, 失败返回null
语法格式: 结果 = zm.FileReadBinaryBase64(路径)
命令参数: 路径: 字符串, 要读取的文件路径
返回值: 字符串: 返回读取的Base64结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim b64 = zm.FileReadBinaryBase64("/sdcard/紫猫.png")

zm.FileWriteBinaryBase64("/sdcard/新紫猫.png", b64)
备注: V1.1745: 加入命令
V1.1818: `zm.ReadFileBase64()` 改为 `zm.FileReadBinaryBase64()`
命令名称: zm.FileReadForm 读取文本文件表格
功能说明: 按指定分隔符读取文件所有内容保存到二维数组中, 支持设置文件编码
语法格式: 结果 = zm.FileReadForm(文件路径, 分隔符[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
分隔符: 字符串_或_数值型, 字符串表示每行文本中的分隔符, 数值型表示按长度分隔
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 二维数组: 返回每一行被分隔后的二维数组文本
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"帐号1====密码1====大区1", "帐号2====密码2====大区2", "帐号3====密码3====大区3"}

Dim txts = zm.FileReadForm(path, "====")
TracePrint zm.VarInfo(txts)

For Each v In txts
	TracePrint v[1], v[2], v[3]
Next
备注: 参数分隔符与 zm.split 相同
若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReadLine 读取指定行文本
功能说明: 读取指定行文本内容, 支持倒数行数, 超出行数返回null, 支持设置文件编码
语法格式: 结果 = zm.FileReadLine(文本路径, 指定行[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示读取第几行内容, 负数为倒数第几行内容
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 字符串: 返回指定行的文本内容, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流QQ群: 7333555"}

Dim txt = zm.FileReadLine(path, 1)
TracePrint "读取到的内容为:", txt

txt = zm.FileReadLine(path, -1)
TracePrint "读取到的内容为:", txt

txt = zm.FileReadLine(path, 10)
TracePrint "读取到的内容为:", txt
备注: 读取超出最大行或最小行将会返回`null`
若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReadLines 读取文本数组
功能说明: 读取文件所有内容保存到一维数组中, 支持设置文件编码
语法格式: 结果 = zm.FileReadLines(文件路径[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 一维数组: 返回文件每一行内容保存到一维数组中
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流QQ群: 7333555"}

Dim txt = zm.FileReadLines(path)
For i = 0 To UBOUND(txt)
	TracePrint txt(i)
Next
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReplaceLine 替换指定行文本
功能说明: 替换指定行文本, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileReplaceLine(文件路径, 指定行, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示替换第几行内容, 负数为倒数第几行内容
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 返回替换后的每一行文本数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "QQ群号是多少?"}

Dim txts = zm.FileReplaceLine(path, -1, "免费交流群: 7333555")

TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileWrite 覆盖写入文本
功能说明: 覆盖写入文本内容到文件中, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileWrite(文件路径, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 成功返回文本数组, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, "欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"
TracePrint zm.VarInfo(zm.FileReadLines(path))

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}
TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
注意本命令是覆盖写入, 即会清空文件所有内容, 重新写入新的内容
V1.1818: 加入命令
命令名称: zm.FileWriteAppend 追加写入文本
功能说明: 追加写入文本内容到文件中, 写完自动换行, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileWriteAppend(文件路径, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 布尔值: 成功返回`true`, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

zm.FileWriteAppend path, "追加1"

zm.FileWriteAppend path, "追加2"

TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
注意本命令是追加写入, 即保留原内容, 在末尾追加新内容, 写完会自动换行
V1.1818: 加入命令
命令名称: zm.FileWriteBinary 写入二进制文件
功能说明: 覆盖写入二进制到文件中
语法格式: 结果 = zm.FileWriteBinary(文件路径, 二进制文本)
命令参数: 文件路径: 字符串, 要操作的文件路径
二进制文本: 字符串, 待写入的二进制内容
返回值: 布尔值: 成功返回true, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 读取路径 = "/sdcard/截图1.png"
Dim 写入路径 = "/sdcard/截图2.png"
SnapShot 读取路径

Dim bin = zm.FileReadBinary(读取路径)

zm.FileWriteBinary 写入路径, bin
备注: V1.1818: 加入命令
命令名称: zm.FileWriteBinaryBase64 覆盖写入Base64解密二进制
功能说明: 将内容进行Base64解密, 并以二进制写入文件中, 受 zm.initbase64 影响, 失败返回null
语法格式: 结果 = zm.FileWriteBinaryBase64(路径, Base64文本)
命令参数: 路径: 字符串, 要写入的文件路径
Base64文本: 字符串, 待解密的Base64文本内容
返回值: 布尔型: 返回是否成功, 出错返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim b64 = zm.FileReadBinaryBase64("/sdcard/紫猫.png")

zm.FileWriteBinaryBase64("/sdcard/新紫猫.png", b64)
备注: V1.1821: 加入命令
命令名称: zm.FileWriteLine 插入指定行文本
功能说明: 追加写入到指定行, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileWriteLine(文件路径, 指定行, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示插入第几行内容, 负数为倒数第几行, 0为末尾新增一行, 不能超出最大行
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 返回插入后的所有内容一维数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

zm.FileWriteLine path, 2, "好好学习, 天天向上"

TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
注意本命令是追加写入, 即保留原内容, 在指定行加入新内容, 原有内容向下移动
V1.1818: 加入命令
V3.1902: 修复插入第一行出错问题
命令名称: zm.RemoveLastTempFile 已失效
功能说明: 从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!

删除由 zm.tempfile 最近一次生成的临时文件

语法格式: 结果 = zm.RemoveLastTempFile()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim p = zm.TempFile()
TracePrint "临时文件路径:", p

File.Write p, "欢迎加入紫猫编程学院"
TracePrint "读取临时文件:", File.Read(p)

//删除上一次的临时文件
zm.RemoveLastTempFile
备注: 从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!

V1.1730: 初次加入。
V1.1813: 移除本命令, 请勿使用。

命令名称: zm.FileTemp 生成一个临时文件路径
功能说明: 随机生成一个不重复的临时文件路径名,当你执行写文件等保存文件操作后,才会真正生成文件。
语法格式: 结果 = zm.FileTemp([文件名])
命令参数: 文件名: 字符串, 可选, 指定文件名, 省略默认为随机文件名
返回值: 字符串:返回生成的路径,失败返回null。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim p = zm.FileTemp()
TracePrint "临时文件路径:", p

File.Write p, "欢迎加入紫猫编程学院"
TracePrint "读取临时文件:", File.Read(p)
备注: 该命令是生成路径名,并非真实文件,需要你对该路径执行保存文件之类的操作后才会真正出现文件。
V1.1720: 加入命令
V1.1818: `zm.TempFile()` 改为 `zm.FileTemp()`
命令名称: zm.LTrim 删除前导字符
功能说明: 从左边开始删除指定的字符,直到出现非指定字符为止。
语法格式: 结果 = zm.LTrim(原字符串[, 前导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
前导字符: 字符串, 可选,要删除的字符,省略默认为”\r\n \t”
返回值: 字符串:返回删除前导后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除左边的空格和a
Dim s = zm.LTrim("  abc abc", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.RegExMatch 正则匹配
功能说明: Lua的正则匹配(也叫模式匹配),获取匹配成功的结果并保存到数组中。
语法格式: 结果 = zm.RegExMatch(源字符串, 正则表达式[, 返回表])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,与Javascript或Perl等正则不同,详见 pattern-matching
返回表: 表, 可选参数, 只能填写数据类型为数组的变量, 匹配失败返回最大下标为-1的数组
返回值: 字符串数组:返回匹配成功的结果保存到数组中,失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret() //返回表参数, 可以省略该参数
Dim s = "紫猫老师QQ:345911220, Email:345911220@qq.com"
Dim data = zm.RegExMatch(s, "%d+", ret)
If data then
    For i = 0 to Ubound(data)
        TracePrint "返回结果: " & data(i)
    Next

    //若填写了返回表参数, 则可以取出结果
    For i = 0 to Ubound(ret)
        TracePrint "返回表: " & ret(i)
    Next
Else
    TracePrint "未匹配到数据"
End If
备注: 从1.1750起, 失败返回值由长度-1的数组改为null
V1.1738: 加入命令
V1.1739: 修复`.*`出现死循环的BUG
V1.1750: 失败返回null, 加入返回参数
命令名称: zm.RegExMatchEx 正则子匹配
功能说明: 捕获子匹配结果,并保存到二维数组中。
语法格式: 结果 = zm.RegExMatchEx(源字符串, 正则表达式[, 返回表])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,必须含有子匹配,与Javascript或Perl等正则不同,详见 pattern-matching
返回表: 表, 可选参数, 只能填写数据类型为数组的变量, 匹配失败返回最大下标为-1的数组
返回值: 字符串数组:返回捕获的子匹配结果保存到二维数组中,失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret()
Dim s = "紫猫老师QQ:345911220, Email:345911220@qq.com"
Dim data = zm.RegExMatchEx(s, "QQ:(%d+).-Email:(%w-@%w-%.%w+)", ret
If data then
    For Each v in data
        TracePrint "返回本轮匹配结果:"
        For Each vv in v
            TracePrint vv
        Next
    Next

    //若填写了返回表参数, 则可以取出结果
    For Each v in ret
        TracePrint "返回本轮表的结果:"
        For Each vv in v
            TracePrint vv
        Next
    Next
Else
    TracePrint "未捕获到数据"
End If
备注: 从1.1750起, 失败返回值由长度-1的数组改为null
V1.1738: 加入命令
V1.1739: 修复`.*`出现死循环的BUG
V1.1745: 修复无法获取多个匹配结果的问题
V1.1750: 失败返回null, 加入返回参数
命令名称: zm.RegExMatchExSingle 单个正则子匹配
功能说明: 根据序号捕获子匹配单个结果,若要所有结果请使用 zm.regexmatchex
语法格式: 结果 = zm.RegExMatchExSingle(源字符串, 正则表达式[, 序号])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,必须含有子匹配, 与Javascript或Perl等正则不同, 详见 pattern-matching
序号: 数值型, 可选参数, 返回首个指定序号的子匹配结果, 省略默认为1
返回值: 字符串: 成功返回捕获第一个指定序号的子匹配结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫老师QQ:345911220, Email:345911220@qq.com"
Dim data = zm.RegExMatchExSingle (s, "QQ:(%d+).-Email:(%w-@%w-%.%w+)")
TracePrint "捕获第1个子匹配结果", data

data = zm.RegExMatchExSingle (s, "QQ:(%d+).-Email:(%w-@%w-%.%w+)", 2)
TracePrint "捕获第2个子匹配结果", data
备注: V3.1849: 加入命令
命令名称: zm.RegExMatchSingle 单个正则匹配
功能说明: Lua的正则匹配(也叫模式匹配),获取匹配成功的指定结果,若要返回所有结果请使用 zm.regexmatch
语法格式: 结果 = zm.RegExMatchSingle(源字符串, 正则表达式[, 序号])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,与Javascript或Perl等正则不同,详见 pattern-matching
序号: 数值型, 可选参数, 返回首个指定序号的匹配结果, 省略默认为1
返回值: 字符串:返回匹配成功的指定序号结果,失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫老师QQ:345911220, 公开交流群:7333555"
Dim data
data = zm.RegExMatchSingle(s, "%d+")
TracePrint "第1个结果", data

data = zm.RegExMatchSingle(s, "%d+", 2)
TracePrint "第2个结果", data

data = zm.RegExMatchSingle(s, "%d+", 3)
TracePrint "第3个结果", data
备注: V3.1849: 加入命令
命令名称: zm.RegExReplace 正则替换
功能说明: 对源字符串进行模式匹配并替换内容。
语法格式: 结果 = zm.RegExReplace(源字符串, 正则表达式, 替换内容[, 替换次数])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式, 与Javascript或Perl等正则不同, 详见 pattern-matching
替换内容: 字符串或表, 字符串表示替换后的内容; table表示以匹配结果为键名, 从表中查找对应的键值替换
替换次数: 数值型, 可选, 匹配成功后替换的次数, 省略默认为null, 表示全替换
返回值: 字符串:返回模式匹配替换后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫老师QQ:12345"
Dim data = zm.RegExReplace(s, "%d+", "345911220")
TracePrint "替换后结果为:", data
```

```mq 例子2
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {"name":"紫猫", "QQ":345911220}
Dim s = "姓名:$name, QQ号:$QQ"
Dim data = zm.RegExReplace(s, "$(%w+)", t)
TracePrint "table替换后结果为:", data
备注: V1.1738: 加入命令
命令名称: zm.RTrim 删除后导字符
功能说明: 从右边开始删除指定的字符,直到出现非指定字符为止。
语法格式: 结果 = zm.RTrim(原字符串[, 后导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
后导字符: 字符串, 可选,要删除的字符,省略默认为”\r\n \t”
返回值: 字符串:返回删除后导字符后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除右边的空格和a
Dim s = zm.RTrim("  abc cba ", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.Split 超级分割
功能说明: 按指定分隔符或长度对原内容进行分割, 支持模式匹配, 返回分割后的一维数组。
语法格式: 结果 = zm.Split(原内容, 分隔符[, 模式匹配])
命令参数: 原内容: 字符串, 待分割的原字符串内容
分隔符: 字符串_或_数值型, 当字符串型时表示按此分隔符进行分割数组, 当数值型时表示按此长度进行分割数组
模式匹配: 布尔型, 可选, true表示开启模式匹配, 省略默认为false
返回值: 表: 返回分割后的一维数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//按字符串分割数组
Dim a = zm.Split("1,2,3,4,5", ",")
For i = 0 To UBOUND(a)
	TracePrint a(i)
Next

//按长度分割数组
Dim b = zm.Split("紫猫编程学院", 1)
For i = 0 To UBOUND(b)
	TracePrint b(i)
Next

//按模式匹配分割数组
Dim c = zm.Split("这234句话里45645646有605数字", "%d+", true)
For i = 0 To UBOUND(c)
	TracePrint c(i)
Next
备注: 匹配模式,与Javascript或Perl等正则不同,详见 pattern-matching
V1.1816: 加入命令
命令名称: zm.Trim 删除前后导字符
功能说明: 分别从左右两边开始删除指定的字符,每边直到出现非指定字符为止。
语法格式: 结果 = zm.Trim(原字符串[, 前后导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
前后导字符: 字符串, 可选,要删除的字符,省略默认为”\r\n \t”
返回值: 字符串:返回删除前后导字符后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除右边的空格和a
Dim s = zm.Trim("  abc cba ", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.GetNetworkTime 获取精准网络时间
功能说明: 内置淘宝, 苏宁, qq等多个获取网络时间接口, 优先获取毫秒级的淘宝时间接口
语法格式: 结果 = zm.GetNetworkTime([格式])
命令参数: 格式: 数值型_或_字符串, 可选, 表示返回的格式, 当数值型时, 0表示返回时间戳数值, 1表示返回”年-月-日 时:分:秒”, 2表示返回”年月日时分秒”,$n 当字符串时表示自定义格式化, 与DateTime.Format()的第一个参数格式相同, 省略默认为0
返回值: 数值型_或_字符串: 成功返回时间戳或格式化时间字符串, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.GetNetworkTime()
TracePrint "网络时间戳:", t
备注: getnetworktime 更加精准稳定快速
V3.1832: 加入命令
命令名称: zm.TimeAdd 时间计算
功能说明: 计算时间加减后的数值, 例如一天后的时间, 3年前的时间等, 数值单位由参数3决定
语法格式: 结果 = zm.TimeAdd([时间, ]数值[, 单位])
命令参数: 时间: 数值型_或_字符串, 可选, 待计算的时间, 字符串时支持”2017年7月23日 23:29:31″, “2017-07-23 23:29:38″等格式, 数值时表示时间戳, 省略默认为当前时间
数值: 数值型, 表示要加减的具体数值, 支持正负数
单位: 字符串, 可选, 表示数值的计算单位, 可填写[“年”, “月”, “日”, “天”, “时”, “分”, “秒”]或[“Y”, “m”, “d”, “H”, “M”, “S”], 省略默认为”秒”
返回值: 数值型: 返回加减计算后的时间戳结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//计算15天后的时间日期
TracePrint zm.TimeAdd("2019年8月3日 14:03:26", 15, "日")

//计算当前时间往后20个月的时间
TracePrint zm.TimeAdd(20, "月")
备注: 一个月约为30.4天, 一年为365天
V3.1832: 加入命令
命令名称: zm.TimeDiff 计算时间差
功能说明: 计算时间1减去时间2的时间差, 返回单位以第3个参数为准
语法格式: 结果 = zm.TimeDiff(时间1[, 时间2][, 单位][, 是否取整])
命令参数: 时间1: 数值型_或_字符串, 第1个时间, 字符串时支持”2017年7月23日 23:29:31″, “2017-07-23 23:29:38″等格式, 数值时表示时间戳
时间2: 数值型_或_字符串, 可选, 第2个时间, 字符串时支持”2017年7月23日 23:29:31″, “2017-07-23 23:29:38″等格式, 数值时表示时间戳, 省略默认为当前时间
单位: 字符串, 可选, 表示计算返回的时间单位, 可填写[“年”, “月”, “日”, “天”, “时”, “分”, “秒”]或[“Y”, “m”, “d”, “H”, “M”, “S”], 省略默认为”秒”
是否取整: 布尔型, 可选, 表示返回值是否只保留整数, 省略默认为false
返回值: 数值型: 成功返回两者时间差, 单位由参数3决定, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//计算参数1减去参数2, 返回单位秒数
TracePrint zm.TimeDiff("2019年8月3日 14:03:26", "2018-08-03 22:06:04")

//计算2018-12-01 00:00:00减去当前时间, 返回单位天数, 并取整
TracePrint zm.TimeDiff("2018-12-01", "日", true)
备注: 一个月约为30.4天, 一年为365天
V3.1832: 加入命令
命令名称: zm.Timestamp 转时间戳
功能说明: 将时间格式的字符串转换成时间戳,支持`2017年7月23日 23:29:31`,`2017-07-23 23:29:38`等格式。
语法格式: 结果 = zm.Timestamp([时间])
命令参数: 时间: 字符串, 可选, 任意有效时间格式的字符串, 支持`年-月-日 时:分:秒`等格式, 省略默认为当前时间
返回值: 数值型:返回Unix时间戳,即从1970年1月1日到指定时间的总秒数,失败返回0。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.Timestamp("2017-07-23 23:29:38")
备注: 只要格式是年月日时分秒的顺序,并且每个之间都有分隔字符,即可转换成时间戳。
V1.1730: 初次加入
V3.1832: 参数`时间`改为可选参数, 省略默认为当前时间
命令名称: zm.ConvBase 任意进制转换
功能说明: 2到62进制任意转换。
语法格式: 结果 = zm.ConvBase(原数值, 原进制, 目标进制)
命令参数: 原数值: 数值型或字符串, 待转换的原数值。
原进制: 数值型, 原来的进制,取值2至62。
目标进制: 数值型, 转换的目标进制,取值2至62。
返回值: 字符串:转换后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = zm.ConvBase(100, 2, 10)
TracePrint s '返回4

s = zm.ConvBase(100, 10, 16)
TracePrint s '返回64
备注: 支持2到62进制的任意类型转换,错误进制返回长度为0的字符串。
V1.1813: 加入命令
V2.1826: 为统一编码函数名字规范, 由`zm.BaseConver()`改为`zm.ConvBase()`
命令名称: zm.ConvCoding 转换任意编码
功能说明: 使用iconv进行编码转换, 常用于将gb2312的网页源码转换为utf8编码内容
语法格式: 结果 = zm.ConvCoding(转换内容, 原来编码, 目标编码)
命令参数: 转换内容: 字符串, 待转换的字符串内容
原来编码: 字符串, 转换前的编码, 常见有gb2312, gbk, utf-8等
目标编码: 字符串, 转换后的编码, 常见有gb2312, gbk, utf-8等
返回值: 字符串: 转换成功后的字符串内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//用电脑上的记事本写入一些中文内容后, 将该文件传到手机上测试
Dim 转码前内容 = File.Read("/sdcard/Pictures/文本.txt")
TracePrint 转码前内容
Dim 转码后内容 = zm.ConvCoding(转码前内容, "gb2312", "utf-8")
TracePrint 转码后内容
备注: V1.1813: 插件加入本命令。
命令名称: zm.ConvCP1252ToUTF8 CP1252转UTF8
功能说明: 将CP1252转为UTF8
语法格式: 结果 = zm.ConvCP1252ToUTF8(CP1252码)
命令参数: CP1252码: 字符串, 要转换的CP1252码
返回值: 字符串: 返回UTF8字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//ISO-8859-1里的欧元符号
Dim str1252 = "1\128"
TracePrint str1252
//以UTF8输出欧元符号
Dim strutf8 = zm.ConvCP1252ToUTF8(str1252)
TracePrint strutf8
//UTF8转为CP1252
Dim str1252_2 = zm.ConvUTF8ToCP1252(strutf8)
TracePrint str1252_2
备注: V1.1805: 加入命令
命令名称: zm.ConvUnicodeToUTF16 Unicode转UTF16
功能说明: 将Unicode字符串转为以`\uXXXX`表示的UTF16字符串, 常用于获取emoji代码
语法格式: 结果 = zm.ConvUnicodeToUTF16(unicode值)
命令参数: unicode值: 数值型或字符串, 要转换的Unicode值, 数值型表示十进制, 字符串型表示十六进制
返回值: 字符串: 返回以`\uXXXX`表示的UTF16字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.ConvUnicodeToUTF16("1F601") //显示\ud83d\ude01
TracePrint zm.ConvUnicodeToUTF16(128513) //显示\ud83d\ude01
TracePrint zm.ConvUnicodeToUTF16(&H1F601) //显示\ud83d\ude01
备注: emoji整理网址:
V1.1802: 加入命令
命令名称: zm.ConvUnicodeToUTF8 Unicode转UTF8
功能说明: 将Unicode转为UTF8
语法格式: 结果 = zm.ConvUnicodeToUTF8(unicode值)
命令参数: unicode值: 数值型或字符串, 要转换的Unicode值, 数值型表示十进制, 字符串型表示十六进制
返回值: 字符串: 返回UTF8字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 笑脸 = zm.ConvUnicodeToUTF8(&H1F601)
UI.NewLayout "layout1"
UI.AddTextView "layout1", "emoji", 笑脸
UI.Show "layout1"
TracePrint zm.ConvUTF8ToUnicode(笑脸)
备注: emoji整理网址:
V1.1805: 加入命令
命令名称: zm.ConvUTF8ToCP1252 UTF8转CP1252
功能说明: 将UTF8转为CP1252
语法格式: 结果 = zm.ConvUTF8ToCP1252(UTF8)
命令参数: UTF8: 字符串, 要转换的UTF8字符串
返回值: 字符串: 返回CP1252字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//ISO-8859-1里的欧元符号
Dim str1252 = "1\128"
TracePrint str1252
//以UTF8输出欧元符号
Dim strutf8 = zm.ConvCP1252ToUTF8(str1252)
TracePrint strutf8
//UTF8转为CP1252
Dim str1252_2 = zm.ConvUTF8ToCP1252(strutf8)
TracePrint str1252_2
备注: V1.1805: 加入命令
命令名称: zm.ConvUTF8ToUnicode UTF8转Unicode
功能说明: 将UTF8转为Unicode
语法格式: 结果 = zm.ConvUTF8ToUnicode(UTF8)
命令参数: UTF8: 字符串, 要转换的UTF8
返回值: 数值型: 返回Unicode码
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 笑脸 = zm.ConvUnicodeToUTF8(&H1F601)
UI.NewLayout "layout1"
UI.AddTextView "layout1", "emoji", 笑脸
UI.Show "layout1"
TracePrint zm.ConvUTF8ToUnicode(笑脸)
备注: V1.1805: 加入命令
命令名称: zm.DecodeAES AES解密
功能说明: 对数据进行标准AES解密, 支持AES128,AES196和AES256, 能对通过 zm.encodeaes 加密的结果进行解密还原。
语法格式: 结果 = zm.DecodeAES(密文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待解密的密文内容。
密钥: 字符串, 用于解密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | 128,192,256 | 128 | 数据块
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写,其他模式必填且要有16个字节长度。
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回解密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeAES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-ECB加密结果", s
v = zm.DecodeAES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行AES-ECB解密结果", v

s = zm.EncodeAES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES加密输出Base64结果", s
v = zm.DecodeAES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES解密输出Base64结果", v

s = zm.EncodeAES(text, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-CBC加密结果", s
v = zm.DecodeAES(s, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES-CBC解密结果", v
备注: V1.1723b: 初次加入
V2.1828:
彻底解决加解密出错失败的问题
改为使用封装 https://github.com/somesocks/lua-lockbox 的代码, 不兼容旧版加解密结果!
V3.1831:
修改为标准AES加解密, 注意不兼容上版本的加解密结果!
对密钥长度加入限制
修复解密结果包含`\0`字符的问题
命令名称: zm.DecodeBase64 快速Base64文本解密
功能说明: 对一串文本内容进行快速Base64解密, 可通过 zm.initbase64 设置模式
语法格式: 结果 = zm.DecodeBase64(密文)
命令参数: 密文: 字符串, 待解密的加密内容
返回值: 字符串: 返回Base64解密后的内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 原文 = "紫猫编程学院"
Dim 密文 = zm.EncodeBase64(原文)
TracePrint "Base64加密结果:", 密文

Dim 解密 = zm.DecodeBase64(密文)
If 解密 = 原文 Then 
	TracePrint "解密成功"
Else 
	TracePrint "解密失败"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加解密
文件Base64解密请使用 zm.decodebase64file
V1.1821: 加入命令
命令名称: zm.DecodeBase64File 快速Base64文件解密
功能说明: 对一个文件进行快速Base64解密, 可通过 zm.initbase64 设置模式
语法格式: 结果 = zm.DecodeBase64File(加密文件路径, 解密保存路径)
命令参数: 加密文件路径: 字符串, Base64文件路径, 文件必须存在
解密保存路径: 字符串, 解密文件保存的路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//准备文件
Dim 原文件路径 = GetTempDir() & "紫猫编程学院.txt"
zm.FileWrite 原文件路径, "欢迎加入紫猫学院"

//文件加密
Dim 加密文件路径 = GetTempDir() & "加密.txt"
zm.EncodeBase64File 原文件路径, 加密文件路径
TracePrint "加密后的内容:", zm.FileRead(加密文件路径)

//文件解密
Dim 解密文件路径 = GetTempDir() & "解密.txt"
zm.DecodeBase64File 加密文件路径, 解密文件路径

//读取内容判断加解密是否成功
If zm.FileRead(解密文件路径) = "欢迎加入紫猫学院" Then 
	TracePrint "加解密成功"
Else 
	TracePrint "加解密结果不一致"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加解密
文本Base64解密请使用 zm.decodebase64
V1.1821: 加入命令
命令名称: zm.DecodeDES DES解密
功能说明: 对数据进行标准DES解密, 支持DES和DES3, 可以对 zm.encodedes 结果解密。
语法格式: 结果 = zm.DecodeDES(密文, 密钥[, 高级属性])
命令参数: 密文: 字符串, 待解密的密文内容。
密钥: 字符串, 用于解密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | des,des3 | des | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回解密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "12345678"
Dim s, v
s = zm.EncodeDES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行DES-ECB加密结果", s
v = zm.DecodeDES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行DES-ECB解密结果", v

s = zm.EncodeDES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES加密输出Base64结果", s
v = zm.DecodeDES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES解密输出Base64结果", v

s = zm.EncodeDES(text, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES3-CBC加密结果", s
v = zm.DecodeDES(s, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES3-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.DecodeTEA TEA解密
功能说明: 对数据进行TEA解密, 支持TEA和XTEA, 可以对 zm.encodetea 结果解密。
语法格式: 结果 = zm.DecodeTEA(密文, 密钥[, 高级属性])
命令参数: 密文: 字符串, 待解密的密文内容。
密钥: 字符串, 用于解密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | tea,xtea | tea | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回解密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeTEA(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA-ECB加密结果", s
v = zm.DecodeTEA(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行TEA-ECB解密结果", v

s = zm.EncodeTEA(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA加密输出Base64结果", s
v = zm.DecodeTEA(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行TEA解密输出Base64结果", v

s = zm.EncodeTEA(text, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行XTEA-CBC加密结果", s
v = zm.DecodeTEA(s, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行XTEA-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.DecodeURL URL解码
功能说明: zm.encodeurl 产生的密文进行解密还原。
语法格式: 结果 = zm.DecodeURL(密文)
命令参数: 密文: 字符串, 经过URL编码的字符串内容。
返回值: 字符串:返回URL解码后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim urls = zm.EncodeURL("紫猫")
TracePrint "对紫猫进行URL编码,得到", urls
Dim data = zm.DecodeURL(urls)
TracePrint "对", urls, "进行URL解码,得到", data
备注: +会被转为空格,保留数字、英文和`-_.~`。
仅支持3.2.1版本以上的按键。
V1.1723b: 初次加入
命令名称: zm.EncodeAES AES加密
功能说明: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是美国联邦政府采用的一种区块加密标准。属于对称加密的一种,能通过 zm.decodeaes 进行解密还原, 支持AES128,AES196和AES256。
语法格式: 结果 = zm.EncodeAES(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
密钥: 字符串, 用于加密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | 128,192,256 | 128 | 数据块
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写,其他模式必填且要有16个字节长度。
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回加密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeAES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-ECB加密结果", s
v = zm.DecodeAES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行AES-ECB解密结果", v

s = zm.EncodeAES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES加密输出Base64结果", s
v = zm.DecodeAES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES解密输出Base64结果", v

s = zm.EncodeAES(text, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-CBC加密结果", s
v = zm.DecodeAES(s, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES-CBC解密结果", v
备注: V1.1723b: 初次加入
V2.1828:
彻底解决加解密出错失败的问题
改为使用封装 https://github.com/somesocks/lua-lockbox 的代码, 不兼容旧版加解密结果!
V3.1831:
修改为标准AES加解密, 注意不兼容上版本的加解密结果!
对密钥长度加入限制
修复解密结果包含`\0`字符的问题
命令名称: zm.EncodeBase64 快速Base64文本加密
功能说明: 对一串文本内容进行快速Base64加密, 可通过 zm.initbase64 设置加密模式
语法格式: 结果 = zm.EncodeBase64(原文)
命令参数: 原文: 字符串, 待加密的原文本内容
返回值: 字符串: 返回Base64加密后的内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 原文 = "紫猫编程学院"
Dim 密文 = zm.EncodeBase64(原文)
TracePrint "Base64加密结果:", 密文

Dim 解密 = zm.DecodeBase64(密文)
If 解密 = 原文 Then 
	TracePrint "解密成功"
Else 
	TracePrint "解密失败"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加密
加密后的文本可以用 zm.decodebase64 进行解密
文件Base64加密请使用 zm.encodebase64file
V1.1821: 加入命令
命令名称: zm.EncodeBase64File 快速Base64文件加密
功能说明: 对一个文件进行快速Base64加密, 可通过 zm.initbase64 设置模式
语法格式: 结果 = zm.EncodeBase64File(原文件路径, 加密保存路径)
命令参数: 原文件路径: 字符串, 待加密的文件路径, 文件必须存在
加密保存路径: 字符串, 加密文件保存的路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//准备文件
Dim 原文件路径 = GetTempDir() & "紫猫编程学院.txt"
zm.FileWrite 原文件路径, "欢迎加入紫猫学院"

//文件加密
Dim 加密文件路径 = GetTempDir() & "加密.txt"
zm.EncodeBase64File 原文件路径, 加密文件路径
TracePrint "加密后的内容:", zm.FileRead(加密文件路径)

//文件解密
Dim 解密文件路径 = GetTempDir() & "解密.txt"
zm.DecodeBase64File 加密文件路径, 解密文件路径

//读取内容判断加解密是否成功
If zm.FileRead(解密文件路径) = "欢迎加入紫猫学院" Then 
	TracePrint "加解密成功"
Else 
	TracePrint "加解密结果不一致"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加解密
文本Base64加密请使用 zm.encodebase64
V1.1821: 加入命令
命令名称: zm.EncodeDES DES加密
功能说明: 对数据进行标准DES加密, 支持DES和DES3。
语法格式: 结果 = zm.EncodeDES(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
密钥: 字符串, 用于加密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | des,des3 | des | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回加密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "12345678"
Dim s, v
s = zm.EncodeDES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行DES-ECB加密结果", s
v = zm.DecodeDES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行DES-ECB解密结果", v

s = zm.EncodeDES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES加密输出Base64结果", s
v = zm.DecodeDES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES解密输出Base64结果", v

s = zm.EncodeDES(text, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES3-CBC加密结果", s
v = zm.DecodeDES(s, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES3-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.EncodeHMAC HMAC签名
功能说明: 计算消息的HMAC签名结果, 支持md2,md4,md5,sha1,sha224,sha256,ripemd128,ripemd160算法
语法格式: 结果 = zm.EncodeHMAC(消息, 密钥[, 算法[, 返回格式]])
命令参数: 消息: 字符串, 待计算的消息内容
密钥: 字符串, 用于计算的密钥
算法: 字符串, 可选, 省略默认为sha1算法, 可填写md2,md4,md5,sha1,sha224,sha256,ripemd128,ripemd160
返回格式: number, 可选, 表示返回值内容, 省略默认为16, 0为原生二进制数据字符串, 2为字节数组, 16为十六进制字符串, 64为原生内容base64编码
返回值: 字符串: 返回HMAC签名结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim m = "紫猫学院", key = "zimaoxy.com"

Dim hmac = zm.EncodeHMAC(m, key)

TracePrint "hmac-sha1签名的十六进制结果为:", hmac
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V2.1829: 算法参数与返回格式参数可以乱序
命令名称: zm.EncodeMD5 MD5计算
功能说明: 对数据进行MD5计算, 支持MD2,MD4和MD5
语法格式: 结果 = zm.EncodeMD5(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
算法: 字符串, 可选, 省略默认为md5, 可填写md2, md4, md5
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫"

TracePrint "md5:", zm.EncodeMD5(s)
TracePrint "md4:", zm.EncodeMD5(s, "md4")
TracePrint "md2:", zm.EncodeMD5(s, "md2")
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
命令名称: zm.EncodeMD5File 计算文件MD5值
功能说明: 计算一个文件的MD5值。
语法格式: 结果 = zm.EncodeMD5File(文件路径)
命令参数: 文件路径: 字符串, 要计算MD5值的文件路径
返回值: 字符串:返回指定文件的MD5值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim p = GetTempDir() & "Plugin/File.lua"
Dim md5 = zm.EncodeMD5File(p)
TracePrint md5
备注: V1.1730: 初次加入。
命令名称: zm.EncodeRIPEMD RIPEMD计算
功能说明: 对数据进行RIPEMD计算, 支持RIPEMD128和RIPEMD160
语法格式: 结果 = zm.EncodeRIPEMD(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
算法: 字符串, 可选, 省略默认为ripemd128, 可填写ripemd128, ripemd160
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫"

TracePrint "ripemd128:", zm.EncodeRIPEMD(s)
TracePrint "ripemd160:", zm.EncodeRIPEMD(s, "ripemd160")
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
命令名称: zm.EncodeSHA SHA计算
功能说明: 对数据进行SHA签名计算, 支持SHA1,SHA224和SHA256
语法格式: 结果 = zm.EncodeSHA(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
算法: 字符串, 可选, 签名使用的算法, 省略默认为sha1, 可填写sha1, sha224, sha256
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫"

TracePrint "sha1:", zm.EncodeSHA(s)
TracePrint "sha224:", zm.EncodeSHA(s, "sha224")
TracePrint "sha256:", zm.EncodeSHA(s, "sha256")
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
命令名称: zm.EncodeTEA TEA加密
功能说明: 对数据进行TEA加密, 支持TEA和XTEA。
语法格式: 结果 = zm.EncodeTEA(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
密钥: 字符串, 用于加密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | tea,xtea | des | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回加密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeTEA(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA-ECB加密结果", s
v = zm.DecodeTEA(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行TEA-ECB解密结果", v

s = zm.EncodeTEA(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA加密输出Base64结果", s
v = zm.DecodeTEA(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行TEA解密输出Base64结果", v

s = zm.EncodeTEA(text, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行XTEA-CBC加密结果", s
v = zm.DecodeTEA(s, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行XTEA-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.EncodeURL URL编码
功能说明: 对参数进行URL编码,常用于网址参数中,例如`紫猫`编码后就是`%E7%B4%AB%E7%8C%AB`。
语法格式: 结果 = zm.EncodeURL(明文)
命令参数: 明文: 字符串, 待编码的内容。
返回值: 字符串:返回URL编码后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim urls = zm.EncodeURL("紫猫")
TracePrint "对紫猫进行URL编码,得到", urls
Dim data = zm.DecodeURL(urls)
TracePrint "对", urls, "进行URL解码,得到", data
备注: 空格会被转为+,保留数字、英文和`-_.~`。
仅支持3.2.1版本以上的按键。
V1.1723b: 初次加入
命令名称: zm.InitBase64 初始化Base64模式
功能说明: 初始化设置Base64的加解密模式, 支持URL安全Base64, 默认为标准Base64, 已集成到 zm.init
语法格式: 结果 = zm.InitBase64([字符表[, 填充符]])
命令参数: 字符表: 数值型_或_字符串, 可选, 省略默认为标准Base64加解密, 数值1为base64标准加解密, 数值2为base64url安全加解密, 数值3为base64noterm标准无填充加解密, 填写长度64的不重复字符串时表示自定义编码表
填充符: 字符串, 可选, 省略默认为标准Base64加解密, 末尾填充字符
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//默认为标准Base64加解密
//zm.InitBase64
TracePrint zm.EncodeBase64("紫猫学院zimaoxy.com")
TracePrint "紫猫学院zimaoxy.com" = zm.DecodeBase64("57Sr54yr5a2m6ZmiemltYW94eS5jb20=")

//使用URL安全Base64加解密, 对所有base64相关命令生效
zm.InitBase64 2
TracePrint zm.EncodeBase64("紫猫学院zimaoxy.com")
TracePrint "紫猫学院zimaoxy.com" = zm.DecodeBase64("57Sr54yr5a2m6ZmiemltYW94eS5jb20")

//自定义字符表编码与填充符
Dim 字符表编码 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!"
Dim 填充符 = "%"
zm.InitBase64 字符表编码, 填充符
TracePrint zm.EncodeBase64("紫猫学院zimaoxy.com")
TracePrint "紫猫学院zimaoxy.com" = zm.DecodeBase64("vxIhvuohvQscwPcYUcbjOMzuUIvZRsq%")
备注: 该命令已集成到 zm.init
对所有的Base64系列命令有影响
V1.1821: 加入命令
命令名称: zm.GetGateway 获取默认网关地址
功能说明: 获取默认网关地址。
语法格式: 结果 = zm.GetGateway()
命令参数:
返回值: 字符串:返回当前默认网关地址。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetGateway()
备注: V1.1805: 加入命令
命令名称: zm.GetIPNet 获取外网IP
功能说明: 获取外网IP地址等信息, 根据参数决定返回内容
语法格式: 结果 = zm.GetIPNet([返回格式])
命令参数: 返回格式: 数值型, 可选, 填写0表示只返回ip地址字符串, 填写大于0的数字表示返回详细信息表, 包括省份等内容, 不同数字代表不同接口的返回值, 省略默认为0
返回值: 字符串_或_表: 返回ip或详细信息表, 由参数返回格式决定返回内容, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//强烈建议使用默认参数直接获取ip, 内置数十个接口, 保证稳定性
Dim ip = zm.GetIPNet()
TracePrint "我的ip是:", ip

//不同接口的返回值格式与内容均有所不同, 由于部分接口可能不稳定, 故不推荐使用此方法
Dim ipt
For i = 1 to 7
  ipt = zm.GetIPNet(i)
  If ipt Then
    TracePrint "接口", i, zm.VarInfo(ipt)
  Else
    TracePrint "接口", i, "获取ip失败"
  End
Next
备注: V1.1818: 加入命令
V3.1833: 增加多个接口, 提高获取ip稳定性
命令名称: zm.HttpDownload 下载文件
功能说明: 以HTTP协议的Get方法下载文件, 支持提交cookie与头信息
语法格式: 结果 = zm.HttpDownload([对象][网址][,保存路径][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为{“url”:”网址”, “path”:”保存路径”, “cookie”:”cookie字符串或文件”, “header”:{“头信息1”, “头信息2”}, “customize”:”自定义curl参数”}
网址: string, 可选, 与对象参数二选一填写, 文件的下载地址
保存路径: string, 可选, 文件的保存路径, 省略为当前路径下的默认文件名
提交cookie: string, 可选, 要提交的cookie字符串或者cookie文件路径, 省略为””
请求头信息: string|table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为””
自定义: string, 可选, curl的高级参数, 一般不需要填写, 省略默认为””
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.HttpDownload "http://m.anjian.com/download/MobileAnjian3.2.9.apk", "/sdcard/anjian.apk"
备注: V1.1813: 加入命令
命令名称: zm.HttpGet 获取网页源码
功能说明: 以Http协议的Get方法获取网页源码, 支持提交cookie与头信息, 可保存当前cookie文件
语法格式: 结果 = zm.HttpGet([对象][网址][,网页编码][,保存cookie][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为{“url”:”网址”,”code”:”网页编码”, “setcookie”:”保存cookie文件路径”, “cookie”:”发送cookie字符串或文件”, “header”:{“头信息1”, “头信息2”}, “customize”:”自定义curl参数”}
网址: string, 可选, 与对象参数二选一, 要获取网页源码的网址
网页编码: string, 可选, 省略默认为”UTF-8″, 可通过右击查看网页源码中的charset获知正确编码
保存cookie: string, 可选, 省略默认为””, 表示保存cookie的路径, 可用 zm.filetemp 生成路径保存
提交cookie: string, 可选, 省略默认为””, 要提交的cookie字符串或者cookie文件路径
请求头信息: string|table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为””
自定义: string, 可选, curl的高级参数, 一般不需要填写, 省略默认为””
返回值: 字符串: 获取的网页源码内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HttpGet("www.baidu.com")
备注: V1.1813: 加入命令
V3.1837: 内置10秒超时
命令名称: zm.HttpPost 提交网页数据
功能说明: 以Http协议的Post方法提交数据并获取网页源码, 支持提交cookie与头信息, 可保存当前cookie文件
语法格式: 结果 = zm.HttpPost([对象][网址][,提交数据][,网页编码][,保存cookie][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为{“url”:”网址”,”data”:”提交数据”,”code”:”网页编码”, “setcookie”:”保存cookie文件路径”, “cookie”:”发送cookie字符串或文件”, “header”:{“头信息1”, “头信息2”}, “customize”:”自定义curl参数”}
网址: string, 可选, 与对象参数二选一, 要获取网页源码的网址
提交数据: string, 可选, 省略默认为””, 包含中文或空格之类时, 建议先使用 zm.encodeurl 进行编码转换后传入
网页编码: string, 可选, 省略默认为”UTF-8″, 可通过右击查看网页源码中的charset获知正确编码
保存cookie: string, 可选, 省略默认为””, 表示保存cookie的路径, 可用 zm.filetemp 生成路径保存
提交cookie: string, 可选, 省略默认为””, 要提交的cookie字符串或者cookie文件路径
请求头信息: string|table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为””
自定义: string, 可选, curl的高级参数, 一般不需要填写, 省略默认为””
返回值: 字符串: 获取的网页源码内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HttpPost("www.baidu.com")
备注: V1.1813: 加入命令
V3.1837: 强制post提交, 内置10秒超时
命令名称: zm.NetDataCount 网络数据行数
功能说明: 从数据表中获取数据总数量
语法格式: 结果 = zm.NetDataCount([数据表名])
命令参数: 数据表名: 字符串, 可选, 省略默认为初始化的数据表名, 数据表必须存在
返回值: 数值型: 返回数据表的总行数
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 总数量 = zm.NetDataCount()
TracePrint "一共有", 总数量, "个数据"
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1818: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataDel 删除网络数据
功能说明: 从数据表中删除指定共享网络数据, 仅删除一个变量数据, 不会清空所有数据
语法格式: 结果 = zm.NetDataDel(键名[, 数据表名])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
数据表名: 字符串, 可选, 从指定数据表中删除共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim VIP = zm.NetDataGet("VIP")
TracePrint zm.VarInfo(VIP)

zm.NetDataDel "VIP"

Dim 检查删除结果 = zm.NetDataGet("VIP")
TracePrint 检查删除结果
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataGet 获取网络数据
功能说明: 从数据表中获取网络共享数据
语法格式: 结果 = zm.NetDataGet(键名[, 数据表名][, 是否删除])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
数据表名: 字符串, 可选, 从指定数据表中获取共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
是否删除: 布尔型, 可选, 表示获取后是否直接删除该键名, 省略默认为false
返回值: 字符串_或_数值型_或_布尔型_或_表: 返回键值内容, 该数据类型与写入时相同
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 等级 = zm.NetDataGet("等级")
Dim 昵称 = zm.NetDataGet("昵称")
Dim VIP = zm.NetDataGet("VIP", True)

TracePrint zm.VarInfo(等级)
TracePrint zm.VarInfo(昵称)
TracePrint zm.VarInfo(VIP)

Dim 检查删除结果 = zm.NetDataGet("VIP")
TracePrint 检查删除结果
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V1.1818: 支持table
V2.1826: 解决写入成功, 读取失败的问题
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataGetRows 获取多行网络数据
功能说明: 从数据表中获取指定行数的数据, 数据表名与是否删除参数顺序可以打乱
语法格式: 结果 = zm.NetDataGetRows(行数[, 起始行][, 数据表名][, 是否删除])
命令参数: 行数: 数值型, 从指定数据表中获取多少行数据
起始行: 数值型, 可选, 表示从第几行开始获取, 省略默认为1
数据表名: 字符串, 可选, 从指定数据表中获取共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
是否删除: 布尔型, 可选, 表示获取后是否直接删除这些数据, 省略默认为false
返回值: 表: 返回二维表, 格式{ {“id”:id,”key”:key,”value”:value}, …}, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本", True

zm.NetDataSet "帐号1", "密码1"
zm.NetDataSet "帐号2", "密码2"
zm.NetDataSet "帐号3", "密码3"
zm.NetDataSet "帐号4", "密码4"
zm.NetDataSet "帐号5", "密码5"

//从第一行开始获取1行数据, 并且删除
Dim 帐号密码 = zm.NetDataGetRows(1, True)
TracePrint "帐号是: ", 帐号密码[1]["key"]
TracePrint "密码是: ", 帐号密码[1]["value"]

//从第2行开始获取3行数据
Dim 多个帐号密码 = zm.NetDataGetRows(3, 2)
For Each k , v In 多个帐号密码
	TracePrint "帐号是: ", v["key"]
	TracePrint "密码是: ", v["value"]
Next
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataInit 初始化网络数据
功能说明: 初始化共享网络数据, 创建指定数据表, 实现网络通信功能, 参数顺序可以打乱, 需要网站程序配合, 搭建方法详见备注
语法格式: 结果 = zm.NetDataInit([网址][, 数据表名][, 是否清空])
命令参数: 网址: 字符串, 可选, 网站程序sql.php的网址
数据表名: 字符串, 可选, 用于存放变量数据的表
是否清空: 布尔型, 可选, 清空指定数据表下所有变量数据, 不会删除数据表, 省略默认为false, 表示不清空
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//例子1 初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 等级 = zm.NetDataGet("等级")
Dim 昵称 = zm.NetDataGet("昵称")
Dim VIP = zm.NetDataGet("VIP", True)

TracePrint zm.VarInfo(等级)
TracePrint zm.VarInfo(昵称)
TracePrint zm.VarInfo(VIP)

Dim 检查删除结果 = zm.NetDataGet("VIP")
TracePrint 检查删除结果

//例子2 清空以前数据并初始化
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本", True
备注: 本功能是使用http协议来操作php数据库网站, 实现多设备共享网络数据, 所以需要自行搭建网站程序, 操作步骤如下:

搭建php5.4以上的运行环境, 新手小白可以下载安装[phpstudy](http://www.php.cn/xiazai/gongju/845)之类的软件部署环境, 以下步骤以内网环境进行讲解
下载安装并运行phpstudy软件, 若提示安装vc运行库, 请自行下载安装解决
在**其他选项菜单**中打开**网站根目录**文件夹
将紫猫插件压缩包中的**medoo.php**和**sql.php**文件([点我下载](https://pan.baidu.com/s/125x21HMERn9lbxSPM1TOPw))复制到上面的**网站根目录**文件夹中
点击**启动**按钮
查看本机内网ip地址(不会的请百度解决), 在本机设备上打开网页访问ip/sql.php, 例如**http://192.168.1.100/sql.php**, 只要网页显示**通信成功**, 就说明电脑服务端环境搭建成功
在模拟器或者手机里打开网页访问电脑服务端的网址, 也就是上一步的网址, 同样如果网页显示**通信成功**, 就说明这两台设备网络通信成功, 可以使用本命令功能, 无法访问的请关闭防火墙, 并检查电脑服务端的ip是否正确
外网通信请自行购买虚拟主机或VPS之类的建站空间, 然后与上面步骤类似, 外网环境请注意修改**sql.php**中的ip, 账户, 密码等配置
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率

命令名称: zm.NetDataQuery 执行SQL语句
功能说明: 执行SQL语句, 需要一定SQL语法知识
语法格式: 结果 = zm.NetDataQuery(SQL)
命令参数: SQL: 字符串, 要执行的SQL语句
返回值: 字符串: 执行SQL后的返回结果。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 结果 = zm.NetDataQuery("SELECT * FROM `测试脚本`")
TracePrint 结果
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataSet 设置网络数据
功能说明: 往数据表中添加或修改共享网络数据
语法格式: 结果 = zm.NetDataSet(键名, 键值[, 数据表名])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
键值: 字符串_或_数值型_或_布尔型_或_表, 存放的数据, 类似于变量值
数据表名: 字符串, 可选, 往指定数据表中设置共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "等级", 99
zm.NetDataSet "VIP", True
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V1.1818: 支持table
V3.1903: 大幅度提高执行效率
命令名称: zm.TCPClose 关闭TCP连接
功能说明: 关闭TCP连接。
语法格式: 结果 = zm.TCPClose()
命令参数:
返回值: 数值型:返回1表示关闭成功, 返回2表示当前无连接, 返回null表示关闭失败。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.TCPConnect 连接TCP服务端
功能说明: 连接TCP服务端。
语法格式: 结果 = zm.TCPConnect(目标IP, 目标端口[, 超时时间])
命令参数: 目标IP: 字符串, 要连接的TCP服务端IP地址
目标端口: 数值型, 要连接的TCP服务端端口
超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 数值型:返回1表示连接成功, 返回null表示连接失败。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
V3.1849: 修复使用TCP功能后无法启动多线程的问题(可能会导致超时参数失效)。
命令名称: zm.TCPReceive 接收TCP数据
功能说明: 接收TCP数据,此命令为阻塞命令!
语法格式: 结果 = zm.TCPReceive([超时时间[, 接收模式]])
命令参数: 超时时间: 数值型, 可选, 单位秒, 默认为10秒
接收模式: 字符串, 可选, 支持`*a`和`*l`两种模式, 省略默认为`*l`
返回值: 字符串:成功返回字符串数据内容, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.TCPSend 发送TCP数据
功能说明: 发送TCP数据
语法格式: 结果 = zm.TCPSend(数据, [超时时间])
命令参数: 数据: 字符串, 要发送的数据内容, 注意, 末尾会默认加上`\n`字符
超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 数值型:成功返回大于0的数据长度, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPBind 绑定UDP
功能说明: 绑定UDP
语法格式: 结果 = zm.UDPBind(IP, 端口[, 超时时间])
命令参数: IP: 字符串, 要绑定的IP地址
端口: 数值型, 要绑定的端口
超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 数值型:成功返回大于0的数值, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPClose 关闭UDP
功能说明: 关闭UDP
语法格式: 结果 = zm.UDPClose()
命令参数:
返回值: 数值型:返回`1`表示关闭成功, 返回`2`表示没有找到绑定, 返回`null`表示失败
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPReceive 接收UDP数据
功能说明: 接收UDP数据, 注意, 此命令为阻塞命令
语法格式: 结果 = zm.UDPReceive([超时时间])
命令参数: 超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 表:成功返回{数据内容, 来源IP, 来源端口}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPSend 发送UDP数据
功能说明: 发送UDP数据
语法格式: 结果 = zm.UDPSend(数据, IP, 端口)
命令参数: 数据: 字符串, 要发送的数据内容
IP: 字符串, 目标IP地址
端口: 数值型, 目标端口
返回值: 数值型:成功返回大于0的数值, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.GetUIValue 读取UI控件值
功能说明: 读取UI动态界面控件的值, 与 ui.getvalue 相比, 本命令直接以(数值型/布尔型/字符串)形式返回结果
语法格式: 结果 = zm.GetUIValue(控件名)
命令参数: 控件名: 字符串, UI界面的控件名
返回值: 数值型/布尔型/字符串: 由控件决定对应的数据类型, 返回控件值
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

'创建一个名称为"layout1"的布局控件
UI.NewLayout ("layout1")
'以下例子为分别创建文字框、输入框、按钮等控件并使用获取GetValue它们的值
UI.AddTextView("layout1", "文字框1", "姓名:") 
Dim 内容= zm.GetUIValue("文字框1")
TracePrint 内容
UI.AddEditText("layout1", "输入框1", "请在此输入内容") 
Dim 内容2= zm.GetUIValue("输入框1")
TracePrint 内容2
UI.AddButton("layout1", "按钮1", "这是个按钮") 
Dim 内容3= zm.GetUIValue("按钮1")
TracePrint 内容3
UI.AddRadioGroup("layout1","单选框1",{"1小瓶", "2中瓶", "3大瓶"},0)
Dim 内容4= zm.GetUIValue("单选框1")
TracePrint 内容4
UI.AddCheckBox("layout1", "多选框1","多选框选项1", false)
Dim 内容5= zm.GetUIValue("多选框1")
TracePrint 内容5
UI.NewRow("layout1", "new_row_1")
Dim SpinnerTable = {"湖南", "湖北", "广东", "广西"}
UI.AddSpinner("layout1", "下拉框1", SpinnerTable, 0)
Dim 内容6= zm.GetUIValue("下拉框1")
TracePrint 内容6
'显示名称为:"layout1" 的布局控件
UI.Show ("layout1")
备注: V1.1804: 加入命令
V1.1805: 命令名改为`zm.GetUIValue()`
命令名称: zm.CmpColorEx 超级多点比色
功能说明: cmpcolorex 更加强大的命令, 具体特色如下

– 支持多组多点比色数据, 并且返回找到的序号, 详见示例
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象参数只能填写第一个外, 其他参数大部分可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setcmpcolorex 来自定义修改
– 担心一次对比不到颜色? 自由设置限时循环对比时间, 提高成功率
– 画面变化太大, 颜色相似度不好设置? 智能颜色相似度帮你全自动查找
– 对比点存在误差, 需要忽略一定数量的点? 数量相似度解决此问题
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写, 返回值中有序号, 坐标, 颜色
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.cmpcolorextap
– 需要遍历多个对象数组? 推荐使用 zm.cmpcolorextable

语法格式: 结果 = zm.CmpColorEx([对象][颜色组, …][, 颜色相似度[, 智能颜色相似度[, 颜色相似度步长]]][, 数量相似度][, 对比超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色组: 字符串, 可选, 需要对比的点xy坐标和16进制颜色, **支持填写多组不同的颜色组**, 格式与 cmpcolorex 参数相同, 都是(X坐标|Y坐标|16进制颜色), 多个颜色用“|”号分隔, 需要偏色用“`-`”号分隔, 多个点信息用“`,`”号分隔, 比如”100|200|FFFFFF|123456-000000,300|500|FFFFFF”
颜色相似度: 数值型, 可选, 对比查找的颜色相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能颜色相似度: 数值型, 可选, 与颜色相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`颜色相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
颜色相似度步长: 数值型, 可选, 智能颜色相似度调节变化间隔, 必须写在`颜色相似度`和`智能颜色相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
数量相似度: 字符串, 可选, 一组颜色组中符合条件的颜色数量比值, 注意是字符串数据类型, 省略默认为`”1.0″`, 取值范围`[“0”, “1.0”]`, 越高越相似
对比超时: 数值型, 可选, 限时对比时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要对比成功后自动点击该组的第一个点坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为对比成功组的第一点坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击对比成功组的第一点坐标的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 返回符合要求的第一个点坐标并保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 对比失败或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
//--------------------例子1--------------------//
//表示对比两组多点比色数据, 分别是"205|177|0CBB00,228|169|FFFFFF"和"61|340|3DC3EE"
//支持无限添加多点比色数据, 按顺序比较, 只要有一组对比成功, 就返回结果
//不填写相似度情况下, 省略默认相似度为0.9
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子2--------------------//
//如何对比动态变化的画面?
//原理:用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
//     说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
//     那么对每一次截图采集一些多点比色数据, 然后让脚本循环多次比较这些数据
//     只要任何一组数据对比成功, 都可以认为是找到这个动态图了
//     所以可以使用本命令的无限添加多点比色数据与设置超时时间来实现
//     想提高查找速度的话, 建议提高相似度, 增加多点比色数据
//下面代码实现在5000毫秒内不断循环比较两组多点比色数据, 任何一组对比成功了, 就立即返回该组数据的第一个坐标
//超过5000毫秒没对比成功, 就返回null
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 5000)
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子3--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//除对象参数外, 大部分参数都可以打乱顺序填写, 只要数据类型与格式正确即可
//下面代码实现以(0.8)的颜色相似度比较两组多点比色数据, 并把返回结果保存在数组变量(返回数组)中
If zm.CmpColorEx(0.8, "205|177|0CBB00,228|169|FFFFFF", 返回数组, "61|340|3DC3EE") Then
    TracePrint "对比颜色成功, 序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "name=" & 返回数组["name"]
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子4--------------------//
//有时候颜色的相似度不好取值, 那么可以借助智能相似度实现判断
//下面这段代码中就表示从高相似度1.0到低相似度0.7, 以每次减少0.1的值进行循环对比
//只要对比成功了, 就立即返回结果, 需注意, 相似度步长必须写在两个颜色相似度后面
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.7, 1.0, 0.1)
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子5--------------------//
//请注意这个例子中的参数("0.7"), 这是指数量相似度, 必须是字符串数据类型
//数量相似度是指多点比色数据中符合条件点的比例, "0.7"即70%以上个点符合条件
//例如下面这组多点比色数据一共有4个点, 那么对比时, 只要有4*0.7=2.8个点以上符合条件, 就可以返回对比成功
ret = zm.CmpColorEx("5|7|0CBB00,2|1|FFFFFF,4|3|3DC3EE,1|3|354311", "0.7")
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子6--------------------//
//写代码过程中的调试输出信息是非常重要的, 但是每次都要专门写一次TracePrint也挺麻烦
//所以可以直接把输出信息写在参数里, 让它自动输出详细内容
//加入参数("显示")或("show")就表示要输出结果, 没有这个参数就不会输出内容
//加入参数("@内容")就表示输出的备注信息, 因为这个输出是不带行号的, 所以备注信息很有必要输出显示
//加入参数("_行数")表示在带上输出行号, 不过代码改动, 行号变化后, 这里也要重新修改, 比较麻烦, 不如备注来的方便
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", "显示", "@怪物", "_72")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子7--------------------//
//对比成功后可能会需要点击操作, 那么加入参数(true)就可以实现点击返回的坐标
//但是由于对比和点击是由两个动作组成, 所以更加推荐使用zm.CmpColorExTap()命令来实现这个功能
//省略点击坐标参数情况下, 默认点击的坐标是对比成功的颜色组第一个点
//比如第一组颜色对比成功, 那么点击就是(205,177), 如果是第二组, 那么就是点击(61,340)
//如果加入点击坐标参数("100,-20,3000"), 那么点击坐标将发生改变, 以返回坐标(205,177)为例
//实际点击坐标是(100,177-20=157), 并且点击后延时3000毫秒
//更多关于点击坐标参数格式请查看参数信息里的内容
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", True, "100,-20,3000")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If


//--------------------例子8--------------------//
//有时候需要判断对比成功后, 过一段时间画面消失, 也就是对比失败这个过程
//那么可以通过等待消失和消失超时参数来实现
//下面代码中, 参数(-2)表示开启等待消失功能, 参数(-5000)表示在5000毫秒内不断判断对比是否失败
//如果对比失败, 就表示画面消失了, 立即返回结果
//其中返回的坐标依旧是对比成功点的坐标, 而是否消失的结果保存在键名("miss")中
//要注意的是只有先对比成功后, 才会进入等待消失, 如果一开始就对比失败, 那就不会去等待消失了
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", -2, -5000)
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
    TracePrint "画面是否消失 = ", ret["miss"]
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子9--------------------//
//可选参数都可以组合起来实现, 大部分参数可以乱序填写, 下面代码意思如下:
//以颜色相似度为(0.8), 数量相似度("0.7")的设置
//比较两组多点比色数据, 分别是"205|177|0CBB00,228|169|FFFFFF"和"61|340|3DC3EE"
//限时在2000毫秒内循环比较, 找到任何一个后退出循环查找
//并将对比成功颜色组的序号和第一个点坐标保存在数组变量(ret)与(返回数组)中
//比如"205|177|0CBB00,228|169|FFFFFF"对比成功则返回序号0, 坐标(205,177)
//而如果是"61|340|3DC3EE"对比成功, 则返回序号1, 坐标(61,340)
//同时开启日志的输出("显示")功能, 输出备注("@紫猫Boss"), 对比结果与其他参数信息
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.8, "0.7", 2000, "显示", "@紫猫Boss", 返回数组)
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子10--------------------//
//脚本变量的管理是一个难题, 每组图色数据都是独立的, 为了方便代码结构的管理
//可以把所有参数放到一个表中, 表中的数据一样可以打乱顺序任意填写或省略
//这个表就是对象参数, 它必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_133"), 则表示重写对象里的("_36"), 使日志输出显示在46行
//注意, 多点比色数据不会被覆盖重写, 只会被追加, 相当于所有的多点比色数据都会被用来查找
//如果你有多组不同的对象参数需要遍历, 那么推荐使用zm.CmpColorExTable()
Dim 史莱姆 = {"205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.8, 2000, "显示", "@怪物1", 返回数组, "_39"}
zm.CmpColorEx 史莱姆, "_134", "11|140|1542EE"

//--------------------例子11--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有超级多点比色相关命令都默认输出调试信息
//更多修改默认设置详见 zm.SetCmpColorEx() 命令帮助
zm.SetCmpColorEx {"ret":IXYs, "showlog":"显示"}
If zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "对比颜色成功, 序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "对比颜色成功, 序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "对比颜色成功, 序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
Else
    TracePrint "对比颜色失败"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点比色颜色组数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。颜色相似度是粗调,指对颜色整体做百分比判断。
数量相似度是指颜色组对比成功点的比例, 例如 `”1|1|3DC3EE,2|2|346AFF,3|3|1592FF,4|4|1592FF,5|5|231209,6|6|241306,7|7|201004,8|8|241306,9|9|241306″` 这组多点比色数据有9个点, 如果数量相似度填写`”0.8″`就意味着对比成功条件是`0.8*9=7.2`个点以上符合要求, 而点的个数肯定是整数, 所以就是必须要8个点或9个点才能算对比成功
V3.1830: 加入命令
命令名称: zm.CmpColorExTable 超级多点比色遍历
功能说明: zm.cmpcolorex 类似, 参数只有一个对象数组, 可实现多个对象的遍历对比
语法格式: 结果 = zm.CmpColorExTable(对象table)
命令参数: 对象table: table, 把 zm.cmpcolorex 的对象参数放入table数组中, 实现多个对象的遍历对比
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name}, …}`, 全部没找到或失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//将多个对象放入打怪table中, 每个对象都有各自的键名与各自的参数键值
Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"61|340|3DC3EE,91|344|346AFF,472|154|1592FF", true}
打怪["黑龙"] = {"421|237|241306,438|261|241306", 0.8, true}
打怪["紫猫BOSS"] = {"295|290|241306", Boss坐标} //这个不点击

//遍历打怪table, 返回每个对象成员的结果
Dim t = zm.CmpColorExTable(打怪)
If t Then
    TracePrint zm.VarInfo(t)
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    //在确认有找到的情况下, 可以单独判断某个对象是否有找到, 包括获取该对象的坐标结果等
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

//对象参数中的返回数组参数依旧可以拿出来单独判断使用
If Boss坐标(0) > -1 Then
    TracePrint "找到紫猫BOSS"
Else
    TracePrint "没有找到紫猫BOSS"
End If
备注: 该命令与 zm.cmpcolorex 类似, 唯一区别在于参数只有一个对象table
V3.1830: 加入命令
命令名称: zm.CmpColorExTap 超级多点比色点击
功能说明: zm.cmpcolorex 类似, 区别在于本命令内置对比成功后点击, 无需`是否点击`参数, 由于对比与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.CmpColorExTap([对象][颜色组, …][, 颜色相似度[, 智能颜色相似度[, 颜色相似度步长]]][, 数量相似度][, 对比超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色组: 字符串, 可选, 需要对比的点xy坐标和16进制颜色, 格式为(X坐标|Y坐标|16进制颜色), 多个颜色用“|”号分隔, 需要偏色用“`-`”号分隔, 多个点信息用“`,`”号分隔, 比如”100|200|FFFFFF|123456-000000,300|500|FFFFFF”, 支持填写多组不同的颜色组
颜色相似度: 数值型, 可选, 对比查找的颜色相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能颜色相似度: 数值型, 可选, 与颜色相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`颜色相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
颜色相似度步长: 数值型, 可选, 智能颜色相似度调节变化间隔, 必须写在`颜色相似度`和`智能颜色相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
数量相似度: 字符串, 可选, 一组颜色组中符合条件的颜色数量比值, 注意是字符串数据类型, 省略默认为`”1.0″`, 取值范围`[“0”, “1.0”]`, 越高越相似
对比超时: 数值型, 可选, 限时对比时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为对比成功组的第一点坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击对比成功组的第一点坐标的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 返回符合要求的第一个点坐标并保存到表中, 格式为{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, 对比失败或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
//省略点击坐标参数情况下, 默认点击的坐标是对比成功的颜色组第一个点
//比如"205|177|0CBB00,228|169|FFFFFF"对比成功, 那么点击的坐标就是(205,117)
ret = zm.CmpColorExTap("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE")
If ret Then
    TracePrint "对比颜色成功, 执行点击操作"
Else
    TracePrint "对比颜色失败"
End If

//如果加入点击坐标参数("100,-20,3000"), 那么点击坐标将发生改变, 以返回坐标(205,177)为例
//实际点击坐标是(100,177-20=157), 并且点击后延时3000毫秒
//更多关于点击坐标参数格式请查看参数信息里的内容
ret = zm.CmpColorExTap("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", "100,-20,3000")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//其他更多例子见zm.CmpColorEx*()命令, 本命令除了强制点击外, 无其他区别
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点比色颜色组数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。颜色相似度是粗调,指对颜色整体做百分比判断。
数量相似度是指颜色组对比成功点的比例, 例如 `”1|1|3DC3EE,2|2|346AFF,3|3|1592FF,4|4|1592FF,5|5|231209,6|6|241306,7|7|201004,8|8|241306,9|9|241306″` 这组多点比色数据有9个点, 如果数量相似度填写`”0.8″`就意味着对比成功条件是`0.8*9=7.2`个点以上符合要求, 而点的个数肯定是整数, 所以就是必须要8个点或9个点才能算对比成功
V3.1830: 加入命令
命令名称: zm.FindColor 超级找色
功能说明: findcolor 更加强大的命令, 具体特色如下

– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindcolor 来自定义修改
– 担心一次找不到颜色? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 查找方向的数值总是记不住? 直接用中文 `”左上”,”中心”,”右上”,”左下”,”右下”,…` 来代替
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的颜色值
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.findcolortap
– 需要遍历多个对象数组? 推荐使用 zm.findcolortable
– 需要返回所有找到的坐标? 推荐使用 zm.findcolorex

语法格式: 序号坐标颜色 = zm.FindColor([对象,][x1,y1,x2,y2,][颜色][,方向][,相似度[,智能相似度[,相似度步长]]][,查找次数][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`1.0`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为 `{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}` , 没找到或出错返回`null`, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
//0.9表示相似度, 内置省略默认为1.0, 可自由设置
ret = zm.FindColor("00AAFF", 0.9)
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "颜色=" & ret(3)
    TracePrint "找到颜色序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "颜色=" & ret[4]
    TracePrint "找到颜色序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "颜色=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写
If zm.FindColor(100, 200, 300, 400, "00AAFF", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "颜色=" & 返回数组(3)
    TracePrint "找到颜色序号" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "颜色=" & 返回数组[4]
    TracePrint "找到颜色序号" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "颜色=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//"00AAFF"颜色后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可, 详见上面参数介绍
//这句代码意思如下:
//在范围(100,200,300,400)里, 以相似度为(0.8)的设置, 从("中心")向四周循环限时2秒钟内查找颜色为("00AAFF")的点
//找到后退出循环查找, 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_36")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindColor(100, 200, 300, 400, "00AAFF", 0.8, 2000, "中心", "显示", "@怪物1", 返回数组, "_36")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 颜色后面的可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_46"), 则表示重写对象里的("_36"), 使日志输出显示在46行
Dim 史莱姆 = {"00AAFF", 0.8, 2000, "显示", "@攻击史莱姆", 返回数组, "_46"}
zm.FindColor 史莱姆, 100, 200, 300, 400, "_46"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindColor() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindColor() 命令帮助
zm.SetFindColor {"ret":IXYs, "showlog":"显示"}
If zm.FindColor("00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "颜色=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "颜色=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "颜色=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到颜色值
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findcolortap
命令名称: zm.FindColorEx 超级找色返回所有坐标
功能说明: zm.findcolor 类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组
语法格式: 结果 = zm.FindColorEx([对象][x1, y1, x2, y2, ]颜色[, 相似度[, 智能相似度[, 相似度步长]]][, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`1.0`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 找到返回结果保存到表中, 格式为 `{ {id, x, y}, …, “xy”:{id:{ {x,y}, …}, …}, “id”:{id, …}, “counts”:数量, “miss”:miss}` , 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindColorEx("BDBDBD|614B6B|FFFFFF")
If ret Then
    TracePrint "颜色找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint "颜色序号:", ret(i, 0), " 坐标:", ret(i, 1), ret(i, 2)
    Next

    TracePrint "第2种:遍历键名"
    For Each k , v In ret["xy"]
    	For Each xy In v
    		TracePrint "颜色序号:", k, " 坐标:", xy[1], xy[2]
    	Next
    Next
    
    TracePrint "第3种:获取指定颜色序号的坐标"
    If ret["xy"][2] Then 
    	For Each xy In ret["xy"][2]
    		TracePrint "颜色序号2的找到坐标:", xy[1], xy[2]
    	Next
    Else 
    	TracePrint "颜色序号2没有找到"
    End If
Else
    TracePrint "没有找到颜色"
End If
备注: 该命令与 zm.findcolor 类似, 唯一区别在于返回内容是找到的所有坐标二维数组
V3.1830: 加入命令
V3.1831: 修复返回值被前次结果覆盖的问题
命令名称: zm.FindColorTable 超级找色遍历
功能说明: zm.findcolor 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindColorTable(对象table)
命令参数: 对象table: table, 把 zm.findcolor 的对象参数放入table数组中, 实现遍历找色
返回值: 查找结果, table: 找到返回结果保存到表中, 格式为 `{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}` , 全部没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"00AAFF", true}
打怪["黑龙"] = {100,200,300,400, "1155BB", true}
打怪["紫猫BOSS"] = {"FFFFFF", Boss坐标} //这个不点击

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindColorTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findcolor 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
命令名称: zm.FindColorTap 超级找色点击
功能说明: zm.findcolor 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号坐标颜色 = zm.FindColorTap([对象,][x1,y1,x2,y2,][颜色][,方向][,相似度[,智能相似度[,相似度步长]]][,查找次数][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`1.0`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindColor()相同
Dim ret
//找到颜色后执行点击
ret = zm.FindColorTap("00AAFF", 0.9)
If ret Then
    TracePrint "颜色找到并执行了点击"
Else
    TracePrint "没有找到颜色, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
命令名称: zm.FindMultiColor 超级多点找色
功能说明: findmulticolor 更加强大的命令, 具体特色如下

– 支持多个多点找色数据, 并且返回找到的序号, 详见示例
– 想找会变化的动态图? 请看下面示例
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindmulticolor 来自定义修改
– 担心一次找不到颜色? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 查找方向的数值总是记不住? 直接用中文 `”左上”,”中心”,”右上”,”左下”,”右下”,…` 来代替
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的颜色值
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据, 多点数据比较特殊, 详见示例
– 需要防检测点击功能? 推荐使用 zm.findmulticolortap
– 需要遍历多个对象数组? 推荐使用 zm.findmulticolortable
– 需要返回所有找到的坐标? 推荐使用 zm.findmulticolorex

语法格式: 序号坐标颜色 = zm.FindMultiColor([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
第一点颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″, 后面必须跟偏移颜色组, 支持多参数, 详见示例
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
//表示查找两个多点找色数据, 分别是"BDBDBD","56|33|614B6B"和"242424","-10|2|ABC54A,9|4|12DC67"
//支持无限添加多点找色数据, 只要按照格式"第一点颜色","偏移颜色组"依次添加即可
ret = zm.FindMultiColor("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67")
If ret Then
    TracePrint "颜色找到并执行了点击"
Else
    TracePrint "没有找到颜色, 不执行点击"
End If

//--------------------查找变化动态图--------------------//
Dim ret
//原理: 用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
//     说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
//     那么对每一次截图采集一些多点找色数据, 然后让脚本循环多次查找这些数据
//     只要任何一个数据找到了, 都可以认为是找到这个动态图了
//     所以可以使用本命令的无限添加多点数据与设置超时时间来实现
//     想提高查找速度的话, 建议缩小范围, 提高相似度
ret = zm.FindMultiColor("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67",5000)
If ret Then
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "颜色=" & ret(3)
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写, 除对象参数外, 其他参数都要写在范围后面
If zm.FindMultiColor(100, 200, 300, 400, "000000", "44|42|565656", 0.8, 返回数组) Then
    TracePrint "找到序号" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "颜色=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//范围后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//注意, "第一点颜色","偏移颜色组"这两个参数必须连在一起, 详见上面参数介绍
//这句代码意思如下:
//在范围(100,200,300,400)里, 以相似度为(0.8)的设置, 从("中心")向四周循环多点找色查找最多2秒钟
//第一点为("00AAFF")偏移颜色组为("42|42|565656")和第一点为("DD58FF")偏移颜色组为("3|4|A25C6D")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_39")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindMultiColor(100, 200, 300, 400, "00AAFF", "42|42|565656", 0.8, 2000, "中心", "DD58FF", "3|4|A25C6D", True, "显示", "@怪物1", 返回数组, "_39")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_46"), 则表示重写对象里的("_36"), 使日志输出显示在46行
//注意, 多点找色数据不会被覆盖重写, 只会被追加, 相当于所有的多点找色数据都会被用来查找
Dim 史莱姆 = {"00AAFF", "42|42|565656", 0.8, 2000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindMultiColor 史莱姆, 100, 200, 300, 400, "_46", "DD58FF", "3|4|A25C6D"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindMultiColor() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindMultiColor() 命令帮助
zm.SetFindMultiColor {"ret":IXYs, "showlog":"显示"}
If zm.FindMultiColor("00AAFF", "42|42|565656") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "颜色=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "颜色=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "颜色=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点找色数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
偏移颜色组是指相对于第一个点的偏移坐标与颜色,比如第一个点颜色123456在100,120坐标,第二个点颜色abcdef在150,180坐标,那么点2相对于点1的偏移坐标就是150-100,180-120,偏移颜色组为“50|60|abcdef”。
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到颜色值
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时和等待消失无效的问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findmulticolortap
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindMultiColorEx 超级多点找色返回所有坐标
功能说明: zm.findmulticolor 类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组
语法格式: 序号坐标颜色 = zm.FindMultiColorEx([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击坐标][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
第一点颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″, 后面必须跟偏移颜色组, 支持多参数, 详见示例
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: table, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 找到返回结果保存到表中, 格式为`{ {id, x, y}, …, “xy”:{id:{ {x,y}, …}, …}, “id”:{id, …}, “counts”:数量, “miss”:miss}`, 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindMultiColorEx("BDBDBD", "56|33|614B6B", "000000", "56|33|614B6B")
If ret Then
    TracePrint "颜色找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint "颜色序号:", ret(i, 0), " 坐标:", ret(i, 1), ret(i, 2)
    Next

    TracePrint "第2种:遍历键名"
    For Each k , v In ret["xy"]
    	For Each xy In v
    		TracePrint "颜色序号:", k, " 坐标:", xy[1], xy[2]
    	Next
    Next
    
    TracePrint "第3种:获取指定颜色序号的坐标"
    If ret["xy"][2] Then 
    	For Each xy In ret["xy"][2]
    		TracePrint "颜色序号2的找到坐标:", xy[1], xy[2]
    	Next
    Else 
    	TracePrint "颜色序号2没有找到"
    End If
Else
    TracePrint "没有找到颜色"
End If
备注: 该命令与 zm.findmulticolor 类似, 唯一区别在于返回内容是找到的所有坐标二维数组
V2.1829: 加入命令
V3.1830:
函数名从`zm.FindMultiColorAll()`改为`zm.FindMultiColorEx()`
返回值格式改动, 具体看帮助
V3.1831: 修复返回值被前次结果覆盖的问题
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindMultiColorTable 超级多点找色遍历
功能说明: zm.findmulticolor 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindMultiColorTable(对象table)
命令参数: 对象table: table, 把 zm.findmulticolor 的对象参数放入table数组中, 实现遍历多点找色
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 全部没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"00AAFF", "44|12|F01BA0-101010", true}
打怪["黑龙"] = {100,200,300,400, "1155BB", "11|-2|F01123", true}
打怪["紫猫BOSS"] = {"FFFFFF", "-55|102|000000", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindMultiColorTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findmulticolor 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindMultiColorTap 超级多点找色点击
功能说明: zm.findmulticolor 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号坐标颜色 = zm.FindMultiColorTap([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
第一点颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″, 后面必须跟偏移颜色组, 支持多参数, 详见示例
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindMultiColor()相同
Dim ret
ret = zm.FindMultiColorTap("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67")
If ret Then
    TracePrint "颜色找到并执行了点击"
Else
    TracePrint "没有找到颜色, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点找色数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
偏移颜色组是指相对于第一个点的偏移坐标与颜色,比如第一个点颜色123456在100,120坐标,第二个点颜色abcdef在150,180坐标,那么点2相对于点1的偏移坐标就是150-100,180-120,偏移颜色组为“50|60|abcdef”。
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindPic 超级找图
功能说明: findpic 更加强大的命令, 具体特色如下

– 想找会变化的动态图? 请看下面示例
– 附件Attachment单词太长? 那就直接省略掉, 只写图片文件名
– 想要兼容多套分辨率? 那就指定pic路径默认值为当前分辨率与dpi
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindpic 来自定义修改
– 担心一次找不到图片? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 查找方向的数值总是记不住? 直接用中文 `”左上”,”中心”,”右上”,”左下”,”右下”,…` 来代替
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的图片名
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.findpictap
– 需要遍历多个对象数组? 推荐使用 zm.findpictable

语法格式: 序号坐标图片名 = zm.FindPic([对象,][x1,y1,x2,y2,][图片][,偏色][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
图片: 字符串, 可选, 查找的图片路径, 多个图片路径用“|”隔开, 支持透明图, 支持PNG BMP JPG等格式
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为”000000″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
//一张图片名实现附件找图功能, 省略了Attachment:
ret = zm.FindPic("图片.png")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "图片名=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "图片名=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "图片名=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------查找变化动态图--------------------//
Dim ret
//原理: 用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
//      说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
//      那么对每一次截图并保存下来, 只要任何一张图找到了, 都可以认为是找到这个动态图了
//      所以可以使用本命令设置超时时间来实现
//      想提高查找速度的话, 建议缩小范围, 提高相似度
ret = zm.FindPic("图片1.png|图片2.png|图片3.png",5000)
If ret Then
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "图片名=" & ret(3)
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写, 除对象参数外, 其他参数都要写在范围后面
If zm.FindPic(100, 200, 300, 400, "图片1.bmp|Attachment:图片2.png|/sdcard/图片3.jpg", 0.8, 返回数组) Then
    TracePrint "找到序号" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "图片名=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//范围后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//注意, "第一点颜色","偏移颜色组"这两个参数必须连在一起, 详见上面参数介绍
//这句代码意思如下:
//在范围(100,200,300,400)里, 以相似度为(0.8)的设置, 从("中心")向四周循环查找("图片.png")最多2秒钟
//找到任何一张后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_54")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindPic(100, 200, 300, 400, "图片.png", 0.8, 2000, "中心", True, "显示", "@怪物1", 返回数组, "_54")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_46"), 则表示重写对象里的("_36"), 使日志输出显示在65行
Dim 史莱姆 = {"图片.png", 0.8, 2000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindPic 史莱姆, "_65", "史莱姆.bmp"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindPic() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindPic() 命令帮助
zm.SetFindPic {"ret":IXYs, "showlog":"显示"}
If zm.FindPic("图片.png") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "图片名=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "图片名=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "图片名=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
透明图是指当你图片4个角的颜色均相同时,则这张图片中所有这个颜色将被视为透明色,在找图匹配点过程中忽略这些点的颜色。另外,透明图也支持PNG格式图片中的透明点。
更多详细说明与例子见
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到图片名
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findpictap
命令名称: zm.FindPicEx 超级找图返回所有坐标
功能说明: zm.findpic 类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组
语法格式: 结果 = zm.FindPicEx([对象,][x1,y1,x2,y2,][图片][,偏色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
图片: 字符串, 可选, 查找的图片路径, 多个图片路径用“|”隔开, 支持透明图, 支持PNG BMP JPG等格式
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为”000000″
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 找到返回结果保存到表中, 格式为`{ {id, x, y}, …, “xy”:{id:{ {x,y}, …}, …}, “id”:{id, …}, “counts”:数量, “miss”:miss}`, 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindPicEx("紫猫.png|学院.bmp|/sdcard/test.png")
If ret Then
    TracePrint "图片找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint "图片序号:", ret(i, 0), " 坐标:", ret(i, 1), ret(i, 2)
    Next

    TracePrint "第2种:遍历键名"
    For Each k , v In ret["xy"]
    	For Each xy In v
    		TracePrint "图片序号:", k, " 坐标:", xy[1], xy[2]
    	Next
    Next
    
    TracePrint "第3种:获取指定图片序号的坐标"
    If ret["xy"][2] Then 
    	For Each xy In ret["xy"][2]
    		TracePrint "图片序号2的找到坐标:", xy[1], xy[2]
    	Next
    Else 
    	TracePrint "图片序号2没有找到"
    End If
Else
    TracePrint "没有找到图片"
End If
备注: 该命令与 zm.findpic 类似, 区别在于返回内容是找到的所有坐标二维数组
V3.1831: 加入命令
命令名称: zm.FindPicTable 超级找图遍历
功能说明: zm.findpic 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindPicTable(对象table)
命令参数: 对象table: table, 把 zm.findpic 的对象参数放入table数组中, 实现遍历找图
返回值: 查找结果, table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 全部没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆1.bmp|史莱姆2.png", true}
打怪["黑龙"] = {100,200,300,400, "龙.png", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师.png", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindPicTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findpic 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
命令名称: zm.FindPicTap 超级找图点击
功能说明: zm.findpic 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号坐标图片名 = zm.FindPicTap([对象,][x1,y1,x2,y2,][图片][,偏色][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
图片: 字符串, 可选, 查找的图片路径, 多个图片路径用“|”隔开, 支持透明图, 支持PNG BMP JPG等格式
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为”000000″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindPic()相同
Dim ret
ret = zm.FindPicTap("图片.png")
If ret Then
    TracePrint "图片找到并执行了点击"
Else
    TracePrint "没有找到图片, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
透明图是指当你图片4个角的颜色均相同时,则这张图片中所有这个颜色将被视为透明色,在找图匹配点过程中忽略这些点的颜色。另外,透明图也支持PNG格式图片中的透明点。
更多详细说明与例子见
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
命令名称: zm.FindStr 超级找字
功能说明: findstr 更加强大的命令, 具体特色如下

– 不想记设置字库与切换字库命令? 本命令已集成这两个功能, 只要填写参数即可
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindstr 来自定义修改
– 担心一次找不到文字? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的文字内容
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.findstrtap
– 需要遍历多个对象数组? 推荐使用 zm.findstrtable

语法格式: 序号与坐标 = zm.FindStr([对象,][x1,y1,x2,y2,][文字][,颜色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,字库文件名][,字库序号][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
颜色: 字符串, 可选, 要文字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
字库文件名: 字符串, 可选, 填写字库的文件名即可, 附件路径`”Attachment:”`可以省略不写
字库序号: 字符串, 可选, 切换字库序号, 0号字库填写`”#0″`, 以此类推, 当填写字库文件名, 不填字库序号时, 默认设置并使用9号字库
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
SetDictEx 0, "Attachment:mq_soft.txt"
UseDict 0
//默认全屏查找颜色为"FFFFFF-101010"的"紫猫学院"这4个字
ret = zm.FindStr("紫猫学院", "FFFFFF-101010")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "文字=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "文字=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "文字=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//设置附件的"mq_soft.txt"为9号字库, 注意, 所有找字命令都会默认使用此字库
//范围省略默认为全屏, 若填写, 则4个数字必须全写, 除对象参数外, 其他参数都要写在范围后面
If zm.FindStr(100, 200, 300, 400, "紫猫学院", "FFFFFF-101010", "mq_soft.txt", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号=" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "文字=" & 返回数组(3)
    TracePrint "找到序号=" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "文字=" & 返回数组[4]
    TracePrint "找到序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "文字=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//文字后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//这句代码意思如下:
//在范围(100,200,300,400)里, 相似度为(0.8), 设置附件字库("mq_soft.txt")为("1")号字库
//限时2000毫秒内循环查找颜色为("FFFFFF-101010")的("紫猫|学院")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_40")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindStr(100, 200, 300, 400, "紫猫|学院", "FFFFFF-101010", 0.8, 2000, True, "mq_soft.txt", "#1", "显示", "@怪物1", 返回数组, "_40")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
Dim 史莱姆 = {"紫猫|学院", 0.8, 3000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStr 史莱姆

//--------------------重写用法--------------------//
//如果参数对象后面还有参数, 比如("_56"), 则表示重写对象里的("_36"), 使日志输出显示在65行
//注意, 如果重写, 则必须给参数文字带前缀"$", 比如"$紫猫|学院"
Dim 史莱姆 = {"$紫猫|学院", 0.8, 1000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStr 史莱姆, "$喵星人", "FFFFFF-101010", 1.0, "_56"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindStr() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindStr() 命令帮助
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStr("喵星人", "00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "文字=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "文字=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "文字=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
当区域范围均为0时,表示全屏查找文字,强烈建议缩小范围查找,这样可以提高效率。
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
颜色格式为“BGR”,目前不支持HSV颜色、不支持背景色识别。
目前只支持附件中的字库,不支持绝对路径,故更新字库后,一定要记得更新附件。
参数字库文件名仅支持新版抓抓制作的字库, 若使用大漠字库, 请用官方命令设置
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到文字
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findstrtap
命令名称: zm.FindStrTable 超级找字遍历
功能说明: zm.findstr 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindStrTable(对象table)
命令参数: 对象table: table, 把 zm.findstr 的对象参数放入table数组中, 实现遍历找字
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//此处省略了设置字库的代码, 请自行补充完善

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆", "000000", true}
打怪["黑龙"] = {100,200,300,400, "黑龙", "123ABC-303030", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师","FFFFFF", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindStrTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findstr 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
命令名称: zm.FindStrTap 超级找字点击
功能说明: zm.findstr 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号与坐标 = zm.FindStrTap([对象,][x1,y1,x2,y2,][文字][,颜色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,字库文件名][,字库序号][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
颜色: 字符串, 可选, 要文字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
字库文件名: 字符串, 可选, 填写字库的文件名即可, 附件路径`”Attachment:”`可以省略不写
字库序号: 字符串, 可选, 切换字库序号, 0号字库填写`”#0″`, 以此类推, 当填写字库文件名, 不填字库序号时, 默认设置并使用9号字库
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindStr()相同
Dim ret
SetDictEx 0, "Attachment:mq_soft.txt"
UseDict 0
ret = zm.FindStrTap("紫猫学院", "FFFFFF-101010")
If ret Then
    TracePrint "文字找到并执行了点击"
Else
    TracePrint "没有找到文字, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
当区域范围均为0时,表示全屏查找文字,强烈建议缩小范围查找,这样可以提高效率。
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
颜色格式为“BGR”,目前不支持HSV颜色、不支持背景色识别。
目前只支持附件中的字库,不支持绝对路径,故更新字库后,一定要记得更新附件。
参数字库文件名仅支持新版抓抓制作的字库, 若使用大漠字库, 请用官方命令设置
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
命令名称: zm.SetCmpColorEx 设置CmpColorEx默认参数
功能说明: 修改 zm.cmpcolorex 的默认参数值。
语法格式: 默认值 = zm.SetCmpColorEx(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
sim | 0.9 | 数值型 | 默认颜色相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
numsim | “1.0” | 字符串 | 默认数量相似度, 取值范围[0, 1.0], 越高越相似
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环对比间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 对比成功后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找色命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级多点比色 都默认输出调试信息
zm.SetCmpColorEx {"ret":IXYs, "showlog":"显示"}
If zm.CmpColorEx("51|66|00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动颜色相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetCmpColorEx(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V3.1830: 加入命令
V3.1835: 加入循环对比间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.SetFindColor 设置FindColor默认参数
功能说明: 修改 zm.findcolor 的默认参数值。
语法格式: 默认值 = zm.SetFindColor(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
color | “” | 字符串 | 默认查找的十六进制颜色值
dir | “左上” | 字符串 | 默认从左上开始查找, 可选[“左上”,”中心”,”右上”,”左下”,”右下”]这几个值
sim | 1.0 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找色命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级找色 都默认输出调试信息
zm.SetFindColor {"ret":IXYs, "showlog":"显示"}
If zm.FindColor("00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindColor(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.SetFindMultiColor 设置FindMultiColor默认参数
功能说明: 修改 zm.findmulticolor 的默认参数值。
语法格式: 默认值 = zm.SetFindMultiColor(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
dir | “左上” | 字符串 | 默认从左上开始查找, 可选[“左上”,”中心”,”右上”,”左下”,”右下”]这几个值
sim | 0.9 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若多点找色命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级多点找色 都默认输出调试信息
zm.SetFindMultiColor {"ret":IXYs, "showlog":"显示"}
If zm.FindMultiColor("00AAFF", "1|4|1432AB") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindMultiColor(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
v3.1852
偏移颜色组参数可以通过 zm.setfindmulticolor 设置 `”offsetxy”:1` 属性或其他数字, 实现偏移坐标再次变动功能, 该属性不支持 zm.findmulticolorex
命令名称: zm.SetFindPic 设置FindPic默认参数
功能说明: 修改 zm.findpic 的默认参数值。
语法格式: 默认值 = zm.SetFindPic(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.9, “showlog”:”显示”}表示修改相似度默认为0.9, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
pic | “Attachment:” | 字符串 | 默认图片路径, 当参数图片只写文件名时, 自动附加此路径
color | “000000” | 字符串 | 默认图片偏色
dir | “左上” | 字符串 | 默认从左上开始查找, 可选[“左上”,”中心”,”右上”,”左下”,”右下”]这几个值
sim | 0.8 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找图命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级找图 都默认输出调试信息
zm.SetFindPic {"ret":IXYs, "showlog":"显示"}
If zm.FindPic("紫猫.bmp") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindPic(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.SetFindStr 设置FindStr默认参数
功能说明: 修改 zm.findstr 的默认参数值。
语法格式: 默认值 = zm.SetFindStr(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
color | “000000” | 字符串 | 默认文字颜色
sim | 0.9 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找字命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级找字 都默认输出调试信息
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStr("紫猫|学院", "FBFBFB-202020", "0", "mq_soft.txt") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindStr(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.KeyPress 超级按键
功能说明: 按下并弹起一个按键, 可加入随机延时防检测
语法格式: 结果 = zm.KeyPress([对象][按键[, 间隔毫秒[, 随机毫秒]]][, 显示日志][, 输出行号][, 备注])
命令参数: 对象: table, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据, 省略默认为null
按键: 字符串_或_数值型, 可选, 字符串时表示某个键的名字, 数值时表示某个键的编码, 填写对象参数后可省略
间隔毫秒: 数值型, 可选, 按下与弹起之间的间隔时间, -1表示与自带KeyPress相同, 单位毫秒, 省略默认为-1
随机毫秒: 数值型, 可选, 与间隔毫秒组成随机数范围, -1表示不随机, 单位毫秒, 省略默认为-1
显示日志: 字符串, 可选, 输出调试日志信息, 支持[“显示”,”隐藏”,”show”,”hide”]这几个值, 省略默认为”隐藏”
输出行号: 字符串, 可选, 格式为”_”开头后跟行号, 比如”_10″表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为”@”开头后跟内容, 比如”@拾取屠龙刀”, 输出调试信息窗口就会增加这条内容, 若连续两个”@@”则表示在浮窗中显示信息, 需要开启显示日志才有效
返回值: table: 返回实际按键与间隔时间表, 格式为{key,t,”key”:key,”t”:t}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//按住电源键3秒后松开
zm.KeyPress "power", 3000

//按住音量+随机3到5秒
zm.KeyPress "VolUp", 3000, 5000
备注: V3.1835: 初次加入
命令名称: zm.KeyPressCopy 按下复制键
功能说明: 模拟按下快捷键复制文本, 类似于`Ctrl+C`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressCopy(是否关闭菜单)
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressCopy()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressCut 按下剪贴键
功能说明: 模拟按下快捷键剪贴文本, 类似于`Ctrl+X`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressCut(是否关闭菜单)
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressCut()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressDel 按下删除键
功能说明: 删除文本内容, 可以向左或向右删除, 也可以删除当前一行内容, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressDel([方向])
命令参数: 方向: 数值型, 可选, 0表示删除光标左边的字符, 1表示删除光标右边的字符, 2表示删除当前一行内容, 省略默认为0
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressDel()   //删除左边的
zm.KeyPressDel(1)  //删除右边的
zm.KeyPressDel(2)  //删除一整行
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressPaste 按下粘贴键
功能说明: 模拟按下快捷键粘贴文本, 类似于`Ctrl+V`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressPaste(是否关闭菜单)
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressPaste()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressScreenShot 按下截图键
功能说明: 按下截图键自动保存, 注意, 部分设备的截图文件夹位置可能不一致, 需要手动设置
语法格式: 结果 = zm.KeyPressScreenShot([截图文件夹][, 保存路径])
命令参数: 截图文件夹: 字符串, 可选, 指定设备默认截图文件夹路径, 大部分设备默认路径为”/sdcard/Pictures/Screenshots/”, 截图路径不对时, 请手动截图一次查看截图文件夹路径, 本参数必须以”/”结尾
保存路径: 字符串, 可选, 复制截取的图片到指定文件路径, 省略默认不复制
返回值: 字符串: 返回默认保存到截图文件夹的图片路径, 不受参数2影响
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path
path = zm.KeyPressScreenShot() //按下截图键保存
TracePrint path
备注: 注意, 部分设备的截图文件夹位置可能不一致, 请手动截图一次查看截图文件夹路径, 再传入到截图文件夹参数中
V3.1852: 初次加入命令
命令名称: zm.KeyPressSelectAll 按下全选键
功能说明: 模拟按下快捷键粘贴文本, 类似于`Ctrl+A`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressSelectAll([是否关闭菜单])
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressSelectAll()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressStr 模拟按键输入
功能说明: 模拟KeyPress输入字符串内容, 在InputText无效情况下尝试使用, 仅支持小写字母, 数字, 英文标点符号, 不支持大写字母, 中文!
语法格式: 结果 = zm.KeyPressStr(按键字符串[, 间隔毫秒])
命令参数: 按键字符串: 字符串, 待输入的字符串内容, 仅支持小写字母, 数字, 英文标点符号, 不支持大写字母, 中文
间隔毫秒: 数值型, 可选, 两个字符串之间按键间隔时间, 单位毫秒, 省略默认为200
返回值: 布尔型: 成功返回true, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//输入abc,def
zm.KeyPressStr "abc,def"
备注: 命令原型是使用KeyPress命令模拟按下字符串参数的每一个字符键, 所以不支持中文, 大写字母之类的字符!
V3.1835: 初次加入
命令名称: zm.KeyPressSwitch 打开运行程序列表
功能说明: 打开当前后台程序列表, 类似于切换应用的键, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressSwitch()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressSwitch()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.SetKeyPress 设置超级按键
功能说明: 修改 ` zm.keypress ` 的默认参数值
语法格式: 结果 = zm.SetKeyPress(属性表)
命令参数: 属性表: table, 按照指定格式对表中的键值对进行赋值, 例如{“t”:100, “rndt”:200, “showlog”:”显示”}表示修改按下与弹起之间随机延时100到200毫秒, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
t | -1 | 数值型 | 按下与弹起的间隔毫秒, -1表示KeyPress的默认值
rndt | -1 | 数值型 | 与间隔毫秒组成随机数范围, -1表示不随机
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值

返回值: table: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//设置按键按下与弹起之间的间隔时间为随机1000毫秒到2000毫秒
zm.SetKeyPress {"t":1000, "rndt":2000}
备注: V3.1835: 初次加入
命令名称: zm.RndArrElement 随机数组元素
功能说明: 从一维数组的指定下标范围随机取元素。
语法格式: 结果 = zm.RndArrElement(一维数组[, 起始下标[, 终止下标]])
命令参数: 一维数组: 数组型, 待随机取值的一维数组。
起始下标: 数值型, 可选参数,表示下标随机范围,当终止下标省略时,随机0到起始下标。
终止下标: 数值型, 可选参数,表示下标随机范围,当起始下标省略时,随机0到最大下标。
返回值: 任意类型:返回随机到的数组元素。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫", "猫", "编", "程", "学", "院", 345911220}
Dim s = zm.RndArrElement(a)
TracePrint s
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次,防止出现有规律的随机。
V1.1720: 加入命令
命令名称: zm.RndInitSeed 初始化随机种子
功能说明: 使用socket库初始化随机种子, 防止规律随机, 建议省略参数, zm.Init()内部已经执行此函数, 无需重复调用
语法格式: 结果 = zm.RndInitSeed([种子])
命令参数: 种子: 数值型, 可选, 要初始化的种子, 省略默认将对当前时间计算获取种子值
返回值: 数值型:返回随机数种子
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.RndInitSeed //如果你开头执行过zm.Init()命令, 则无需再调用本命令
备注: V1.1720: 加入命令
V1.1730: 修复报错问题
V1.1738: 优化提示
命令名称: zm.RndName 随机取姓名
功能说明: 随机取姓名,可以指定性别。
语法格式: 结果 = zm.RndName([性别])
命令参数: 性别: 数值型, 可选参数,表示取姓名的性别,0为女性,1为男性,默认省略为null,表示全随机。
返回值: 字符串:返回随机姓名结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim name = zm.RndName()
TracePrint name
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
V1.1720: 加入命令
命令名称: zm.RndNum 随机整数
功能说明: 获取指定范围的随机数,两个参数不区分大小顺序。
语法格式: 结果 = zm.RndNum(m, n)
命令参数: m: 数值型, 可选参数,最大值或最小值,省略默认为0。
n: 数值型, 可选参数,最大值或最小值,省略默认为0。
返回值: 数值型:返回参数范围的随机整数。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RndNum(100, 10) //随机10到100
TracePrint zm.RndNum(10, 100) //随机10到100
TracePrint zm.RndNum(100)     //随机0到100
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
V1.1720: 加入命令
命令名称: zm.RndPos 随机坐标
功能说明: 从多个坐标中随机获取一个坐标与序号
语法格式: 结果 = zm.RndPos([x,y,…][坐标数组,…])
命令参数: x: 数值型, 横坐标数值, 与坐标数组参数二选一, 详见例子
y: 数值型, 纵坐标数值, 与坐标数组参数二选一, 详见例子
坐标数组: 表, 由坐标组成的数组, 格式为{x,y}, 与坐标数值参数二选一, 详见例子
返回值: 表: 返回序号与坐标, 序号从0开始, 格式为{id, x, y}
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//------------数值坐标参数例子------------//
//支持任意数量的坐标, 只要按照x,y格式顺序填写即可
//不可以与坐标数组参数同时填写!
//下面例子是从(100,200),(300,400),(500,600)这3个坐标中随机获取一个坐标
Dim xy = zm.RndPos(100,200,300,400,500,600)
TracePrint "序号:" & xy(0), ", x坐标=" & xy(1), ", y坐标=" & xy(2)

//------------坐标数组参数例子------------//
//支持任意数量的坐标数组, 不可以与数值坐标参数同时填写!
//下面例子是从(100,200),(300,400),(500,600)这3个坐标中随机获取一个坐标
Dim xxyy = zm.RndPos({100,200},{300,400},{500,600})
TracePrint "序号:" & xxyy(0), ", x坐标=" & xxyy(1), ", y坐标=" & xxyy(2)
备注: V1.1804: 加入命令
命令名称: zm.RndStr 随机字符串
功能说明: 随机指定范围的字符串内容。
语法格式: 结果 = zm.RndStr(个数[, 模式[, 是否不重复]])
命令参数: 个数: 数值型, 随机字符个数
模式: 数值型, 可选参数,表示随机内容,详见下表格,多个类型可相加,省略默认为1+2+4
是否不重复: 布尔型, 可选参数,是否取不重复随机内容,省略默认为false

模式参数 | 表示范围
—–|—–
1 | 随机0到9的数字
2 | 随机a到z的小写字母
4 | 随机A到Z的大写字母
8 | 随机标点符号!#$%&()*+,-./:;<=>?@[\]^_`{|}~’

返回值: 字符型:随机到的字符串内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RndStr(5)
TracePrint zm.RndStr(6, 2)
TracePrint zm.RndStr(10, 1 + 4, true)
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
V1.1720: 加入命令
V1.1724: 增加随机标点符号。
V1.1802: 修复可选参数无效问题
命令名称: zm.RndUniqueArr 不重复随机数
功能说明: 从一维数组中随机取指定个数的不重复元素值。
语法格式: 结果 = zm.RndUniqueArr([数组,][ 最小值, 最大值,] 个数)
命令参数: 数组: 数组型, 可选,一维数组,待随机的数组,与最小值最大值参数二选一。
最小值: 数值型, 可选,随机最小值,与数组参数二选一。
最大值: 数值型, 可选,随机最大值,与数组参数二选一。
个数: 数值型, 可选,获取随机数的数量,省略为最大个数,即打乱顺序,洗牌功能。
返回值: 数组型:获取到的不重复随机元素。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim b = zm.RndUniqueArr(a, 5)
TracePrint zm.VarInfo(b)

//从1到10中随机取5个不重复随机数
Dim c = zm.RndUniqueArr(1,10,5)
TracePrint zm.VarInfo(c)
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
提供的一维数组里元素不能出现重复,否则结果可能会出现重复。
V1.1720 加入命令
V1.1750 加入数字范围参数
V3.1830 从`zm.RndNoRepeatArr()`函数名改为`zm.RndUniqueArr()`
命令名称: zm.UUID 生成UUID
功能说明: 生成唯一不重复的UUID, 失败返回null, 建议在脚本开头执行一次 zm.init 后使用本命令
语法格式: 结果 = zm.UUID([格式])
命令参数: 格式: 数值型, 可选, 表示返回大小写格式, 0为小写, 1为大写, 省略默认为0
返回值: 字符串: 返回36位长度的UUID字符串, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

For 10
	TracePrint zm.UUID()
Next
备注: V1.1820: 加入命令
V3.1902: 加入返回大小写参数