总来来说就是一次循环就执行一个动作,代码按照界面来操作(到了这个界面应该做什么动作)
遵循这个理论下面是具体的执行标准

代码规范

  • 用else if代替单条if
  • 每条else if代表一个界面

Debug技巧

  • 刚修改的地方全部注释,缩小范围
  • 注释一整段if语句,缩小范围

取色技巧

  • 找点的时候不要去找阴影区域的点

封装

滑动选服

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Do
ReleaseCapture
KeepCapture

If 拖动左侧区到最上面 Then
TracePrint"拖动左侧区到最上面":msg"拖动左侧区到最上面"
SnapShot(游戏文件存放 & "/www.png", 533,379,628,611)
Swipe(511,618,140,594,200)
Delay 1000
ReleaseCapture
KeepCapture
If 找图(533,379,628,611,游戏文件存放&"/www.png", 0.9) Then
拖动左侧区到最上面 = False
End If
Dir.Delete(游戏文件存放&"/www.png")
ElseIf 滑动左侧区服 Then
TracePrint"11111111111111111"
SnapShot(游戏文件存放&"/qqq.png",19,387,100,596)
//------------------------------
FindColor(0,507,114,679,"E9E7D0-333333",4,1.0,intX,intY)
Dim sud = RndNum(10,20),间隔
TracePrint intX,intY
TouchDown intX,intY, 1
Delay RndNum(300,500)
dim 落点X = intX
Do
间隔 = 593 - 落点X
// TracePrint 间隔
If 间隔 > 100 Then
落点X = 落点X + RndNum(30,40)
ElseIf 间隔 > 30 Then
落点X = 落点X + RndNum(15,20)
ElseIf 间隔 > 5 Then
sud = RndNum(5,10)
落点X = 落点X + RndNum(4, 7)
ElseIf 间隔 > 0 Then
sud = RndNum(5,10)
落点X = 落点X + RndNum(1, 2)
ElseIf 间隔 <= 0 Then
Exit Do
End If
// TracePrint 落点X
TouchMove 落点X, intY+RndNum(-3,3) , 1, sud
Loop
Delay RndNum(150,300)
TouchUp 1
Delay 1000
//------------------------------
ReleaseCapture
KeepCapture
If 找图(19,387,100,596,游戏文件存放&"/qqq.png", 0.9) Then
拖动左侧区到最上面 = True
End If
Dir.Delete(游戏文件存放&"/qqq.png")
滑动左侧区服 = False
Else
滑动左侧区服 = True
TracePrint"---------------------------------------------------"
For i = 0 To 5
//499,202,548,320
// 529,510,631,678
//512,514,644,577
X1=512-114*i
Y1=514
X2=644-114*i
Y2=577

TracePrint X1&","&Y1&","&X2&","&Y2
ReleaseCapture
KeepCapture
If 范围多点找色(X1, Y1, X2, Y2, 服务器选择_服字_最上) Then
intX1 = intX - 35
intY1 = intY - 51
intX2 = intX + 30
intY2 = intY - 12

TracePrint intX1&","&intY1&","&intX2&","&intY2

识别服务器 = Ocr(intX1,intY1,intX2,intY2,"C8DEE1-333333",0.9)
TracePrint "当前识别区服:"&识别服务器&" 目标区服:"&区服
msg("当前识别区服:"&识别服务器&" 目标区服:"&区服)
If CInt(识别服务器) = 区服 Then
TracePrint"选择:"&区服&"区服"
msg"选择:"&区服&"区服"
滑动左侧区服 = False
TracePrint intX1,intY1,intX2,intY2
FindColor(intX1,intY1,intX2,intY2,"E9E7D0-333333",4,1.0,intX,intY)

TracePrint intX,intY
点击 intX, intY, 0 : Delay 1000


For 10
ReleaseCapture
KeepCapture
If 多点找色(创建角色) Then
TracePrint"创建角色"
msg "创建角色"
点击 84,777,500
Delay 3000

Do
ReleaseCapture
KeepCapture
If 多点找色(输入框_下) Then
点击 43,435,2000
del 20
InputText 昵称

点击 583,385,2000
点击 85,1168, 500
Exit Do
ElseIf 多点找色(输入框_上) Then
点击 398,353,2000
del 20
InputText 昵称

点击 583,385,2000
点击 85,1168, 500
Exit Do
End If
Loop



跑地图()

Exit Function
ElseIf 多点找色(协议_接受) Then
TracePrint"接受协议"
msg "接受协议"
点击 intX, intY, 500
End If
Delay 2000
Next

Exit Do
End If
Else
TracePrint"2222222222222"
End If

Next
End If

Loop

三方工具

联众打码

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
Function 联众答题(lintx, linty, rintx, rinty,captchaType,minlen,maxlen)//截图左上坐标x,截图左上坐标y,截图右下上坐标x,截图右下上坐标y,验证码类型,最小长度,最大长度
联众答题 = ""
Dim 图片路径=游戏文件存放 & "/fkysr.png"
Dim ret,返回值
SnapShot(图片路径,lintx, linty, rintx, rinty)
If Dir.Exist(图片路径) = 0 Then
TracePrint"判断答题图片不存在,启动重复截图机制"
For i = 1 To 10
SnapShot (图片路径,lintx, linty, rintx, rinty)
If Dir.Exist(图片路径)<>0 Then
Exit For
End If
If i = 10 Then
TracePrint"保存答题图片失败请检查"
msg "保存答题图片失败请检查"
Exit Function
End If
Next
End If
TracePrint"成功截图,正在进行答题"
msg "成功截图,正在进行答题"
ret = lzdm.lz_SendVerCode(lz_softID, lz_Secret, lz_user, lz_pwd, 图片路径, captchaType, 60, minlen, maxlen)
// ret = Encode.TableToJson(ret)
TracePrint ret
If ret Then
If ret["code"] = 0 Then
lz_captchald = ret["data"]["captchaId"]
返回值 = ret["data"]["recognition"]
TracePrint"验证码识别结果为: ", 返回值
联众答题 = 返回值
Else
TracePrint "验证码结果获取失败, 错误原因: ", ret["message"]
End If
Else
TracePrint "HTTP请求发送失败"
End If

End Function

引入到项目中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
验证码坐标 = Split(联众答题(339,405,605,875,"1321",3,3),"&")
If UBOUND(验证码坐标) <> 2 Then
TracePrint"验证码错误,重新获取":msg"验证码错误,重新获取"

TracePrint"刷新拼图":msg"刷新拼图"

Else
TracePrint"成功"
msg"成功"
End If

For i = 0 To 2
Dim 验证码坐标2 = Split(验证码坐标(i),",")
If UBOUND(验证码坐标2) <> 1 Then
TracePrint"验证码错误,重新获取":msg"验证码错误,重新获取"

Exit For
Else
TracePrint"点击拼图第"&i+1&"个位置":msg"点击拼图第"&i+1&"个位置"
点击(339 + 验证码坐标2(0), 404 + 验证码坐标2(1), 1000)
End If
Next

点击 436,607,500 // 多点一下,防止出现有点到外面的情况

易码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim 结果 = Ocr(312,658,360,779,"f0f0f0-282828",0.8)
TracePrint 结果

Dim 返回结果1 = Url.Get("http://api.fxhyd.cn/UserInterface.aspx?action=login&username="& 易码_用户名 &"&password="& 易码_密码)

Dim MyString
MyString = Split(返回结果1,"|")
Dim token = MyString(1)
TracePrint token

Dim 返回结果2 = Url.Get("http://api.fxhyd.cn/UserInterface.aspx?action=getmobile&token="& token &"&itemid="& 易码_项目编号 &"&isp=1")
MyString = Split(返回结果2,"|")
Dim phonenumber = MyString(1)
TracePrint phonenumber

Dim 返回结果3 = Url.Get("http://api.fxhyd.cn/UserInterface.aspx?action=sendsms&token="& token &"&itemid="& 易码_项目编号 &"&mobile="& phonenumber & "&sms="& 结果)
TracePrint 返回结果3
Delay 20000
点击 242,637,500
EndScript