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");