// ===== 全局延迟配置(统一管理所有 sleep、查找、点击节奏) =====
var DelayConfig = {
clickDelayMin: 100, // 点击后最短延迟(模拟手动点完后停顿)
clickDelayMax: 150, // 点击后最长延迟
findTimeout: 150, // findOne 查找控件最大等待时间
findFast: 100, // 快速查找超时
findSlow: 300, // 较慢查找超时
loopSleep: 150, // 循环中每轮的等待时间(如立即购买刷新循环)
stepSleep: 50, // 各阶段之间默认停顿时间
consoleClearInterval: 8000, // 控制台“清空”时间(毫秒)
retryMax: 100, // 每轮最大状态检测次数(即主流程循环次数)
payStepRetry: 15, // 支付阶段内子步骤最大尝试次数
betweenRoundSleep: 0, // 每轮之间的大延迟(完成或异常后等待时间)
busyRefreshSleep: 80 // 忙点刷新间隔(for 立即购买循环,默认 80ms,与设置界面一致)
};
var settingsWindow;
// ===== 全局运行控制开关 =====
var isRunning = false; // 点击“开始/暂停”按钮后切换,用于控制主循环
// ===== 后台线程生命周期控制 =====
var keepRunning = true; // 点击关闭时设为 false,主线程即刻结束
var mainLoopThread = null; // 保存后台线程对象,便于中断
// ===== 购买方式设置 =====
// "送到家" 或 "到店取"
// 默认购买方式改为到店取;实际值将从存储中载入,可在设置里修改
var purchaseMode = "到店取";
// 是否抢两端(加购数量为2)
var grabTwoItems = false;
// ===== 设置持久化(Auto.js Storage) =====
var settingsStore = storages.create("BuyScriptSettings");
function openSettingsWindow() {
if (settingsWindow) return; // 已打开
settingsWindow = floaty.rawWindow(
<vertical bg="#DD000000">
{/* 可拖拽的标题栏 */}
<horizontal id="title_bar" bg="#FF333333" padding="8" gravity="center_vertical">
<text text="📱" textColor="#FFFFFF" textSize="16sp" marginRight="8"/>
<text text="速度参数设置" textColor="#FFFFFF" textSize="16sp" gravity="center" w="*"/>
<text text="✕" textColor="#FF6666" textSize="18sp" id="btn_title_close" padding="4"/>
</horizontal>
{/* 内容区域 */}
<vertical padding="12">
<text text="通过下方滑块调节脚本点击、查找、循环等速度 (单位 ms)" textColor="#CCCCCC" textSize="12sp" gravity="center" marginTop="2"/>
<vertical marginTop="8">
<horizontal>
<text id="lbl_min" text="最小点击延迟: 100ms" textColor="#FFFFFF" textSize="14sp"/>
<text id="lbl_max" text="最大点击延迟: 150ms" textColor="#FFFFFF" textSize="14sp" marginLeft="10"/>
</horizontal>
<seekbar id="sb_min" max="1000" progress="100"/>
<seekbar id="sb_max" max="1000" progress="150"/>
</vertical>
<vertical marginTop="8">
<text id="lbl_loop" text="循环间隔: 150ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_loop" max="2000" progress="150"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_step" text="步骤间隔: 200ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_step" max="2000" progress="200"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_fast" text="快速查找超时: 100ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_fast" max="1000" progress="100"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_slow" text="慢速查找超时: 300ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_slow" max="2000" progress="300"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_busy" text="盲点刷新间隔: 80ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_busy" max="2000" progress="80"/>
</vertical>
<text text="购买方式" textColor="#FFFFFF" textSize="14sp" marginTop="8"/>
<radiogroup id="rg_mode" orientation="horizontal">
<radio id="rb_home" text="送到家" checked="true" textColor="#FFFFFF"/>
<radio id="rb_store" text="到店取" textColor="#FFFFFF"/>
</radiogroup>
<checkbox id="cb_grab_two" text="抢两端 (加购数量为2)" textColor="#FFFFFF" checked="false"/>
<button id="btn_save" text="保存" marginTop="10"/>
<button id="btn_close" text="关闭" marginTop="4"/>
<button id="btn_debug" text="Debug" marginTop="4"/>
</vertical>
</vertical>
);
}
openSettingsWindow()显示了一下就又隐藏了
回答
你提到的 openSettingsWindow()
显示了一下就又隐藏了,可能是由于浮窗窗口(floaty window)没有正确设置或者被系统自动关闭了。以下是一些可能的原因和解决方法:
1. 确保 floaty.rawWindow
正确创建
检查 floaty.rawWindow
是否成功创建并显示。你可以通过添加日志来确认是否执行到相关代码。
function openSettingsWindow() {
if (settingsWindow) return; // 已打开
// 添加日志,确认函数是否被调用
console.log("openSettingsWindow 被调用");
settingsWindow = floaty.rawWindow(
<vertical bg="#DD000000">
{/* 可拖拽的标题栏 */}
<horizontal id="title_bar" bg="#FF333333" padding="8" gravity="center_vertical">
<text text="📱" textColor="#FFFFFF" textSize="16sp" marginRight="8"/>
<text text="速度参数设置" textColor="#FFFFFF" textSize="16sp" gravity="center" w="*"/>
<text text="✕" textColor="#FF6666" textSize="18sp" id="btn_title_close" padding="4"/>
</horizontal>
{/* 内容区域 */}
<vertical padding="12">
<text text="通过下方滑块调节脚本点击、查找、循环等速度 (单位 ms)" textColor="#CCCCCC" textSize="12sp" gravity="center" marginTop="2"/>
<vertical marginTop="8">
<horizontal>
<text id="lbl_min" text="最小点击延迟: 100ms" textColor="#FFFFFF" textSize="14sp"/>
<text id="lbl_max" text="最大点击延迟: 150ms" textColor="#FFFFFF" textSize="14sp" marginLeft="10"/>
</horizontal>
<seekbar id="sb_min" max="1000" progress="100"/>
<seekbar id="sb_max" max="1000" progress="150"/>
</vertical>
<vertical marginTop="8">
<text id="lbl_loop" text="循环间隔: 150ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_loop" max="2000" progress="150"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_step" text="步骤间隔: 200ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_step" max="2000" progress="200"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_fast" text="快速查找超时: 100ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_fast" max="1000" progress="100"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_slow" text="慢速查找超时: 300ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_slow" max="2000" progress="300"/>
</vertical>
<vertical marginTop="4">
<text id="lbl_busy" text="盲点刷新间隔: 80ms" textColor="#FFFFFF" textSize="14sp"/>
<seekbar id="sb_busy" max="2000" progress="80"/>
</vertical>
<text text="购买方式" textColor="#FFFFFF" textSize="14sp" marginTop="8"/>
<radiogroup id="rg_mode" orientation="horizontal">
<radio id="rb_home" text="送到家" checked="true" textColor="#FFFFFF"/>
<radio id="rb_store" text="到店取" textColor="#FFFFFF"/>
</radiogroup>
<checkbox id="cb_grab_two" text="抢两端 (加购数量为2)" textColor="#FFFFFF" checked="false"/>
<button id="btn_save" text="保存" marginTop="10"/>
<button id="btn_close" text="关闭" marginTop="4"/>
<button id="btn_debug" text="Debug" marginTop="4"/>
</vertical>
</vertical>
);
// 确保窗口显示
settingsWindow.show();
}
2. 确保 floaty
权限已开启
Hamibot 的浮窗功能需要开启“悬浮窗”权限,否则浮窗窗口会无法显示或被系统关闭。你可以通过以下代码检查浮窗权限是否已开启:
if (!float