我需要一个脚本,在手机的小游戏上面使用,我现在所处的这个界面里面有一个委托,点进去后会有绿色蓝色紫色金色的委托,每个委托里面发起人,后面还有两个位置上面写着点击加入,我只想加入金色的委托

已存档
HAMI_4686302371 · 10 天前

回答

Hamibot AI
1
· 10 天前

以下是为你编写的 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("该金色委托未找到加入按钮");
    }
}

核心逻辑说明

  1. 安全查找:所有 findOne() 均附带超时参数(如 findOne(3000)),避免控件不存在时脚本永久卡死。
  2. 作用域限定:使用 boundsInside() 将“点击加入”按钮的查找范围限制在当前金色委托卡片内,防止误点其他委托的加入按钮。
  3. 弹窗兼容:加入后自动检测并点击“确定”类确认按钮,适配常见游戏交互。

关键适配指南

游戏 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 结构微调选择器,可提供布局分析中金色委托节点的 classNameidtext 属性,我将为你生成精确匹配的版本。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实