合并了多个alas fork
Azur Lane bot with GUI (Supports CN, EN, JP, TW, able to support other servers), designed for 24/7 running scenes, can take over almost all Azur Lane gameplay. Azur Lane, as a mobile game, has entered the late stage of its life cycle. During the period from now to the server down, please reduce the time spent on the Azur Lane and leave everything to Alas.
Alas is a free open source software, link: https://github.com/LmeSzinc/AzurLaneAutoScript
Alas,一个带GUI的碧蓝航线脚本(支持国服, 国际服, 日服, 台服, 可以支持其他服务器),为 7x24 运行的场景而设计,能接管近乎全部的碧蓝航线玩法。碧蓝航线,作为一个手游,已经进入了生命周期的晚期。从现在到关服的这段时间里,请减少花费在碧蓝航线上的时间,把一切都交给 Alas。
Alas 是一款免费开源软件,地址:https://github.com/LmeSzinc/AzurLaneAutoScript
EN support, thanks @whoamikyo and @nEEtdo0d.
JP support, thanks @ferina8-14, @noname94 and @railzy.
TW support, thanks @Zorachristine , some features might not work.
GUI development, thanks @18870 , say HURRAY.
- 出击:主线图,活动图,共斗活动,紧急委托刷钻石。
- 收获:委托,战术学院,科研,后宅,指挥喵,大舰队,收获,商店购买,开发船坞,每日抽卡,档案密钥。
- 每日:每日任务,困难图,演习,潜艇图,活动每日AB图,活动每日SP图,共斗活动每日,作战档案。
- 大世界:余烬信标,每月开荒,大世界每日,隐秘海域,短猫相接,深渊海域,塞壬要塞。
- 心情控制:计算心情防止红脸或者保持经验加成状态。
- 活动图开荒:支持在非周回模式下运行,能处理移动距离限制,光之壁,岸防炮,地图解谜,地图迷宫等特殊机制。
- 无缝收菜:时间管理大师,计算委托科研等的完成时间,完成后立即收获。
- 大世界:一条龙完成,接大世界每日,买空港口商店,做大世界每日,短猫相接,购买明石商店,每27分钟清理隐秘海域,清理深渊海域和塞壬要塞,
计划作战模式是什么垃圾,感觉不如Alas......好用。 - 大世界月初开荒:大世界每月重置后,不需要购买作战记录仪(5000油道具)即可开荒。
中文安装教程,包含自动安装教程,使用教程,手动安装教程,远程控制教程。
设备支持文档,包含模拟器运行、云手机运行以及解锁各种骚方式运行。
-
理解 任务 和 调度器 的概念
在 Alas 中每个任务都是独立运行的,被一个统一的调度器调度,任务执行完成后会自动设置这个任务的下一次运行时间。例如,科研 任务执行了一个 4 小时的科研,调度器就会把 科研 任务推迟 4 小时,以达到无缝收菜的目的。
-
理解 自动心情控制 机制
Alas 的心情控制以预防为主,不会等到出现红脸弹窗才去解决,这样可以保持心情值在 120 以上,贪到 20% 的经验。例如,当前心情值是 113,放置于后宅二楼(+50/h),未婚(+0/h),Alas 会等到 12 分钟之后,心情值回复到 120 以上再继续出击。而在这个等待的期间,Alas 也会穿插执行其他任务。
-
正确地使用调度器
调度器的 错误使用方法是只开一两个 任务,手动管理任务或开关 Alas,调度器的 正确使用方法是启用全部 你觉得可能有用的任务,让调度器自动调度,把模拟器和 Alas 都最小化到托盘,忘记碧蓝航线这个游戏。
对照这个表格修改游戏内的设置,正常玩过游戏的都这么设置。
对着改的意思是,这是统一的标准,照着给定的内容执行,不要问为什么,不允许有不一样的。
主界面 => 右下角:设置 => 左侧边栏:选项
| 设置名称 | 值 |
|---|---|
| 帧数设置 | 60帧 |
| 大型作战设置 - 减少TB引导 | 开 |
| 大型作战设置 - 自律时自动提交道具 | 开 |
| 大型作战设置 - 安全海域默认开启自律 | 关 |
| 剧情自动播放 | 开启 |
| 剧情自动播放速度调整 | 特快 |
| 待机模式设置 - 启用待机模式 | 关 |
| 其他设置 - 重复角色获得提示 | 关 |
| 其他设置 - 快速更换二次确认界面 | 关 |
| 其他设置 - 展示结算角色 | 关 |
大世界 => 右上角:雷达 => 指令模块(order):潜艇支援:
| 设置名称 | 值 |
|---|---|
| X 消耗时潜艇出击 | 取消勾选 |
主界面 => 右下角:建造 => 左侧边栏: 退役 => 左侧齿轮图标:一键退役设置:
| 设置名称 | 值 |
|---|---|
| 选择优先级1 | R |
| 选择优先级2 | SR |
| 选择优先级3 | N |
| 「拥有」满星的同名舰船时,保留几艘符合退役条件的同名舰船 | 不保留 |
| 「没有」满星的同名舰船时,保留几艘符合退役条件的同名舰船 | 满星所需或不保留 |
将角色设备的装备外观移除,以免影响图像识别
在提问题之前至少花费 5 分钟来思考和准备,才会有人花费他的 5 分钟来帮助你。"XX怎么运行不了","XX卡住了",这样的描述将不会得到回复。
- 在提问题前,请先阅读 常见问题(FAQ)。
- 检查 Alas 的更新和最近的 commit,确认使用的是最新版。
- 上传出错 log,在
log/error目录下,以毫秒时间戳为文件夹名,包含 log.txt 和最近的截图。若不是错误而是非预期的行为,提供在log目录下当天的 log和至少一张游戏截图。
- 无法处理网络波动,重连弹窗,跳小黄鸡。
- 在极低配电脑上运行可能会出现各种问题,极低配指截图耗时大于1s,一般电脑耗时约0.5s,高配耗时约0.3s。
- 演习可能SL失败,演习看的是屏幕上方的血槽,血槽可能被立绘遮挡,因此需要一定时间(默认1s)血量低于一定值(默认40%)才会触发SL。一个血皮后排就有30%左右的血槽,所以有可能在 1s 内被打死。
- 极少数情况下 ADB 和 uiautomator2 会抽风,是模拟器的问题,重启模拟器即可。
- 拖动操作在模拟器卡顿时,会被视为点击
见 #1416。
海图识别 是一个碧蓝航线脚本的核心,如果只是单纯地使用 模板匹配 (Template matching) 来进行索敌,就不可避免地会出现 BOSS被小怪堵住 的情况。 Alas 提供了一个更好的海图识别方法,在 module.map_detection 中,你将可以得到完整的海域信息,比如:
2020-03-10 22:09:03.830 | INFO | A B C D E F G H
2020-03-10 22:09:03.830 | INFO | 1 -- ++ 2E -- -- -- -- --
2020-03-10 22:09:03.830 | INFO | 2 -- ++ ++ MY -- -- 2E --
2020-03-10 22:09:03.830 | INFO | 3 == -- FL -- -- -- 2E MY
2020-03-10 22:09:03.830 | INFO | 4 -- == -- -- -- -- ++ ++
2020-03-10 22:09:03.830 | INFO | 5 -- -- -- 2E -- 2E ++ ++
更多文档,请前往 WIKI。
Alas 仍在活跃开发中,我们会不定期发布未来的工作在 Issues 上并标记为 help wanted,欢迎向 Alas 提交 Pull Requests,我们会认真阅读你的每一行代码的。
哦对,别忘了阅读 开发文档。
- AzurStats,基于 Alas 实现的碧蓝航线掉落统计平台。
- AzurLaneUncensored,与 Alas 对接的碧蓝航线反和谐。
- ALAuto,EN服的碧蓝航线脚本,已不再维护,Alas 模仿了其架构。
- ALAuto homg_trans_beta,Alas 引入了其中的单应性变换至海图识别模块中。
- PyWebIO,Alas 使用的 GUI 库。
- MaaAssistantArknights,明日方舟小助手,全日常一键长草,现已加入Alas豪华午餐 -> MAA 插件使用教程
- FGO-py,全自动免配置跨平台开箱即用的Fate/Grand Order助手.启动脚本,上床睡觉,养肝护发,满加成圣诞了解一下?
- StarRailCopilot,星铁速溶茶,崩坏:星穹铁道脚本,基于下一代Alas框架。
- Discord: https://discord.gg/AQN6GeJ
- QQ 八群:938081688
- QQ 一群:1087735381 (有开发意向请加一群,入群需要提供你的Github用户名)
- Bilibili 直播间:https://live.bilibili.com/22216705 ,偶尔直播写Alas,
为了拯救Alas,Lme决定出道成为偶像
智能调度系统(OpsiScheduling)是AzurLaneAutoScript中用于协调大世界任务的核心调度器,负责在侵蚀1练级(OpsiHazard1Leveling)和黄币补充任务(OpsiMeowfficerFarming、OpsiObscure、OpsiAbyssal、OpsiStronghold)之间智能切换。
| 配置项 | 说明 | 默认值 |
|---|---|---|
Scheduler.Enable |
智能调度总开关 | false |
OperationCoinsPreserve |
侵蚀1黄币保留值(覆盖原配置) | 0 (使用原配置) |
ActionPointPreserve |
行动力保留值(覆盖所有任务) | 0 (使用原配置) |
ActionPointNotifyLevels |
行动力阈值通知列表 | "500, 1000, 2000, 3000" |
OperationCoinsReturnThreshold |
黄币返回阈值 | null (等于CL1保留值) |
OperationCoinsReturnThresholdApplyToAllCoinTasks |
黄币阈值是否适用于所有黄币补充任务 | true |
EnableMeowfficerFarming |
启用短猫相接 | true |
EnableObscure |
启用隐秘海域 | false |
EnableAbyssal |
启用深渊海域 | false |
EnableStronghold |
启用塞壬要塞 | false |
flowchart TD
Start([用户启动OpsiScheduling任务]) --> CheckEnabled{智能调度<br/>是否启用?}
CheckEnabled -->|否| End1([跳过执行])
CheckEnabled -->|是| GetResources[获取当前资源状态]
GetResources --> GetYellowCoins[读取当前黄币数量]
GetYellowCoins --> GetActionPoint[进入行动力界面<br/>读取总行动力]
GetActionPoint --> GetCL1Preserve[获取CL1黄币保留值<br/>优先使用智能调度配置]
GetCL1Preserve --> CheckYellowCoins{黄币 < 保留值?}
CheckYellowCoins -->|否| YellowCoinsEnough[黄币充足]
CheckYellowCoins -->|是| YellowCoinsLow[黄币不足]
%% 黄币充足分支
YellowCoinsEnough --> GetMinAPReserve[获取CL1最低行动力保留值]
GetMinAPReserve --> CheckMinAP{行动力 < 最低保留?}
CheckMinAP -->|是| NotifyAPLow[推送通知:<br/>行动力低于最低保留]
CheckMinAP -->|否| ExecuteCL1[执行侵蚀1练级]
NotifyAPLow --> DelayScheduling1[延迟智能调度1小时]
DelayScheduling1 --> End2([任务停止])
ExecuteCL1 --> DisableAllCoinTasks[禁用所有黄币补充任务]
DisableAllCoinTasks --> CallCL1[调用OpsiHazard1Leveling]
CallCL1 --> End3([任务停止])
%% 黄币不足分支
YellowCoinsLow --> GetMeowAPPreserve[获取短猫行动力保留值<br/>优先使用智能调度配置]
GetMeowAPPreserve --> CheckMeowAP{行动力 < 短猫保留值?}
CheckMeowAP -->|是| NotifyBothLow[推送通知:<br/>黄币与行动力双重不足]
CheckMeowAP -->|否| GetEnabledTasks[获取智能调度中<br/>启用的黄币补充任务]
NotifyBothLow --> DelayScheduling2[延迟智能调度1小时]
DelayScheduling2 --> End4([任务停止])
GetEnabledTasks --> CheckTasksEmpty{启用的任务<br/>列表为空?}
CheckTasksEmpty -->|是| DefaultMeow[默认启用短猫相接]
CheckTasksEmpty -->|否| CheckTasksEnabled[检查各任务调度器状态]
DefaultMeow --> CheckTasksEnabled
CheckTasksEnabled --> AutoEnableTasks[自动启用未启用的任务]
AutoEnableTasks --> NotifySwitchToCoin[推送通知:<br/>切换至黄币补充任务]
NotifySwitchToCoin --> CallCoinTasks[调用所有可用的<br/>黄币补充任务]
CallCoinTasks --> CheckCoolingDown{有冷却任务?}
CheckCoolingDown -->|是| DelayToCD[延迟智能调度<br/>到冷却任务之后]
CheckCoolingDown -->|否| End5([任务停止])
DelayToCD --> End6([任务停止])
style Start fill:#e1f5e1
style End1 fill:#ffe1e1
style End2 fill:#ffe1e1
style End3 fill:#ffe1e1
style End4 fill:#ffe1e1
style End5 fill:#ffe1e1
style End6 fill:#ffe1e1
flowchart TD
CL1Start([OpsiHazard1Leveling开始]) --> CL1CheckSmart{智能调度<br/>是否启用?}
CL1CheckSmart -->|否| CL1Traditional[传统模式:<br/>黄币不足时延迟任务]
CL1CheckSmart -->|是| CL1GetYellow[获取当前黄币数量]
CL1GetYellow --> CL1GetPreserve[获取黄币保留值<br/>优先使用智能调度配置]
CL1GetPreserve --> CL1CheckYellow{黄币 < 保留值?}
CL1CheckYellow -->|否| CL1Continue[继续执行侵蚀1]
CL1CheckYellow -->|是| CL1GetAP[获取当前行动力]
CL1GetAP --> CL1GetMeowAP[获取短猫行动力保留值<br/>优先使用智能调度配置]
CL1GetMeowAP --> CL1CheckAP{行动力 < 短猫保留值?}
CL1CheckAP -->|是| CL1NotifyBoth[推送通知:<br/>黄币与行动力双重不足]
CL1CheckAP -->|否| CL1GetEnabledTasks[获取智能调度中<br/>启用的黄币补充任务]
CL1NotifyBoth --> CL1Delay1[延迟侵蚀1任务1小时]
CL1Delay1 --> CL1End1([任务停止])
CL1GetEnabledTasks --> CL1AutoEnable[自动启用未启用的任务]
CL1AutoEnable --> CL1NotifySwitch[推送通知:<br/>切换至黄币补充任务]
CL1NotifySwitch --> CL1CallCoin[调用所有可用的<br/>黄币补充任务]
CL1CallCoin --> CL1CheckCD{有冷却任务?}
CL1CheckCD -->|是| CL1DelayToCD[延迟侵蚀1到冷却任务之后]
CL1CheckCD -->|否| CL1End2([任务停止])
CL1DelayToCD --> CL1End3([任务停止])
%% 继续执行侵蚀1的流程
CL1Continue --> CL1SetAP[设置行动力<br/>预设为120点]
CL1SetAP --> CL1NotifyAPThreshold[检查并推送<br/>行动力阈值通知]
CL1NotifyAPThreshold --> CL1CheckMinAP{行动力 < 最低保留?}
CL1CheckMinAP -->|是| CL1NotifyAPLow[推送通知:<br/>行动力低于最低保留]
CL1CheckMinAP -->|否| CL1Execute[执行战略搜索]
CL1NotifyAPLow --> CL1Delay2[延迟侵蚀1任务1小时]
CL1Delay2 --> CL1End4([任务停止])
CL1Execute --> CL1Rescan1[第一次重扫:<br/>战略搜索后完整镜头重扫]
CL1Rescan1 --> CL1CheckFixedPatrol{启用舰队<br/>强制移动?}
CL1CheckFixedPatrol -->|是且无事件| CL1FixedPatrol[执行定点巡逻扫描]
CL1CheckFixedPatrol -->|否| CL1HandleAfter[处理战后事件]
CL1FixedPatrol --> CL1Rescan2[第二次重扫:<br/>舰队移动后再次重扫]
CL1Rescan2 --> CL1HandleAfter
CL1HandleAfter --> CL1SubmitData[提交CL1数据到遥测]
CL1SubmitData --> CL1CheckSwitch[检查任务切换]
CL1CheckSwitch --> CL1Loop([循环继续])
CL1Traditional --> CL1TraditionalDelay[延迟到服务器刷新]
CL1TraditionalDelay --> CL1End5([任务停止])
style CL1Start fill:#e1f5e1
style CL1End1 fill:#ffe1e1
style CL1End2 fill:#ffe1e1
style CL1End3 fill:#ffe1e1
style CL1End4 fill:#ffe1e1
style CL1End5 fill:#ffe1e1
style CL1Loop fill:#e1e1ff
flowchart TD
MeowStart([OpsiMeowfficerFarming开始]) --> MeowCheckCL1{启用了CL1?}
MeowCheckCL1 -->|否| MeowExecute[执行短猫任务]
MeowCheckCL1 -->|是| MeowGetThreshold[获取黄币返回阈值]
MeowGetThreshold --> MeowCheckThresholdNull{阈值为null?}
MeowCheckThresholdNull -->|是| MeowExecute
MeowCheckThresholdNull -->|否| MeowCheckYellowStart{任务开始前:<br/>黄币 >= 返回阈值?}
MeowCheckYellowStart -->|是| MeowReturnCL1Start[禁用所有黄币补充任务<br/>返回CL1]
MeowCheckYellowStart -->|否| MeowExecute
MeowReturnCL1Start --> MeowNotifyReturn1[推送通知:<br/>黄币充足切换回侵蚀1]
MeowNotifyReturn1 --> MeowCallCL1_1[调用OpsiHazard1Leveling]
MeowCallCL1_1 --> MeowEnd1([任务停止])
%% 执行短猫任务
MeowExecute --> MeowSetAP[设置行动力保留值<br/>优先使用智能调度配置]
MeowSetAP --> MeowCheckAPFirst[首次检查行动力]
MeowCheckAPFirst --> MeowNotifyAPThreshold[检查并推送<br/>行动力阈值通知]
MeowNotifyAPThreshold --> MeowCheckSmart{智能调度<br/>是否启用?}
MeowCheckSmart -->|否| MeowRun[执行短猫搜索]
MeowCheckSmart -->|是| MeowGetAPPreserve[获取行动力保留值<br/>优先使用智能调度配置]
MeowGetAPPreserve --> MeowCheckAPLow{行动力 < 保留值?}
MeowCheckAPLow -->|否| MeowRun
MeowCheckAPLow -->|是| MeowNotifyAPLow[推送通知:<br/>短猫行动力不足]
MeowNotifyAPLow --> MeowDelay[延迟短猫1小时]
MeowDelay --> MeowCheckCL1Enabled{启用了CL1?}
MeowCheckCL1Enabled -->|是| MeowCallCL1_2[切换回OpsiHazard1Leveling]
MeowCheckCL1Enabled -->|否| MeowEnd2([任务停止])
MeowCallCL1_2 --> MeowEnd3([任务停止])
%% 执行短猫搜索
MeowRun --> MeowSearch[执行战略搜索]
MeowSearch --> MeowRescan[重扫地图]
MeowRescan --> MeowHandleAfter[处理战后事件]
MeowHandleAfter --> MeowCheckSwitch[检查任务切换]
MeowCheckSwitch --> MeowCheckYellowLoop{循环中:<br/>黄币 >= 返回阈值?}
MeowCheckYellowLoop -->|是| MeowReturnCL1Loop[禁用所有黄币补充任务<br/>返回CL1]
MeowCheckYellowLoop -->|否| MeowLoop([循环继续])
MeowReturnCL1Loop --> MeowNotifyReturn2[推送通知:<br/>黄币充足切换回侵蚀1]
MeowNotifyReturn2 --> MeowCallCL1_3[调用OpsiHazard1Leveling]
MeowCallCL1_3 --> MeowEnd4([任务停止])
style MeowStart fill:#e1f5e1
style MeowEnd1 fill:#ffe1e1
style MeowEnd2 fill:#ffe1e1
style MeowEnd3 fill:#ffe1e1
style MeowEnd4 fill:#ffe1e1
style MeowLoop fill:#e1e1ff
flowchart TD
ObscureStart([OpsiObscure/OpsiAbyssal开始]) --> ObscureCheckCL1{启用了CL1?}
ObscureCheckCL1 -->|否| ObscureExecute[执行任务]
ObscureCheckCL1 -->|是| ObscureGetThreshold[获取黄币返回阈值]
ObscureGetThreshold --> ObscureCheckThresholdNull{阈值为null?}
ObscureCheckThresholdNull -->|是| ObscureExecute
ObscureCheckThresholdNull -->|否| ObscureCheckApplicable{当前任务在<br/>适用范围内?}
ObscureCheckApplicable -->|否| ObscureExecute
ObscureCheckApplicable -->|是| ObscureCheckYellowStart{任务开始前:<br/>黄币 >= 返回阈值?}
ObscureCheckYellowStart -->|是| ObscureReturnCL1Start[禁用所有黄币补充任务<br/>返回CL1]
ObscureCheckYellowStart -->|否| ObscureExecute
ObscureReturnCL1Start --> ObscureNotifyReturn1[推送通知:<br/>黄币充足切换回侵蚀1]
ObscureNotifyReturn1 --> ObscureCallCL1_1[调用OpsiHazard1Leveling]
ObscureCallCL1_1 --> ObscureEnd1([任务停止])
%% 执行任务
ObscureExecute --> ObscureGetNext[获取下一个目标<br/>隐秘坐标/深渊记录器]
ObscureGetNext --> ObscureCheckContent{有可执行内容?}
ObscureCheckContent -->|否| ObscureNoContent[没有可执行内容]
ObscureCheckContent -->|是| ObscureRun[执行自动搜索]
ObscureNoContent --> ObscureCheckSmartNoContent{智能调度<br/>是否启用?}
ObscureCheckSmartNoContent -->|否| ObscureTraditionalDelay[延迟到服务器刷新<br/>或2.5小时后]
ObscureCheckSmartNoContent -->|是| ObscureCheckYellowNoContent{黄币 < CL1保留值?}
ObscureTraditionalDelay --> ObscureEnd2([任务停止])
ObscureCheckYellowNoContent -->|是| ObscureTryOther[尝试其他黄币补充任务]
ObscureCheckYellowNoContent -->|否| ObscureDisableTask[禁用当前任务<br/>延迟到30天后]
ObscureTryOther --> ObscureCheckOtherAvail{有其他可用任务?}
ObscureCheckOtherAvail -->|是| ObscureCallOther[调用下一个黄币补充任务]
ObscureCheckOtherAvail -->|否| ObscureCallCL1_2[返回OpsiHazard1Leveling]
ObscureCallOther --> ObscureEnd3([任务停止])
ObscureCallCL1_2 --> ObscureEnd4([任务停止])
ObscureDisableTask --> ObscureEnd5([任务停止])
%% 执行自动搜索
ObscureRun --> ObscureSearch[执行自动搜索]
ObscureSearch --> ObscureHandleAfter[处理战后事件]
ObscureHandleAfter --> ObscureCheckSwitch[检查任务切换]
ObscureCheckSwitch --> ObscureCheckYellowLoop{循环中:<br/>黄币 >= 返回阈值?}
ObscureCheckYellowLoop -->|是| ObscureReturnCL1Loop[禁用所有黄币补充任务<br/>返回CL1]
ObscureCheckYellowLoop -->|否| ObscureCheckForceRun{ForceRun<br/>是否启用?}
ObscureReturnCL1Loop --> ObscureNotifyReturn2[推送通知:<br/>黄币充足切换回侵蚀1]
ObscureNotifyReturn2 --> ObscureCallCL1_3[调用OpsiHazard1Leveling]
ObscureCallCL1_3 --> ObscureEnd6([任务停止])
ObscureCheckForceRun -->|是| ObscureLoop([循环继续])
ObscureCheckForceRun -->|否| ObscureFinish[根据智能调度状态<br/>完成任务]
ObscureFinish --> ObscureCheckSmartFinish{智能调度<br/>是否启用?}
ObscureCheckSmartFinish -->|是| ObscureDisableFinish[禁用任务调度]
ObscureCheckSmartFinish -->|否| ObscureDelayFinish[延迟到服务器刷新<br/>或2.5小时后]
ObscureDisableFinish --> ObscureEnd7([任务停止])
ObscureDelayFinish --> ObscureEnd8([任务停止])
style ObscureStart fill:#e1f5e1
style ObscureEnd1 fill:#ffe1e1
style ObscureEnd2 fill:#ffe1e1
style ObscureEnd3 fill:#ffe1e1
style ObscureEnd4 fill:#ffe1e1
style ObscureEnd5 fill:#ffe1e1
style ObscureEnd6 fill:#ffe1e1
style ObscureEnd7 fill:#ffe1e1
style ObscureEnd8 fill:#ffe1e1
style ObscureLoop fill:#e1e1ff
flowchart TD
APStart([行动力设置完成]) --> APCheckSmart{智能调度<br/>是否启用?}
APCheckSmart -->|否| APEnd1([跳过通知])
APCheckSmart -->|是| APGetCurrent[获取当前行动力总量]
APGetCurrent --> APGetLevels[解析配置的阈值列表<br/>如: 500,1000,2000,3000]
APGetLevels --> APFindThreshold[从高到低遍历阈值<br/>找到第一个 <= 当前行动力的阈值]
APFindThreshold --> APCheckFirst{是否首次调用?}
APCheckFirst -->|是| APSaveThreshold[保存当前阈值<br/>不发送通知]
APCheckFirst -->|否| APCheckChanged{阈值区间<br/>是否变化?}
APSaveThreshold --> APEnd2([完成])
APCheckChanged -->|否| APEnd3([无变化,不通知])
APCheckChanged -->|是| APCheckDirection{当前阈值<br/>是否为null?}
APCheckDirection -->|是| APBelowLowest[降到最低阈值以下]
APCheckDirection -->|否| APCompare{当前阈值 ><br/>上次阈值?}
APBelowLowest --> APNotifyBelow[推送通知:<br/>行动力降至X以下]
APNotifyBelow --> APUpdateLast[更新上次通知的阈值]
APUpdateLast --> APEnd4([完成])
APCompare -->|大于| APRise[行动力增加]
APCompare -->|小于| APFall[行动力减少]
APRise --> APNotifyRise[推送通知:<br/>行动力升至X+]
APFall --> APNotifyFall[推送通知:<br/>行动力降至X+]
APNotifyRise --> APUpdateLast2[更新上次通知的阈值]
APNotifyFall --> APUpdateLast2
APUpdateLast2 --> APEnd5([完成])
style APStart fill:#e1f5e1
style APEnd1 fill:#ffe1e1
style APEnd2 fill:#ffe1e1
style APEnd3 fill:#ffe1e1
style APEnd4 fill:#ffe1e1
style APEnd5 fill:#ffe1e1
flowchart TD
ThresholdStart([计算黄币返回阈值]) --> ThresholdCheckCL1{CL1是否启用?}
ThresholdCheckCL1 -->|否| ThresholdReturn1([返回: null, null])
ThresholdCheckCL1 -->|是| ThresholdCheckSmart{智能调度<br/>是否启用?}
ThresholdCheckSmart -->|否| ThresholdGetOriginal[获取CL1原配置保留值]
ThresholdCheckSmart -->|是| ThresholdCheckApplicable{当前任务在<br/>适用范围内?}
ThresholdGetOriginal --> ThresholdReturn2([返回: null, CL1保留值<br/>禁用黄币检查])
ThresholdCheckApplicable -->|否| ThresholdGetSmart1[获取智能调度CL1保留值]
ThresholdCheckApplicable -->|是| ThresholdGetSmart2[获取智能调度CL1保留值]
ThresholdGetSmart1 --> ThresholdReturn3([返回: null, CL1保留值<br/>禁用黄币检查])
ThresholdGetSmart2 --> ThresholdGetConfig[读取OperationCoinsReturnThreshold配置]
ThresholdGetConfig --> ThresholdCheckZero{配置值 == 0?}
ThresholdCheckZero -->|是| ThresholdReturn4([返回: null, CL1保留值<br/>禁用黄币检查])
ThresholdCheckZero -->|否| ThresholdCheckNull{配置值 == null?}
ThresholdCheckNull -->|是| ThresholdUseDefault[使用默认值<br/>等于CL1保留值]
ThresholdCheckNull -->|否| ThresholdUseConfig[使用配置值]
ThresholdUseDefault --> ThresholdCalculate[计算最终阈值:<br/>CL1保留值 + 返回阈值]
ThresholdUseConfig --> ThresholdCalculate
ThresholdCalculate --> ThresholdReturn5([返回: 返回阈值, CL1保留值])
style ThresholdStart fill:#e1f5e1
style ThresholdReturn1 fill:#ffe1e1
style ThresholdReturn2 fill:#ffe1e1
style ThresholdReturn3 fill:#ffe1e1
style ThresholdReturn4 fill:#ffe1e1
style ThresholdReturn5 fill:#e1ffe1
当需要尝试其他黄币补充任务时,按以下固定顺序:
- OpsiObscure (隐秘海域)
- OpsiAbyssal (深渊海域)
- OpsiStronghold (塞壬要塞)
- OpsiMeowfficerFarming (短猫相接)
flowchart LR
CL1[侵蚀1练级] -->|黄币不足| Coins[黄币补充任务]
Coins -->|黄币充足| CL1
Coins -->|无内容| NextCoin[下一个黄币补充任务]
NextCoin -->|所有任务无内容| CL1
智能调度功能由 OpsiScheduling.Scheduler.Enable 控制,通过 is_smart_scheduling_enabled(config) 函数统一判断。
- 黄币保留值: 智能调度配置 > CL1原配置
- 行动力保留值: 智能调度配置 > 各任务原配置
所有推送通知需要同时满足:
- 智能调度已启用
OpsiGeneral.NotifyOpsiMail已启用Error.OnePushConfig已正确配置(provider不为null)
- 智能调度启用: 禁用任务调度器,由智能调度统一管理
- 智能调度关闭: 延迟到服务器刷新或指定时间后再运行
通过4个独立开关控制哪些黄币补充任务应用返回阈值:
EnableMeowfficerFarming: 短猫相接(默认启用)EnableObscure: 隐秘海域(默认关闭)EnableAbyssal: 深渊海域(默认关闭)EnableStronghold: 塞壬要塞(默认关闭)
- 维护上次通知的阈值状态
- 仅在跨越阈值区间时发送通知
- 支持升至/降至两种方向的通知
| 方法 | 说明 |
|---|---|
| run_smart_scheduling() | 智能调度主入口 |
| _switch_to_coin_task() | 切换到黄币补充任务 |
| _execute_hazard1_leveling() | 执行侵蚀1练级 |
| _notify_coins_ap_insufficient() | 黄币与行动力双重不足通知 |
| _notify_ap_insufficient() | 行动力不足通知 |
| _notify_switch_to_coin_task() | 切换到黄币补充任务通知 |
| 方法 | 说明 |
|---|---|
| _get_operation_coins_return_threshold() | 计算黄币返回阈值 |
| _get_smart_scheduling_operation_coins_preserve() | 获取智能调度黄币保留值 |
| _get_smart_scheduling_action_point_preserve() | 获取智能调度行动力保留值 |
| _check_yellow_coins_and_return_to_cl1() | 检查黄币并返回CL1 |
| _disable_all_coin_tasks_and_return_to_cl1() | 禁用所有黄币补充任务并返回CL1 |
| _try_other_coin_tasks() | 尝试其他黄币补充任务 |
| _finish_task_with_smart_scheduling() | 根据智能调度状态完成任务 |
| _handle_no_content_and_try_other_tasks() | 处理无内容情况并尝试其他任务 |
| notify_push() | 发送推送通知 |
| 方法 | 说明 |
|---|---|
| os_hazard1_leveling() | 侵蚀1练级主循环 |
| check_and_notify_action_point_threshold() | 检查并推送行动力阈值通知 |
| notify_push() | 发送推送通知 |
flowchart LR
Config[配置文件] --> Scheduler[OpsiScheduling]
Scheduler --> CL1[OpsiHazard1Leveling]
Scheduler --> Meow[OpsiMeowfficerFarming]
Scheduler --> Obscure[OpsiObscure]
Scheduler --> Abyssal[OpsiAbyssal]
Scheduler --> Stronghold[OpsiStronghold]
CL1 --> Scheduler
Meow --> Scheduler
Obscure --> Scheduler
Abyssal --> Scheduler
Stronghold --> Scheduler
Scheduler --> Notify[推送通知系统]
CL1 --> Notify
Meow --> Notify
Obscure --> Notify
Abyssal --> Notify
智能调度系统通过以下机制实现任务的智能协调:
- 资源监控: 实时监控黄币和行动力状态
- 任务切换: 根据资源状态在CL1和黄币补充任务间切换
- 优先级管理: 按固定顺序尝试黄币补充任务
- 推送通知: 关键状态变化时及时通知用户
- 配置覆盖: 智能调度配置优先于原任务配置
- 灵活控制: 支持启用/禁用特定黄币补充任务
