zm.FindMultiColor 超级多点找色

文章目录
  1. 1. 功能
  2. 2. 语法
  3. 3. 参数
  4. 4. 返回值
  5. 5. 示例
  6. 6. 备注

功能

FindMultiColor 多点找色 更加强大的命令, 具体特色如下

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

常见错误

本命令的方向参数是字符串型, 例如"左上"之类, 而按键自带命令的方向是数值型, 例如0之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

语法

序号坐标颜色 = 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", "showfind", "shownofind","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, 使用方法请看示例

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim retA
//表示查找两个多点找色数据, 分别是"BDBDBD","56|33|614B6B"和"242424","-10|2|ABC54A,9|4|12DC67"
//支持无限添加多点找色数据, 只要按照格式"第一点颜色","偏移颜色组"依次添加即可
retA = zm.FindMultiColor("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67")
If retA 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"), 查找结果与其他参数信息
Dim retB = zm.FindMultiColor(100, 200, 300, 400, "00AAFF", "42|42|565656", 0.8, 2000, "中心", "DD58FF", "3|4|A25C6D", True, "显示", "@怪物1", 返回数组, "_39")
If retB 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

//----------------V4.2039版以上支持颜色描述数组数据----------------//
Dim 黑龙, 白龙 //一维数组例子
黑龙 = {"BDBDBD", "56|33|614B6B"}
白龙 = {"242424", "-10|2|ABC54A,9|4|12DC67"}
Dim retD = zm.FindMultiColor(黑龙, 白龙, 0.8)
If retD Then
TracePrint "颜色找到了"
Else
TracePrint "没有找到颜色"
End If

Dim 颜色数组() //二维数组例子
颜色数组(0) = {"BDBDBD", "56|33|614B6B"}
颜色数组(1) = {"242424", "-10|2|ABC54A,9|4|12DC67"}
Dim retC = zm.FindMultiColor(颜色数组, 0.8)
If retC Then
TracePrint "颜色找到了"
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:
  • 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
  • V4.2039: 加入颜色描述数组数据支持
  • V4.2042: 日志参数 showlog 加入 ["显示找到","显示没找到","showfind","shownofind"] 选项