diff --git a/resource/roguelike/Sami/encounter_for_deposit.json b/resource/roguelike/Sami/encounter_for_deposit.json index 2025f9e2d0..de2023972e 100644 --- a/resource/roguelike/Sami/encounter_for_deposit.json +++ b/resource/roguelike/Sami/encounter_for_deposit.json @@ -500,7 +500,7 @@ { "name": "前行的林地", "option_num": 2, - "choose": 2, + "choose": 1, "choice_require": [ { "name": "树上就不能走吗?", diff --git a/resource/roguelike/Sami/shopping.json b/resource/roguelike/Sami/shopping.json index c05c0b9b26..aaa2ceac67 100644 --- a/resource/roguelike/Sami/shopping.json +++ b/resource/roguelike/Sami/shopping.json @@ -1,62 +1,365 @@ { "theme": "Sami", "priority": [ - { - "name": "地区行动方案", - "effect": "【极地化】希望+2,招募4星干员的希望消耗-2,每次招募有概率出现随机直升的4星干员※", - "No": 15 + "name": "锈蚀的铁锤", + "effect": "商店中购买道具所需源石锭-50%", + "No": 189 }, { - "name": "地区行动方案-α" + "name": "人事部密信-γ", + "effect": "【极地化】希望+2,招募6星干员的希望消耗-2,每次招募有概率出现随机直升的6星干员", + "No": 17 }, { - "name": "地区行动方案-β" + "name": "人事部密信-β", + "effect": "【冻土化】希望+1,招募6星干员的希望消耗-2,每次招募有概率出现随机直升的6星干员", + "No": 17 }, { - "name": "地区行动方案-γ" - }, - { - "name": "全局作战文件", + "name": "全局作战文件-γ", "effect": "【极地化】希望+2,招募5星干员的希望消耗-2,每次招募有概率出现随机直升的5星干员※", "No": 16 }, { - "name": "全局作战文件-α" + "name": "一份演讲稿", + "effect": "招募所有干员的希望消耗-2", + "No": 188 }, { - "name": "全局作战文件-β" - }, - { - "name": "全局作战文件-γ" - }, - { - "name": "人事部密信", - "effect": "【极地化】希望+2,招募6星干员的希望消耗-2,每次招募有概率出现随机直升的6星干员※", + "name": "人事部密信-α", + "effect": "【高寒化】希望+1,招募6星干员的希望消耗-2", "No": 17 }, { - "name": "人事部密信-α" + "name": "缠梦古堡模型", + "effect": "初始部署费用+30", + "No": 95 }, { - "name": "人事部密信-β" + "name": "微缩舞台模型", + "effect": "初始部署费用+20", + "No": 94 }, { - "name": "人事部密信-γ" + "name": "人偶之家", + "effect": "初始部署费用+10", + "No": 93 }, { - "name": "罗德岛战术电台", - "effect": "【极地化】希望+2,战斗后掉落招募券时,增加两个可选项", - "No": 18 + "name": "《第二经济改革法》", + "effect": "所有干员的初始技力+18", + "No": 100 }, { - "name": "罗德岛战术电台-α" + "name": "高卢银行支票", + "effect": "所有干员的初始技力+12", + "No": 99 + }, + { + "name": "老蒲扇", + "effect": "战斗编队中每有一个职业不同的干员,所有干员的攻击力+10%", + "No": 112 + }, + { + "name": "古高卢银币", + "effect": "所有干员的初始技力+6", + "No": 98 }, { - "name": "罗德岛战术电台-β" + "name": "荆棘环", + "effect": "近战干员在受到治疗后,使自身和周围4格内的干员获得1点技力", + "No": 128 }, { - "name": "罗德岛战术电台-γ" + "name": "活木甲", + "effect": "所有我方近战单位部署时获得相当于最大生命50%的屏障", + "No": 134 + }, + { + "name": "不灭的火炬", + "effect": "所有干员周围4格每有一名干员,攻击速度+30", + "No": 140 + }, + { + "name": "岩角号", + "effect": "所有干员周围4格每有一名干员,攻击力+20%", + "No": 139 + }, + { + "name": "湖中神盾", + "effect": "护盾值+1;战斗开始时如果拥有护盾值,所有我方单位的最大生命+60%", + "No": 141 + }, + { + "name": "古地树实", + "effect": "立即获得三件随机的小玩意", + "No": 205 + }, + { + "name": "立体艺术装置", + "effect": "回复7目标生命,每次战斗结束后额外回复1目标生命", + "No": 192 + }, + { + "name": "“时光之末“", + "effect": "仅一次,在非区域最终战斗和领袖战中失败时不结束探索,目标生命+1并继续下一步行动", + "No": 225 + }, + { + "name": "“小格兰法洛“", + "effect": "每次敌人进入保护目标点时,立刻对全场所有敌人造成5秒晕眩", + "No": 226 + }, + { + "name": "“碎片大厦的回忆“", + "effect": "每次敌人进入保护目标点时,立刻对全场所有敌人造成3000点真实伤害", + "No": 227 + }, + { + "name": "宁静泉流", + "effect": "抗干扰指数+2,目标生命上限+3,希望+3", + "No": 51 + }, + + { + "name": "特殊抑制器", + "effect": "目标生命上限+2,回复2目标生命", + "No": 34 + }, + { + "name": "长生者之证", + "effect": "目标生命上限+6", + "No": 37 + }, + { + "name": "阿卡胡拉饭碗", + "effect": "回复4目标生命,护盾值+2", + "No": 191 + }, + { + "name": "《旧高卢地名源流考》", + "effect": "护盾值+6", + "No": 32 + }, + + { + "name": "血魔的寝床", + "effect": "目标生命上限+4", + "No": 36 + }, + { + "name": "警戒篱木", + "effect": "坍缩值-2,目标生命上限+2", + "No": 198 + }, + { + "name": "光谱分析仪", + "effect": "抗干扰指数+1,护盾值+2", + "No": 49 + }, + { + "name": "御2", + "effect": "护盾值+5", + "No": 193 + }, + { + "name": "石像鬼塑像", + "effect": "目标生命上限+3", + "No": 35 + }, + { + "name": "《杜林地上环游记》", + "effect": "护盾值+4", + "No": 31 + }, + { + "name": "闲暇时光", + "effect": "可携带干员+1,抗干扰指数+1", + "No": 50 + }, + { + "name": "Miss.Christine摸摸券-γ", + "promotion": 2, + "effect": "【极地化】护盾值+2,并进阶两个干员(不消耗且获得1希望)", + "No": 14 + }, + { + "name": "“国王的护戒“", + "effect": "护盾值+2,将目标生命全部转化为等量护盾值(目标生命不会低于1)", + "No": 195 + }, + { + "name": "古旧铸物", + "promotion": 2, + "effect": "立即进阶三个干员(不消耗希望)", + "No": 187 + }, + { + "name": "Miss.Christine摸摸券-β", + "promotion": 2, + "effect": "【冻土化】护盾值+1,并进阶两个干员(不消耗且获得1希望)", + "No": 14 + }, + { + "name": "热水壶", + "effect": "目标生命上限+1,希望+1", + "No": 33 + }, + { + "name": "赤金的远征", + "effect": "希望+4,可携带干员+1,可同时部署人数+1", + "No": 30 + }, + { + "name": "特级馥郁咖啡豆", + "effect": "可携带干员+1,可同时部署人数+1,护盾值+1", + "No": 25 + }, + { + "name": "地形图", + "effect": "【常态化】可同时部署人数+1,所有我方单位的防御力+4%", + "No": 1 + }, + { + "name": "地形图-α", + "effect": "【高寒化】可同时部署人数+1,所有我方单位的防御力+5%", + "No": 1 + }, + { + "name": "地形图-β", + "effect": "【冻土化】可同时部署人数+1,所有我方单位的防御力+6%", + "No": 1 + }, + { + "name": "林间夜话", + "effect": "【常态化】可同时部署人数+2,所有我方单位的防御力+6%", + "No": 3 + }, + { + "name": "林间夜话-α", + "effect": "【高寒化】可同时部署人数+2,所有我方单位的防御力+7%", + "No": 3 + }, + { + "name": "林间夜话-β", + "effect": "【冻土化】可同时部署人数+2,所有我方单位的防御力+8%", + "No": 3 + }, + { + "name": "林间夜话-γ", + "effect": "【极地化】可同时部署人数+2,所有我方单位的防御力+8%,场上每有一个我方单位防御力额外+0.5%", + "No": 3 + }, + { + "name": "教堂救济餐券", + "effect": "【常态化】可同时部署人数+2,所有我方单位的生命值+6%", + "No": 4 + }, + { + "name": "教堂救济餐券-α", + "effect": "【高寒化】可同时部署人数+2,所有我方单位的生命值+7%", + "No": 4 + }, + { + "name": "教堂救济餐券-β", + "effect": "【冻土化】可同时部署人数+2,所有我方单位的生命值+8%", + "No": 4 + }, + { + "name": "教堂救济餐券-γ", + "effect": "【极地化】可同时部署人数+2,所有我方单位的生命值+8%,场上每有一个我方单位生命值额外+0.5%", + "No": 4 + }, + { + "name": "红色蝴蝶结", + "effect": "【常态化】希望+2,可同时部署人数+1", + "No": 5 + }, + { + "name": "红色蝴蝶结-α", + "effect": "【高寒化】希望+3,可同时部署人数+1", + "No": 5 + }, + { + "name": "红色蝴蝶结-β", + "effect": "【极地化】希望+4,可同时部署人数+1,非战斗节点进行的战斗可同时部署人数额外+2", + "No": 5 + }, + { + "name": "红色蝴蝶结-γ", + "effect": "【冻土化】希望+4,可同时部署人数+1", + "No": 5 + }, + { + "name": "独奏八音盒", + "effect": "【常态化】希望+4,可同时部署人数+1", + "No": 6 + }, + { + "name": "独奏八音盒-α", + "effect": "【高寒化】希望+5,可同时部署人数+1", + "No": 6 + }, + { + "name": "独奏八音盒-β", + "effect": "【冻土化】希望+6,可同时部署人数+1", + "No": 6 + }, + { + "name": "独奏八音盒-γ", + "effect": "【极地化】希望+6,可同时部署人数+1,险路恶敌战斗可同时部署人数额外+1", + "No": 6 + }, + { + "name": "皮特水果什锦", + "effect": "可携带干员+3,所有我方单位的攻击力、防御力和生命值+3%", + "No": 24 + }, + { + "name": "咖啡平原咖啡糖", + "effect": "可携带干员+2,所有我方单位的攻击速度+2", + "No": 22 + }, + { + "name": "尖叫樱桃", + "effect": "可携带干员+2,所有我方单位的攻击力+2%", + "No": 23 + }, + { + "name": "神音海螺", + "effect": "【常态化】可同时部署人数+1,所有我方单位的生命值+4%", + "No": 2 + }, + { + "name": "神音海螺-α", + "effect": "【高寒化】可同时部署人数+1,所有我方单位的生命值+5%", + "No": 2 + }, + { + "name": "神音海螺-β", + "effect": "【冻土化】可同时部署人数+1,所有我方单位的生命值+6%", + "No": 2 + }, + { + "name": "神音海螺-γ", + "effect": "【极地化】可同时部署人数+1,所有我方单位的生命值+6%,场上每有一个我方单位生命值额外+0.5%", + "No": 2 + }, + { + "name": "琥珀伤痕", + "effect": "抗干扰指数可以超出上限,且每超出1点使所有我方单位的生命值+8%,攻击力+8%", + "No": 229 + }, + { + "name": "地形图-γ", + "effect": "【极地化】可同时部署人数+1,所有我方单位的防御力+6%,场上每有一个我方单位防御力额外+0.5%", + "No": 1 + }, + { + "name": "指路藤偶", + "effect": "通过纵向通路时有概率不降低抗干扰指数", + "No": 211 }, { "name": "精选兽肉罐头", @@ -72,27 +375,7 @@ "name": "橙味风暴", "effect": "可携带干员+1,所有我方单位的攻击力+1%", "No": 21 - }, - { - "name": "咖啡平原咖啡糖", - "effect": "可携带干员+2,所有我方单位的攻击速度+2", - "No": 22 - }, - { - "name": "尖叫樱桃", - "effect": "可携带干员+2,所有我方单位的攻击力+2%", - "No": 23 - }, - { - "name": "皮特水果什锦", - "effect": "可携带干员+3,所有我方单位的攻击力、防御力和生命值+3%", - "No": 24 - }, - { - "name": "特级馥郁咖啡豆", - "effect": "可携带干员+1,可同时部署人数+1,护盾值+1", - "No": 25 - }, + }, { "name": "蓝色丝巾", "effect": "希望+2,可携带干员+1", @@ -112,77 +395,141 @@ "name": "玻璃小鸟", "effect": "希望+4,可携带干员+1", "No": 29 + }, + { + "name": "伶牙,毁林者", + "effect": "战斗有概率额外掉落1个密文板", + "No": 213 }, { - "name": "赤金的远征", - "effect": "希望+4,可携带干员+1,可同时部署人数+1", - "No": 30 + "name": "维多利亚“废铁“勋章", + "effect": "战斗获得的指挥经验+20%", + "No": 48 }, { - "name": "《杜林地上环游记》", - "effect": "护盾值+4", - "No": 31 + "name": "彩虹瓮", + "effect": "每次敌人进入保护目标点时,立即使随机一名再部署中的单位当前再部署时间减半", + "No": 208 }, { - "name": "《旧高卢地名源流考》", - "effect": "护盾值+6", - "No": 32 + "name": "“盲目“", + "effect": "抗干扰指数为0-1时,水平或垂直移动随机获得护盾值、源石锭、希望、抗干扰指数或密文板", + "No": 228 }, { - "name": "一份演讲稿", - "effect": "招募所有干员的希望消耗-2", - "No": 188 + "name": "“岁怒“", + "effect": "每次部署我方单位时,对场上随机一个敌人及其周围造成3000点法术伤害", + "No": 223 }, { - "name": "锈蚀的铁锤", - "effect": "商店中购买道具所需源石锭-50%", - "No": 189 + "name": "芽棍", + "effect": "每次进入树篱之途或失与得节点,护盾值+2", + "No": 209 }, { - "name": "阿卡胡拉饭碗", - "effect": "回复4目标生命,护盾值+2", - "No": 191 + "name": "坎诺特印记", + "effect": "每次在诡意行商购买一件道具,或在失与得交换一次,希望+1", + "No": 210 }, { - "name": "立体艺术装置", - "effect": "回复7目标生命,每次战斗结束后额外回复1目标生命", - "No": 192 + "name": "全自动维修台", + "effect": "抗干扰指数+2,但是坍缩值+2", + "No": 197 }, { - "name": "御2", - "effect": "护盾值+5", - "No": 193 + "name": "解约协议-α", + "effect": "【高寒化】希望+4,回复1目标生命", + "No": 9 }, + { + "name": "解约协议-β", + "effect": "【冻土化】希望+4,回复2目标生命", + "No": 9 + }, + { + "name": "解约协议-γ", + "effect": "【极地化】希望+4,回复3目标生命", + "No": 9 + }, + { + "name": "仪式铃", + "effect": "失去抗干扰指数时,回复1目标生命", + "No": 201 + }, + { + "name": "地区行动方案", + "effect": "【常态化】招募4星干员的希望消耗-2", + "No": 15 + }, + { + "name": "地区行动方案-α", + "effect": "【高寒化】希望+1,招募4星干员的希望消耗-2", + "No": 15 + }, + { + "name": "地区行动方案-β", + "effect": "【冻土化】希望+1,招募4星干员的希望消耗-2,每次招募有概率出现随机直升的4星干员", + "No": 15 + }, + { + "name": "地区行动方案-γ", + "effect": "【极地化】希望+2,招募4星干员的希望消耗-2,每次招募有概率出现随机直升的4星干员※", + "No": 15 + }, + { + "name": "全局作战文件", + "effect": "【常态化】招募5星干员的希望消耗-2", + "No": 16 + }, + { + "name": "全局作战文件-α", + "effect": "【冻土化】希望+1,招募5星干员的希望消耗-2,每次招募有概率出现随机直升的5星干员", + "No": 16 + }, + { + "name": "全局作战文件-β", + "effect": "【冻土化】希望+1,招募5星干员的希望消耗-2,每次招募有概率出现随机直升的5星干员", + "No": 16 + }, + { + "name": "全局作战文件-γ", + "effect": "【极地化】希望+2,招募5星干员的希望消耗-2,每次招募有概率出现随机直升的5星干员※", + "No": 16 + }, + { + "name": "人事部密信", + "effect": "【常态化】招募6星干员的希望消耗-2", + "No": 17 + }, + + + { + "name": "罗德岛战术电台", + "effect": "【常态化】战斗后掉落招募券时,增加一个可选项", + "No": 18 + }, + { + "name": "罗德岛战术电台-α", + "effect": "【高寒化】希望+1,战斗后掉落招募券时,增加一个可选项", + "No": 18 + }, + { + "name": "罗德岛战术电台-β", + "effect": "【冻土化】希望+1,战斗后掉落招募券时,增加两个可选项", + "No": 18 + }, + { + "name": "罗德岛战术电台-γ", + "effect": "【极地化】希望+2,战斗后掉落招募券时,增加两个可选项", + "No": 18 + }, + { "name": "金酒之杯", "effect": "每有5源石锭,所有我方单位的攻击速度+7", "No": 194 }, - { - "name": "热水壶", - "effect": "目标生命上限+1,希望+1", - "No": 33 - }, - { - "name": "特殊抑制器", - "effect": "目标生命上限+2,回复2目标生命", - "No": 34 - }, - { - "name": "石像鬼塑像", - "effect": "目标生命上限+3", - "No": 35 - }, - { - "name": "血魔的寝床", - "effect": "目标生命上限+4", - "No": 36 - }, - { - "name": "长生者之证", - "effect": "目标生命上限+6", - "No": 37 - }, + { "name": "女妖之吻", "effect": "希望+8", @@ -224,6 +571,47 @@ "effect": "所有干员攻击【感染生物】时攻击力提升至150%并使其失去特殊能力3秒", "No": 186 }, + { + "name": "游戏室管理员权限卡", + "promotion": 1, + "effect": "【常态化】立即进阶一个干员(不消耗希望)", + "No": 13 + }, + { + "name": "游戏室管理员权限卡-α", + "promotion": 1, + "effect": "【高寒化】立即获得源石锭+2,并进阶一个干员(不消耗希望)", + "No": 13 + }, + { + "name": "游戏室管理员权限卡-β", + "promotion": 1, + "effect": "【冻土化】立即获得源石锭+2,并进阶一个干员(不消耗且获得1希望)", + "No": 13 + }, + { + "name": "游戏室管理员权限卡-γ", + "promotion": 1, + "effect": "【极地化】立即获得源石锭+4,并进阶一个干员(不消耗且获得1希望)", + "No": 13 + }, + { + "name": "Miss.Christine摸摸券", + "promotion": 2, + "effect": "【常态化】进阶两个干员(不消耗且获得1希望)", + "No": 14 + }, + { + "name": "Miss.Christine摸摸券-α", + "promotion": 2, + "effect": "【常态化】立即进阶两个干员(不消耗希望)", + "No": 14 + }, + { + "name": "四叶草化石", + "effect": "我方在得偿所愿节点和战斗后掉落战利品时,增加一个可选项", + "No": 190 + }, { "name": "钝爪-典训", "effect": "立即进阶一个【先锋】干员【不消耗希望】", @@ -322,70 +710,12 @@ { "name": "先锋招募券" }, - { - "name": "游戏室管理员权限卡", - "effect": "【极地化】立即获得源石锭+4,并进阶一个干员(不消耗且获得1希望)", - "No": 13 - }, - { - "name": "游戏室管理员权限卡-α", - "promotion": 1 - }, - { - "name": "游戏室管理员权限卡-β", - "promotion": 1 - }, - { - "name": "游戏室管理员权限卡-γ", - "promotion": 1 - }, - { - "name": "Miss.Christine摸摸券", - "effect": "【极地化】护盾值+2,并进阶两个干员(不消耗且获得1希望)", - "No": 14 - }, - { - "name": "Miss.Christine摸摸券-α", - "promotion": 2 - }, - { - "name": "Miss.Christine摸摸券-β", - "promotion": 2 - }, - { - "name": "Miss.Christine摸摸券-γ", - "promotion": 2 - }, - { - "name": "四叶草化石", - "effect": "我方在得偿所愿节点和战斗后掉落战利品时,增加一个可选项", - "No": 190 - }, - { - "name": "古旧铸物", - "effect": "立即进阶三个干员(不消耗希望)", - "No": 187 - }, - { - "name": "维多利亚“废铁“勋章", - "effect": "战斗获得的指挥经验+20%", - "No": 48 - }, - { - "name": "光谱分析仪", - "effect": "抗干扰指数+1,护盾值+2", - "No": 49 - }, - { - "name": "闲暇时光", - "effect": "可携带干员+1,抗干扰指数+1", - "No": 50 - }, - { - "name": "宁静泉流", - "effect": "抗干扰指数+2,目标生命上限+3,希望+3", - "No": 51 - }, + + + + + + { "name": "突击协议-利刃", "roles": [ @@ -623,21 +953,7 @@ "effect": "所有我方单位获得10%物理与法术闪避", "No": 92 }, - { - "name": "人偶之家", - "effect": "初始部署费用+10", - "No": 93 - }, - { - "name": "微缩舞台模型", - "effect": "初始部署费用+20", - "No": 94 - }, - { - "name": "缠梦古堡模型", - "effect": "初始部署费用+30", - "No": 95 - }, + { "name": "漆黑的舞鞋", "effect": "可以在高台部署近战位干员", @@ -648,21 +964,7 @@ "effect": "可以在低地部署远程位干员", "No": 97 }, - { - "name": "古高卢银币", - "effect": "所有干员的初始技力+6", - "No": 98 - }, - { - "name": "高卢银行支票", - "effect": "所有干员的初始技力+12", - "No": 99 - }, - { - "name": "《第二经济改革法》", - "effect": "所有干员的初始技力+18", - "No": 100 - }, + { "name": "香草沙士汽水", "effect": "所有自然回复技能的技力恢复+0.2/秒", @@ -718,11 +1020,7 @@ "effect": "敌人受到的一次性晕眩、寒冷、冰冻等异常效果影响时间提高150%", "No": 111 }, - { - "name": "老蒲扇", - "effect": "战斗编队中每有一个职业不同的干员,所有干员的攻击力+10%", - "No": 112 - }, + { "name": "食腐者手杖", "effect": "所有我方单位受到的治疗溢出时,周围敌人会受到相当于该次溢出治疗量的法术伤害", @@ -798,11 +1096,7 @@ "effect": "近战干员在受到伤害后5秒内,攻击速度+40", "No": 127 }, - { - "name": "荆棘环", - "effect": "近战干员在受到治疗后,使自身和周围4格内的干员获得1点技力", - "No": 128 - }, + { "name": "“永夜的窥视“", "effect": "所有干员的攻击力+25%,攻击速度+25,但每秒流失25生命值", @@ -828,11 +1122,7 @@ "effect": "每次战斗会随机1个可部署位置,该位置和周围8格内的我方单位具有迷彩", "No": 133 }, - { - "name": "活木甲", - "effect": "所有我方近战单位部署时获得相当于最大生命50%的屏障", - "No": 134 - }, + { "name": "鳞皮壳盾", "effect": "所有我方远程单位部署时获得3层护盾", @@ -852,22 +1142,7 @@ "name": "空羽兽", "effect": "【召唤物】生命值+30%,攻击力+30%,且在场时使它所属的干员攻击力+60%", "No": 138 - }, - { - "name": "岩角号", - "effect": "所有干员周围4格每有一名干员,攻击力+20%", - "No": 139 - }, - { - "name": "不灭的火炬", - "effect": "所有干员周围4格每有一名干员,攻击速度+30", - "No": 140 - }, - { - "name": "湖中神盾", - "effect": "护盾值+1;战斗开始时如果拥有护盾值,所有我方单位的最大生命+60%", - "No": 141 - }, + }, { "name": "古老壁画", "effect": "敌人进入和解除浮空、失重状态时,受到1000点法术伤害,并在10秒内失去特殊能力", @@ -883,173 +1158,112 @@ "effect": "所有敌方单位移动速度-15%,且失重时重量额外下降2个等级", "No": 144 }, - { - "name": "地形图", - "effect": "【极地化】可同时部署人数+1,所有我方单位的防御力+6%,场上每有一个我方单位防御力额外+0.5%", - "No": 1 - }, - { - "name": "地形图-α" - }, - { - "name": "地形图-β" - }, - { - "name": "地形图-γ" - }, - { - "name": "神音海螺", - "effect": "【极地化】可同时部署人数+1,所有我方单位的生命值+6%,场上每有一个我方单位生命值额外+0.5%", - "No": 2 - }, - { - "name": "神音海螺-α" - }, - { - "name": "神音海螺-β" - }, - { - "name": "神音海螺-γ" - }, - { - "name": "林间夜话", - "effect": "【极地化】可同时部署人数+2,所有我方单位的防御力+8%,场上每有一个我方单位防御力额外+0.5%", - "No": 3 - }, - { - "name": "林间夜话-α" - }, - { - "name": "林间夜话-β" - }, - { - "name": "林间夜话-γ" - }, - { - "name": "教堂救济餐券", - "effect": "【极地化】可同时部署人数+2,所有我方单位的生命值+8%,场上每有一个我方单位生命值额外+0.5%", - "No": 4 - }, - { - "name": "教堂救济餐券-α" - }, - { - "name": "教堂救济餐券-β" - }, - { - "name": "教堂救济餐券-γ" - }, - { - "name": "红色蝴蝶结", - "effect": "【极地化】希望+4,可同时部署人数+1,非战斗节点进行的战斗可同时部署人数额外+2", - "No": 5 - }, - { - "name": "红色蝴蝶结-α" - }, - { - "name": "红色蝴蝶结-β" - }, - { - "name": "红色蝴蝶结-γ" - }, - { - "name": "独奏八音盒", - "effect": "【极地化】希望+6,可同时部署人数+1,险路恶敌战斗可同时部署人数额外+1", - "No": 6 - }, - { - "name": "独奏八音盒-α" - }, - { - "name": "独奏八音盒-β" - }, - { - "name": "独奏八音盒-γ" - }, + + { "name": "被撬开的道具箱", + "effect": "【常态化】希望+4", + "No": 7 + }, + { + "name": "被撬开的道具箱-α", + "effect": "【高寒化】希望+4,立即获得源石锭+3", + "No": 7 + }, + { + "name": "被撬开的道具箱-β", + "effect": "【冻土化】希望+4,立即获得源石锭+4", + "No": 7 + }, + { + "name": "被撬开的道具箱-γ", "effect": "【极地化】希望+4,立即获得源石锭+5", "No": 7 }, - { - "name": "被撬开的道具箱-α" - }, - { - "name": "被撬开的道具箱-β" - }, - { - "name": "被撬开的道具箱-γ" - }, { "name": "古旧乐谱残章", + "effect": "【常态化】希望+4", + "No": 8 + }, + { + "name": "古旧乐谱残章-α", + "effect": "【高寒化】希望+4,所有我方单位的攻击速度+4", + "No": 8 + }, + { + "name": "古旧乐谱残章-β", + "effect": "【冻土化】希望+4,所有我方单位的攻击速度+5", + "No": 8 + }, + { + "name": "古旧乐谱残章-γ", "effect": "【极地化】希望+4,所有我方单位的攻击速度+6", "No": 8 }, - { - "name": "古旧乐谱残章-α" - }, - { - "name": "古旧乐谱残章-β" - }, - { - "name": "古旧乐谱残章-γ" - }, { "name": "解约协议", - "effect": "【极地化】希望+4,回复3目标生命", + "effect": "【常态化】希望+4", "No": 9 }, - { - "name": "解约协议-α" - }, - { - "name": "解约协议-β" - }, - { - "name": "解约协议-γ" - }, { "name": "万能钥匙", + "effect": "【常态化】希望+6", + "No": 10 + }, + { + "name": "万能钥匙-α", + "effect": "【高寒化】希望+6,坍缩值-1", + "No": 10 + }, + { + "name": "万能钥匙-β", + "effect": "【冻土化】希望+7,坍缩值-1", + "No": 10 + }, + { + "name": "万能钥匙-γ", "effect": "【极地化】希望+7,坍缩值-2", "No": 10 }, - { - "name": "万能钥匙-α" - }, - { - "name": "万能钥匙-β" - }, - { - "name": "万能钥匙-γ" - }, { "name": "古旧钱币", + "effect": "【常态化】立即获得源石锭+10", + "No": 11 + }, + { + "name": "古旧钱币-α", + "effect": "【高寒化】立即获得源石锭+10,希望+1", + "No": 11 + }, + { + "name": "古旧钱币-β", + "effect": "【冻土化】立即获得源石锭+11,希望+1", + "No": 11 + }, + { + "name": "古旧钱币-γ", "effect": "【极地化】立即获得源石锭+12,希望+1", "No": 11 }, - { - "name": "古旧钱币-α" - }, - { - "name": "古旧钱币-β" - }, - { - "name": "古旧钱币-γ" - }, { "name": "演员的首饰盒", - "effect": "【极地化】立即获得源石锭+20,每当坍缩值增长时获得源石锭+1", + "effect": "【常态化】立即获得源石锭+18", "No": 12 }, { - "name": "演员的首饰盒-α" + "name": "演员的首饰盒-α", + "effect": "【高寒化】立即获得源石锭+18,每当坍缩值增长时获得源石锭+1", + "No": 12 }, { - "name": "演员的首饰盒-β" + "name": "演员的首饰盒-β", + "effect": "【冻土化】立即获得源石锭+19,每当坍缩值增长时获得源石锭+1", + "No": 12 }, { - "name": "演员的首饰盒-γ" + "name": "演员的首饰盒-γ", + "effect": "【极地化】立即获得源石锭+20,每当坍缩值增长时获得源石锭+1", + "No": 12 }, { "name": "钝爪-突破", @@ -1061,17 +1275,11 @@ }, { "name": "钝爪-爆发", - "roles": [ - "PIONEER" - ], "effect": "所有【先锋】干员的初始技力+15", "No": 146 }, { "name": "钝爪-熟稔", - "roles": [ - "PIONEER" - ], "effect": "所有【先锋】干员的技力消耗-35%", "No": 147 }, @@ -1101,9 +1309,6 @@ }, { "name": "折戟-浴血", - "roles": [ - "WARRIOR" - ], "effect": "所有【近卫】干员在攻击后获得2点技力", "No": 151 }, @@ -1173,9 +1378,6 @@ }, { "name": "残弩-神速", - "roles": [ - "SNIPER" - ], "effect": "所有【狙击】干员的攻击速度+70", "No": 160 }, @@ -1197,9 +1399,6 @@ }, { "name": "断杖-凝神", - "roles": [ - "CASTER" - ], "effect": "所有【术师】干员的技力恢复+0.4/秒", "No": 163 }, @@ -1253,17 +1452,11 @@ }, { "name": "医者-自医", - "roles": [ - "MEDIC" - ], "effect": "所有【医疗】干员的技力恢复+0.3/秒", "No": 170 }, { "name": "医者-妙手", - "roles": [ - "MEDIC" - ], "effect": "所有【医疗】干员的攻击速度+50", "No": 171 }, @@ -1293,9 +1486,6 @@ }, { "name": "锈刃-可视静谧", - "roles": [ - "SPECIAL" - ], "effect": "所有【特种】干员的再部署时间-35%", "No": 175 }, @@ -1320,7 +1510,11 @@ { "name": "极速之手", "effect": "【处决者】、【伏击客】和【傀儡师】相邻四格内没有我方单位时,攻击速度+120", - "No": 179 + "No": 179, + "chars": [ + "红", + "伊桑" + ] }, { "name": "净尘之手", @@ -1328,7 +1522,7 @@ "No": 180, "chars": [ "浊心斯卡蒂", - "卡涅利安", + "林", "流明" ] }, @@ -1342,26 +1536,12 @@ "Pith" ] }, - { - "name": "“国王的护戒“", - "effect": "护盾值+2,将目标生命全部转化为等量护盾值(目标生命不会低于1)", - "No": 195 - }, + { "name": "骑士长枪专业版", "effect": "战场的宝箱会掉落更多的源石锭", "No": 196 - }, - { - "name": "全自动维修台", - "effect": "抗干扰指数+2,但是坍缩值+2", - "No": 197 - }, - { - "name": "警戒篱木", - "effect": "坍缩值-2,目标生命上限+2", - "No": 198 - }, + }, { "name": "《重型音乐选集》", "effect": "坍缩值-2,希望+2", @@ -1372,11 +1552,7 @@ "effect": "进入深埋迷境时,坍缩值-3", "No": 200 }, - { - "name": "仪式铃", - "effect": "失去抗干扰指数时,回复1目标生命", - "No": 201 - }, + { "name": "北方拓荒者拐杖", "effect": "抗干扰指数不低于4时,每进入一个非战斗节点,获得源石锭+2", @@ -1391,12 +1567,7 @@ "name": "雪与土的织带", "effect": "每次战斗会随机1个可部署位置,该位置和周围8格的我方干员攻击和受击回复技力时,使范围内另一名干员同时回复", "No": 204 - }, - { - "name": "古地树实", - "effect": "立即获得三件随机的小玩意", - "No": 205 - }, + }, { "name": "极地改型包", "effect": "支援道具使用时会在周围4格同时使用", @@ -1407,71 +1578,16 @@ "effect": "战斗后有概率使所有我方单位的攻击力和防御力永久+5%(最多叠加10层)", "No": 207 }, - { - "name": "彩虹瓮", - "effect": "每次敌人进入保护目标点时,立即使随机一名再部署中的单位当前再部署时间减半", - "No": 208 - }, - { - "name": "芽棍", - "effect": "每次进入树篱之途或失与得节点,护盾值+2", - "No": 209 - }, - { - "name": "坎诺特印记", - "effect": "每次在诡意行商购买一件道具,或在失与得交换一次,希望+1", - "No": 210 - }, - { - "name": "指路藤偶", - "effect": "通过纵向通路时有概率不降低抗干扰指数", - "No": 211 - }, { "name": "乌萨斯断刃", "effect": "每有1级坍缩范式,战斗获得的指挥经验+10%", "No": 212 }, - { - "name": "“岁怒“", - "effect": "每次部署我方单位时,对场上随机一个敌人及其周围造成3000点法术伤害", - "No": 223 - }, { "name": "“文明的存续“", "effect": "所有敌方单位受到的真实伤害+150%", "No": 224 }, - { - "name": "“时光之末“", - "effect": "仅一次,在非区域最终战斗和领袖战中失败时不结束探索,目标生命+1并继续下一步行动", - "No": 225 - }, - { - "name": "“小格兰法洛“", - "effect": "每次敌人进入保护目标点时,立刻对全场所有敌人造成5秒晕眩", - "No": 226 - }, - { - "name": "“碎片大厦的回忆“", - "effect": "每次敌人进入保护目标点时,立刻对全场所有敌人造成3000点真实伤害", - "No": 227 - }, - { - "name": "“盲目“", - "effect": "抗干扰指数为0-1时,水平或垂直移动随机获得护盾值、源石锭、希望、抗干扰指数或密文板", - "No": 228 - }, - { - "name": "琥珀伤痕", - "effect": "抗干扰指数可以超出上限,且每超出1点使所有我方单位的生命值+8%,攻击力+8%", - "No": 229 - }, - { - "name": "伶牙,毁林者", - "effect": "战斗有概率额外掉落1个密文板", - "No": 213 - }, { "name": "树痕之盔", "effect": "希望+3,让探索开启不同的方向", diff --git a/resource/tasks.json b/resource/tasks.json index 35637465cd..ed92157bd7 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -115,6 +115,60 @@ ], "maxTimes": 20 }, + "SwipeToTheUp": { + "algorithm": "JustReturn", + "action": "Swipe", + "postDelay": 300, + "specificRect": [ + 600, + 510, + 100, + 100 + ], + "rectMove": [ + 600, + 0, + 100, + 100 + ], + "specialParams": [ + 150, + 0, + 1, + 1 + ], + "next": [ + "#next" + ], + "maxTimes": 20 + }, + "SwipeToTheDown": { + "algorithm": "JustReturn", + "action": "Swipe", + "postDelay": 300, + "specificRect": [ + 600, + 145, + 100, + 100 + ], + "rectMove": [ + 600, + 610, + 100, + 100 + ], + "specialParams": [ + 150, + 0, + 1, + 1 + ], + "next": [ + "#next" + ], + "maxTimes": 20 + }, "StageTheme": { "action": "ClickSelf", "roi": [ @@ -7752,6 +7806,19 @@ "Roguelike@StartExplore" ] }, + "Roguelike@ChooseDifficultyConfirm": { + "algorithm": "OcrDetect", + "action": "ClickSelf", + "postDelay": 500, + "text": [ "选择" ], + "roi": [ + 1064, + 294, + 216, + 170 + ] + }, + "Roguelike@ChooseOper": { "Doc": "本任务注册了插件 RoguelikeRecruitTaskPlugin", "algorithm": "JustReturn", @@ -7926,6 +7993,16 @@ 160 ] }, + "Roguelike@ExitThenAbandon_mode4": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 0, + 320, + 160 + ] + }, "Roguelike@FormationConfirm": { "action": "ClickSelf", "roi": [ @@ -9345,6 +9422,18 @@ "Roguelike@StartAction@LoadingIcon" ] }, + "Roguelike@StartExploreConfirm": { + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "postDelay": 2000, + "roi": [ + 1064, + 294, + 216, + 170 + ] + }, "Roguelike@StartExplore": { "Doc": "base_task", "template": "empty.png", @@ -9360,6 +9449,7 @@ "next": [ "Roguelike@SquadDefault", "Roguelike@InitalDrop", + "Roguelike@ChooseDifficulty", "Roguelike@StartExplore" ] }, @@ -9494,6 +9584,13 @@ "Phantom@Roguelike@Abandon" ] }, + "Phantom@Roguelike@ExitThenAbandon_mode4": { + "template": "Roguelike@ExitThenAbandon_mode4.png", + "next": [ + "Phantom@Roguelike@ExitThenAbandon", + "Phantom@Roguelike@Abandon" + ] + }, "Phantom@Roguelike@GamePass": {}, "Phantom@Roguelike@GamePassSkip1": {}, "Phantom@Roguelike@GamePassSkip1Confirm": { @@ -9541,7 +9638,7 @@ "故土残躯" ], "next": [ - "Phantom@Roguelike@ExitThenAbandon" + "Phantom@Roguelike@ExitThenAbandon_mode4" ] }, "Phantom@Roguelike@NextLevel": { @@ -9663,6 +9760,59 @@ "Phantom@Roguelike@TodoEnter": {}, "Mizuki@Roguelike@Abandon": {}, "Mizuki@Roguelike@ChooseDifficulty": {}, + "Mizuki@Roguelike@ChooseDifficulty0": { + "baseTask": "Roguelike@ChooseDifficulty", + "roi": [ + 1064, + 294, + 216, + 170 + ], + "next": [ + "Roguelike@StartExplore" + ] + }, + "Mizuki@Roguelike@ChooseDifficultyConfirm": { + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": [ "选择" ], + "roi": [ + 1064, + 294, + 216, + 170 + ] + }, + "Mizuki@Roguelike@ChooseDifficulty_Easiest": { + "action": "ClickRect", + "specificRect": [ 1144, 472, 78, 24 ], + "postDelay": 500, + "template": "Mizuki@Roguelike@StartExplore.png", + "roi": [ + 1026, + 470, + 254, + 248 + ], + "next": [ + "(SwipeToTheUp*5)" + ] + }, + "Mizuki@Roguelike@ChooseDifficulty_Hardest": { + "action": "ClickRect", + "specificRect": [ 1144, 472, 78, 24 ], + "postDelay": 500, + "template": "Mizuki@Roguelike@StartExplore.png", + "roi": [ + 1026, + 470, + 254, + 248 + ], + "next": [ + "(SwipeToTheDown*5)" + ] + }, "Mizuki@Roguelike@ChooseOper": { "onErrorNext": [ "Mizuki@Roguelike@RecruitWithoutButton" @@ -9826,6 +9976,15 @@ "Mizuki@Roguelike@DataTraceback" ] }, + "Mizuki@Roguelike@ExitThenAbandon_mode4": { + "template": "Roguelike@ExitThenAbandon.png", + "next": [ + "Mizuki@Roguelike@ExitThenAbandon", + "Mizuki@Roguelike@Abandon", + "Mizuki@Roguelike@DiceConfirmThenAbandon", + "Mizuki@Roguelike@DataTraceback" + ] + }, "Mizuki@Roguelike@GamePass": {}, "Mizuki@Roguelike@GamePassSkip1": {}, "Mizuki@Roguelike@GamePassSkip1Confirm": { @@ -9938,7 +10097,7 @@ "绀碧摇篮" ], "next": [ - "Mizuki@Roguelike@ExitThenAbandon" + "Mizuki@Roguelike@ExitThenAbandon_mode4" ] }, "Mizuki@Roguelike@NextLevel": { @@ -10157,9 +10316,49 @@ ] }, "Mizuki@Roguelike@StartExplore": {}, + "Mizuki@Roguelike@StartExploreConfirm": { + "template": "Mizuki@Roguelike@StartExplore.png" + }, "Mizuki@Roguelike@TodoEnter": {}, "Sami@Roguelike@Abandon": {}, - "Sami@Roguelike@ChooseDifficulty": {}, + "Sami@Roguelike@ChooseDifficulty": { + "roi": [ + 1064, + 294, + 216, + 170 + ] + }, + "Sami@Roguelike@ChooseDifficulty_Easiest": { + "action": "ClickRect", + "specificRect": [ 1119, 479, 80, 22 ], + "postDelay": 500, + "template": "Sami@Roguelike@StartExplore.png", + "roi": [ + 958, + 530, + 322, + 189 + ], + "next": [ + "(SwipeToTheUp*5)" + ] + }, + "Sami@Roguelike@ChooseDifficulty_Hardest": { + "action": "ClickRect", + "specificRect": [ 1119, 479, 80, 22 ], + "postDelay": 500, + "template": "Sami@Roguelike@StartExplore.png", + "roi": [ + 958, + 530, + 322, + 189 + ], + "next": [ + "(SwipeToTheDown*5)" + ] + }, "Sami@Roguelike@ChooseOper": { "onErrorNext": [ "Sami@Roguelike@RecruitWithoutButton" @@ -10270,6 +10469,13 @@ "Sami@Roguelike@Abandon" ] }, + "Sami@Roguelike@ExitThenAbandon_mode4": { + "template": "Roguelike@ExitThenAbandon_mode4.png", + "next": [ + "Sami@Roguelike@ExitThenAbandon", + "Sami@Roguelike@Abandon" + ] + }, "Sami@Roguelike@GamePass": {}, "Sami@Roguelike@GamePassSkip1": {}, "Sami@Roguelike@GamePassSkip1Confirm": { @@ -10371,7 +10577,7 @@ "深埋迷境" ], "next": [ - "Sami@Roguelike@ExitThenAbandon" + "Sami@Roguelike@ExitThenAbandon_mode4" ] }, "Sami@Roguelike@NextLevel": { @@ -10388,6 +10594,8 @@ "next": [ "Sami@Roguelike@LevelName", "Sami@Roguelike@NextLevel", + "Sami@Roguelike@StageBoskyPassage", + "Sami@Roguelike@StageBoskyPassageAI6", "Sami@Roguelike@StageTrader", "Sami@Roguelike@StageTraderAI6", "Sami@Roguelike@StageSafeHouse", @@ -10396,8 +10604,6 @@ "Sami@Roguelike@StageBoonsAI6", "Sami@Roguelike@StageEmergencyTransportation", "Sami@Roguelike@StageEmergencyTransportationAI6", - "Sami@Roguelike@StageBoskyPassage", - "Sami@Roguelike@StageBoskyPassageAI6", "Sami@Roguelike@StageGambling", "Sami@Roguelike@StageGamblingAI6", "Sami@Roguelike@StageProphecy", @@ -10789,6 +10995,15 @@ "Sami@Roguelike@NextLevel#next" ] }, + "Sami@Roguelike@StartExploreConfirm": { + "template": "Sami@Roguelike@StartExplore.png", + "roi": [ + 958, + 530, + 322, + 189 + ] + }, "Sami@Roguelike@StartExplore": { "roi": [ 958, diff --git a/resource/template/Mizuki@Roguelike@ChooseDifficulty.png b/resource/template/Mizuki@Roguelike@ChooseDifficulty.png index 1adf20cc48..9ec3c3f023 100644 Binary files a/resource/template/Mizuki@Roguelike@ChooseDifficulty.png and b/resource/template/Mizuki@Roguelike@ChooseDifficulty.png differ diff --git a/resource/template/Mizuki@Roguelike@ChooseDifficulty0.png b/resource/template/Mizuki@Roguelike@ChooseDifficulty0.png new file mode 100644 index 0000000000..4450e76a77 Binary files /dev/null and b/resource/template/Mizuki@Roguelike@ChooseDifficulty0.png differ diff --git a/resource/template/Roguelike@ExitThenAbandon_mode4.png b/resource/template/Roguelike@ExitThenAbandon_mode4.png new file mode 100644 index 0000000000..788ae90bc2 Binary files /dev/null and b/resource/template/Roguelike@ExitThenAbandon_mode4.png differ diff --git a/resource/template/Sami@Roguelike@ChooseDifficulty.png b/resource/template/Sami@Roguelike@ChooseDifficulty.png index 1adf20cc48..870b230a63 100644 Binary files a/resource/template/Sami@Roguelike@ChooseDifficulty.png and b/resource/template/Sami@Roguelike@ChooseDifficulty.png differ diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj index 20ae64a745..5a033a3923 100644 --- a/src/MaaCore/MaaCore.vcxproj +++ b/src/MaaCore/MaaCore.vcxproj @@ -77,6 +77,8 @@ + + @@ -231,6 +233,8 @@ + + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index d1bcc174e7..72dfe1e2b0 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -612,6 +612,12 @@ 源文件\Vision\Config + + 源文件\Task\Roguelike + + + 源文件\Task\Roguelike + @@ -1007,5 +1013,11 @@ 源文件\Vision\Config + + 源文件\Task\Roguelike + + + 源文件\Task\Roguelike + - \ No newline at end of file + diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 8497e4f4f7..2d34f2f506 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -53,6 +53,7 @@ namespace asst static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete"; static inline const std::string RoguelikeRecruitmentCount = "RoguelikeRecruitmentCount"; static inline const std::string RoguelikeMode = "RoguelikeMode"; + static inline const std::string RoguelikeNeedChangeDifficulty = "RoguelikeNeedChangeDifficulty"; static inline const std::string ProcessTaskLastTimePrefix = "#LastTime#"; diff --git a/src/MaaCore/Task/AbstractTaskPlugin.h b/src/MaaCore/Task/AbstractTaskPlugin.h index cd061ce620..b97e857a85 100644 --- a/src/MaaCore/Task/AbstractTaskPlugin.h +++ b/src/MaaCore/Task/AbstractTaskPlugin.h @@ -18,6 +18,7 @@ namespace asst void set_priority(int priority); void set_block(bool block); + virtual void set_task_ptr(AbstractTask* ptr); virtual bool verify(AsstMsg msg, const json::value& details) const = 0; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 787850885a..df7f88d84a 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -8,7 +8,9 @@ #include "Task/Roguelike/RoguelikeControlTaskPlugin.h" #include "Task/Roguelike/RoguelikeCustomStartTaskPlugin.h" #include "Task/Roguelike/RoguelikeDebugTaskPlugin.h" +#include "Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h" #include "Task/Roguelike/RoguelikeFormationTaskPlugin.h" +#include "Task/Roguelike/RoguelikeLastRewardTaskPlugin.h" #include "Task/Roguelike/RoguelikeRecruitTaskPlugin.h" #include "Task/Roguelike/RoguelikeResetTaskPlugin.h" #include "Task/Roguelike/RoguelikeShoppingTaskPlugin.h" @@ -26,6 +28,7 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin(); + m_debug_task_ptr = m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin()->set_retry_times(0); @@ -38,6 +41,9 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst m_skill_task_ptr->set_retry_times(2).set_ignore_error(true); m_roguelike_task_ptr->register_plugin()->set_retry_times(0); + m_roguelike_task_ptr->register_plugin(); + m_roguelike_task_ptr->register_plugin(); + // 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加一点。先这样凑合用 for (int i = 0; i != 100; ++i) { m_subtasks.emplace_back(m_roguelike_task_ptr); @@ -69,6 +75,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params) // 4 - 刷开局藏品,以获得热水壶或者演讲稿开局,不期而遇采用保守策略 int mode = params.get("mode", 0); status()->set_properties(Status::RoguelikeMode, std::to_string(mode)); + status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); switch (mode) { case 0: m_debug_task_ptr->set_enable(true); @@ -90,22 +97,35 @@ bool asst::RoguelikeTask::set_params(const json::value& params) } if (mode == 4) { + // 设置ocr第三层层名,设置识别到退出重进 Task.get(theme + "@Roguelike@LevelName")->text = Task.get(theme + "@Roguelike@LevelName_mode4")->text; Task.get(theme + "@Roguelike@LevelName")->next = Task.get(theme + "@Roguelike@LevelName_mode4")->next; + // 获得热水壶和演讲时长延时 Task.get(theme + "@Roguelike@LastReward")->post_delay = Task.get(theme + "@Roguelike@LastReward_mode4")->post_delay; Task.get(theme + "@Roguelike@LastReward4")->post_delay = Task.get(theme + "@Roguelike@LastReward_mode4")->post_delay; + // 获得其他奖励时重开 + Task.get(theme + "@Roguelike@LastReward2")->next = Task.get(theme + "@Roguelike@LastReward_mode4")->next; + Task.get(theme + "@Roguelike@LastReward3")->next = Task.get(theme + "@Roguelike@LastReward_mode4")->next; + Task.get(theme + "@Roguelike@LastRewardRand")->next = Task.get(theme + "@Roguelike@LastReward_mode4")->next; } else { + // 重置需要ocr的层名和next任务 Task.get(theme + "@Roguelike@LevelName")->text = Task.get(theme + "@Roguelike@LevelName_normal_mode")->text; Task.get(theme + "@Roguelike@LevelName")->next = Task.get(theme + "@Roguelike@LevelName_normal_mode")->next; + // 重置获得热水壶和演讲延时 Task.get(theme + "@Roguelike@LastReward")->post_delay = Task.get(theme + "@Roguelike@LastReward_normal_mode")->post_delay; Task.get(theme + "@Roguelike@LastReward4")->post_delay = Task.get(theme + "@Roguelike@LastReward_normal_mode")->post_delay; + // 重置其他奖励next + Task.get(theme + "@Roguelike@LastReward2")->next = Task.get(theme + "@Roguelike@LastReward_normal_mode")->next; + Task.get(theme + "@Roguelike@LastReward3")->next = Task.get(theme + "@Roguelike@LastReward_normal_mode")->next; + Task.get(theme + "@Roguelike@LastRewardRand")->next = + Task.get(theme + "@Roguelike@LastReward_normal_mode")->next; } int number_of_starts = params.get("starts_count", INT_MAX); m_roguelike_task_ptr->set_times_limit(theme + "@Roguelike@StartExplore", number_of_starts); diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.h b/src/MaaCore/Task/Interface/RoguelikeTask.h index 44f7a1cbc4..d08814ff40 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.h +++ b/src/MaaCore/Task/Interface/RoguelikeTask.h @@ -9,6 +9,8 @@ namespace asst class RoguelikeBattleTaskPlugin; class RoguelikeCustomStartTaskPlugin; class RoguelikeDebugTaskPlugin; + class RoguelikeLastRewardTaskPlugin; + class RoguelikeDifficultySelectionTaskPlugin; class RoguelikeTask : public InterfaceTask { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp new file mode 100644 index 0000000000..7830f5e961 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -0,0 +1,55 @@ +#include "RoguelikeDifficultySelectionTaskPlugin.h" + +#include "Status.h" +#include "Task/ProcessTask.h" +#include "Utils/Logger.hpp" + +bool asst::RoguelikeDifficultySelectionTaskPlugin::verify(AsstMsg msg, const json::value& details) const +{ + if (msg != AsstMsg::SubTaskStart || details.get("subtask", std::string()) != "ProcessTask") { + return false; + } + + auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@StartExplore") { + return true; + } + else { + return false; + } +} + +bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() +{ + LogTraceFunction; + + std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); + std::string mode = status()->get_properties(Status::RoguelikeMode).value(); + // todo:以后可以根据传入的难度值选择难度? + std::string change_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value(); + if (theme != "Phantom" && mode == "4") { + if (change_difficulty == "max") { + // 到第三层退出,选最高难度开水壶 + ProcessTask(*this, { theme + "@Roguelike@ChooseDifficulty_Hardest" }).run(); + } + // 其他情况下开始,选最低难度 + else { + ProcessTask(*this, { theme + "@Roguelike@ChooseDifficulty_Easiest" }).run(); + } + status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); + ProcessTask(*this, { theme + "@Roguelike@ChooseDifficultyConfirm" }).run(); + ProcessTask(*this, { theme + "@Roguelike@StartExploreConfirm" }).run(); + } + + return true; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h new file mode 100644 index 0000000000..ffb07d28e0 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h @@ -0,0 +1,18 @@ +#pragma once +#include "Task/AbstractTaskPlugin.h" + +namespace asst +{ + class RoguelikeDifficultySelectionTaskPlugin : public AbstractTaskPlugin + { + public: + using AbstractTaskPlugin::AbstractTaskPlugin; + virtual ~RoguelikeDifficultySelectionTaskPlugin() override = default; + + public: + virtual bool verify(AsstMsg msg, const json::value& details) const override; + + protected: + virtual bool _run() override; + }; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp new file mode 100644 index 0000000000..a2be007f80 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -0,0 +1,43 @@ +#include "RoguelikeLastRewardTaskPlugin.h" + +#include "Status.h" +#include "Task/ProcessTask.h" +#include "Utils/Logger.hpp" + +bool asst::RoguelikeLastRewardTaskPlugin::verify(AsstMsg msg, const json::value& details) const +{ + if (msg != AsstMsg::SubTaskStart || details.get("subtask", std::string()) != "ProcessTask") { + return false; + } + + auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@ExitThenAbandon_mode4") { + return true; + } + else { + return false; + } +} + +bool asst::RoguelikeLastRewardTaskPlugin::_run() +{ + LogTraceFunction; + + std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); + std::string mode = status()->get_properties(Status::RoguelikeMode).value(); + + if (theme != "Phantom" && mode == "4") { + status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "max"); + } + return true; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h new file mode 100644 index 0000000000..967cc57cb0 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h @@ -0,0 +1,18 @@ +#pragma once +#include "Task/AbstractTaskPlugin.h" + +namespace asst +{ + class RoguelikeLastRewardTaskPlugin : public AbstractTaskPlugin + { + public: + using AbstractTaskPlugin::AbstractTaskPlugin; + virtual ~RoguelikeLastRewardTaskPlugin() override = default; + + public: + virtual bool verify(AsstMsg msg, const json::value& details) const override; + + protected: + virtual bool _run() override; + }; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp index 09ed47c083..eb6483a7de 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp @@ -133,7 +133,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() continue; } } - + if (goods.promotion != 0) { if (total_wait_promotion == 0) { Log.trace("Ready to buy", goods.name, ", but there is no one waiting for promotion, skip");