调用任务
2025/10/21
任务调度 dispatcher
提供任务调度功能,支持实时任务和独立任务的执行。实时任务会在后台持续运行,而独立任务是前台单独执行的任务。
基本用法
// 启用自动拾取的实时任务
dispatcher.addTimer(new RealtimeTimer("AutoPick"));
// 启用自动拾取的实时任务,并配置成启用急速拾取模式
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));
// 执行自动秘境
await dispatcher.runTask(new SoloTask("AutoDomain"));
// 执行自动战斗
await dispatcher.runTask(new SoloTask("AutoFight"));
// 执行自动伐木
await dispatcher.runTask(new SoloTask("AutoWood"));
// 执行自动七圣召唤
await dispatcher.runTask(new SoloTask("AutoGeniusInvokation"));
// 执行自动钓鱼(0.43.0新增)
await dispatcher.runTask(new SoloTask("AutoFishing"));
//执行自动秘境,支持传入参数
await dispatcher.runAutoDomainTask(new AutoDomainParam());
// 执行自动战斗,支持传入参数
await dispatcher.runAutoFightTask(new AutoFightParam());方法
addTimer(RealtimeTimer timer)
- 描述: 添加实时任务,会清理之前的所有任务
- 参数:
timer(RealtimeTimer): 实时任务触发器
- 异常: 如果任务名称为空或添加失败会抛出异常
addTrigger(RealtimeTimer timer)
- 描述: 添加实时任务,不会清理之前的任务
- 参数:
timer(RealtimeTimer): 实时任务触发器
- 异常: 如果任务名称为空或添加失败会抛出异常
clearAllTriggers()
- 描述: 清理所有实时任务
- 参数: 无
runTask(SoloTask soloTask)
- 描述: 运行独立任务
- 参数:
soloTask(SoloTask): 独立任务对象
- 返回类型:
Task - 异常: 如果任务对象为空或任务名称未知会抛出异常
getLinkedCancellationToken()
- 描述: (0.45.3新增)获取一个取消令牌,用于在多线程场景下取消任务
- 返回类型:
CancellationToken
runAutoDomainTask()
- 描述: 运行 独立任务-自动秘境
- 参数:
param(AutoDomainParam): 自动秘境参数对象customCt(CancellationToken): 取消令牌(可选,默认null)
- 异常: 如果参数对象为空会抛出异常
runAutoFightTask()
- 描述: 运行 独立任务-自动战斗
- 参数:
param(AutoFightParam): 自动战斗参数对象customCt(CancellationToken): 取消令牌(可选,默认null)
- 异常: 如果参数对象为空会抛出异常
实时任务 RealtimeTimer
实时任务会在后台持续运行,支持多种任务类型。
构造函数
RealtimeTimer()
- 描述: 创建空的实时任务对象
RealtimeTimer(string name)
- 描述: 创建指定名称的实时任务
- 参数:
name(string): 任务名称
RealtimeTimer(string name, object config)
- 描述: 创建带配置的实时任务
- 参数:
name(string): 任务名称config(object): 任务配置对象
属性
Name
- 类型:
string - 描述: 实时任务名称
Interval
- 类型:
int - 描述: 任务执行间隔,单位毫秒,默认50ms
Config
- 类型:
object - 描述: 任务配置对象
支持的任务类型
AutoPick
- 描述: 自动拾取任务,自动按F拾取掉落物、点击调查点、开宝箱等
- 配置参数(Config):
forceInteraction(bool): 是否强制交互,默认falsetrue: 无视文本和图标,遇到F就点击false: 根据文本和图标判断是否点击F
textList(string[]): 需要按F的文本列表,例如:["F", "拾取", "对话", "调查", "开启"]- 包含这些文本的选项会按F["F"]- 只按包含"F"的选项[]- 空数组,使用默认行为
其他实时任务
以下任务类型仅支持实时模式,不支持配置参数:
- AutoSkip: 自动跳过对话任务,自动跳过剧情对话、过场动画等
- AutoEat: 自动吃食物任务,自动使用食物恢复生命值
- AutoWood: 自动伐木任务,自动砍伐树木获取木材
- AutoFight: 自动战斗任务,自动执行战斗操作
- AutoDomain: 自动秘境任务,自动执行秘境挑战
- AutoFishing: 自动钓鱼任务,自动执行钓鱼操作
- AutoGeniusInvokation: 自动七圣召唤任务,自动执行七圣召唤对局
独立任务 SoloTask
独立任务是一次性执行的任务,支持多种任务类型和配置参数。
构造函数
SoloTask(string name)
- 描述: 创建指定名称的独立任务
- 参数:
name(string): 任务名称
SoloTask(string name, object config)
- 描述: 创建带配置的独立任务
- 参数:
name(string): 任务名称config(object): 任务配置对象
属性
Name
- 类型:
string - 描述: 独立任务名称
Config
- 类型:
object - 描述: 任务配置对象
支持的任务类型
基础任务(无配置参数)
- AutoDomain: 自动秘境任务
- AutoFight: 自动战斗任务
- AutoWood: 自动伐木任务
配置任务(支持参数配置)
AutoFishing
- 描述: 自动钓鱼任务
- 配置参数:
fishingTimePolicy(int): 钓鱼时间策略,0=全天,1=白天,2=夜晚throwRodTimeOutTimeoutSeconds(int): 抛竿超时时间(秒)wholeProcessTimeoutSeconds(int): 整个任务超时时间(秒)
AutoEat
- 描述: 自动吃食物任务
- 配置参数:
foodName(string): 食物名称foodEffectType(int): 食物效果类型,1=攻击,2=冒险,3=防御- 注意:
foodName和foodEffectType二选一
AutoGeniusInvokation
- 描述: 自动七圣召唤任务
- 配置参数:
strategy(string): 策略内容
CountInventoryItem
- 描述: 背包物品计数任务
- 配置参数:
gridScreenName(string): 背包标签名itemName(string): 单个物品名称itemNames(string[]): 物品名称数组- 注意:
itemName和itemNames二选一
完整示例
实时任务示例
(async function() {
try {
// 创建自动拾取任务(带配置)
const autoPickTimer = new RealtimeTimer("AutoPick", {
"forceInteraction": true,
"textList": ["F", "拾取", "对话", "调查"]
});
// 创建自动跳过任务(无配置)
const autoSkipTimer = new RealtimeTimer("AutoSkip");
// 添加到调度器(会清理之前的所有任务)
dispatcher.addTimer(autoPickTimer);
log.info("自动拾取任务已启动");
// 等待一段时间
await sleep(30000);
// 切换到自动跳过任务
dispatcher.addTimer(autoSkipTimer);
log.info("自动跳过任务已启动");
// 等待一段时间
await sleep(20000);
// 清理所有任务
dispatcher.clearAllTriggers();
log.info("所有实时任务已停止");
} catch (error) {
log.error(`实时任务执行失败: ${error.message}`);
}
})();独立任务示例
(async function() {
try {
// 执行自动秘境
log.info("开始执行自动秘境");
await dispatcher.runTask(new SoloTask("AutoDomain"));
log.info("自动秘境完成");
// 执行自动钓鱼
log.info("开始执行自动钓鱼");
await dispatcher.runTask(new SoloTask("AutoFishing", {
"fishingTimePolicy": 0,
"throwRodTimeOutTimeoutSeconds": 30,
"wholeProcessTimeoutSeconds": 300
}));
log.info("自动钓鱼完成");
// 执行自动吃食物
log.info("开始执行自动吃食物");
await dispatcher.runTask(new SoloTask("AutoEat", {
"foodName": "炸萝卜丸子"
}));
log.info("自动吃食物完成");
// 计数背包物品
log.info("开始计数背包物品");
const result = await dispatcher.runTask(new SoloTask("CountInventoryItem", {
"gridScreenName": "Food",
"itemName": "炸萝卜丸子"
}));
log.info(`炸萝卜丸子数量: ${result}`);
} catch (error) {
log.error(`独立任务执行失败: ${error.message}`);
}
})();混合使用示例
(async function() {
try {
// 启动实时任务
dispatcher.addTimer(new RealtimeTimer("AutoPick"));
log.info("实时拾取任务已启动");
// 执行独立任务
await dispatcher.runTask(new SoloTask("AutoDomain"));
log.info("自动秘境完成");
// 继续执行其他独立任务
await dispatcher.runTask(new SoloTask("AutoFight"));
log.info("自动战斗完成");
// 清理实时任务
dispatcher.clearAllTriggers();
log.info("所有任务完成");
} catch (error) {
log.error(`任务执行失败: ${error.message}`);
}
})();注意事项
- 任务间隔:实时任务默认50ms间隔,可根据需要调整
- 资源管理:使用完后建议清理任务,避免内存泄漏
- 配置参数:不同任务类型支持不同的配置参数
- 错误处理:建议使用try-catch处理可能的异常
- 任务切换:使用
addTimer()会清理之前的任务,使用addTrigger()不会 - 性能影响:实时任务会持续占用系统资源,建议在不需要时及时清理
相关任务对象
AutoFishing 自动钓鱼
- 参数:
fishingTimePolicy(int): 昼夜策略,钓全天的鱼、还是只钓白天或夜晚的鱼(全天:0、白天:1、夜晚:2)throwRodTimeOutTimeoutSeconds(int): 自动抛竿未上钩超时时间(秒)wholeProcessTimeoutSeconds(int): 整个任务超时时间(秒)
示例:
// 执行自动钓鱼(0.43.0新增)
await dispatcher.runTask(new SoloTask("AutoFishing"));
// 带参数的执行
await dispatcher.runTask(new SoloTask("AutoFishing", { "fishingTimePolicy": 0 }));AutoEat 自动吃食物
(推荐先尝试仓库中的使用料理JS脚本,该方案利用了游戏自带的筛选功能,更为实用)
- 参数:
foodName(string): 食物名称,查找并吃该名称食物,不区分“美味的”等前缀foodEffectType(int): 食物效果类型(攻击:1、冒险:2、防御:3),会按调度器配置吃对应类型的食物- 注意
foodName和foodEffectType参数二选一,不可同时传递
只支持单次使用的Buff类食物,不支持使用时须要选角色、多次确认的食物
支持的食物取决于GetGridIcons已训练的数据
支持的食物清单详见训练集原型特征.csv
另请关注背包界面背景对识别的干扰,如果游戏画面干扰导致识别失败,可参考GetGridIcons调整并重试
示例:
// 按名称找食物吃
await dispatcher.runTask(new SoloTask("AutoEat", { "foodName": "炸萝卜丸子" }));
// 使用调度器配置吃指定类型
await dispatcher.runTask(new SoloTask("AutoEat", { "foodEffectType": 1 }));CountInventoryItem 背包物品计数
- 参数:
gridScreenName(string): 背包标签名,支持的值如下值 标签名 CharacterDevelopmentItems 养成道具 Food 食物 Materials 材料 Gadget 小道具 Quest 任务 PreciousItems 贵重道具 Furnishings 摆设 itemName(string): 单个物品名称,验证是否受支持详见训练集原型特征.csvitemNames(Array<string>): 物品名称数组- 注意
itemName和itemNames参数二选一,不可同时传递
- 方法返回参数:
int数量(如果传入了itemName)
如果没有找到,则为-1;如果找到了但数字识别失败,则为-2Dict<string, int>一个可以当作字典操作的对象,键是物品名称,值是数量(如果传入了itemNames)
如果某个元素没有找到,则不会存在对应的键值;如果找到了但数字识别失败,则为-2
另请关注背包界面背景对识别的干扰,如果游戏画面干扰导致识别失败,可参考GetGridIcons调整并重试
示例:
// 按名称
const result = await dispatcher.runTask(new SoloTask("CountInventoryItem", { "gridScreenName": "Food", "itemName": "炸萝卜丸子" }));
log.Info(`数量: ${JSON.stringify(result)}`);
const resultDict = await dispatcher.runTask(new SoloTask("CountInventoryItem", { "gridScreenName": "Food", "itemNames": ["鸡豆花", "超级至尊披萨"] }));
log.Info(`鸡豆花 数量: ${JSON.stringify(resultDict["鸡豆花"])}`);AutoDomainParam 自动秘境参数对象
默认使用本体设置的参数,但轮次是9999,可以初始化之后修改
- 参数:
domainRoundNum(int):(可选)默认为0,初始化时被重置为9999
- 初始化之后的参数:
DomainRoundNum(int): 秘境刷取轮数,0表示9999轮PartyName(string): 队伍名称DomainName(string):秘境名称SundaySelectedValue(string):限时副本全开时,副本在秘境UI上的序号(注意类型是string)AutoArtifactSalvage(bool):结束后是否自动分解圣遗物MaxArtifactStar(string):分解圣遗物的最大星级(注意类型是string)SpecifyResinUse(bool):是否指定树脂的使用次数OriginalResinUseCount(int):使用原粹树脂刷取副本次数CondensedResinUseCount(int):使用浓缩树脂刷取副本次数TransientResinUseCount(int):使用须臾树脂刷取副本次数FragileResinUseCount(int):使用脆弱树脂刷取副本次数
- 方法:
SetCombatStrategyPath():设置要使用的战斗策略- 参数:
strategyName(string) 同本体设置的格式,如:"群友分享\四神队(进阶版)",为空则使用本体设置。可填"根据队伍自动选择"。
- 参数:
SetResinPriorityList():设置使用树脂优先级的列表- 参数:
priorities(string[])原粹树脂|浓缩树脂|须臾树脂|脆弱树脂:没有做参数校验,务必保证名称填写正确。
- 参数:
AutoFightParam 自动战斗参数对象
默认使用本体设置的参数,可以初始化之后修改,按照设置界面上的顺序列出
- 参数:
strategyName(string|null): (可选)设置要使用的战斗策略,例:群友分享\四神队(进阶版)
- 初始化之后的参数:
ActionSchedulerByCd(string): 根据技能CD优化出招人员,例:白术;钟离,12自动检测战斗结束
FightFinishDetectEnabled(bool):启用自动检测战斗结束FinishDetectConfig.FastCheckEnabled(bool): 启用更快检查战斗结束FinishDetectConfig.FastCheckParams(string): 更快检查结束战斗参数
FinishDetectConfig.BeforeDetectDelay(string): 按键触发后检查延时(单位:秒)FinishDetectConfig.RotateFindEnemyEnabled(bool): 启用旋转寻找敌人CheckBeforeBurst(bool):Q前检测IsFirstCheck(bool):尝试面敌RotaryFactor(int): 旋转速度
FinishDetectConfig.CheckEndDelay(string): 检查战斗结束的延时
盾奶位角色优先释放技能
GuardianAvatar(string): 盾奶位角色在队伍中的位置(序号)GuardianCombatSkip(bool):E元素战技。 Q / E任一为true则禁用该角色战斗策略,并按对应值自动释放Q / EBurstEnabled(bool):Q元素爆发GuardianAvatarHold(bool): 是否长按盾奶角色技能
自动拾取掉落物
PickDropsAfterFightEnabled(bool): 启用战斗后拾取掉落物PickDropsAfterFightSeconds(int): 自动拾取掉落物的时长(单位:秒)KazuhaPickupEnabled(bool): 聚集材料动作 (如果存在琴/万叶)QinDoublePickUp(bool):角色琴二次拾取
BattleThresholdForLoot(int):拾取战斗人次阈值OnlyPickEliteDropsMode(string): 仅拾取精英掉落,仅支持以下两个参数,关闭可填Close- 有效值:
AllowAutoPickupForNonElite:非精英允许自动拾取DisableAutoPickupForNonElite:非精英关闭自动拾取
- 有效值:
KazuhaPartyName(string):含有万叶的队伍名
Timeout(int): 战斗超时设置(单位:秒)SwimmingEnabled(bool):战斗中游泳检测
