在奇迹世界里面,血条的颜是并不是一个固定的数值。而空血状态的下的也不是固定的数值。我们应该怎样来根据这个颜来判断何时加血呢?
比较简单的办法是用ifcolor 命令的相似颜。可是有的时候你颜设置的不好,并不能准确的来判定。其实还有更准确点的办法。
让我们先来分析一下奇迹世界的血条
在1024*768分辨率下,血条的起始坐标是87,11对应的颜是#007108 终点坐标是295,11对应的颜是#00B00C
再看一段其他坐标点对应的颜数值:
104,11=007708
105,11=007708
106,11=007708
107,11=007808
108,11=007808
109,11=007808
110,11=007808
111,11=007908
112,11=007909
113,11=007909
114,11=007A09
115,11=007A09
116,11=007A09
117,11=007B09
这些是满血时候坐标的一段变化情况。大家有没有发现其中的规律,也就是这个血条是在一定范围内逐渐变化的。直接看血条的颜我们也能看出来。是一个线性渐变的血条。
其中颜的最低值是#007108 最高值是#00B00C
拿#007108来说,其中的00是Blue的值,71是Green的值,08是Red的值
我们可以用VBS里面的RGB函数来求出这个颜的具体RGB值是多少
具体用法是:RGB(red,green,blue) 其中red green blue 必须是0-255之间的整数,所以我们要先把他们转成10进制的。
可以用下面的代码来求
1.C="007108"
2.VBS r=Cint("&H" & Right(c,2))
3.VBS g=Cint("&H" & Mid(c,3,2))
4.VBS b=Cint("&H" & Left(c,2))
5.VBS a=RGB(r,g,b)
6.VBSCall MessageBox (a)
复制代码
得到的结果是
#007108=28936
#00B00C=45068
也就是血条颜的RGB值范围是28936-45068之间,也就是如果x坐标在87-295之间,y为11的时候。这个点的RGB在这个范围之内说明是有血状态。
这样的话我们可以通过先获取血量像素点的颜值来判断是否为有血状态,
代码如下:
1.VBSCall c=GetPixelColor(x,y)
2.VBS r=Cint("&H" & Right(c,2))
3.VBS g=Cint("&H" & Mid(c,3,2))
4.VBS b=Cint("&H" & Left(c,2))
5.VBS a=RGB(r,g,b)
6.If a>28936 and a<45068
7.KeyPress 57,1
8.EndIf
复制代码
其实还有更简单的办法:大家可以从上面的数据看出,血条颜的B值始终为0。
这样我们只要读取颜点的B值就,之后判断是否为0就可以决定是否加血了。
比如我写的这个脚本
1.UserVar HP=60 血量为多少时使用快捷键9的技能或者药品加血,0为不使用自动加血
2.HPYansheX=87+Int(208*HP/100)渐变颜代码大全
3.UserVar YC=200 用户自定义延迟,单位为毫秒
4.Rem [继续]
5.If HP>0
6. VBSCall HPYanshe=GetPixelColor(HPYansheX,11)
7. VBS HPYansheb=Cint( "&H" & Left(HPYanshe,2))
8. If HPYansheb<>0
9. KeyPress 57,1
10. EndIf
11.EndIf
12.Delay 50
13.KeyPress 48,1
14.Delay YC
15.Goto [继续]
复制代码
血条可以这么来判断,蓝条当然也可以。。具体写法大家再自己考虑一下吧。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论