// ? 单独的字库检查函数 - 放在现有函数后面
// ? 改进的字库检查函数
// ? 恢复原来的字库检查函数,但添加兼容性
Function 检查字库文件()
TracePrint "开始检查字库文件..."
// 先尝试手机助手路径
Dim 等级字库路径 = "Attachment:等级字库.txt"
TracePrint "尝试路径:" & 等级字库路径
Dim 等级字库结果 = SetDictEx(0, 等级字库路径)
// 如果失败,尝试其他路径
If 等级字库结果 = 0 Then
TracePrint "路径1失败,尝试路径2"
等级字库路径 = "等级字库.txt"
等级字库结果 = SetDictEx(0, 等级字库路径)
End If
If 等级字库结果 = 0 Then
TracePrint "路径2失败,尝试路径3"
等级字库路径 = "/sdcard/等级字库.txt"
等级字库结果 = SetDictEx(0, 等级字库路径)
End If
TracePrint "等级字库加载结果:" & 等级字库结果
If 等级字库结果 = 0 Then
TracePrint "? 等级字库加载失败!"
检查字库文件 = False
Exit Function
Else
TracePrint "? 等级字库加载成功"
End If
// 检查普通字库
Dim 普通字库路径 = "Attachment:字库.txt"
Dim 普通字库结果 = SetDictEx(1, 普通字库路径)
If 普通字库结果 = 0 Then
TracePrint "普通字库路径1失败,尝试路径2"
普通字库路径 = "字库.txt"
普通字库结果 = SetDictEx(1, 普通字库路径)
End If
If 普通字库结果 = 0 Then
TracePrint "普通字库路径2失败,尝试路径3"
普通字库路径 = "/sdcard/字库.txt"
普通字库结果 = SetDictEx(1, 普通字库路径)
End If
TracePrint "普通字库加载结果:" & 普通字库结果
If 普通字库结果 = 0 Then
TracePrint "? 普通字库加载失败!"
// 这里不返回失败,因为普通字库只在判断弃坑时用到
Else
TracePrint "? 普通字库加载成功"
End If
检查字库文件 = True
End Function
// ? 改进的识别等级函数
Function 识别等级()
TracePrint "开始OCR识别等级..."
UseDict(0)
// 方案1:调整识别区域(扩大范围)
Dim 当前等级 = ocr(640, 1, 710, 80, "5DD7FF-404040|0C83E9-404040|8BE3FF-404040", 0.8)
TracePrint "方案1识别结果:" & 当前等级
// 方案2:如果失败,尝试简化颜色
If 当前等级 = "" Then
TracePrint "方案1失败,尝试方案2..."
当前等级 = ocr(640, 1, 710, 80, "5DD7FF-404040", 0.7)
TracePrint "方案2识别结果:" & 当前等级
End If
// 方案3:如果还失败,尝试更简单的颜色
If 当前等级 = "" Then
TracePrint "方案2失败,尝试方案3..."
当前等级 = ocr(640, 1, 710, 80, "000000-101010", 0.6)
TracePrint "方案3识别结果:" & 当前等级
End If
// 检查识别结果
If 当前等级 = "" Then
TracePrint "? 所有OCR方案都失败"
识别等级 = "EMPTY"
Exit Function
End If
TracePrint "原始等级识别结果:" & 当前等级
Dim 纯数字等级 = 提取数字(当前等级)
TracePrint "纯数字等级:" & 纯数字等级
If 纯数字等级 = "" Then
TracePrint "? 无法提取数字从:" & 当前等级
识别等级 = "NO_NUMBER"
Exit Function
End If
识别等级 = 纯数字等级
End Function
// 提取纯数字函数
Function 提取数字(文本)
Dim 结果, i, 字符
结果 = ""
If 文本 = "" Then
提取数字 = ""
Exit Function
End If
For i = 1 To Len(文本)
字符 = Mid(文本, i, 1)
If IsNumeric(字符) Then
结果 = 结果 & 字符
End If
Next
提取数字 = 结果
End Function
// 灵活的位数保留函数
Function 保留位数(文本, 模式)
Dim 纯数字, 长度, 结果
纯数字 = 提取数字(文本)
长度 = Len(纯数字)
If 长度 = 0 Then
保留位数 = "0"
Exit Function
End If
If 模式 = "百位到十万位" Then
// 保留百位、千位、万位、十万位
Select Case 长度
Case 1, 2:
结果 = "0" // 不足百位返回0
Case 3:
结果 = Mid(纯数字, 1, 1) // 百位
Case 4:
结果 = Mid(纯数字, 1, 2) // 千位、百位
Case 5:
结果 = Mid(纯数字, 1, 3) // 万位、千位、百位
Case 6:
结果 = Mid(纯数字, 1, 4) // 十万位、万位、千位、百位
Case Else:
结果 = Mid(纯数字, 长度 - 5, 4) // 大数字取相应位数
End Select
End If
保留位数 = 结果
End Function
// 判断是否为弃坑阵容的函数
Function 是弃坑阵容(数字文本)
Dim 数值
// 检查是否为空或0
If 数字文本 = "" Or 数字文本 = "0" Then
是弃坑阵容 = False
Exit Function
End If
// 转换为数值
数值 = CLng(数字文本)
// 检查是否在弃坑阵容数值范围内 (7350, 7250, 7150, ..., 3050)
For i = 7350 To 3050 Step -100
If 数值 = i Then
是弃坑阵容 = True
Exit Function
End If
Next
是弃坑阵容 = False
End Function
// 执行掉杯
Sub 执行掉杯操作()
Delay 2000
TracePrint "点击操作1:点击主按钮"
Delay 1000
Tap 90, 650 //点战斗
Delay 1000
Tap 380, 1200 //点投降
Delay 1000
Tap 220, 850 //点确定
Delay 1000
Tap 220, 850 //点确定(加速动画)
Delay 1000
Tap 140, 650 //连胜前战斗()
Delay 1000
Tap 140, 950 //连胜前战斗()
Delay 1000
Tap 350, 1000 //点连胜增益其他地方
Delay 1000
Tap 140, 650 //战斗
End Sub
// 主程序子程序
Sub 判断弃坑()
TracePrint "使用普通字库识别金钱/酒钱..."
UseDict(1) // 使用字典1(普通字库)
Dim 识别金钱 = ocr(605, 1065, 627, 1179, "FFFFFF-404040", 0.9)
TracePrint "原始金钱:" & 识别金钱
Dim 识别酒钱 = ocr(557, 1062, 581, 1179, "FFFFFF-404040", 0.9)
TracePrint "原始酒钱:" & 识别酒钱
// 调用弃坑阵容检查子程序
Call 检查弃坑阵容(识别金钱, 识别酒钱)
End Sub
// 弃坑阵容检查子程序
Sub 检查弃坑阵容(识别金钱, 识别酒钱)
// 处理金钱(保留百位到十万位)
Dim 处理金钱
处理金钱 = 保留位数(识别金钱, "百位到十万位")
TracePrint "处理后金钱:" & 处理金钱
// 处理酒钱(保留百位到十万位)
Dim 处理酒钱
处理酒钱 = 保留位数(识别酒钱, "百位到十万位")
TracePrint "处理后酒钱:" & 处理酒钱
// 合并检查弃坑阵容(金钱或酒钱任意一个满足即可)
If 是弃坑阵容(处理金钱) Or 是弃坑阵容(处理酒钱) Then
TracePrint "发现弃坑阵容!进行点击操作"
// 记录是哪个满足了条件
If 是弃坑阵容(处理金钱) Then
TracePrint "满足条件的数值(金钱):" & 处理金钱
End If
If 是弃坑阵容(处理酒钱) Then
TracePrint "满足条件的数值(酒钱):" & 处理酒钱
End If
// 在这里添加您的点击操作
// 例如:
Tap 500, 800
Delay 1000
// 可以添加更多操作...
Else
TracePrint "不是弃坑阵容"
TracePrint "金钱:" & 处理金钱 & ",酒钱:" & 处理酒钱
End If
End Sub
// ? 修复:添加主程序入口
Sub 主程序()
// 使用等级字库识别等级
TracePrint "使用等级字库识别等级..."
UseDict(0) // 使用字典0(等级字库)
Dim 当前等级 = ocr(648,1,701,68,"5DD7FF-404040|0C83E9-404040|8BE3FF-404040",0.9)
TracePrint "当前等级:" & 当前等级
// 直接在判断时清理非数字字符
If CLng(提取数字(当前等级)) > 630 Then
TracePrint "等级大于630,执行掉杯1"
Call 执行掉杯操作()
Else
TracePrint "等级小于等于630,执行操作2"
Call 判断弃坑()
// 小于等于630的点击操作
MoveZoomOut(100,100,400,400,1000)//缩放
Delay 1000
Swipe 100, 200, 200,200, 1000//滑动
Delay 1000
Tap 90, 650 //开始
Delay 500
Tap 70,477 //选择气球
Delay 500
Tap 563,74 // 左
Tap 85,658 // 下
Tap 567,1223 //右
Tap 309,374 // 左下
Tap 370,1005 //右下
Tap 705,395 //上
Delay 100
Tap 150,470 //气球技能
Delay 500
Tap 66,360 //选择骨枪
Delay 500
Tap 563,74 // 左
Tap 563,74 // 左
Delay 100
Tap 150,360 //骨枪技能
Tap 85,658 // 下
Tap 85,658 // 下
Tap 567,1223 //右
Tap 567,1223 //右
Tap 714,910 //右上
Tap 714,910 //右上
//补充气球
Delay 100
Tap 70,477 //选择气球
Tap 370,1005 //右下
Tap 563,74 // 左
Tap 370,1005 //右下
End If
End Sub
// ? 新的安全主程序 - 带详细成功提示
Sub 安全主程序()
TracePrint "=== 脚本开始执行 ==="
Delay 1000
// 第一步:检查字库
TracePrint "【步骤1】开始检查字库文件..."
If 检查字库文件() = False Then
TracePrint "? 字库检查失败,脚本退出"
ShowMessage "字库加载失败,请检查文件", 3000
Exit Sub
Else
TracePrint "? 字库检查成功!"
ShowMessage "字库加载成功", 1000
End If
// 第二步:识别等级
TracePrint "【步骤2】开始识别等级..."
Dim 当前等级 = 识别等级()
// 处理识别错误的情况
If 当前等级 = "EMPTY" Then
TracePrint "? 等级识别结果为空,脚本退出"
ShowMessage "等级识别失败,重新尝试", 2000
Delay 2000
Exit Sub
ElseIf 当前等级 = "NO_NUMBER" Then
TracePrint "? 无法提取等级数字,脚本退出"
ShowMessage "无法识别等级数字", 2000
Exit Sub
End If
TracePrint "? 等级识别成功:" & 当前等级
ShowMessage "等级识别成功:" & 当前等级, 1500
// 第三步:调用您原有的主程序逻辑
TracePrint "【步骤3】开始执行主程序逻辑..."
Call 主程序()
TracePrint "? 主程序执行完成"
TracePrint "=== 脚本执行完成 ==="
ShowMessage "脚本执行完成", 1000
End Sub
Call 安全主程序()