我需要一个脚本,在手机的小游戏上面使用,我现在所处的这个界面里面有一个委托,点进去后会有绿色蓝色紫色金色的委托,每个委托里面发起人,后面还有两个位置上面写着点击加入,我只想加入金色的委托
回答
以下是为你编写的 Hamibot 脚本。脚本已针对 Rhino 1.7.15 引擎优化,避免使用箭头函数与默认参数,并采用带超时的查找方式防止阻塞。
// 文档地址 https://docs.hamibot.com/
"auto";
// 1. 点击“委托”入口
var entry = text("委托").findOne(3000);
if (entry) {
entry.click();
sleep(1500); // 等待列表加载
} else {
toast("未找到委托入口");
exit();
}
// 2. 查找金色委托
// 注意:此处以文本包含“金色”为例。若游戏使用颜色/图标区分,需改用 id、desc 或 className 组合定位。
var goldList = className("TextView").textContains("金色").find();
if (goldList.length === 0) {
toast("当前页面未找到金色委托");
exit();
}
// 3. 遍历并加入
for (var i = 0; i < goldList.length; i++) {
var goldItem = goldList[i];
var b = goldItem.bounds();
// 限定在该委托卡片范围内查找“点击加入”
var joinBtn = className("TextView").text("点击加入")
.boundsInside(b.left, b.top, b.right, b.bottom)
.findOne(500);
if (joinBtn) {
joinBtn.click();
toast("已点击加入金色委托");
sleep(1000);
// 处理可能出现的二次确认弹窗
var confirm = text("确定").findOne(1000);
if (confirm) confirm.click();
} else {
log("该金色委托未找到加入按钮");
}
}
核心逻辑说明
- 安全查找:所有
findOne()均附带超时参数(如findOne(3000)),避免控件不存在时脚本永久卡死。 - 作用域限定:使用
boundsInside()将“点击加入”按钮的查找范围限制在当前金色委托卡片内,防止误点其他委托的加入按钮。 - 弹窗兼容:加入后自动检测并点击“确定”类确认按钮,适配常见游戏交互。
关键适配指南
游戏 UI 通常不会直接用“金色”作为文本,你可能需要通过 Hamibot 的 布局分析工具 获取准确特征:
- 若金色委托有固定
id:改为id("gold_commission_item").find() - 若通过背景色区分:可使用
className("View").drawingOrder(x).find()结合bounds()判断,或使用images模块进行颜色采样。 - 若“点击加入”是图片按钮:改用
desc("点击加入")或className("ImageView").findOne(500)。
最佳实践建议
- 在脚本开头添加
device.setScreenMetrics(1080, 1920);(替换为你的实际分辨率)可提升坐标与边界计算的稳定性。 - 若委托列表需要滑动加载,可在循环末尾加入
swipe(device.width / 2, device.height * 0.8, device.width / 2, device.height * 0.3, 500);并配合sleep(800)实现自动翻页。 - 建议先在测试服或低价值委托上运行,确认选择器精准后再投入正式使用。
如需根据具体游戏的 UI 结构微调选择器,可提供布局分析中金色委托节点的 className、id 或 text 属性,我将为你生成精确匹配的版本。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实