OpenGame只负责按配置路径启动游戏进程。OpenAndEnterGame负责启动游戏、等待窗口就绪、执行EnterGame。EnterGame负责登录页识别、账号输入、点击进入游戏、等待进入大世界。
EnterGame 当前入口节点是 画面识别。它负责登录页、账号输入入口、切换账号入口,以及进入游戏点击后状态的提前分流。
进入游戏按钮和加载配置之间的状态交给 点击进入游戏 节点处理。这个节点使用 assets/game_data/screen_info/enter_game.yml 中的 进入游戏点击后状态 OCR 区域识别以下文本:
点击进入游戏加载配置数据中登录游戏服务器中登录成功资源下载中
登录成功 和 加载中 都会流转到 登录成功 节点。该节点统一处理登录完成后的收尾识别:
加载中区域仍存在时继续等待。- 普通进入大世界弹窗交给
check_screen_to_interact()处理。 - 识别到大世界后结束。
- 如果模板没有识别到
加载中,会用is_gray_loading_screen()通过低饱和度判断黑白灰加载界面并继续等待。 - 若连续数轮都未识别到加载、大世界或已知弹窗,则点击左上角返回作为未知遮挡兜底。
点击进入游戏 文案本身不能区分第一次还是第二次点击,因此流程使用阶段标志辅助判断:
already_login:只表示已经提交账号登录,不代表完成第二次点击。after_first_enter_click:表示已经完成第一次进入游戏点击,或已经识别到加载配置数据中。after_second_enter_click:表示已经进入加载配置后的第二次点击阶段,或已经识别到登录游戏服务器中、登录成功。
登录失败弹窗只在第二次点击之后才在 点击进入游戏 节点里调用 match_login_error() 处理,避免把登录前或普通大世界弹窗混到登录失败兜底里。
- 国际服两次
点击进入游戏通常都需要脚本点击。 - 国服账号密码登录按钮可能自动完成第一次进入游戏点击,截图可能直接落在
加载配置数据中、第二次点击进入游戏、登录游戏服务器中、登录成功,甚至后续加载阶段。 - 因此
画面识别会先用进入游戏点击后的 OCR 区域做轻量检测;只要识别到这些后置状态,就进入点击进入游戏节点继续处理。
资源下载中会记录开始时间并等待,超过MAX_RESOURCE_DOWNLOAD_SECONDS后失败。- 更新完成后会出现
游戏数据已更新,脚本点击游戏数据更新-确定。 - 点击确定后游戏会回到第一次点击进入游戏之前,因此从
点击进入游戏节点返回游戏数据已更新,再流转回画面识别重新开始。
- 进入游戏按钮:
assets/game_data/screen_info/enter_game.yml的点击进入游戏。 - 进入游戏点击后的 OCR 区域:
assets/game_data/screen_info/enter_game.yml的进入游戏点击后状态。 - 更新提示:
游戏数据更新提示和游戏数据更新-确定。 - 加载模板:
assets/game_data/screen_info/loading.yml的加载中。
这些坐标和 OCR 区域应优先通过 YAML 维护,不要在 Python 里新增硬编码坐标。