Skip to content

Latest commit

 

History

History
75 lines (47 loc) · 4.17 KB

File metadata and controls

75 lines (47 loc) · 4.17 KB

脚本队列(启动页)

python main.py --gui 下,启动页右侧提供执行队列:将多个脚本按顺序排好后一次性运行;引擎线程在当前脚本正常退出后,由主窗口自动加载下一项,无需为「进入下一脚本」按停止键。

实现涉及:ui/page_launcher.py(列表与按钮)、ui/main_window.py(队列状态与衔接逻辑)、core/engine.pystop_requested 结束主循环)、core/script_host.pytick 返回值)、core/script_context.pyctx.finish())。


基本操作

操作 说明
加入队列 在左侧脚本列表选中一项,点「加入队列」;或右键脚本 →「加入队列」
调整顺序 选中队列中的项,使用「上移」「下移」
运行队列 点「运行队列」,确认对话框后从第一项开始加载
中止队列 红色「中止队列」,或全局快捷键(配置项 QUEUE_ABORT_HOTKEY,默认 f9):立即停止当前引擎,并取消队列中尚未开始的项
顺序 / 循环 单选 顺序执行:全部脚本各跑完一轮后结束;循环执行:最后一项正常退出后回到第一项,直到点「中止队列」

队列中的每一项仍是普通脚本项目(manifest.json + tick.py),与双击列表单独加载无区别。


如何「正常退出」当前脚本(衔接下一项)

引擎主循环在 WorldState.stop_requested == True 时结束;线程结束后,主窗口若处于队列模式且未「中止队列」,会自动启动下一脚本。

推荐写法(二选一):

  1. ctx.finish()
    在任务完成分支调用一次即可(等价于设置 ctx.state.stop_requested = True)。

  2. tick 显式 return False
    仅当本次调用的返回值为字面量 False 时视为脚本结束。
    注意return 或不写返回值会得到 None不会触发结束;其它假值(如 0[])也不会触发。

长期循环类脚本应在「本轮任务完成」条件成立时调用 ctx.finish()(或 return False),否则会一直占用引擎,队列无法前进。

录制生成的 tick.py:在 ctx.run_recorded_ops((...)) 之后会自动追加 ctx.finish(),录播跑完后会退出并进入队列下一项(若未点「中止队列」)。


「停止」与「中止队列」的区别

控件 / 热键 队列中的含义
暂停 / 继续 仅影响当前脚本的 tick 是否执行(与队列衔接无关)
停止STOP_HOTKEY 结束当前引擎线程;不会将队列标记为「整队作废」。线程结束后,若未点「中止队列」,仍会按队列规则尝试加载下一项(与主动 finish 衔接行为一致:都是 stop_requested 导致线程结束)。若你希望只跑当前这一个脚本而不要用队列,请在非队列方式下加载脚本。
中止队列 将队列标记为已中止,并下发停止;当前脚本结束后不再加载后续项。

若需「跳过当前、继续后面的」语义:当前实现下,对「只打断当前脚本」与「打断并接下一项」在停止键上行为接近;要彻底取消后续,请用 「中止队列」


与单独加载脚本的关系

  • 双击列表或热键启动单个脚本时,会清空队列状态(不处于队列模式)。
  • 运行队列期间,主窗口会保持队列模式,直到:顺序模式下最后一项正常退出、用户点「中止队列」、引擎异常、或改加载其它单个脚本。

确认对话框摘要

运行队列前的提示会说明:

  • 各脚本应在逻辑结束时 ctx.finish()return False,以便自动进入下一项;
  • 顺序循环的差异;
  • 停止中止队列的差异。

相关文档

  • ScriptContext_API.mdctx.finish()run_recorded_ops、可中断等待
  • core.md:GUI 结构、输入录制、引擎与 stop_requested
  • 根目录 README.md:功能概览与命令行入口