diff --git a/resource/global/YoStarEN/resource/tasks/Roguelike/Sarkaz.json b/resource/global/YoStarEN/resource/tasks/Roguelike/Sarkaz.json index b5447be116..a4339c578d 100644 --- a/resource/global/YoStarEN/resource/tasks/Roguelike/Sarkaz.json +++ b/resource/global/YoStarEN/resource/tasks/Roguelike/Sarkaz.json @@ -26,10 +26,6 @@ ], "roi": [513, 564, 248, 63] }, - "Sarkaz@Roguelike@RoutingRefreshNodeConfirm": { - "roi": [993, 472, 90, 34], - "text": ["Confirm"] - }, "Sarkaz@Roguelike@SelectTheme": { "ocrReplace": [["Hypothese.*", "Hypotheses Compilation"]], "text": ["Hypotheses Compilation"] diff --git a/resource/global/YoStarEN/resource/tasks/Roguelike/routing.json b/resource/global/YoStarEN/resource/tasks/Roguelike/routing.json new file mode 100644 index 0000000000..ec9813f494 --- /dev/null +++ b/resource/global/YoStarEN/resource/tasks/Roguelike/routing.json @@ -0,0 +1,6 @@ +{ + "Sarkaz@RoguelikeRouting-ConfirmToRefreshNode": { + "roi": [993, 472, 90, 34], + "text": ["Confirm"] + } +} diff --git a/resource/global/YoStarEN/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png b/resource/global/YoStarEN/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png rename to resource/global/YoStarEN/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png diff --git a/resource/global/YoStarJP/resource/tasks/Roguelike/Sarkaz.json b/resource/global/YoStarJP/resource/tasks/Roguelike/Sarkaz.json index 49a33bde4a..4a14c3d087 100644 --- a/resource/global/YoStarJP/resource/tasks/Roguelike/Sarkaz.json +++ b/resource/global/YoStarJP/resource/tasks/Roguelike/Sarkaz.json @@ -17,9 +17,6 @@ "ocrReplace": [["虚[構横]の境[目E=]?", "虚構の境"]], "text": ["溶魂の端緒", "錬鉄の根系", "灰燼の迷城", "蓋然の異域", "虚構の境", "輝ける天上", "奇妙な断章"] }, - "Sarkaz@Roguelike@RoutingRefreshNodeConfirm": { - "text": ["確定"] - }, "Sarkaz@Roguelike@SelectTheme": { "text": ["仮説集"] }, diff --git a/resource/global/YoStarJP/resource/tasks/Roguelike/routing.json b/resource/global/YoStarJP/resource/tasks/Roguelike/routing.json new file mode 100644 index 0000000000..b31554c30f --- /dev/null +++ b/resource/global/YoStarJP/resource/tasks/Roguelike/routing.json @@ -0,0 +1,5 @@ +{ + "Sarkaz@RoguelikeRouting-ConfirmToRefreshNode": { + "text": ["確定"] + } +} diff --git a/resource/global/YoStarJP/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png b/resource/global/YoStarJP/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png rename to resource/global/YoStarJP/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png diff --git a/resource/global/YoStarKR/resource/tasks/Roguelike/Sarkaz.json b/resource/global/YoStarKR/resource/tasks/Roguelike/Sarkaz.json index 7e5697df85..e1c488636f 100644 --- a/resource/global/YoStarKR/resource/tasks/Roguelike/Sarkaz.json +++ b/resource/global/YoStarKR/resource/tasks/Roguelike/Sarkaz.json @@ -36,9 +36,6 @@ "괴이한단장" ] }, - "Sarkaz@Roguelike@RoutingRefreshNodeConfirm": { - "text": ["확인"] - }, "Sarkaz@Roguelike@SelectTheme": { "text": ["가설", "수록"] }, diff --git a/resource/global/YoStarKR/resource/tasks/Roguelike/routing.json b/resource/global/YoStarKR/resource/tasks/Roguelike/routing.json new file mode 100644 index 0000000000..6a130e1114 --- /dev/null +++ b/resource/global/YoStarKR/resource/tasks/Roguelike/routing.json @@ -0,0 +1,5 @@ +{ + "Sarkaz@RoguelikeRouting-ConfirmToRefreshNode": { + "text": ["확인"] + } +} diff --git a/resource/global/YoStarKR/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png b/resource/global/YoStarKR/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png similarity index 100% rename from resource/global/YoStarKR/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png rename to resource/global/YoStarKR/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png diff --git a/resource/global/txwy/resource/tasks/Roguelike/Sarkaz.json b/resource/global/txwy/resource/tasks/Roguelike/Sarkaz.json index 4042bb83d1..47ae52f56e 100644 --- a/resource/global/txwy/resource/tasks/Roguelike/Sarkaz.json +++ b/resource/global/txwy/resource/tasks/Roguelike/Sarkaz.json @@ -17,9 +17,6 @@ "Sarkaz@Roguelike@NextLevel": { "text": ["熔魂之始", "鍛鐵根須", "灰鑄迷城", "或然歧域", "虛實疆界", "輝光天頂", "詭譎斷章"] }, - "Sarkaz@Roguelike@RoutingRefreshNodeConfirm": { - "text": ["確定"] - }, "Sarkaz@Roguelike@SelectTheme": { "text": ["假說輯錄", "假說", "輯錄"] }, diff --git a/resource/global/txwy/resource/tasks/Roguelike/routing.json b/resource/global/txwy/resource/tasks/Roguelike/routing.json new file mode 100644 index 0000000000..b31554c30f --- /dev/null +++ b/resource/global/txwy/resource/tasks/Roguelike/routing.json @@ -0,0 +1,5 @@ +{ + "Sarkaz@RoguelikeRouting-ConfirmToRefreshNode": { + "text": ["確定"] + } +} diff --git a/resource/global/txwy/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png b/resource/global/txwy/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png similarity index 100% rename from resource/global/txwy/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png rename to resource/global/txwy/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png diff --git a/resource/roguelike/JieGarden/map.json b/resource/roguelike/JieGarden/map.json index 89073e0915..e71f29c8f8 100644 --- a/resource/roguelike/JieGarden/map.json +++ b/resource/roguelike/JieGarden/map.json @@ -3,65 +3,65 @@ "nodes": [ { "type": "CombatOps", - "template": ["JieGarden@Roguelike@MapNodeCombatOps.png", "JieGarden@Roguelike@MapNodeCombatOpsGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-CombatOps.png", "JieGarden@RoguelikeMapNode-CombatOpsGrey.png"] }, { "type": "EmergencyOps", "template": [ - "JieGarden@Roguelike@MapNodeEmergencyOps.png", - "JieGarden@Roguelike@MapNodeEmergencyOpsGrey.png" + "JieGarden@RoguelikeMapNode-EmergencyOps.png", + "JieGarden@RoguelikeMapNode-EmergencyOpsGrey.png" ] }, { "type": "Encounter", - "template": ["JieGarden@Roguelike@MapNodeEncounter.png", "JieGarden@Roguelike@MapNodeEncounterGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-Encounter.png", "JieGarden@RoguelikeMapNode-EncounterGrey.png"] }, { "type": "Boons", - "template": ["JieGarden@Roguelike@MapNodeBoons.png", "JieGarden@Roguelike@MapNodeBoonsGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-Boons.png", "JieGarden@RoguelikeMapNode-BoonsGrey.png"] }, { "type": "RogueTrader", - "template": ["JieGarden@Roguelike@MapNodeRogueTrader.png", "JieGarden@Roguelike@MapNodeRogueTraderGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-RogueTrader.png", "JieGarden@RoguelikeMapNode-RogueTraderGrey.png"] }, { "type": "BoskyPassage", "template": [ - "JieGarden@Roguelike@MapNodeBoskyPassage.png", - "JieGarden@Roguelike@MapNodeBoskyPassageGrey.png" + "JieGarden@RoguelikeMapNode-BoskyPassage.png", + "JieGarden@RoguelikeMapNode-BoskyPassageGrey.png" ] }, { "type": "Legend", - "template": ["JieGarden@Roguelike@MapNodeLegend.png", "JieGarden@Roguelike@MapNodeLegendGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-Legend.png", "JieGarden@RoguelikeMapNode-LegendGrey.png"] }, { "type": "Omissions", - "template": ["JieGarden@Roguelike@MapNodeOmissions.png", "JieGarden@Roguelike@MapNodeOmissionsGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-Omissions.png", "JieGarden@RoguelikeMapNode-OmissionsGrey.png"] }, { "type": "Doubts", - "template": ["JieGarden@Roguelike@MapNodeDoubts.png", "JieGarden@Roguelike@MapNodeDoubtsGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-Doubts.png", "JieGarden@RoguelikeMapNode-DoubtsGrey.png"] }, { "type": "Disaster", - "template": ["JieGarden@Roguelike@MapNodeDisaster.png", "JieGarden@Roguelike@MapNodeDisasterGrey.png"] + "template": ["JieGarden@RoguelikeMapNode-Disaster.png", "JieGarden@RoguelikeMapNode-DisasterGrey.png"] }, { "type": "Playtime", - "template": ["JieGarden@Roguelike@MapNodePlaytime.png"] + "template": ["JieGarden@RoguelikeMapNode-Playtime.png"] }, { "type": "OldShop", - "template": ["JieGarden@Roguelike@MapNodeOldShop.png"] + "template": ["JieGarden@RoguelikeMapNode-OldShop.png"] }, { "type": "YiTrader", - "template": ["JieGarden@Roguelike@MapNodeYiTrader.png"] + "template": ["JieGarden@RoguelikeMapNode-YiTrader.png"] }, { "type": "Scheme", - "template": ["JieGarden@Roguelike@MapNodeScheme.png"] + "template": ["JieGarden@RoguelikeMapNode-Scheme.png"] } ] } diff --git a/resource/roguelike/Sarkaz/map.json b/resource/roguelike/Sarkaz/map.json index 1bf999852e..d9de21a9bb 100644 --- a/resource/roguelike/Sarkaz/map.json +++ b/resource/roguelike/Sarkaz/map.json @@ -3,19 +3,19 @@ "nodes": [ { "type": "CombatOps", - "template": ["Sarkaz@Roguelike@MapNodeCombatOps.png", "Sarkaz@Roguelike@MapNodeCombatOpsGrey.png"] + "template": ["Sarkaz@RoguelikeMapNode-CombatOps.png", "Sarkaz@RoguelikeMapNode-CombatOpsGrey.png"] }, { "type": "EmergencyOps", - "template": ["Sarkaz@Roguelike@MapNodeEmergencyOps.png", "Sarkaz@Roguelike@MapNodeEmergencyOpsGrey.png"] + "template": ["Sarkaz@RoguelikeMapNode-EmergencyOps.png", "Sarkaz@RoguelikeMapNode-EmergencyOpsGrey.png"] }, { "type": "Encounter", - "template": ["Sarkaz@Roguelike@MapNodeEncounter.png", "Sarkaz@Roguelike@MapNodeEncounterGrey.png"] + "template": ["Sarkaz@RoguelikeMapNode-Encounter.png", "Sarkaz@RoguelikeMapNode-EncounterGrey.png"] }, { "type": "RogueTrader", - "template": ["Sarkaz@Roguelike@MapNodeRogueTraderGrey.png"] + "template": ["Sarkaz@RoguelikeMapNode-RogueTraderGrey.png"] } ] } diff --git a/resource/tasks/Roguelike/JieGarden.json b/resource/tasks/Roguelike/JieGarden.json index b6d7168ad4..d63ea61b2f 100644 --- a/resource/tasks/Roguelike/JieGarden.json +++ b/resource/tasks/Roguelike/JieGarden.json @@ -332,38 +332,6 @@ "action": "ClickSelf", "next": ["JieGarden@Roguelike@GiveUpOperation", "JieGarden@Roguelike@LeaveOperation"] }, - "JieGarden@Roguelike@MapNodeDisaster": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageCombatDpsEnter"] - }, - "JieGarden@Roguelike@MapNodeDoubts": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageEncounterEnter"] - }, - "JieGarden@Roguelike@MapNodeLegend": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageEncounterEnter"] - }, - "JieGarden@Roguelike@MapNodeOldShop": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageEncounterEnter"] - }, - "JieGarden@Roguelike@MapNodeOmissions": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageEncounterEnter"] - }, - "JieGarden@Roguelike@MapNodePlaytime": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageEncounterEnter"] - }, - "JieGarden@Roguelike@MapNodeScheme": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageEncounterEnter"] - }, - "JieGarden@Roguelike@MapNodeYiTrader": { - "template": "empty.png", - "next": ["JieGarden@Roguelike@RoutingAction-StageYiTraderEnter"] - }, "JieGarden@Roguelike@MapObject": { "roi": [255, 491, 192, 119], "next": ["JieGarden@StartExplore@Roguelike@RecruitOther"] @@ -477,210 +445,6 @@ "template": "JieGarden@Roguelike@LastRewardConfirm.png" }, "JieGarden@Roguelike@RolesDefault": {}, - "JieGarden@Roguelike@Routing": { - "template": [ - "JieGarden@Roguelike@StageCombatDps.png", - "JieGarden@Roguelike@StageEmergencyDps.png", - "JieGarden@Roguelike@StageDreadfulFoe.png", - "JieGarden@Roguelike@StageDreadfulFoe-5.png", - "JieGarden@Roguelike@StageEncounter.png", - "JieGarden@Roguelike@StageBoons.png", - "JieGarden@Roguelike@StageGuidance.png", - "JieGarden@Roguelike@StageSafeHouse.png", - "JieGarden@Roguelike@StageTrader.png", - "JieGarden@Roguelike@StageWindAndRain.png", - "JieGarden@Roguelike@StageEmergencyTransportation.png", - "JieGarden@Roguelike@StageBoskyPassage.png", - "JieGarden@Roguelike@StageProphecy.png", - "JieGarden@Roguelike@StageConfrontation.png" - ], - "next": ["JieGarden@Roguelike@RoutingAction"] - }, - "JieGarden@Roguelike@Routing-FastInvestment": { - "template": [ - "JieGarden@Roguelike@MapNodeCombatOps.png", - "JieGarden@Roguelike@MapNodeEmergencyOps.png", - "JieGarden@Roguelike@MapNodeEncounter.png", - "JieGarden@Roguelike@MapNodeRogueTrader.png", - "JieGarden@Roguelike@MapNodeBoskyPassage.png" - ], - "next": ["JieGarden@Roguelike@RoutingAction"] - }, - "JieGarden@Roguelike@RoutingAction": { - "algorithm": "JustReturn" - }, - "JieGarden@Roguelike@RoutingAction-ClickRemainingCandleFlame": { - "doc": "用于替换 JieGarden@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@ClickRemainingCandleFlame"] - }, - "JieGarden@Roguelike@RoutingAction-ExitThenAbandon": { - "doc": "用于替换 JieGarden@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@ExitThenAbandon"] - }, - "JieGarden@Roguelike@RoutingAction-StageCombatDpsEnter": { - "doc": "用于替换 JieGarden@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@StageCombatDpsEnter"] - }, - "JieGarden@Roguelike@RoutingAction-StageCombatOpsEnterThenLeave": { - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@StageCombatOpsEnterThenLeave"] - }, - "JieGarden@Roguelike@RoutingAction-StageEncounterEnter": { - "doc": "用于替换 JieGarden@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@StageEncounterEnter"] - }, - "JieGarden@Roguelike@RoutingAction-StageTraderEnter": { - "doc": "用于替换 JieGarden@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@StageTraderEnter"] - }, - "JieGarden@Roguelike@RoutingAction-StageYiTraderEnter": { - "doc": "用于替换 JieGarden@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["JieGarden@Roguelike@StageYiTraderEnter"] - }, - "JieGarden@Roguelike@RoutingBoskyPassageConfig": { - "doc": [ - "RoguelikeRoutingTaskPlugin用参数", - "| specialParams[0]: 第一列节点的默认横坐标 (Rect.x)", - "| specialParams[1]: 第一行节点的默认纵坐标 (Rect.y)", - "| specialParams[2]: 中间列节点的默认横坐标 (Rect.x)", - "| specialParams[3]: 中间行节点的默认纵坐标 (Rect.y)", - "| specialParams[4]: 最后列节点的默认横坐标 (Rect.x)", - "| specialParams[5]: 最后行节点的默认纵坐标 (Rect.y)", - "| specialParams[6]: 节点 Rect.width", - "| specialParams[7]: 节点 Rect.height", - "| specialParams[8]: 两列节点之间的距离", - "| specialParams[9]: 两行节点之间的距离", - "| specialParams[10]: roi 的 margin offset" - ], - "template": "empty.png", - "specialParams": [188, 107, 608, 321, 1028, 535, 64, 57, 140, 107, 15] - }, - "JieGarden@Roguelike@RoutingBoskyPassageNodeAnalyze": { - "template": [ - "JieGarden@Roguelike@MapNodeOldShop.png", - "JieGarden@Roguelike@MapNodeScheme.png", - "JieGarden@Roguelike@MapNodeYiTrader.png", - "JieGarden@Roguelike@MapNodePlaytime.png", - "JieGarden@Roguelike@MapNodeOmissions.png", - "JieGarden@Roguelike@MapNodeOmissionsGrey.png", - "JieGarden@Roguelike@MapNodeLegend.png", - "JieGarden@Roguelike@MapNodeLegendGrey.png", - "JieGarden@Roguelike@MapNodeDoubts.png", - "JieGarden@Roguelike@MapNodeDoubtsGrey.png", - "JieGarden@Roguelike@MapNodeDisaster.png", - "JieGarden@Roguelike@MapNodeDisasterGrey.png" - ], - "roi": [0, 60, 1280, 575], - "postDelay": 300 - }, - "JieGarden@Roguelike@RoutingBoskyPassagePriority_Default": { - "doc": [ - "界园树洞节点优先级策略配置", - "按优先级从高到低排列节点类型名称", - "拾遗>传说>故肆>易与>筹谋>常乐>杂疑(暂时取消)>灾祸(暂时取消)" - ], - "template": "empty.png", - "next": [ - "JieGarden@Roguelike@MapNodeOmissions", - "JieGarden@Roguelike@MapNodeLegend", - "JieGarden@Roguelike@MapNodeOldShop", - "JieGarden@Roguelike@MapNodeYiTrader", - "JieGarden@Roguelike@MapNodeScheme", - "JieGarden@Roguelike@MapNodePlaytime" - ] - }, - "JieGarden@Roguelike@RoutingBoskyPassagePriority_FindPlaytime": { - "doc": ["常乐>拾遗>传说>故肆>易与>筹谋>杂疑(暂时取消)>灾祸(暂时取消)"], - "template": "empty.png", - "next": [ - "JieGarden@Roguelike@MapNodePlaytime", - "JieGarden@Roguelike@MapNodeOmissions", - "JieGarden@Roguelike@MapNodeLegend", - "JieGarden@Roguelike@MapNodeOldShop", - "JieGarden@Roguelike@MapNodeYiTrader", - "JieGarden@Roguelike@MapNodeScheme" - ] - }, - "JieGarden@Roguelike@RoutingConfig": { - "doc": [ - "RoguelikeRoutingTaskPlugin用参数", - "| specialParams[0]: 第一列节点的默认横坐标 (Rect.x)", - "| specialParams[1]: 中间列节点的默认横坐标 (Rect.x)", - "| specialParams[2]: 最后列节点的默认横坐标 (Rect.x)", - "| specialParams[3]: 节点 Rect.width", - "| specialParams[4]: 节点 Rect.height", - "| specialParams[5]: 两列节点之间的距离", - "| specialParams[6]: 节点 Rect 下边缘到节点铭牌下边缘的距离", - "| specialParams[7]: roi 的 margin offset", - "| specialParams[8]: 节点间连线方向判定的阈值" - ], - "template": "empty.png", - "specialParams": [321, 341, 586, 138, 47, 450, 32, 15, 7] - }, - "JieGarden@Roguelike@RoutingContinue": { - "template": "JieGarden@Roguelike@Continue.png", - "roi": [1008, 523, 265, 197], - "action": "ClickSelf", - "next": ["JieGarden@Roguelike@RoutingContinueConfirm"] - }, - "JieGarden@Roguelike@RoutingContinueConfirm": { - "Doc": "next 里的 RoutingNodeAnalyze 是为了确保回到地图", - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [50, 360, 0, 0], - "next": ["JieGarden@Roguelike@RoutingNodeAnalyze", "JieGarden@Roguelike@RoutingContinueConfirm"] - }, - "JieGarden@Roguelike@RoutingExitThenContinue": { - "template": "Roguelike@ExitThenAbandon.png", - "roi": [18, 8, 53, 53], - "action": "ClickSelf", - "next": ["JieGarden@Roguelike@RoutingContinue"] - }, - "JieGarden@Roguelike@RoutingNodeAnalyze": { - "template": [ - "JieGarden@Roguelike@MapNodeCombatOps.png", - "JieGarden@Roguelike@MapNodeCombatOpsGrey.png", - "JieGarden@Roguelike@MapNodeEmergencyOps.png", - "JieGarden@Roguelike@MapNodeEmergencyOpsGrey.png", - "JieGarden@Roguelike@MapNodeEncounter.png", - "JieGarden@Roguelike@MapNodeEncounterGrey.png", - "JieGarden@Roguelike@MapNodeBoons.png", - "JieGarden@Roguelike@MapNodeBoonsGrey.png", - "JieGarden@Roguelike@MapNodeRogueTrader.png", - "JieGarden@Roguelike@MapNodeRogueTraderGrey.png", - "JieGarden@Roguelike@MapNodeBoskyPassage.png", - "JieGarden@Roguelike@MapNodeBoskyPassageGrey.png" - ], - "roi": [0, 60, 1280, 575], - "postDelay": 300 - }, - "JieGarden@Roguelike@RoutingSwipeRight": { - "doc": "生成地图时向左滑动", - "algorithm": "JustReturn", - "action": "Swipe", - "specificRect": [1000, 360, 0, 0], - "rectMove": [570, 360, 0, 0], - "specialParams": [200, 1] - }, - "JieGarden@Roguelike@Routing_BoskyPassage": { - "template": [ - "JieGarden@Roguelike@MapNodeOldShop.png", - "JieGarden@Roguelike@MapNodeScheme.png", - "JieGarden@Roguelike@MapNodeYiTrader.png", - "JieGarden@Roguelike@MapNodePlaytime.png", - "JieGarden@Roguelike@MapNodeOmissions.png", - "JieGarden@Roguelike@MapNodeLegend.png", - "JieGarden@Roguelike@MapNodeDoubts.png", - "JieGarden@Roguelike@MapNodeDisaster.png" - ], - "next": ["JieGarden@Roguelike@RoutingAction"] - }, "JieGarden@Roguelike@SelectTheme": { "text": ["游园纪念"] }, @@ -1149,7 +913,7 @@ ], "onErrorNext": ["JieGarden@Roguelike@ExitThenAbandon"] }, - "JieGarden@Roguelike@Stages_fastInvestment": { + "JieGarden@Roguelike@Stages_fastPass": { "doc": "指挥分队专用投资策略,调用 RoguelikeRoutingTaskPlugin", "algorithm": "JustReturn", "next": [ @@ -1157,7 +921,7 @@ "JieGarden@Roguelike@RandomPickAfterNextLevel", "JieGarden@Roguelike@CloseCollectionContinue", "JieGarden@Roguelike@CloseCollectionClose", - "JieGarden@Roguelike@Routing-FastInvestment" + "JieGarden@Roguelike@Routing-FastPass" ], "onErrorNext": ["JieGarden@Roguelike@ExitThenAbandon"] }, @@ -1191,17 +955,6 @@ ], "onErrorNext": ["JieGarden@Roguelike@ExitThenAbandon"] }, - "JieGarden@Roguelike@Stages_routing": { - "algorithm": "JustReturn", - "next": [ - "JieGarden@Roguelike@NextLevel", - "JieGarden@Roguelike@RandomPickAfterNextLevel", - "JieGarden@Roguelike@CloseCollectionContinue", - "JieGarden@Roguelike@CloseCollectionClose", - "JieGarden@Roguelike@Routing" - ], - "onErrorNext": ["JieGarden@Roguelike@ExitThenAbandon"] - }, "JieGarden@Roguelike@StartExplore": { "roi": [1001, 524, 273, 196] }, @@ -1209,23 +962,6 @@ "template": "JieGarden@Roguelike@StartExplore.png", "roi": [1014, 481, 266, 219] }, - "JieGarden@Roguelike@StrategyChange-FastInvestment": { - "baseTask": "JieGarden@Roguelike@StrategyChange_mode1", - "text": ["_fastInvestment", "_restart", "_leaveBoskyPassage"], - "ocrReplace": [ - ["洪陆楼", "_fastInvestment"], - ["山水阁", "_restart"], - ["云(瓦)?(亭|亨)", "_restart"], - ["汝吾(门)?", "_restart"], - ["见字祠", "_restart"], - ["始末陵", "_restart"], - ["是非境", "_leaveBoskyPassage"] - ], - "roi": [627, 14, 71, 28], - "withoutDet": true, - "binThreshold": [200, 255], - "useRaw": false - }, "JieGarden@Roguelike@StrategyChange_mode0": { "text": ["_default", "_boskyPassageDefault"], "ocrReplace": [ @@ -1275,15 +1011,33 @@ "binThreshold": [200, 255], "useRaw": false }, - "JieGarden@Roguelike@StrategyChange_mode10001": { - "text": ["_routing", "_exit", "_leaveBoskyPassage"], + "JieGarden@Roguelike@StrategyChange_mode1-FastPass": { + "baseTask": "JieGarden@Roguelike@StrategyChange_mode1", + "text": ["_fastPass", "_restart", "_leaveBoskyPassage"], "ocrReplace": [ - ["洪陆楼", "_routing"], - ["山水阁", "_exit"], - ["云(瓦)?(亭|亨)", "_exit"], - ["汝吾(门)?", "_exit"], - ["见字祠", "_exit"], - ["始末陵", "_exit"], + ["洪陆楼", "_fastPass"], + ["山水阁", "_restart"], + ["云(瓦)?(亭|亨)", "_restart"], + ["汝吾(门)?", "_restart"], + ["见字祠", "_restart"], + ["始末陵", "_restart"], + ["是非境", "_leaveBoskyPassage"] + ], + "roi": [627, 14, 71, 28], + "withoutDet": true, + "binThreshold": [200, 255], + "useRaw": false + }, + "JieGarden@Roguelike@StrategyChange_mode10001": { + "baseTask": "JieGarden@Roguelike@StrategyChange_mode1", + "text": ["_fastPass", "_restart", "_leaveBoskyPassage"], + "ocrReplace": [ + ["洪陆楼", "_fastPass"], + ["山水阁", "_restart"], + ["云(瓦)?(亭|亨)", "_restart"], + ["汝吾(门)?", "_restart"], + ["见字祠", "_restart"], + ["始末陵", "_restart"], ["是非境", "_leaveBoskyPassage"] ], "roi": [627, 14, 71, 28], @@ -1325,9 +1079,9 @@ }, "JieGarden@Roguelike@StrategyChange_mode4-FastPass": { "baseTask": "JieGarden@Roguelike@StrategyChange_mode1", - "text": ["_fastInvestment", "_exit", "_leaveBoskyPassage"], + "text": ["_fastPass", "_exit", "_leaveBoskyPassage"], "ocrReplace": [ - ["洪陆楼", "_fastInvestment"], + ["洪陆楼", "_fastPass"], ["山水阁", "_exit"], ["云(瓦)?(亭|亨)", "_exit"], ["汝吾(门)?", "_exit"], @@ -1377,9 +1131,11 @@ "template": "Roguelike@QuickFormation.png" }, "JieGarden@RoguelikeRecruit-GiveUp": { - "doc": "在集成战略模式招募干员界面点击右下角 <放弃> 文字左侧图标位置,放弃招募机会", - "roi": [848, 610, 140, 110], - "action": "ClickSelf" + "doc": [ + "在集成战略模式招募干员界面点击右下角 <放弃> 文字左侧图标位置,放弃招募机会", + "界园的招募界面 UI 和其他主题略有不同,图标缩小且位置向左偏移" + ], + "roi": [891, 648, 58, 58] }, "JieGarden@RoguelikeSettlementConfirm": {} } diff --git a/resource/tasks/Roguelike/Sarkaz.json b/resource/tasks/Roguelike/Sarkaz.json index a30f1895ff..a1fae7540d 100644 --- a/resource/tasks/Roguelike/Sarkaz.json +++ b/resource/tasks/Roguelike/Sarkaz.json @@ -459,136 +459,6 @@ "template": "Sarkaz@Roguelike@LastRewardConfirm.png" }, "Sarkaz@Roguelike@RolesDefault": {}, - "Sarkaz@Roguelike@Routing": { - "template": [ - "Sarkaz@Roguelike@StageCombatDps.png", - "Sarkaz@Roguelike@StageEmergencyDps.png", - "Sarkaz@Roguelike@StageDreadfulFoe.png", - "Sarkaz@Roguelike@StageDreadfulFoe-5.png", - "Sarkaz@Roguelike@StageEncounter.png", - "Sarkaz@Roguelike@StageBoons.png", - "Sarkaz@Roguelike@StageSafeHouse.png", - "Sarkaz@Roguelike@StageSafeHouseCR.png", - "Sarkaz@Roguelike@StageSafeHouseHD.png", - "Sarkaz@Roguelike@StageGambling.png", - "Sarkaz@Roguelike@StageTrader.png", - "Sarkaz@Roguelike@StageTraderCR.png", - "Sarkaz@Roguelike@StageTraderHD.png", - "Sarkaz@Roguelike@StageWindAndRain.png", - "Sarkaz@Roguelike@StageEmergencyTransportation.png", - "Sarkaz@Roguelike@StageBoskyPassage.png", - "Sarkaz@Roguelike@StageProphecy.png", - "Sarkaz@Roguelike@StageFilterTruth.png", - "Sarkaz@Roguelike@StageFilterTruthCR.png", - "Sarkaz@Roguelike@StageFilterTruthHD.png", - "Sarkaz@Roguelike@StageConfrontation.png" - ], - "next": ["Sarkaz@Roguelike@RoutingAction"] - }, - "Sarkaz@Roguelike@Routing-CombatOps": { - "doc": "点击普通战斗节点", - "baseTask": "Sarkaz@Roguelike@StageCombatDps", - "template": "Sarkaz@Roguelike@StageCombatDps.png", - "next": [] - }, - "Sarkaz@Roguelike@Routing-FastInvestment": { - "template": ["Sarkaz@Roguelike@StageCombatDps.png"], - "next": ["Sarkaz@Roguelike@RoutingAction"] - }, - "Sarkaz@Roguelike@RoutingAction": { - "algorithm": "JustReturn" - }, - "Sarkaz@Roguelike@RoutingAction-ExitThenAbandon": { - "doc": "用于替换 Sarkaz@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["Sarkaz@Roguelike@ExitThenAbandon"] - }, - "Sarkaz@Roguelike@RoutingAction-StageEncounterEnter": { - "algorithm": "JustReturn", - "next": ["Sarkaz@Roguelike@StageEncounterEnter"] - }, - "Sarkaz@Roguelike@RoutingAction-StageTraderEnter": { - "doc": "用于替换 Sarkaz@Roguelike@RoutingAction 的 BaseTask", - "algorithm": "JustReturn", - "next": ["Sarkaz@Roguelike@StageTraderEnter"] - }, - "Sarkaz@Roguelike@RoutingConfig": { - "doc": [ - "RoguelikeRoutingTaskPlugin用参数", - "| specialParams[0]: 第一列节点的默认横坐标 (Rect.x)", - "| specialParams[1]: 中间列节点的默认横坐标 (Rect.x)", - "| specialParams[2]: 最后列节点的默认横坐标 (Rect.x)", - "| specialParams[3]: 节点 Rect.width", - "| specialParams[4]: 节点 Rect.height", - "| specialParams[5]: 两列节点之间的距离", - "| specialParams[6]: 节点 Rect 下边缘到节点铭牌下边缘的距离", - "| specialParams[7]: roi 的 margin offset", - "| specialParams[8]: 节点间连线方向判定的阈值" - ], - "template": "empty.png", - "specialParams": [321, 341, 586, 138, 47, 450, 32, 15, 7] - }, - "Sarkaz@Roguelike@RoutingContinue": { - "template": "Sarkaz@Roguelike@Continue.png", - "roi": [1050, 550, 210, 100], - "action": "ClickSelf", - "next": ["Sarkaz@Roguelike@RoutingContinueConfirm"] - }, - "Sarkaz@Roguelike@RoutingContinueConfirm": { - "Doc": "next 里的 RoutingNodeAnalyze 是为了确保回到地图", - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [50, 360, 0, 0], - "next": ["Sarkaz@Roguelike@RoutingNodeAnalyze", "Sarkaz@Roguelike@RoutingContinueConfirm"] - }, - "Sarkaz@Roguelike@RoutingExitThenContinue": { - "template": "Roguelike@ExitThenAbandon.png", - "roi": [18, 8, 53, 53], - "action": "ClickSelf", - "next": ["Sarkaz@Roguelike@RoutingContinue"] - }, - "Sarkaz@Roguelike@RoutingNodeAnalyze": { - "template": [ - "Sarkaz@Roguelike@MapNodeCombatOps.png", - "Sarkaz@Roguelike@MapNodeCombatOpsGrey.png", - "Sarkaz@Roguelike@MapNodeEmergencyOps.png", - "Sarkaz@Roguelike@MapNodeEmergencyOpsGrey.png", - "Sarkaz@Roguelike@MapNodeEncounter.png", - "Sarkaz@Roguelike@MapNodeEncounterGrey.png", - "Sarkaz@Roguelike@MapNodeRogueTraderGrey.png" - ], - "roi": [246, 60, 288, 575], - "postDelay": 300 - }, - "Sarkaz@Roguelike@RoutingRefreshNode": { - "roi": [796, 130, 50, 170], - "action": "ClickSelf", - "next": ["Sarkaz@Roguelike@RoutingRefreshNodeConfirm"] - }, - "Sarkaz@Roguelike@RoutingRefreshNodeCompleted": { - "algorithm": "JustReturn" - }, - "Sarkaz@Roguelike@RoutingRefreshNodeConfirm": { - "algorithm": "OcrDetect", - "roi": [993, 472, 53, 26], - "text": ["确定"], - "action": "ClickSelf", - "postDelay": 300, - "next": ["Sarkaz@Roguelike@RoutingRefreshNodeWaiting", "Sarkaz@Roguelike@RoutingRefreshNodeCompleted"] - }, - "Sarkaz@Roguelike@RoutingRefreshNodeWaiting": { - "baseTask": "LoadingText", - "postDelay": 300, - "next": ["Sarkaz@Roguelike@RoutingRefreshNodeWaiting", "Sarkaz@Roguelike@RoutingRefreshNodeCompleted"] - }, - "Sarkaz@Roguelike@RoutingSwipeRight": { - "doc": "生成地图时向左滑动", - "algorithm": "JustReturn", - "action": "Swipe", - "specificRect": [1000, 360, 0, 0], - "rectMove": [570, 360, 0, 0], - "specialParams": [200, 1] - }, "Sarkaz@Roguelike@SelectTheme": { "text": ["假说辑录"] }, @@ -1313,10 +1183,5 @@ "Sarkaz@Roguelike@WaitForStartButtonClicked": { "template": "Roguelike@QuickFormation.png" }, - "Sarkaz@RoguelikeRecruit-GiveUp": { - "doc": "在集成战略模式招募干员界面点击右下角 <放弃> 文字左侧图标位置,放弃招募机会", - "roi": [912, 648, 58, 58], - "action": "ClickSelf" - }, "Sarkaz@RoguelikeSettlementConfirm": {} } diff --git a/resource/tasks/Roguelike/base.json b/resource/tasks/Roguelike/base.json index 2f9e3b0848..15d673c60b 100644 --- a/resource/tasks/Roguelike/base.json +++ b/resource/tasks/Roguelike/base.json @@ -125,6 +125,11 @@ "algorithm": "JustReturn", "postDelay": 100 }, + "RoguelikeRecruit-GiveUp": { + "doc": "在集成战略模式招募干员界面点击右下角 <放弃> 文字左侧图标位置,放弃招募机会", + "roi": [912, 648, 58, 58], + "action": "ClickSelf" + }, "RoguelikeRecruitElite": { "Doc": "base_task", "template": "empty.png", diff --git a/resource/tasks/Roguelike/routing.json b/resource/tasks/Roguelike/routing.json new file mode 100644 index 0000000000..9d061a056e --- /dev/null +++ b/resource/tasks/Roguelike/routing.json @@ -0,0 +1,283 @@ +{ + "RoguelikeRoutingConfig": { + "algorithm": "JustReturn", + "doc": [ + "RoguelikeRoutingTaskPlugin用参数", + "| specialParams[0]: 第一列节点的默认横坐标 (Rect.x)", + "| specialParams[1]: 中间列节点的默认横坐标 (Rect.x)", + "| specialParams[2]: 最后列节点的默认横坐标 (Rect.x)", + "| specialParams[3]: 节点 Rect.width", + "| specialParams[4]: 节点 Rect.height", + "| specialParams[5]: 两列节点之间的距离", + "| specialParams[6]: 节点 Rect 下边缘到节点铭牌下边缘的距离", + "| specialParams[7]: roi 的 margin offset", + "| specialParams[8]: 节点间连线方向判定的阈值" + ], + "specialParams": [321, 341, 586, 138, 47, 450, 32, 15, 7] + }, + "RoguelikeRouting-MoveRightToPeek": { + "doc": "在地图初始位置向左滑动以检视前三列节点", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [1000, 360, 0, 0], + "rectMove": [800, 360, 0, 0], + "specialParams": [200, 1, 2, 0] + }, + "RoguelikeRouting-MoveRight": { + "doc": "生成地图时向左滑动", + "algorithm": "JustReturn", + "action": "Swipe", + "specificRect": [1000, 360, 0, 0], + "rectMove": [570, 360, 0, 0], + "specialParams": [200, 1] + }, + "RoguelikeRoutingAction": { + "algorithm": "JustReturn" + }, + "Sarkaz@Roguelike@Routing": { + "template": [ + "Sarkaz@RoguelikeMapNode-CombatOps.png", + "Sarkaz@RoguelikeMapNode-EmergencyOps.png", + "Sarkaz@Roguelike@StageDreadfulFoe.png", + "Sarkaz@Roguelike@StageDreadfulFoe-5.png", + "Sarkaz@RoguelikeMapNode-Encounter.png", + "Sarkaz@Roguelike@StageBoons.png", + "Sarkaz@Roguelike@StageSafeHouse.png", + "Sarkaz@Roguelike@StageSafeHouseCR.png", + "Sarkaz@Roguelike@StageSafeHouseHD.png", + "Sarkaz@Roguelike@StageGambling.png", + "Sarkaz@Roguelike@StageTrader.png", + "Sarkaz@Roguelike@StageTraderCR.png", + "Sarkaz@Roguelike@StageTraderHD.png", + "Sarkaz@Roguelike@StageWindAndRain.png", + "Sarkaz@Roguelike@StageEmergencyTransportation.png", + "Sarkaz@Roguelike@StageBoskyPassage.png", + "Sarkaz@Roguelike@StageProphecy.png", + "Sarkaz@Roguelike@StageFilterTruth.png", + "Sarkaz@Roguelike@StageFilterTruthCR.png", + "Sarkaz@Roguelike@StageFilterTruthHD.png", + "Sarkaz@Roguelike@StageConfrontation.png" + ], + "next": ["RoguelikeRoutingAction"] + }, + "Sarkaz@Roguelike@Routing-FastInvestment": { + "template": ["Sarkaz@RoguelikeMapNode-CombatOps.png"], + "next": ["RoguelikeRoutingAction"] + }, + "Sarkaz@RoguelikeRoutingNodeAnalyze": { + "template": [ + "Sarkaz@RoguelikeMapNode-CombatOps.png", + "Sarkaz@RoguelikeMapNode-CombatOpsGrey.png", + "Sarkaz@RoguelikeMapNode-EmergencyOps.png", + "Sarkaz@RoguelikeMapNode-EmergencyOpsGrey.png", + "Sarkaz@RoguelikeMapNode-Encounter.png", + "Sarkaz@RoguelikeMapNode-EncounterGrey.png", + "Sarkaz@RoguelikeMapNode-RogueTraderGrey.png" + ], + "roi": [246, 60, 288, 575], + "postDelay": 300 + }, + "Sarkaz@RoguelikeRouting-CombatOps": { + "doc": "点击普通战斗节点", + "baseTask": "Sarkaz@Roguelike@StageCombatDps", + "template": "Sarkaz@Roguelike@StageCombatDps.png", + "next": [] + }, + "Sarkaz@RoguelikeRouting-RefreshNode": { + "roi": [796, 130, 50, 170], + "action": "ClickSelf", + "next": ["Sarkaz@RoguelikeRouting-ConfirmToRefreshNode"] + }, + "Sarkaz@RoguelikeRouting-ConfirmToRefreshNode": { + "algorithm": "OcrDetect", + "roi": [993, 472, 53, 26], + "text": ["确定"], + "action": "ClickSelf", + "postDelay": 300, + "next": ["Sarkaz@RoguelikeRouting-WaitAfterRefreshNode", "Stop"] + }, + "Sarkaz@RoguelikeRouting-WaitAfterRefreshNode": { + "baseTask": "LoadingText", + "postDelay": 300, + "next": ["#self", "Stop"] + }, + "Sarkaz@RoguelikeRouting-ExitThenContinue": { + "template": "Roguelike@ExitThenAbandon.png", + "roi": [18, 8, 53, 53], + "action": "ClickSelf", + "next": ["Sarkaz@RoguelikeRouting-Continue"] + }, + "Sarkaz@RoguelikeRouting-Continue": { + "template": "Sarkaz@Roguelike@Continue.png", + "roi": [1050, 550, 210, 100], + "action": "ClickSelf", + "next": ["Sarkaz@RoguelikeRouting-ConfirmToContinue"] + }, + "Sarkaz@RoguelikeRouting-ConfirmToContinue": { + "doc": "next 里的 RoguelikeRoutingNodeAnalyze 是为了确保回到地图", + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [50, 360, 0, 0], + "next": ["Sarkaz@RoguelikeRoutingNodeAnalyze", "#self"] + }, + "Sarkaz@RoguelikeRoutingAction-ExitThenAbandon": { + "algorithm": "JustReturn", + "next": ["Sarkaz@Roguelike@ExitThenAbandon"] + }, + "Sarkaz@RoguelikeRoutingAction-StageEncounterEnter": { + "algorithm": "JustReturn", + "next": ["Sarkaz@Roguelike@StageEncounterEnter"] + }, + "Sarkaz@RoguelikeRoutingAction-StageTraderEnter": { + "algorithm": "JustReturn", + "next": ["Sarkaz@Roguelike@StageTraderEnter"] + }, + "JieGarden@Roguelike@Routing-FastPass": { + "template": [ + "JieGarden@RoguelikeMapNode-CombatOps.png", + "JieGarden@RoguelikeMapNode-EmergencyOps.png", + "JieGarden@RoguelikeMapNode-Encounter.png", + "JieGarden@RoguelikeMapNode-Boons.png", + "JieGarden@RoguelikeMapNode-RogueTrader.png", + "JieGarden@RoguelikeMapNode-BoskyPassage.png" + ], + "next": ["RoguelikeRoutingAction"] + }, + "JieGarden@RoguelikeRoutingNodeAnalyze": { + "template": [ + "JieGarden@RoguelikeMapNode-CombatOps.png", + "JieGarden@RoguelikeMapNode-CombatOpsGrey.png", + "JieGarden@RoguelikeMapNode-EmergencyOps.png", + "JieGarden@RoguelikeMapNode-EmergencyOpsGrey.png", + "JieGarden@RoguelikeMapNode-Encounter.png", + "JieGarden@RoguelikeMapNode-EncounterGrey.png", + "JieGarden@RoguelikeMapNode-Boons.png", + "JieGarden@RoguelikeMapNode-BoonsGrey.png", + "JieGarden@RoguelikeMapNode-RogueTrader.png", + "JieGarden@RoguelikeMapNode-RogueTraderGrey.png", + "JieGarden@RoguelikeMapNode-BoskyPassage.png", + "JieGarden@RoguelikeMapNode-BoskyPassageGrey.png" + ], + "roi": [0, 60, 1280, 575], + "postDelay": 300 + }, + "JieGarden@RoguelikeRoutingAction-ExitThenAbandon": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@ExitThenAbandon"] + }, + "JieGarden@RoguelikeRoutingAction-StageCombatOpsEnterThenLeave": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageCombatOpsEnterThenLeave"] + }, + "JieGarden@RoguelikeRoutingConfig_BoskyPassage": { + "algorithm": "JustReturn", + "doc": [ + "RoguelikeBoskyPassageRoutingTaskPlugin用参数", + "| specialParams[0]: 第一列节点的默认横坐标 (Rect.x)", + "| specialParams[1]: 第一行节点的默认纵坐标 (Rect.y)", + "| specialParams[2]: 中间列节点的默认横坐标 (Rect.x)", + "| specialParams[3]: 中间行节点的默认纵坐标 (Rect.y)", + "| specialParams[4]: 最后列节点的默认横坐标 (Rect.x)", + "| specialParams[5]: 最后行节点的默认纵坐标 (Rect.y)", + "| specialParams[6]: 节点 Rect.width", + "| specialParams[7]: 节点 Rect.height", + "| specialParams[8]: 两列节点之间的距离", + "| specialParams[9]: 两行节点之间的距离", + "| specialParams[10]: roi 的 margin offset" + ], + "specialParams": [188, 107, 608, 321, 1028, 535, 64, 57, 140, 107, 15] + }, + "JieGarden@Roguelike@Routing_BoskyPassage": { + "template": [ + "JieGarden@RoguelikeMapNode-OldShop.png", + "JieGarden@RoguelikeMapNode-Scheme.png", + "JieGarden@RoguelikeMapNode-YiTrader.png", + "JieGarden@RoguelikeMapNode-Playtime.png", + "JieGarden@RoguelikeMapNode-Omissions.png", + "JieGarden@RoguelikeMapNode-Legend.png", + "JieGarden@RoguelikeMapNode-Doubts.png", + "JieGarden@RoguelikeMapNode-Disaster.png" + ], + "next": ["RoguelikeRoutingAction"] + }, + "JieGarden@RoguelikeRoutingNodeAnalyze_BoskyPassage": { + "template": [ + "JieGarden@RoguelikeMapNode-OldShop.png", + "JieGarden@RoguelikeMapNode-Scheme.png", + "JieGarden@RoguelikeMapNode-YiTrader.png", + "JieGarden@RoguelikeMapNode-Playtime.png", + "JieGarden@RoguelikeMapNode-Omissions.png", + "JieGarden@RoguelikeMapNode-OmissionsGrey.png", + "JieGarden@RoguelikeMapNode-Legend.png", + "JieGarden@RoguelikeMapNode-LegendGrey.png", + "JieGarden@RoguelikeMapNode-Doubts.png", + "JieGarden@RoguelikeMapNode-DoubtsGrey.png", + "JieGarden@RoguelikeMapNode-Disaster.png", + "JieGarden@RoguelikeMapNode-DisasterGrey.png" + ], + "roi": [0, 60, 1280, 575], + "postDelay": 300 + }, + "JieGarden@RoguelikeRouting-BoskyPassagePriority_Default": { + "doc": [ + "界园树洞节点优先级策略配置", + "按优先级从高到低排列节点类型名称", + "拾遗>传说>故肆>易与>筹谋>常乐>杂疑(暂时取消)>灾祸(暂时取消)" + ], + "template": [ + "JieGarden@RoguelikeMapNode-Omissions.png", + "JieGarden@RoguelikeMapNode-Legend.png", + "JieGarden@RoguelikeMapNode-OldShop.png", + "JieGarden@RoguelikeMapNode-YiTrader.png", + "JieGarden@RoguelikeMapNode-Scheme.png", + "JieGarden@RoguelikeMapNode-Playtime.png" + ] + }, + "JieGarden@RoguelikeRouting-BoskyPassagePriority_FindPlaytime": { + "doc": ["常乐>拾遗>传说>故肆>易与>筹谋>杂疑(暂时取消)>灾祸(暂时取消)"], + "template": [ + "JieGarden@RoguelikeMapNode-Playtime.png", + "JieGarden@RoguelikeMapNode-Omissions.png", + "JieGarden@RoguelikeMapNode-Legend.png", + "JieGarden@RoguelikeMapNode-OldShop.png", + "JieGarden@RoguelikeMapNode-YiTrader.png", + "JieGarden@RoguelikeMapNode-Scheme.png" + ] + }, + "JieGarden@RoguelikeRoutingAction-LeaveBoskyPassage": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@Stages_leaveBoskyPassage#next"] + }, + "JieGarden@RoguelikeRoutingAction-StageLegendEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageEncounterEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StageOmissionsEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageEncounterEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StageDoubtsEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageEncounterEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StageDisasterEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageCombatDpsEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StagePlaytimeEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageEncounterEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StageOldShopEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageEncounterEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StageYiTraderEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageYiTraderEnter"] + }, + "JieGarden@RoguelikeRoutingAction-StageSchemeEnter": { + "algorithm": "JustReturn", + "next": ["JieGarden@Roguelike@StageEncounterEnter"] + } +} diff --git a/resource/template/Roguelike/JieGarden/JieGarden@RoguelikeRecruit-GiveUp.png b/resource/template/Roguelike/JieGarden/JieGarden@RoguelikeRecruit-GiveUp.png index 140ded497a..8830be8c9a 100644 Binary files a/resource/template/Roguelike/JieGarden/JieGarden@RoguelikeRecruit-GiveUp.png and b/resource/template/Roguelike/JieGarden/JieGarden@RoguelikeRecruit-GiveUp.png differ diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@RoguelikeRecruit-GiveUp.png b/resource/template/Roguelike/base/RoguelikeRecruit-GiveUp.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@RoguelikeRecruit-GiveUp.png rename to resource/template/Roguelike/base/RoguelikeRecruit-GiveUp.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDisaster.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Disaster.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDisaster.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Disaster.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDisasterGrey.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-DisasterGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDisasterGrey.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-DisasterGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDoubts.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Doubts.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDoubts.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Doubts.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDoubtsGrey.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-DoubtsGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeDoubtsGrey.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-DoubtsGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeLegend.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Legend.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeLegend.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Legend.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeLegendGrey.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-LegendGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeLegendGrey.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-LegendGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeOldShop.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-OldShop.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeOldShop.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-OldShop.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeOmissions.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Omissions.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeOmissions.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Omissions.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeOmissionsGrey.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-OmissionsGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeOmissionsGrey.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-OmissionsGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodePlaytime.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Playtime.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodePlaytime.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Playtime.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeScheme.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Scheme.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeScheme.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-Scheme.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeYiTrader.png b/resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-YiTrader.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeYiTrader.png rename to resource/template/Roguelike/routing/JieGarden/BoskyPassage/JieGarden@RoguelikeMapNode-YiTrader.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoons.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-Boons.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoons.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-Boons.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoonsGrey.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-BoonsGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoonsGrey.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-BoonsGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoskyPassage.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-BoskyPassage.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoskyPassage.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-BoskyPassage.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoskyPassageGrey.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-BoskyPassageGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeBoskyPassageGrey.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-BoskyPassageGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeCombatOps.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-CombatOps.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeCombatOps.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-CombatOps.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeCombatOpsGrey.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-CombatOpsGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeCombatOpsGrey.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-CombatOpsGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEmergencyOps.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-EmergencyOps.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEmergencyOps.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-EmergencyOps.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEmergencyOpsGrey.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-EmergencyOpsGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEmergencyOpsGrey.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-EmergencyOpsGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEncounter.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-Encounter.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEncounter.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-Encounter.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEncounterGrey.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-EncounterGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeEncounterGrey.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-EncounterGrey.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeRogueTrader.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-RogueTrader.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeRogueTrader.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-RogueTrader.png diff --git a/resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeRogueTraderGrey.png b/resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-RogueTraderGrey.png similarity index 100% rename from resource/template/Roguelike/JieGarden/JieGarden@Roguelike@MapNodeRogueTraderGrey.png rename to resource/template/Roguelike/routing/JieGarden/JieGarden@RoguelikeMapNode-RogueTraderGrey.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeCombatOps.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-CombatOps.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeCombatOps.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-CombatOps.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeCombatOpsGrey.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-CombatOpsGrey.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeCombatOpsGrey.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-CombatOpsGrey.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEmergencyOps.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-EmergencyOps.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEmergencyOps.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-EmergencyOps.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEmergencyOpsGrey.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-EmergencyOpsGrey.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEmergencyOpsGrey.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-EmergencyOpsGrey.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEncounter.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-Encounter.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEncounter.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-Encounter.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEncounterGrey.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-EncounterGrey.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeEncounterGrey.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-EncounterGrey.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeRogueTraderGrey.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-RogueTraderGrey.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@MapNodeRogueTraderGrey.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeMapNode-RogueTraderGrey.png diff --git a/resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png b/resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png similarity index 100% rename from resource/template/Roguelike/Sarkaz/Sarkaz@Roguelike@RoutingRefreshNode.png rename to resource/template/Roguelike/routing/Sarkaz/Sarkaz@RoguelikeRouting-RefreshNode.png diff --git a/src/MaaCore/Task/Roguelike/Map/RoguelikeBoskyPassageRoutingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Map/RoguelikeBoskyPassageRoutingTaskPlugin.cpp index 5beae67e31..d6ac4c4078 100644 --- a/src/MaaCore/Task/Roguelike/Map/RoguelikeBoskyPassageRoutingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Map/RoguelikeBoskyPassageRoutingTaskPlugin.cpp @@ -11,8 +11,7 @@ bool asst::RoguelikeBoskyPassageRoutingTaskPlugin::load_params([[maybe_unused]] { if (m_config->get_theme() == RoguelikeTheme::JieGarden) { // ———————— 加载 BoskyPassage 配置 ———————— - const std::shared_ptr bosky_config = - Task.get("JieGarden@Roguelike@RoutingBoskyPassageConfig"); + const TaskPtr bosky_config = Task.get("JieGarden@RoguelikeRoutingConfig_BoskyPassage"); m_bosky_config = bosky_config->special_params; // ———————— 选择导航策略 ———————— @@ -106,7 +105,7 @@ void asst::RoguelikeBoskyPassageRoutingTaskPlugin::bosky_update_map() } MultiMatcher node_analyzer(image); - node_analyzer.set_task_info("JieGarden@Roguelike@RoutingBoskyPassageNodeAnalyze"); + node_analyzer.set_task_info("JieGarden@RoguelikeRoutingNodeAnalyze_BoskyPassage"); if (!node_analyzer.analyze()) { Log.error(__FUNCTION__, "| no nodes are recognised"); return; @@ -199,9 +198,7 @@ void asst::RoguelikeBoskyPassageRoutingTaskPlugin::bosky_decide_and_click( if (!found) { Log.info(__FUNCTION__, "| no open unvisited nodes available"); - Task.set_task_base( - "JieGarden@Roguelike@RoutingAction", - "JieGarden@Roguelike@RoutingAction-ClickRemainingCandleFlame"); + Task.set_task_base("RoguelikeRoutingAction", "JieGarden@RoguelikeRoutingAction-LeaveBoskyPassage"); return; } int gx = RoguelikeBoskyPassageMap::get_instance().get_node_x(chosen); @@ -239,9 +236,9 @@ void asst::RoguelikeBoskyPassageRoutingTaskPlugin::bosky_decide_and_click( const std::string& theme = m_config->get_theme(); std::string node_name = type2name(node_type); - const std::string node_task_name = theme + "@Roguelike@MapNode" + node_name; + const std::string node_task_name = theme + "@RoguelikeRoutingAction-Stage" + node_name + "Enter"; // 设置 next - Task.set_task_base("JieGarden@Roguelike@RoutingAction", node_task_name); + Task.set_task_base("RoguelikeRoutingAction", node_task_name); } std::vector @@ -250,44 +247,26 @@ std::vector LogTraceFunction; const std::string& theme = m_config->get_theme(); - const std::string config_name = theme + "@Roguelike@RoutingBoskyPassagePriority_" + strategy; + const std::string config_name = theme + "@RoguelikeRouting-BoskyPassagePriority_" + strategy; - auto task_info = Task.get(config_name); + const auto& task_info = Task.get(config_name); if (!task_info) { Log.error(__FUNCTION__, "| priority config not found:", config_name); return {}; } // 从 next 字段中读取优先级配置 - const auto& next_tasks = task_info->next; - if (next_tasks.empty()) { + const auto& template_list = task_info->templ_names; + if (template_list.empty()) { Log.warn(__FUNCTION__, "| Priority config is empty in:", config_name); return {}; } // 从任务名称中解析节点类型 - std::vector priority_order; - priority_order.reserve(next_tasks.size()); - - for (const std::string& task_name : next_tasks) { - // 解析类似 "JieGarden@Roguelike@MapNodeYiTrader" 这样的任务名 -> "YiTrader" - constexpr std::string_view map_node_prefix = "MapNode"; - const size_t pos = task_name.rfind(map_node_prefix); - if (pos == std::string::npos) { - Log.warn(__FUNCTION__, "| Invalid task name in priority config:", task_name); - continue; - } - - const std::string node_name = task_name.substr(pos + map_node_prefix.length()); - RoguelikeNodeType node_type = name2type(node_name); - if (node_type != RoguelikeNodeType::Unknown) { - priority_order.push_back(node_type); - Log.debug(__FUNCTION__, "| Added priority node type:", type2name(node_type), "from task:", task_name); - } - else { - Log.warn(__FUNCTION__, "| Failed to parse node type from task:", task_name); - } - } + auto priority_order_view = template_list | std::views::transform([&](const std::string& templ_name) { + return RoguelikeMapInfo.templ2type(theme, templ_name); + }); + std::vector priority_order(priority_order_view.begin(), priority_order_view.end()); Log.info(__FUNCTION__, "| Loaded", priority_order.size(), "node types from priority config"); return priority_order; diff --git a/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.cpp index 6fd6062ed4..621fb93cb9 100644 --- a/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.cpp @@ -22,23 +22,28 @@ bool asst::RoguelikeRoutingTaskPlugin::load_params([[maybe_unused]] const json:: return false; } - const std::shared_ptr config = Task.get(theme + "@Roguelike@RoutingConfig"); + const TaskPtr config_task = Task.get("RoguelikeRoutingConfig"); - m_origin_x = config->special_params.at(0); - m_middle_x = config->special_params.at(1); - m_last_x = config->special_params.at(2); - m_node_width = config->special_params.at(3); - m_node_height = config->special_params.at(4); - m_column_offset = config->special_params.at(5); - m_nameplate_offset = config->special_params.at(6); - m_roi_margin = config->special_params.at(7); - m_direction_threshold = config->special_params.at(8); + m_origin_x = config_task->special_params.at(0); + m_middle_x = config_task->special_params.at(1); + m_last_x = config_task->special_params.at(2); + m_node_width = config_task->special_params.at(3); + m_node_height = config_task->special_params.at(4); + m_column_offset = config_task->special_params.at(5); + m_nameplate_offset = config_task->special_params.at(6); + m_roi_margin = config_task->special_params.at(7); + m_direction_threshold = config_task->special_params.at(8); const RoguelikeMode& mode = m_config->get_mode(); const std::string squad = params.get("squad", ""); + if (theme == RoguelikeTheme::Sarkaz && mode == RoguelikeMode::FastPass && squad == "蓝图测绘分队") { + m_routing_strategy = RoutingStrategy::Sarkaz_FastPass; + return true; + } + if (theme == RoguelikeTheme::Sarkaz && mode == RoguelikeMode::Investment && squad == "点刺成锭分队") { - m_routing_strategy = RoutingStrategy::FastInvestment_Sarkaz; + m_routing_strategy = RoutingStrategy::Sarkaz_FastInvestment; return true; } @@ -46,16 +51,11 @@ bool asst::RoguelikeRoutingTaskPlugin::load_params([[maybe_unused]] const json:: if (((mode == RoguelikeMode::Investment && squad == "指挥分队") || (mode == RoguelikeMode::Collectible && params.get("collectible_mode_squad", squad) == "指挥分队")) && m_config->get_difficulty() >= 3) { - m_routing_strategy = RoutingStrategy::FastInvestment_JieGarden; + m_routing_strategy = RoutingStrategy::JieGarden_FastPassWithBattle; return true; } } - if (mode == RoguelikeMode::FastPass && squad == "蓝图测绘分队") { - m_routing_strategy = RoutingStrategy::FastPass; - return true; - } - return false; } @@ -92,22 +92,92 @@ bool asst::RoguelikeRoutingTaskPlugin::_run() LogTraceFunction; switch (m_routing_strategy) { - case RoutingStrategy::FastInvestment_Sarkaz: + case RoutingStrategy::Sarkaz_FastInvestment: if (m_need_generate_map) { // 随机点击一个第一列的节点,先随便写写,垃圾代码迟早要重构 - ProcessTask(*this, { "Sarkaz@Roguelike@Routing-CombatOps" }).run(); + ProcessTask(*this, { "Sarkaz@RoguelikeRouting-CombatOps" }).run(); // 刷新节点 - ProcessTask(*this, { m_config->get_theme() + "@Roguelike@RoutingRefreshNode" }).run(); + ProcessTask(*this, { "Sarkaz@RoguelikeRouting-RefreshNode" }).run(); // 不识别了,进商店,Go! - Task.set_task_base("Sarkaz@Roguelike@RoutingAction", "Sarkaz@Roguelike@RoutingAction-StageTraderEnter"); + Task.set_task_base("RoguelikeRoutingAction", "Sarkaz@RoguelikeRoutingAction-StageTraderEnter"); // 偷懒,直接用 m_need_generate_map 判断是否已进过商店 m_need_generate_map = false; } else { - Task.set_task_base("Sarkaz@Roguelike@RoutingAction", "Sarkaz@Roguelike@RoutingAction-ExitThenAbandon"); + Task.set_task_base("RoguelikeRoutingAction", "Sarkaz@RoguelikeRoutingAction-ExitThenAbandon"); } break; - case RoutingStrategy::FastInvestment_JieGarden: + case RoutingStrategy::JieGarden_FastPassWithBattle: + if (m_need_generate_map) { + // 向左滑动以检视前三列节点 + ProcessTask(*this, { "RoguelikeRouting-MoveRightToPeek" }).run(); + cv::Mat image = ctrler()->get_image(); + cv::Mat image_draw = image.clone(); + update_map(image, RoguelikeMap::INIT_INDEX + 1, image_draw); +#ifdef ASST_DEBUG + const std::filesystem::path& relative_dir = utils::path("debug") / utils::path("roguelikeMap"); + const auto relative_path = relative_dir / (std::format("{}_draw.png", utils::format_now_for_filename())); + Log.trace("Save image", relative_path); + asst::imwrite(relative_path, image_draw); +#endif + m_need_generate_map = false; + + // 根据第三列节点类型更新导航策略 + const size_t sample_node_of_last_column = m_map.size() - 1; + const RoguelikeNodeType sample_node_type = m_map.get_node_type(sample_node_of_last_column); + Log.info("RoguelikeRouting | Type of last node:", type2name(sample_node_type)); + if (sample_node_type == RoguelikeNodeType::RogueTrader) { + m_routing_strategy = RoutingStrategy::JieGarden_FastPassWithoutBattle; + m_config->set_skip_recruit_in_fast_pass(true); + return _run(); + } + } + if (m_map.get_curr_pos() == RoguelikeMap::INIT_INDEX) { + // 规划路线 + m_map.set_cost_fun([&](const RoguelikeNodePtr& node) { + if (node->type == RoguelikeNodeType::CombatOps) { + return 10; + } + if (node->type == RoguelikeNodeType::EmergencyOps || node->type == RoguelikeNodeType::DreadfulFoe) { + return 11; + } + return 0; + }); + m_map.update_node_costs(); + const size_t next_node = m_map.get_next_node(); + + // 若无法避免超过三场战斗则重开 + if (m_map.get_node_cost(next_node) >= 30) { + callback( + AsstMsg::TaskChainExtraInfo, + json::object { + { "what", "RoutingRestart" }, + { "why", "TooManyBattlesAhead" }, + { "node_cost", m_map.get_node_cost(next_node) }, + }); + + Task.set_task_base("RoguelikeRoutingAction", "JieGarden@RoguelikeRoutingAction-ExitThenAbandon"); + } + else { + const int next_node_x = m_left_most_column_x_in_view; + const int next_node_y = m_map.get_node_y(next_node); + Point next_node_center = Point(next_node_x + m_node_width / 2, next_node_y + m_node_height / 2); + ctrler()->click(next_node_center); + sleep(200); + + Task.set_task_base( + "RoguelikeRoutingAction", + "JieGarden@RoguelikeRoutingAction-StageCombatOpsEnterThenLeave"); + m_map.set_curr_pos(next_node); + } + } + else { + // 执行默认的避战策略 + Task.set_task_base("RoguelikeRoutingAction", "JieGarden@Roguelike@Stages_default"); + } + break; + + case RoutingStrategy::JieGarden_FastPassWithoutBattle: if (m_need_generate_map) { cv::Mat image = ctrler()->get_image(); cv::Mat image_draw = image.clone(); @@ -141,30 +211,27 @@ bool asst::RoguelikeRoutingTaskPlugin::_run() { "node_cost", m_map.get_node_cost(next_node) }, }); - Task.set_task_base( - "JieGarden@Roguelike@RoutingAction", - "JieGarden@Roguelike@RoutingAction-ExitThenAbandon"); - reset_in_run_variables(); + Task.set_task_base("RoguelikeRoutingAction", "JieGarden@RoguelikeRoutingAction-ExitThenAbandon"); } else { - const int next_node_x = m_origin_x; + const int next_node_x = m_left_most_column_x_in_view; const int next_node_y = m_map.get_node_y(next_node); Point next_node_center = Point(next_node_x + m_node_width / 2, next_node_y + m_node_height / 2); ctrler()->click(next_node_center); sleep(200); Task.set_task_base( - "JieGarden@Roguelike@RoutingAction", - "JieGarden@Roguelike@RoutingAction-StageCombatOpsEnterThenLeave"); + "RoguelikeRoutingAction", + "JieGarden@RoguelikeRoutingAction-StageCombatOpsEnterThenLeave"); m_map.set_curr_pos(next_node); } } else { // 执行默认的避战策略 - Task.set_task_base("JieGarden@Roguelike@RoutingAction", "JieGarden@Roguelike@Stages_default"); + Task.set_task_base("RoguelikeRoutingAction", "JieGarden@Roguelike@Stages_default"); } break; - case RoutingStrategy::FastPass: + case RoutingStrategy::Sarkaz_FastPass: if (m_need_generate_map) { generate_map(); m_need_generate_map = false; @@ -202,13 +269,14 @@ bool asst::RoguelikeRoutingTaskPlugin::update_map( int curr_x = -m_node_width - 1; // 第一列节点将触发 rect.x >= curr_x + m_node_width 并更新 curr_col 与 curr_x MultiMatcher node_analyzer(image); - node_analyzer.set_task_info(theme + "@Roguelike@RoutingNodeAnalyze"); + node_analyzer.set_task_info(theme + "@RoguelikeRoutingNodeAnalyze"); if (!node_analyzer.analyze()) { Log.error(__FUNCTION__, "| no nodes are recognised"); return false; } MultiMatcher::ResultsVec match_results = node_analyzer.get_result(); sort_by_vertical_(match_results); // 按照水平方向从左到右排序各列节点,同一列节点按照垂直方向从上到下排序 + m_left_most_column_x_in_view = match_results.front().rect.x; const size_t old_num_columns = m_map.get_num_columns(); for (const auto& [rect, score, templ_name] : match_results) { @@ -247,12 +315,12 @@ void asst::RoguelikeRoutingTaskPlugin::generate_map() m_map.reset(); size_t curr_col = RoguelikeMap::INIT_INDEX + 1; - Rect roi = Task.get(theme + "@Roguelike@RoutingNodeAnalyze")->roi; + Rect roi = Task.get(theme + "@RoguelikeRoutingNodeAnalyze")->roi; // 第一列节点 cv::Mat image = ctrler()->get_image(); MultiMatcher node_analyzer(image); - node_analyzer.set_task_info(theme + "@Roguelike@RoutingNodeAnalyze"); + node_analyzer.set_task_info(theme + "@RoguelikeRoutingNodeAnalyze"); if (!node_analyzer.analyze()) { Log.error(__FUNCTION__, "| no nodes found in the first column"); return; @@ -277,13 +345,13 @@ void asst::RoguelikeRoutingTaskPlugin::generate_map() const size_t node = m_map.create_and_insert_node(type, curr_col, rect.y).value(); generate_edges(node, image, rect.x); } - ProcessTask(*this, { theme + "@Roguelike@RoutingSwipeRight" }).run(); + ProcessTask(*this, { "RoguelikeRouting-MoveRight" }).run(); sleep(200); image = ctrler()->get_image(); node_analyzer.set_image(image); } - ProcessTask(*this, { theme + "@Roguelike@RoutingExitThenContinue" }).run(); // 通过退出重进回到初始位置 + ProcessTask(*this, { theme + "@RoguelikeRouting-ExitThenContinue" }).run(); // 通过退出重进回到初始位置 } void asst::RoguelikeRoutingTaskPlugin::generate_edges( @@ -436,12 +504,12 @@ void asst::RoguelikeRoutingTaskPlugin::refresh_following_combat_nodes() sleep(200); // 刷新节点 - ProcessTask(*this, { m_config->get_theme() + "@Roguelike@RoutingRefreshNode" }).run(); + ProcessTask(*this, { m_config->get_theme() + "@RoguelikeRouting-RefreshNode" }).run(); m_map.set_node_refresh_times(next_node, m_map.get_node_refresh_times(next_node) + 1); // 识别并更新节点类型 Matcher node_analyzer(ctrler()->get_image()); - node_analyzer.set_task_info(theme + "@Roguelike@RoutingNodeAnalyze"); + node_analyzer.set_task_info(theme + "@RoguelikeRoutingNodeAnalyze"); node_analyzer.set_roi(next_node_rect); if (node_analyzer.analyze()) { const Matcher::Result& match_results = node_analyzer.get_result(); @@ -478,7 +546,7 @@ void asst::RoguelikeRoutingTaskPlugin::navigate_route() const size_t next_node = m_map.get_next_node(); if (m_map.get_node_cost(next_node) >= 1000) { - Task.set_task_base("Sarkaz@Roguelike@RoutingAction", "Sarkaz@Roguelike@RoutingAction-ExitThenAbandon"); + Task.set_task_base("RoguelikeRoutingAction", "Sarkaz@RoguelikeRoutingAction-ExitThenAbandon"); reset_in_run_variables(); return; } @@ -491,15 +559,15 @@ void asst::RoguelikeRoutingTaskPlugin::navigate_route() sleep(200); if (m_map.get_node_type(next_node) == RoguelikeNodeType::Encounter) { - Task.set_task_base("Sarkaz@Roguelike@RoutingAction", "Sarkaz@Roguelike@RoutingAction-StageEncounterEnter"); + Task.set_task_base("RoguelikeRoutingAction", "Sarkaz@RoguelikeRoutingAction-StageEncounterEnter"); m_map.set_curr_pos(next_node); } else if (m_map.get_node_type(next_node) == RoguelikeNodeType::RogueTrader) { - Task.set_task_base("Sarkaz@Roguelike@RoutingAction", "Sarkaz@Roguelike@RoutingAction-StageTraderEnter"); + Task.set_task_base("RoguelikeRoutingAction", "Sarkaz@RoguelikeRoutingAction-StageTraderEnter"); reset_in_run_variables(); } else { - Task.set_task_base("Sarkaz@Roguelike@RoutingAction", "Sarkaz@Roguelike@RoutingAction-ExitThenAbandon"); + Task.set_task_base("RoguelikeRoutingAction", "Sarkaz@RoguelikeRoutingAction-ExitThenAbandon"); reset_in_run_variables(); } } diff --git a/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.h b/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.h index de941f62a9..77a540d100 100644 --- a/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/Map/RoguelikeRoutingTaskPlugin.h @@ -19,9 +19,10 @@ public: enum class RoutingStrategy { None, - FastInvestment_Sarkaz, - FastInvestment_JieGarden, - FastPass, + Sarkaz_FastPass, // 实验模式,暂未开放给用户 + Sarkaz_FastInvestment, // 点刺成锭分队快速投资 + JieGarden_FastPassWithBattle, // 指挥分队一战快速投资/烧水 + JieGarden_FastPassWithoutBattle, // 指挥分队无战快速投资/烧水 }; protected: @@ -57,6 +58,8 @@ private: void navigate_route(); void update_selected_x(); + inline static std::function type2name = &RoguelikeMapConfig::type2name; + // ———————— constants and variables ——————————————————————————————————————————————— RoutingStrategy m_routing_strategy = RoutingStrategy::None; RoguelikeMap m_map; @@ -73,5 +76,8 @@ private: int m_nameplate_offset = 0; // 节点 Rect 下边缘到节点铭牌下边缘的距离 int m_roi_margin = 0; // roi 的 margin offset int m_direction_threshold = 0; // 节点间连线方向判定的阈值 + + // view-related + int m_left_most_column_x_in_view = 0; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 0f10587f3e..4664d7913b 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -75,7 +75,7 @@ bool asst::RoguelikeConfig::verify_and_load_params(const json::value& params) if (m_theme == "JieGarden") { if (m_mode == RoguelikeMode::Investment && params.get("squad", "") == "指挥分队" && m_difficulty >= 3) { // 启用特殊策略,联动 RoguelikeRoutingTaskPlugin - Task.set_task_base(strategy_task, "JieGarden@Roguelike@StrategyChange-FastInvestment"); + Task.set_task_base(strategy_task, "JieGarden@Roguelike@StrategyChange_mode1-FastPass"); } if (m_mode == RoguelikeMode::Collectible && params.get("collectible_mode_squad", params.get("squad", "")) == "指挥分队" && m_difficulty >= 3) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 5fcd83c323..fa088856d4 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -129,6 +129,10 @@ public: bool get_run_for_collectible() const { return m_run_for_collectible; } + void set_skip_recruit_in_fast_pass(const bool value) { m_skip_recruit_in_fast_pass = value; } + + bool get_skip_recruit_in_fast_pass() const { return m_skip_recruit_in_fast_pass; } + // ------------------ 投资模式 ------------------ void set_invest_with_more_score(bool value) { m_invest_with_more_score = value; } @@ -153,6 +157,7 @@ private: bool m_start_with_elite_two = false; // 在刷开局模式下凹开局干员精二直升 bool m_only_start_with_elite_two = false; // 只凹开局干员精二直升且不进行作战 bool m_run_for_collectible = false; // 用于 RoguelikeMode::Collectible,判断是否正在烧水 + bool m_skip_recruit_in_fast_pass = false; // 是否可以在特定情况下跳过招募,是否真的跳过招募需要结合其他条件来判断 // ------------------ 投资模式 ------------------ bool m_invest_with_more_score = false; // 投资时招募、购物刷分 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 7c45c9fe5b..2a7a9fa3f7 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -96,8 +96,10 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() if (theme == RoguelikeTheme::JieGarden && squad == "指挥分队" && difficulty >= 3) { if (mode == RoguelikeMode::Investment || (mode == RoguelikeMode::Collectible && m_config->get_run_for_collectible())) { - ProcessTask(*this, { "JieGarden@RoguelikeRecruit-GiveUp" }).run(); - return true; + if (m_config->get_skip_recruit_in_fast_pass()) { + ProcessTask(*this, { "JieGarden@RoguelikeRecruit-GiveUp" }).run(); + return true; + } } }