diff --git a/resource/infrast.json b/resource/infrast.json index 447a3fb08c..e21b258651 100644 --- a/resource/infrast.json +++ b/resource/infrast.json @@ -215,6 +215,13 @@ "desc": "进驻制造站时,当前制造站内每个标准化类技能为自身+5%的生产力", "template": "Bskill_man_skill_spd.png" }, + { + "name": [ + "源石技艺理论应用" + ], + "desc": "进驻制造站时,当前制造站内每个<$cc.sk.manu2><@cc.kw>莱茵科技类技能为自身<@cc.vup>+5%的生产力", + "template": "Bskill_man_skill_spd2.png" + }, { "name": [ "源石工艺·β", @@ -368,13 +375,13 @@ "efficient": { "all": 30 }, - "hash": { - "史都华德": "000203620f37ef2ae7ab8ea38e31e23bef080f0f0bf24ff34b054b04be061a02", - "杰西卡": "200427c4fbc6f986218463c471df719fa884a8c422c6000680058bc48bc48804", - "调香师": "00c8bbcf0b1a181a1bdf899f889b3a5b0a5b1bdb2a4b6a437bc34a42cbd24a42", - "香草": "00001c34787f0024ff3eff3e3c22263e4302ff3e220826083e7f02083e080208", - "罗比菈塔": "0000e860c8f78860c90ae80a4ef06af568178800e9c369834d094d298bf38081" - } + "filter": [ + "史都华德", + "杰西卡", + "调香师", + "香草", + "罗比菈塔" + ] }, { "desc": "标准化·α", @@ -384,11 +391,100 @@ "efficient": { "all": 20 }, - "hash": { - "夜刀": "00001000ff7ffe7f28114e115e115a11d611f6114c114c314c214e6153464006", - "流星": "883ec87e7f421a7e10429242fe7e7800187e187e58c8583e583ea908abff227f" + "filter": [ + "夜刀", + "流星" + ] + } + ] + }, + { + "desc": "多萝西-2组", + "necessary": [ + { + "desc": "多萝西-2", + "skills": [ + "Bskill_man_skill_spd2", + "Bskill_man_spd2" + ], + "efficient": { + "all": 30 } } + ], + "optional": [ + { + "desc": "莱茵科技·β", + "skills": [ + "Bskill_man_spd2" + ], + "efficient": { + "all": 30 + }, + "filter": [ + "星源", + "白面鸮", + "赫默" + ] + }, + { + "desc": "莱茵科技·α", + "skills": [ + "Bskill_man_spd1" + ], + "efficient": { + "all": 20 + }, + "filter": [ + "星源", + "白面鸮", + "赫默" + ] + } + ] + }, + { + "desc": "多萝西-1组", + "necessary": [ + { + "desc": "多萝西-1", + "skills": [ + "Bskill_man_skill_spd2" + ], + "efficient": { + "all": 0 + } + } + ], + "optional": [ + { + "desc": "莱茵科技·β", + "skills": [ + "Bskill_man_spd2" + ], + "efficient": { + "all": 30 + }, + "filter": [ + "星源", + "白面鸮", + "赫默" + ] + }, + { + "desc": "莱茵科技·α", + "skills": [ + "Bskill_man_spd1" + ], + "efficient": { + "all": 20 + }, + "filter": [ + "星源", + "白面鸮", + "赫默" + ] + } ] }, { @@ -855,6 +951,41 @@ ], "maxNumOfOpers": 3, "skills": [ + { + "name": [ + "乐感" + ], + "desc": "进驻贸易站时,宿舍内每有<@cc.kw>1名干员则<$cc.bd_a1><@cc.rem>感知信息<@cc.vup>+1,同时每<@cc.vup>1点<$cc.bd_a1><@cc.rem>感知信息转化为<@cc.vup>1点<$cc.bd_B><@cc.rem>无声共鸣", + "template": "Bskill_tra_bd_n1.png" + }, + { + "name": [ + "徘徊旋律" + ], + "desc": "进驻贸易站时,每<@cc.vup>4点<$cc.bd_B><@cc.rem>无声共鸣<@cc.vup>+1%订单效率\"", + "template": "Bskill_tra_spd_bd1.png" + }, + { + "name": [ + "物流规划·β" + ], + "desc": "进驻贸易站时,订单获取效率<@cc.vup>+5%,制造站每有<@cc.kw>2条<$cc.t.flow_gold><@cc.kw>赤金生产线,则为当前贸易站订单获取效率额外<@cc.vup>+15%", + "template": "Bskill_tra_flow_gs2.png", + "efficient": { + "Money": 20, + "all": 5 + } + }, + { + "name": [ + "物流规划·α" + ], + "desc": "进驻贸易站时,订单获取效率<@cc.vup>+5%,制造站每有<@cc.kw>4条<$cc.t.flow_gold><@cc.kw>赤金生产线,则为当前贸易站订单获取效率额外<@cc.vup>+15%", + "template": "Bskill_tra_flow_gs2.png", + "efficient": { + "all": 5 + } + }, { "name": [ "“愿者上钩”" @@ -1495,6 +1626,27 @@ "Drone" ], "skills": [ + { + "name": [ + "巡线框架" + ], + "desc": "进驻发电站时,每<@cc.vup>10架无人机上限<@cc.vup>+1%无人机充能速度", + "template": "Bskill_pow_drone.png", + "efficient": { + "Doc": "这货是异格格雷伊,会和原干员冲突", + "all": 0 + } + }, + { + "name": [ + "晨曦" + ], + "desc": "进驻发电站时,如果其他<@cc.kw>发电站内没有进驻<$cc.tag.op><@cc.kw>作业平台,则<@cc.kw>发电站额外<@cc.vup>+1(仅影响设施数量)", + "template": "Bskill_pow_count.png", + "efficient": { + "all": 0.1 + } + }, { "name": [ "“滴滴,启动!”" @@ -1769,6 +1921,16 @@ "No5": 30 } }, + { + "name": [ + "情报整理" + ], + "desc": "进驻会客室时,线索搜集速度提升10%,且更容易获得格拉斯哥帮线索(工作时长影响概率)", + "template": "Bskill_meet_flag_glasgow.png", + "efficient": { + "No5": 15 + } + }, { "name": [ "军师" @@ -1882,6 +2044,23 @@ "efficient": { "all": 10 } + }, + { + "name": [ + "得心应手" + ], + "desc": "进驻会客室时,如果会客室内只有自身处于工作状态时,线索搜集速度提升<@cc.vup>35%", + "template": "Bskill_meet_condChar.png" + }, + { + "name": [ + "逻辑推理" + ], + "desc": "进驻会客室时,线索搜集速度提升<@cc.vup>35%,心情每小时消耗<@cc.vdown>+2", + "template": "Bskill_meet_spd&cost.png", + "efficient": { + "all": 34.8 + } } ], "skillsGroup": [] @@ -2169,6 +2348,20 @@ ], "desc": "进驻控制中枢时,每个进驻在贸易站的喀兰贸易干员,订单获取效率-15%,订单上限+6", "template": "Bskill_ctrl_t_limit&spd.png" + }, + { + "name": [ + "“一千封信”" + ], + "desc": "进驻控制中枢时,会客室更容易获得<@cc.kw>格拉斯哥帮线索(工作时长影响概率)", + "template": "Bskill_ctrl_c_victoria.png" + }, + { + "name": [ + "坚毅随和" + ], + "desc": "进驻控制中枢时,控制中枢内每个<$cc.g.lda><@cc.kw>鲤氏侦探事务所干员可使控制中枢内所有干员的心情每小时恢复<@cc.vup>+0.05,同时该派系干员的心情每小时恢复额外<@cc.vup>+0.2", + "template": "Bskill_ctrl_lda_add.png" } ], "skillsGroup": [] diff --git a/resource/tasks.json b/resource/tasks.json index 01b80b0f08..f76d1e3128 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -969,7 +969,7 @@ "Doc": "该任务的 ocrReplace 被所有涉及干员名的识别任务复用", "ocrReplace": [ [ - "白面.+", + "白面.*", "白面鸮" ], [ @@ -1113,7 +1113,7 @@ "凛冬" ], [ - ".+草", + "笔草", "苇草" ], [ @@ -1139,6 +1139,10 @@ [ "紫雨", "絮语" + ], + [ + "罗比拉塔", + "罗比菈塔" ] ] }, @@ -3552,20 +3556,15 @@ 80 ] }, - "InfrastOperNameHash": { - "algorithm": "Hash", - "hash": [], - "threshold": 65, + "InfrastOperNameOcr": { + "algorithm": "OcrDetect", + "text": [], "rectMove_Doc": "基于笑脸的位置移动", "rectMove": [ 0, 20, 113, 22 - ], - "maskRange": [ - 100, - 255 ] }, "InfrastOperFaceHash": { diff --git a/resource/template/infrast/Bskill_ctrl_aegir.png b/resource/template/infrast/Bskill_ctrl_aegir.png index 7ff0d6ab00..e8edf69776 100644 Binary files a/resource/template/infrast/Bskill_ctrl_aegir.png and b/resource/template/infrast/Bskill_ctrl_aegir.png differ diff --git a/resource/template/infrast/Bskill_ctrl_aegir2.png b/resource/template/infrast/Bskill_ctrl_aegir2.png index c25ce91402..8980717a8b 100644 Binary files a/resource/template/infrast/Bskill_ctrl_aegir2.png and b/resource/template/infrast/Bskill_ctrl_aegir2.png differ diff --git a/resource/template/infrast/Bskill_ctrl_ash.png b/resource/template/infrast/Bskill_ctrl_ash.png index af3eb0011f..db0cb8c470 100644 Binary files a/resource/template/infrast/Bskill_ctrl_ash.png and b/resource/template/infrast/Bskill_ctrl_ash.png differ diff --git a/resource/template/infrast/Bskill_ctrl_c_spd.png b/resource/template/infrast/Bskill_ctrl_c_spd.png index d88a81f495..f29096fec3 100644 Binary files a/resource/template/infrast/Bskill_ctrl_c_spd.png and b/resource/template/infrast/Bskill_ctrl_c_spd.png differ diff --git a/resource/template/infrast/Bskill_ctrl_c_victoria.png b/resource/template/infrast/Bskill_ctrl_c_victoria.png new file mode 100644 index 0000000000..1ca4ce4229 Binary files /dev/null and b/resource/template/infrast/Bskill_ctrl_c_victoria.png differ diff --git a/resource/template/infrast/Bskill_ctrl_c_wt.png b/resource/template/infrast/Bskill_ctrl_c_wt.png index 05576d8115..9c0bbfd125 100644 Binary files a/resource/template/infrast/Bskill_ctrl_c_wt.png and b/resource/template/infrast/Bskill_ctrl_c_wt.png differ diff --git a/resource/template/infrast/Bskill_ctrl_c_wt1.png b/resource/template/infrast/Bskill_ctrl_c_wt1.png index f6d7330c9a..b766a82748 100644 Binary files a/resource/template/infrast/Bskill_ctrl_c_wt1.png and b/resource/template/infrast/Bskill_ctrl_c_wt1.png differ diff --git a/resource/template/infrast/Bskill_ctrl_c_wt2.png b/resource/template/infrast/Bskill_ctrl_c_wt2.png index 1c4a882c0c..f6cdd470f2 100644 Binary files a/resource/template/infrast/Bskill_ctrl_c_wt2.png and b/resource/template/infrast/Bskill_ctrl_c_wt2.png differ diff --git a/resource/template/infrast/Bskill_ctrl_clear_sui.png b/resource/template/infrast/Bskill_ctrl_clear_sui.png index 3e66553fd4..60d0ed8db6 100644 Binary files a/resource/template/infrast/Bskill_ctrl_clear_sui.png and b/resource/template/infrast/Bskill_ctrl_clear_sui.png differ diff --git a/resource/template/infrast/Bskill_ctrl_cost.png b/resource/template/infrast/Bskill_ctrl_cost.png index b80ec91594..31d68cbd92 100644 Binary files a/resource/template/infrast/Bskill_ctrl_cost.png and b/resource/template/infrast/Bskill_ctrl_cost.png differ diff --git a/resource/template/infrast/Bskill_ctrl_cost_aegir.png b/resource/template/infrast/Bskill_ctrl_cost_aegir.png index e2bf80be46..2742df305c 100644 Binary files a/resource/template/infrast/Bskill_ctrl_cost_aegir.png and b/resource/template/infrast/Bskill_ctrl_cost_aegir.png differ diff --git a/resource/template/infrast/Bskill_ctrl_cost_bd1&bd2.png b/resource/template/infrast/Bskill_ctrl_cost_bd1&bd2.png index 83f36f31cd..527973481f 100644 Binary files a/resource/template/infrast/Bskill_ctrl_cost_bd1&bd2.png and b/resource/template/infrast/Bskill_ctrl_cost_bd1&bd2.png differ diff --git a/resource/template/infrast/Bskill_ctrl_cost_bd1.png b/resource/template/infrast/Bskill_ctrl_cost_bd1.png index 20ae2a61da..bbeae6477c 100644 Binary files a/resource/template/infrast/Bskill_ctrl_cost_bd1.png and b/resource/template/infrast/Bskill_ctrl_cost_bd1.png differ diff --git a/resource/template/infrast/Bskill_ctrl_cost_bd2.png b/resource/template/infrast/Bskill_ctrl_cost_bd2.png index 4447994af2..d5986b7d35 100644 Binary files a/resource/template/infrast/Bskill_ctrl_cost_bd2.png and b/resource/template/infrast/Bskill_ctrl_cost_bd2.png differ diff --git a/resource/template/infrast/Bskill_ctrl_h_spd.png b/resource/template/infrast/Bskill_ctrl_h_spd.png index a9335a7342..fed463d672 100644 Binary files a/resource/template/infrast/Bskill_ctrl_h_spd.png and b/resource/template/infrast/Bskill_ctrl_h_spd.png differ diff --git a/resource/template/infrast/Bskill_ctrl_lda.png b/resource/template/infrast/Bskill_ctrl_lda.png index ca6d073b64..542fdd33c1 100644 Binary files a/resource/template/infrast/Bskill_ctrl_lda.png and b/resource/template/infrast/Bskill_ctrl_lda.png differ diff --git a/resource/template/infrast/Bskill_ctrl_lda_add.png b/resource/template/infrast/Bskill_ctrl_lda_add.png new file mode 100644 index 0000000000..ca6d073b64 Binary files /dev/null and b/resource/template/infrast/Bskill_ctrl_lda_add.png differ diff --git a/resource/template/infrast/Bskill_ctrl_lungmen.png b/resource/template/infrast/Bskill_ctrl_lungmen.png index 2a8af46631..6ed6059fd8 100644 Binary files a/resource/template/infrast/Bskill_ctrl_lungmen.png and b/resource/template/infrast/Bskill_ctrl_lungmen.png differ diff --git a/resource/template/infrast/Bskill_ctrl_p_bot.png b/resource/template/infrast/Bskill_ctrl_p_bot.png index f0bdd6cbe2..7e4bccc71b 100644 Binary files a/resource/template/infrast/Bskill_ctrl_p_bot.png and b/resource/template/infrast/Bskill_ctrl_p_bot.png differ diff --git a/resource/template/infrast/Bskill_ctrl_psk.png b/resource/template/infrast/Bskill_ctrl_psk.png index a3b6a1c86e..b231baecef 100644 Binary files a/resource/template/infrast/Bskill_ctrl_psk.png and b/resource/template/infrast/Bskill_ctrl_psk.png differ diff --git a/resource/template/infrast/Bskill_ctrl_r6.png b/resource/template/infrast/Bskill_ctrl_r6.png index 536dc9ce13..7e6e4a810c 100644 Binary files a/resource/template/infrast/Bskill_ctrl_r6.png and b/resource/template/infrast/Bskill_ctrl_r6.png differ diff --git a/resource/template/infrast/Bskill_ctrl_sp.png b/resource/template/infrast/Bskill_ctrl_sp.png index b8014c6158..37c87bc5de 100644 Binary files a/resource/template/infrast/Bskill_ctrl_sp.png and b/resource/template/infrast/Bskill_ctrl_sp.png differ diff --git a/resource/template/infrast/Bskill_ctrl_t_limit&spd.png b/resource/template/infrast/Bskill_ctrl_t_limit&spd.png index 90ee1cb593..b8ff5006bb 100644 Binary files a/resource/template/infrast/Bskill_ctrl_t_limit&spd.png and b/resource/template/infrast/Bskill_ctrl_t_limit&spd.png differ diff --git a/resource/template/infrast/Bskill_ctrl_t_spd.png b/resource/template/infrast/Bskill_ctrl_t_spd.png index 1af8e95727..d06a1d3b61 100644 Binary files a/resource/template/infrast/Bskill_ctrl_t_spd.png and b/resource/template/infrast/Bskill_ctrl_t_spd.png differ diff --git a/resource/template/infrast/Bskill_ctrl_tachanka.png b/resource/template/infrast/Bskill_ctrl_tachanka.png index 3659e3f59f..0b977dda34 100644 Binary files a/resource/template/infrast/Bskill_ctrl_tachanka.png and b/resource/template/infrast/Bskill_ctrl_tachanka.png differ diff --git a/resource/template/infrast/Bskill_ctrl_token_p_spd.png b/resource/template/infrast/Bskill_ctrl_token_p_spd.png index cfef02bcd8..efffc4a9c7 100644 Binary files a/resource/template/infrast/Bskill_ctrl_token_p_spd.png and b/resource/template/infrast/Bskill_ctrl_token_p_spd.png differ diff --git a/resource/template/infrast/Bskill_ctrl_ussg.png b/resource/template/infrast/Bskill_ctrl_ussg.png index 12311874f7..9faab38708 100644 Binary files a/resource/template/infrast/Bskill_ctrl_ussg.png and b/resource/template/infrast/Bskill_ctrl_ussg.png differ diff --git a/resource/template/infrast/Bskill_hire_skgoat.png b/resource/template/infrast/Bskill_hire_skgoat.png index b2d604e392..0d18f62427 100644 Binary files a/resource/template/infrast/Bskill_hire_skgoat.png and b/resource/template/infrast/Bskill_hire_skgoat.png differ diff --git a/resource/template/infrast/Bskill_hire_spd&blacksteel2.png b/resource/template/infrast/Bskill_hire_spd&blacksteel2.png index 4c72bb624f..f881d74f99 100644 Binary files a/resource/template/infrast/Bskill_hire_spd&blacksteel2.png and b/resource/template/infrast/Bskill_hire_spd&blacksteel2.png differ diff --git a/resource/template/infrast/Bskill_hire_spd&clue.png b/resource/template/infrast/Bskill_hire_spd&clue.png index 87d3c6418b..59d3b9bbf7 100644 Binary files a/resource/template/infrast/Bskill_hire_spd&clue.png and b/resource/template/infrast/Bskill_hire_spd&clue.png differ diff --git a/resource/template/infrast/Bskill_hire_spd&cost1.png b/resource/template/infrast/Bskill_hire_spd&cost1.png index 20f56ccf09..5c19a3d337 100644 Binary files a/resource/template/infrast/Bskill_hire_spd&cost1.png and b/resource/template/infrast/Bskill_hire_spd&cost1.png differ diff --git a/resource/template/infrast/Bskill_hire_spd&ursus2.png b/resource/template/infrast/Bskill_hire_spd&ursus2.png index 84b64a2486..700522afae 100644 Binary files a/resource/template/infrast/Bskill_hire_spd&ursus2.png and b/resource/template/infrast/Bskill_hire_spd&ursus2.png differ diff --git a/resource/template/infrast/Bskill_hire_spd1.png b/resource/template/infrast/Bskill_hire_spd1.png index 6e5c9ce864..174a4794eb 100644 Binary files a/resource/template/infrast/Bskill_hire_spd1.png and b/resource/template/infrast/Bskill_hire_spd1.png differ diff --git a/resource/template/infrast/Bskill_hire_spd2.png b/resource/template/infrast/Bskill_hire_spd2.png index 40093ab874..1a74092533 100644 Binary files a/resource/template/infrast/Bskill_hire_spd2.png and b/resource/template/infrast/Bskill_hire_spd2.png differ diff --git a/resource/template/infrast/Bskill_hire_spd4.png b/resource/template/infrast/Bskill_hire_spd4.png index 3dd7cd20f9..f6684b605b 100644 Binary files a/resource/template/infrast/Bskill_hire_spd4.png and b/resource/template/infrast/Bskill_hire_spd4.png differ diff --git a/resource/template/infrast/Bskill_hire_spd5.png b/resource/template/infrast/Bskill_hire_spd5.png index d3ae0f9d62..97eabdc34d 100644 Binary files a/resource/template/infrast/Bskill_hire_spd5.png and b/resource/template/infrast/Bskill_hire_spd5.png differ diff --git a/resource/template/infrast/Bskill_hire_spd_bd_n1_n1.png b/resource/template/infrast/Bskill_hire_spd_bd_n1_n1.png index 87d4bd03c6..5efd2d435e 100644 Binary files a/resource/template/infrast/Bskill_hire_spd_bd_n1_n1.png and b/resource/template/infrast/Bskill_hire_spd_bd_n1_n1.png differ diff --git a/resource/template/infrast/Bskill_hire_spd_bd_n2.png b/resource/template/infrast/Bskill_hire_spd_bd_n2.png index 74d11bcf90..2b2595ac3f 100644 Binary files a/resource/template/infrast/Bskill_hire_spd_bd_n2.png and b/resource/template/infrast/Bskill_hire_spd_bd_n2.png differ diff --git a/resource/template/infrast/Bskill_hire_spd_memento.png b/resource/template/infrast/Bskill_hire_spd_memento.png index 0147a02808..5c3f4094ff 100644 Binary files a/resource/template/infrast/Bskill_hire_spd_memento.png and b/resource/template/infrast/Bskill_hire_spd_memento.png differ diff --git a/resource/template/infrast/Bskill_man_cost_all.png b/resource/template/infrast/Bskill_man_cost_all.png index 8457a900ef..79ae02d94f 100644 Binary files a/resource/template/infrast/Bskill_man_cost_all.png and b/resource/template/infrast/Bskill_man_cost_all.png differ diff --git a/resource/template/infrast/Bskill_man_exp&limit.png b/resource/template/infrast/Bskill_man_exp&limit.png new file mode 100644 index 0000000000..20f28ba542 Binary files /dev/null and b/resource/template/infrast/Bskill_man_exp&limit.png differ diff --git a/resource/template/infrast/Bskill_man_exp&limit1.png b/resource/template/infrast/Bskill_man_exp&limit1.png index 297d8aaf9f..22549561c8 100644 Binary files a/resource/template/infrast/Bskill_man_exp&limit1.png and b/resource/template/infrast/Bskill_man_exp&limit1.png differ diff --git a/resource/template/infrast/Bskill_man_exp&limit2.png b/resource/template/infrast/Bskill_man_exp&limit2.png index 06005729a9..ac05a17619 100644 Binary files a/resource/template/infrast/Bskill_man_exp&limit2.png and b/resource/template/infrast/Bskill_man_exp&limit2.png differ diff --git a/resource/template/infrast/Bskill_man_exp1.png b/resource/template/infrast/Bskill_man_exp1.png index 3017a374a5..e5b7fc1bca 100644 Binary files a/resource/template/infrast/Bskill_man_exp1.png and b/resource/template/infrast/Bskill_man_exp1.png differ diff --git a/resource/template/infrast/Bskill_man_exp2.png b/resource/template/infrast/Bskill_man_exp2.png index b2186a3403..ebd218e08f 100644 Binary files a/resource/template/infrast/Bskill_man_exp2.png and b/resource/template/infrast/Bskill_man_exp2.png differ diff --git a/resource/template/infrast/Bskill_man_exp3.png b/resource/template/infrast/Bskill_man_exp3.png index 6eb900abdb..082749f0f2 100644 Binary files a/resource/template/infrast/Bskill_man_exp3.png and b/resource/template/infrast/Bskill_man_exp3.png differ diff --git a/resource/template/infrast/Bskill_man_gold1.png b/resource/template/infrast/Bskill_man_gold1.png index 746235f031..ebaa8cf581 100644 Binary files a/resource/template/infrast/Bskill_man_gold1.png and b/resource/template/infrast/Bskill_man_gold1.png differ diff --git a/resource/template/infrast/Bskill_man_gold2.png b/resource/template/infrast/Bskill_man_gold2.png index 781f1663df..e347ccfafe 100644 Binary files a/resource/template/infrast/Bskill_man_gold2.png and b/resource/template/infrast/Bskill_man_gold2.png differ diff --git a/resource/template/infrast/Bskill_man_limit&cost.png b/resource/template/infrast/Bskill_man_limit&cost.png new file mode 100644 index 0000000000..6d6819c83d Binary files /dev/null and b/resource/template/infrast/Bskill_man_limit&cost.png differ diff --git a/resource/template/infrast/Bskill_man_limit&cost1.png b/resource/template/infrast/Bskill_man_limit&cost1.png index 3b80f0b3f3..e595930f14 100644 Binary files a/resource/template/infrast/Bskill_man_limit&cost1.png and b/resource/template/infrast/Bskill_man_limit&cost1.png differ diff --git a/resource/template/infrast/Bskill_man_limit&cost2.png b/resource/template/infrast/Bskill_man_limit&cost2.png index 3115371a81..02cfceaeab 100644 Binary files a/resource/template/infrast/Bskill_man_limit&cost2.png and b/resource/template/infrast/Bskill_man_limit&cost2.png differ diff --git a/resource/template/infrast/Bskill_man_limit&cost3.png b/resource/template/infrast/Bskill_man_limit&cost3.png index f74148acd0..2f854c97c7 100644 Binary files a/resource/template/infrast/Bskill_man_limit&cost3.png and b/resource/template/infrast/Bskill_man_limit&cost3.png differ diff --git a/resource/template/infrast/Bskill_man_originium2.png b/resource/template/infrast/Bskill_man_originium2.png index 0031a3a51c..f6967de383 100644 Binary files a/resource/template/infrast/Bskill_man_originium2.png and b/resource/template/infrast/Bskill_man_originium2.png differ diff --git a/resource/template/infrast/Bskill_man_skill_spd.png b/resource/template/infrast/Bskill_man_skill_spd.png index 9414b7e3ad..d69e1922f1 100644 Binary files a/resource/template/infrast/Bskill_man_skill_spd.png and b/resource/template/infrast/Bskill_man_skill_spd.png differ diff --git a/resource/template/infrast/Bskill_man_skill_spd2.png b/resource/template/infrast/Bskill_man_skill_spd2.png new file mode 100644 index 0000000000..590d3ee4d6 Binary files /dev/null and b/resource/template/infrast/Bskill_man_skill_spd2.png differ diff --git a/resource/template/infrast/Bskill_man_spd&limit&cost1.png b/resource/template/infrast/Bskill_man_spd&limit&cost1.png index 2621612c2d..608cd44278 100644 Binary files a/resource/template/infrast/Bskill_man_spd&limit&cost1.png and b/resource/template/infrast/Bskill_man_spd&limit&cost1.png differ diff --git a/resource/template/infrast/Bskill_man_spd&limit&cost3.png b/resource/template/infrast/Bskill_man_spd&limit&cost3.png index 825ea017bb..a3bca46b21 100644 Binary files a/resource/template/infrast/Bskill_man_spd&limit&cost3.png and b/resource/template/infrast/Bskill_man_spd&limit&cost3.png differ diff --git a/resource/template/infrast/Bskill_man_spd&limit&cost4.png b/resource/template/infrast/Bskill_man_spd&limit&cost4.png index de56f5dea7..359c71f09f 100644 Binary files a/resource/template/infrast/Bskill_man_spd&limit&cost4.png and b/resource/template/infrast/Bskill_man_spd&limit&cost4.png differ diff --git a/resource/template/infrast/Bskill_man_spd&limit3.png b/resource/template/infrast/Bskill_man_spd&limit3.png index fa10c0a52f..ea793e92e5 100644 Binary files a/resource/template/infrast/Bskill_man_spd&limit3.png and b/resource/template/infrast/Bskill_man_spd&limit3.png differ diff --git a/resource/template/infrast/Bskill_man_spd&power1.png b/resource/template/infrast/Bskill_man_spd&power1.png index c3df756155..bc99c3d959 100644 Binary files a/resource/template/infrast/Bskill_man_spd&power1.png and b/resource/template/infrast/Bskill_man_spd&power1.png differ diff --git a/resource/template/infrast/Bskill_man_spd&power2.png b/resource/template/infrast/Bskill_man_spd&power2.png index 6654104888..45d5959ca2 100644 Binary files a/resource/template/infrast/Bskill_man_spd&power2.png and b/resource/template/infrast/Bskill_man_spd&power2.png differ diff --git a/resource/template/infrast/Bskill_man_spd&power3.png b/resource/template/infrast/Bskill_man_spd&power3.png index 5cec4ea338..300b28591f 100644 Binary files a/resource/template/infrast/Bskill_man_spd&power3.png and b/resource/template/infrast/Bskill_man_spd&power3.png differ diff --git a/resource/template/infrast/Bskill_man_spd1.png b/resource/template/infrast/Bskill_man_spd1.png index 32c79112e2..8e01023e02 100644 Binary files a/resource/template/infrast/Bskill_man_spd1.png and b/resource/template/infrast/Bskill_man_spd1.png differ diff --git a/resource/template/infrast/Bskill_man_spd2.png b/resource/template/infrast/Bskill_man_spd2.png index 2a939527ec..585369b83c 100644 Binary files a/resource/template/infrast/Bskill_man_spd2.png and b/resource/template/infrast/Bskill_man_spd2.png differ diff --git a/resource/template/infrast/Bskill_man_spd3.png b/resource/template/infrast/Bskill_man_spd3.png index 0c073daec4..ec62ba0f0c 100644 Binary files a/resource/template/infrast/Bskill_man_spd3.png and b/resource/template/infrast/Bskill_man_spd3.png differ diff --git a/resource/template/infrast/Bskill_man_spd_add1.png b/resource/template/infrast/Bskill_man_spd_add1.png index e4cd28bc2c..a71ff2537d 100644 Binary files a/resource/template/infrast/Bskill_man_spd_add1.png and b/resource/template/infrast/Bskill_man_spd_add1.png differ diff --git a/resource/template/infrast/Bskill_man_spd_add2.png b/resource/template/infrast/Bskill_man_spd_add2.png index 69d995b927..f5aeecb65b 100644 Binary files a/resource/template/infrast/Bskill_man_spd_add2.png and b/resource/template/infrast/Bskill_man_spd_add2.png differ diff --git a/resource/template/infrast/Bskill_man_spd_bd1.png b/resource/template/infrast/Bskill_man_spd_bd1.png index 5b7604ee94..ed0d26f89e 100644 Binary files a/resource/template/infrast/Bskill_man_spd_bd1.png and b/resource/template/infrast/Bskill_man_spd_bd1.png differ diff --git a/resource/template/infrast/Bskill_man_spd_bd2.png b/resource/template/infrast/Bskill_man_spd_bd2.png index 3e28100a37..49e6b011ea 100644 Binary files a/resource/template/infrast/Bskill_man_spd_bd2.png and b/resource/template/infrast/Bskill_man_spd_bd2.png differ diff --git a/resource/template/infrast/Bskill_man_spd_bd_n1.png b/resource/template/infrast/Bskill_man_spd_bd_n1.png index d62e4ef8cc..5179fbb094 100644 Binary files a/resource/template/infrast/Bskill_man_spd_bd_n1.png and b/resource/template/infrast/Bskill_man_spd_bd_n1.png differ diff --git a/resource/template/infrast/Bskill_man_spd_variable11.png b/resource/template/infrast/Bskill_man_spd_variable11.png index 7951d70ad9..2823103170 100644 Binary files a/resource/template/infrast/Bskill_man_spd_variable11.png and b/resource/template/infrast/Bskill_man_spd_variable11.png differ diff --git a/resource/template/infrast/Bskill_man_spd_variable21.png b/resource/template/infrast/Bskill_man_spd_variable21.png index 523c18a14a..065c72049c 100644 Binary files a/resource/template/infrast/Bskill_man_spd_variable21.png and b/resource/template/infrast/Bskill_man_spd_variable21.png differ diff --git a/resource/template/infrast/Bskill_man_spd_variable31.png b/resource/template/infrast/Bskill_man_spd_variable31.png index 6675f87401..1d513ee004 100644 Binary files a/resource/template/infrast/Bskill_man_spd_variable31.png and b/resource/template/infrast/Bskill_man_spd_variable31.png differ diff --git a/resource/template/infrast/Bskill_meet_blacksteel2.png b/resource/template/infrast/Bskill_meet_blacksteel2.png index 171d599b31..3d0723b17d 100644 Binary files a/resource/template/infrast/Bskill_meet_blacksteel2.png and b/resource/template/infrast/Bskill_meet_blacksteel2.png differ diff --git a/resource/template/infrast/Bskill_meet_condChar.png b/resource/template/infrast/Bskill_meet_condChar.png new file mode 100644 index 0000000000..c2d9111a78 Binary files /dev/null and b/resource/template/infrast/Bskill_meet_condChar.png differ diff --git a/resource/template/infrast/Bskill_meet_flag_glasgow.png b/resource/template/infrast/Bskill_meet_flag_glasgow.png new file mode 100644 index 0000000000..07658695f1 Binary files /dev/null and b/resource/template/infrast/Bskill_meet_flag_glasgow.png differ diff --git a/resource/template/infrast/Bskill_meet_flag_kjerag.png b/resource/template/infrast/Bskill_meet_flag_kjerag.png index fb5688f207..a3ddda9775 100644 Binary files a/resource/template/infrast/Bskill_meet_flag_kjerag.png and b/resource/template/infrast/Bskill_meet_flag_kjerag.png differ diff --git a/resource/template/infrast/Bskill_meet_flag_rhine.png b/resource/template/infrast/Bskill_meet_flag_rhine.png index 1a0cd7152b..5c11b77f36 100644 Binary files a/resource/template/infrast/Bskill_meet_flag_rhine.png and b/resource/template/infrast/Bskill_meet_flag_rhine.png differ diff --git a/resource/template/infrast/Bskill_meet_flag_rhodes.png b/resource/template/infrast/Bskill_meet_flag_rhodes.png index ef2bfe3dac..b00a967f00 100644 Binary files a/resource/template/infrast/Bskill_meet_flag_rhodes.png and b/resource/template/infrast/Bskill_meet_flag_rhodes.png differ diff --git a/resource/template/infrast/Bskill_meet_flag_ursus.png b/resource/template/infrast/Bskill_meet_flag_ursus.png index 3fa8eba997..e77ac358ae 100644 Binary files a/resource/template/infrast/Bskill_meet_flag_ursus.png and b/resource/template/infrast/Bskill_meet_flag_ursus.png differ diff --git a/resource/template/infrast/Bskill_meet_glasgow1.png b/resource/template/infrast/Bskill_meet_glasgow1.png new file mode 100644 index 0000000000..4663287336 Binary files /dev/null and b/resource/template/infrast/Bskill_meet_glasgow1.png differ diff --git a/resource/template/infrast/Bskill_meet_glasgow2.png b/resource/template/infrast/Bskill_meet_glasgow2.png index cd2715afe4..4b6134e338 100644 Binary files a/resource/template/infrast/Bskill_meet_glasgow2.png and b/resource/template/infrast/Bskill_meet_glasgow2.png differ diff --git a/resource/template/infrast/Bskill_meet_kjerag2.png b/resource/template/infrast/Bskill_meet_kjerag2.png index 50d692a809..4369aebe90 100644 Binary files a/resource/template/infrast/Bskill_meet_kjerag2.png and b/resource/template/infrast/Bskill_meet_kjerag2.png differ diff --git a/resource/template/infrast/Bskill_meet_penguin2.png b/resource/template/infrast/Bskill_meet_penguin2.png index 82d018d6c2..d7e59a8ef9 100644 Binary files a/resource/template/infrast/Bskill_meet_penguin2.png and b/resource/template/infrast/Bskill_meet_penguin2.png differ diff --git a/resource/template/infrast/Bskill_meet_rhine2.png b/resource/template/infrast/Bskill_meet_rhine2.png index b20de0064c..10b7766de3 100644 Binary files a/resource/template/infrast/Bskill_meet_rhine2.png and b/resource/template/infrast/Bskill_meet_rhine2.png differ diff --git a/resource/template/infrast/Bskill_meet_rhodes1.png b/resource/template/infrast/Bskill_meet_rhodes1.png index 279d38e4a3..e91a00f9ec 100644 Binary files a/resource/template/infrast/Bskill_meet_rhodes1.png and b/resource/template/infrast/Bskill_meet_rhodes1.png differ diff --git a/resource/template/infrast/Bskill_meet_spd&cost.png b/resource/template/infrast/Bskill_meet_spd&cost.png new file mode 100644 index 0000000000..001e6622d0 Binary files /dev/null and b/resource/template/infrast/Bskill_meet_spd&cost.png differ diff --git a/resource/template/infrast/Bskill_meet_spd2.png b/resource/template/infrast/Bskill_meet_spd2.png index a59fbeb11a..1eada66d79 100644 Binary files a/resource/template/infrast/Bskill_meet_spd2.png and b/resource/template/infrast/Bskill_meet_spd2.png differ diff --git a/resource/template/infrast/Bskill_meet_spd3.png b/resource/template/infrast/Bskill_meet_spd3.png index 4a2cf5bba3..e09a359a40 100644 Binary files a/resource/template/infrast/Bskill_meet_spd3.png and b/resource/template/infrast/Bskill_meet_spd3.png differ diff --git a/resource/template/infrast/Bskill_meet_spd4.png b/resource/template/infrast/Bskill_meet_spd4.png new file mode 100644 index 0000000000..214fc5df77 Binary files /dev/null and b/resource/template/infrast/Bskill_meet_spd4.png differ diff --git a/resource/template/infrast/Bskill_meet_ursus1.png b/resource/template/infrast/Bskill_meet_ursus1.png index a05208b7d9..99fd710eb6 100644 Binary files a/resource/template/infrast/Bskill_meet_ursus1.png and b/resource/template/infrast/Bskill_meet_ursus1.png differ diff --git a/resource/template/infrast/Bskill_meet_ursus2.png b/resource/template/infrast/Bskill_meet_ursus2.png index 42c6d1bb2c..c195f89bc8 100644 Binary files a/resource/template/infrast/Bskill_meet_ursus2.png and b/resource/template/infrast/Bskill_meet_ursus2.png differ diff --git a/resource/template/infrast/Bskill_pow_count.png b/resource/template/infrast/Bskill_pow_count.png new file mode 100644 index 0000000000..ca1dc00d87 Binary files /dev/null and b/resource/template/infrast/Bskill_pow_count.png differ diff --git a/resource/template/infrast/Bskill_pow_drone.png b/resource/template/infrast/Bskill_pow_drone.png new file mode 100644 index 0000000000..341df3c1f3 Binary files /dev/null and b/resource/template/infrast/Bskill_pow_drone.png differ diff --git a/resource/template/infrast/Bskill_pow_jnight.png b/resource/template/infrast/Bskill_pow_jnight.png index 6b029e4aae..290314c68d 100644 Binary files a/resource/template/infrast/Bskill_pow_jnight.png and b/resource/template/infrast/Bskill_pow_jnight.png differ diff --git a/resource/template/infrast/Bskill_pow_spd&cost.png b/resource/template/infrast/Bskill_pow_spd&cost.png index 39b6b43ed2..67d5e8b692 100644 Binary files a/resource/template/infrast/Bskill_pow_spd&cost.png and b/resource/template/infrast/Bskill_pow_spd&cost.png differ diff --git a/resource/template/infrast/Bskill_pow_spd1.png b/resource/template/infrast/Bskill_pow_spd1.png index 6d961f1e06..58a2a27f71 100644 Binary files a/resource/template/infrast/Bskill_pow_spd1.png and b/resource/template/infrast/Bskill_pow_spd1.png differ diff --git a/resource/template/infrast/Bskill_pow_spd2.png b/resource/template/infrast/Bskill_pow_spd2.png index 85f14dc6e7..b0b15e8ac8 100644 Binary files a/resource/template/infrast/Bskill_pow_spd2.png and b/resource/template/infrast/Bskill_pow_spd2.png differ diff --git a/resource/template/infrast/Bskill_pow_spd3.png b/resource/template/infrast/Bskill_pow_spd3.png index c50202113e..f930f82121 100644 Binary files a/resource/template/infrast/Bskill_pow_spd3.png and b/resource/template/infrast/Bskill_pow_spd3.png differ diff --git a/resource/template/infrast/Bskill_tra-spd&dorm1.png b/resource/template/infrast/Bskill_tra-spd&dorm1.png new file mode 100644 index 0000000000..374e740bfd Binary files /dev/null and b/resource/template/infrast/Bskill_tra-spd&dorm1.png differ diff --git a/resource/template/infrast/Bskill_tra-spd&dorm2.png b/resource/template/infrast/Bskill_tra-spd&dorm2.png new file mode 100644 index 0000000000..f8758cb4fb Binary files /dev/null and b/resource/template/infrast/Bskill_tra-spd&dorm2.png differ diff --git a/resource/template/infrast/Bskill_tra_Lappland1.png b/resource/template/infrast/Bskill_tra_Lappland1.png index ed85ab3ad3..55a29ac934 100644 Binary files a/resource/template/infrast/Bskill_tra_Lappland1.png and b/resource/template/infrast/Bskill_tra_Lappland1.png differ diff --git a/resource/template/infrast/Bskill_tra_Lappland2.png b/resource/template/infrast/Bskill_tra_Lappland2.png index d9ba1b069e..d70e257fc8 100644 Binary files a/resource/template/infrast/Bskill_tra_Lappland2.png and b/resource/template/infrast/Bskill_tra_Lappland2.png differ diff --git a/resource/template/infrast/Bskill_tra_bd_n1.png b/resource/template/infrast/Bskill_tra_bd_n1.png new file mode 100644 index 0000000000..a57c9fab8d Binary files /dev/null and b/resource/template/infrast/Bskill_tra_bd_n1.png differ diff --git a/resource/template/infrast/Bskill_tra_flow_gc1.png b/resource/template/infrast/Bskill_tra_flow_gc1.png index 69c14b2794..f239b9b983 100644 Binary files a/resource/template/infrast/Bskill_tra_flow_gc1.png and b/resource/template/infrast/Bskill_tra_flow_gc1.png differ diff --git a/resource/template/infrast/Bskill_tra_flow_gc2.png b/resource/template/infrast/Bskill_tra_flow_gc2.png index 800772e201..52bde3fcfb 100644 Binary files a/resource/template/infrast/Bskill_tra_flow_gc2.png and b/resource/template/infrast/Bskill_tra_flow_gc2.png differ diff --git a/resource/template/infrast/Bskill_tra_flow_gs1.png b/resource/template/infrast/Bskill_tra_flow_gs1.png index 5a390ce7b4..ab2e9455c7 100644 Binary files a/resource/template/infrast/Bskill_tra_flow_gs1.png and b/resource/template/infrast/Bskill_tra_flow_gs1.png differ diff --git a/resource/template/infrast/Bskill_tra_flow_gs2.png b/resource/template/infrast/Bskill_tra_flow_gs2.png index 96678a11a1..c69612ed5b 100644 Binary files a/resource/template/infrast/Bskill_tra_flow_gs2.png and b/resource/template/infrast/Bskill_tra_flow_gs2.png differ diff --git a/resource/template/infrast/Bskill_tra_limit&cost.png b/resource/template/infrast/Bskill_tra_limit&cost.png index 24fc9aa83f..778668d86d 100644 Binary files a/resource/template/infrast/Bskill_tra_limit&cost.png and b/resource/template/infrast/Bskill_tra_limit&cost.png differ diff --git a/resource/template/infrast/Bskill_tra_limit_count.png b/resource/template/infrast/Bskill_tra_limit_count.png index 5b73537d10..ac95f3a385 100644 Binary files a/resource/template/infrast/Bskill_tra_limit_count.png and b/resource/template/infrast/Bskill_tra_limit_count.png differ diff --git a/resource/template/infrast/Bskill_tra_long1.png b/resource/template/infrast/Bskill_tra_long1.png index 5d4952f283..7558922cb6 100644 Binary files a/resource/template/infrast/Bskill_tra_long1.png and b/resource/template/infrast/Bskill_tra_long1.png differ diff --git a/resource/template/infrast/Bskill_tra_long2.png b/resource/template/infrast/Bskill_tra_long2.png index 1947129181..7833ac448e 100644 Binary files a/resource/template/infrast/Bskill_tra_long2.png and b/resource/template/infrast/Bskill_tra_long2.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&cost.png b/resource/template/infrast/Bskill_tra_spd&cost.png index 68469b8dc8..b3fe3b8e10 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&cost.png and b/resource/template/infrast/Bskill_tra_spd&cost.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&dorm2.png b/resource/template/infrast/Bskill_tra_spd&dorm2.png index 4e4eacfc9d..d78d82fd4b 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&dorm2.png and b/resource/template/infrast/Bskill_tra_spd&dorm2.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&limit2.png b/resource/template/infrast/Bskill_tra_spd&limit2.png index b1ca512a67..3f82ffa79c 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&limit2.png and b/resource/template/infrast/Bskill_tra_spd&limit2.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&limit3.png b/resource/template/infrast/Bskill_tra_spd&limit3.png index 5806e7dd86..34083b57a2 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&limit3.png and b/resource/template/infrast/Bskill_tra_spd&limit3.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&limit4.png b/resource/template/infrast/Bskill_tra_spd&limit4.png index e54916fb6c..387ab9c4aa 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&limit4.png and b/resource/template/infrast/Bskill_tra_spd&limit4.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&limit5.png b/resource/template/infrast/Bskill_tra_spd&limit5.png index 969bbf8534..e365df3c9a 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&limit5.png and b/resource/template/infrast/Bskill_tra_spd&limit5.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&limit6.png b/resource/template/infrast/Bskill_tra_spd&limit6.png index 459d3365ab..204e328607 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&limit6.png and b/resource/template/infrast/Bskill_tra_spd&limit6.png differ diff --git a/resource/template/infrast/Bskill_tra_spd&limit7.png b/resource/template/infrast/Bskill_tra_spd&limit7.png index eae399ec37..bc36bc8f97 100644 Binary files a/resource/template/infrast/Bskill_tra_spd&limit7.png and b/resource/template/infrast/Bskill_tra_spd&limit7.png differ diff --git a/resource/template/infrast/Bskill_tra_spd1.png b/resource/template/infrast/Bskill_tra_spd1.png index cdd5276165..39e499c9f3 100644 Binary files a/resource/template/infrast/Bskill_tra_spd1.png and b/resource/template/infrast/Bskill_tra_spd1.png differ diff --git a/resource/template/infrast/Bskill_tra_spd2.png b/resource/template/infrast/Bskill_tra_spd2.png index 9a7145c0eb..a89e857f8c 100644 Binary files a/resource/template/infrast/Bskill_tra_spd2.png and b/resource/template/infrast/Bskill_tra_spd2.png differ diff --git a/resource/template/infrast/Bskill_tra_spd3.png b/resource/template/infrast/Bskill_tra_spd3.png index c64b633081..9f25ac1fa1 100644 Binary files a/resource/template/infrast/Bskill_tra_spd3.png and b/resource/template/infrast/Bskill_tra_spd3.png differ diff --git a/resource/template/infrast/Bskill_tra_spd_bd1.png b/resource/template/infrast/Bskill_tra_spd_bd1.png new file mode 100644 index 0000000000..e40758aefd Binary files /dev/null and b/resource/template/infrast/Bskill_tra_spd_bd1.png differ diff --git a/resource/template/infrast/Bskill_tra_spd_bd2.png b/resource/template/infrast/Bskill_tra_spd_bd2.png new file mode 100644 index 0000000000..03575a007b Binary files /dev/null and b/resource/template/infrast/Bskill_tra_spd_bd2.png differ diff --git a/resource/template/infrast/Bskill_tra_spd_variable22.png b/resource/template/infrast/Bskill_tra_spd_variable22.png index bd74f8cbe4..ac5a117e9a 100644 Binary files a/resource/template/infrast/Bskill_tra_spd_variable22.png and b/resource/template/infrast/Bskill_tra_spd_variable22.png differ diff --git a/resource/template/infrast/Bskill_tra_texas1.png b/resource/template/infrast/Bskill_tra_texas1.png index ba8c1a31b0..92f6053d34 100644 Binary files a/resource/template/infrast/Bskill_tra_texas1.png and b/resource/template/infrast/Bskill_tra_texas1.png differ diff --git a/resource/template/infrast/Bskill_tra_wt&cost1.png b/resource/template/infrast/Bskill_tra_wt&cost1.png index 71d1bdfa2e..4daf3c15e2 100644 Binary files a/resource/template/infrast/Bskill_tra_wt&cost1.png and b/resource/template/infrast/Bskill_tra_wt&cost1.png differ diff --git a/resource/template/infrast/Bskill_tra_wt&cost2.png b/resource/template/infrast/Bskill_tra_wt&cost2.png index 99cf0e9d23..455d20bce8 100644 Binary files a/resource/template/infrast/Bskill_tra_wt&cost2.png and b/resource/template/infrast/Bskill_tra_wt&cost2.png differ diff --git a/resource/template/infrast/Trade_ord_flow_gold1.png b/resource/template/infrast/Trade_ord_flow_gold1.png new file mode 100644 index 0000000000..cf218ebcae Binary files /dev/null and b/resource/template/infrast/Trade_ord_flow_gold1.png differ diff --git a/resource/template/infrast/Trade_ord_flow_gold2.png b/resource/template/infrast/Trade_ord_flow_gold2.png new file mode 100644 index 0000000000..689ab387a2 Binary files /dev/null and b/resource/template/infrast/Trade_ord_flow_gold2.png differ diff --git a/resource/template/infrast/Trade_ord_spd&gold1.png b/resource/template/infrast/Trade_ord_spd&gold1.png new file mode 100644 index 0000000000..a77d5f6d16 Binary files /dev/null and b/resource/template/infrast/Trade_ord_spd&gold1.png differ diff --git a/resource/template/infrast/Trade_ord_spd&gold2.png b/resource/template/infrast/Trade_ord_spd&gold2.png new file mode 100644 index 0000000000..f4862a0db0 Binary files /dev/null and b/resource/template/infrast/Trade_ord_spd&gold2.png differ diff --git a/src/MeoAssistant/AsstInfrastDef.h b/src/MeoAssistant/AsstInfrastDef.h index da492022d8..c72ea309e9 100644 --- a/src/MeoAssistant/AsstInfrastDef.h +++ b/src/MeoAssistant/AsstInfrastDef.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "AsstTypes.h" namespace asst::infrast @@ -63,16 +65,17 @@ namespace std namespace asst::infrast { - struct BattleRealTimeOper + struct Oper { - ::std::string face_hash; // 有些干员的技能是完全一样的,做个hash区分一下不同干员 - ::std::string name_hash; // 预留 + ::std::string face_hash; // 有些干员的技能是完全一样的,做个hash区分一下不同干员 Smiley smiley; double mood_ratio = 0; // 心情进度条的百分比 Doing doing = Doing::Invalid; bool selected = false; // 干员是否已被选择(蓝色的选择框) ::std::unordered_set skills; Rect rect; + // 因为OCR识别名字比较费时间,所以仅在name_filter不为空(有识别名字需求)的时候才识别,否则仅保存图片但不识别 + ::cv::Mat name_img; }; struct SkillsComb @@ -100,9 +103,9 @@ namespace asst::infrast ::std::unordered_map efficient; ::std::unordered_map efficient_regex; - ::std::string name_hash; - bool hash_filter = false; - ::std::unordered_map possible_hashs; // 限定只允许某些hash匹配的某些干员。若hash不相同,即使技能匹配了也不可用。hashs若为空,则不生效 + ::std::vector name_filter; + // 因为OCR识别名字比较费时间,所以仅在name_filter不为空(有识别名字需求)的时候才识别,否则仅保存图片但不识别 + ::cv::Mat name_img; }; // 基建技能组 struct SkillsGroup diff --git a/src/MeoAssistant/InfrastConfiger.cpp b/src/MeoAssistant/InfrastConfiger.cpp index 81e09ec30d..8a8b6b52d2 100644 --- a/src/MeoAssistant/InfrastConfiger.cpp +++ b/src/MeoAssistant/InfrastConfiger.cpp @@ -138,10 +138,9 @@ bool asst::InfrastConfiger::parse(const json::value& json) comb.efficient.emplace(pd, 0); } } - if (necessary_json.contains("hash")) { - comb.hash_filter = true; - for (const auto& [key, value] : necessary_json.at("hash").as_object()) { - comb.possible_hashs.emplace(key, value.as_string()); + if (auto filter_opt = necessary_json.find("filter")) { + for (const auto& filter : filter_opt.value()) { + comb.name_filter.emplace_back(filter.as_string()); } } group.necessary.emplace_back(std::move(comb)); @@ -193,10 +192,10 @@ bool asst::InfrastConfiger::parse(const json::value& json) comb.efficient.emplace(pd, 0); } } - if (opt_json.contains("hash")) { - comb.hash_filter = true; - for (const auto& [key, value] : opt_json.at("hash").as_object()) { - comb.possible_hashs.emplace(key, value.as_string()); + + if (auto filter_opt = opt_json.find("filter")) { + for (const auto& filter : filter_opt.value()) { + comb.name_filter.emplace_back(filter.as_string()); } } group.optional.emplace_back(std::move(comb)); diff --git a/src/MeoAssistant/InfrastOfficeTask.cpp b/src/MeoAssistant/InfrastOfficeTask.cpp index 3b4652f6c0..a3857dad3d 100644 --- a/src/MeoAssistant/InfrastOfficeTask.cpp +++ b/src/MeoAssistant/InfrastOfficeTask.cpp @@ -4,63 +4,63 @@ bool asst::InfrastOfficeTask::_run() { - m_all_available_opers.clear(); + m_all_available_opers.clear(); - // 办公室只能造这一个 - set_product("HR"); + // 办公室只能造这一个 + set_product("HR"); - swipe_to_the_right_of_main_ui(); - enter_facility(); - click_bottomleft_tab(); + swipe_to_the_right_of_main_ui(); + enter_facility(); + click_bottomleft_tab(); - for (int i = 0; i <= OperSelectRetryTimes; ++i) { - if (need_exit()) { - return false; - } - if (!opers_detect_with_swipe()) { - return false; - } - swipe_to_the_left_of_operlist(); + for (int i = 0; i <= OperSelectRetryTimes; ++i) { + if (need_exit()) { + return false; + } + if (!opers_detect_with_swipe()) { + return false; + } + swipe_to_the_left_of_operlist(); - auto find_iter = std::find_if( - m_all_available_opers.begin(), m_all_available_opers.end(), - [&](const infrast::BattleRealTimeOper& info) -> bool { - return info.selected; - }); + auto find_iter = std::find_if( + m_all_available_opers.begin(), m_all_available_opers.end(), + [&](const infrast::Oper& info) -> bool { + return info.selected; + }); - bool need_shift = true; - if (find_iter != m_all_available_opers.end()) { - switch (m_work_mode) { - case infrast::WorkMode::Gentle: - // 如果之前有干员在,那就不换人,直接退出 - m_all_available_opers.erase(find_iter); - need_shift = false; - break; - case infrast::WorkMode::Aggressive: - need_shift = true; - // TODO,这里有个bug,全部干员中的selected,和当前的,不一定是同一个页面 - // 不过目前没影响,反正滑动到最前面了,selected的一定是在最前面 - //m_ctrler->click(find_iter->rect); - //sleep(300); - break; - case infrast::WorkMode::Extreme: // TODO - break; - default: - break; - } - } - if (need_shift) { - optimal_calc(); - if (!opers_choose()) { - m_all_available_opers.clear(); - swipe_to_the_left_of_operlist(); - continue; - } - } - break; - } - click_confirm_button(); - click_return_button(); + bool need_shift = true; + if (find_iter != m_all_available_opers.end()) { + switch (m_work_mode) { + case infrast::WorkMode::Gentle: + // 如果之前有干员在,那就不换人,直接退出 + m_all_available_opers.erase(find_iter); + need_shift = false; + break; + case infrast::WorkMode::Aggressive: + need_shift = true; + // TODO,这里有个bug,全部干员中的selected,和当前的,不一定是同一个页面 + // 不过目前没影响,反正滑动到最前面了,selected的一定是在最前面 + //m_ctrler->click(find_iter->rect); + //sleep(300); + break; + case infrast::WorkMode::Extreme: // TODO + break; + default: + break; + } + } + if (need_shift) { + optimal_calc(); + if (!opers_choose()) { + m_all_available_opers.clear(); + swipe_to_the_left_of_operlist(); + continue; + } + } + break; + } + click_confirm_button(); + click_return_button(); - return true; -} + return true; +} \ No newline at end of file diff --git a/src/MeoAssistant/InfrastOperImageAnalyzer.cpp b/src/MeoAssistant/InfrastOperImageAnalyzer.cpp index 00e3d2e1f4..a10a749b28 100644 --- a/src/MeoAssistant/InfrastOperImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastOperImageAnalyzer.cpp @@ -21,9 +21,6 @@ bool asst::InfrastOperImageAnalyzer::analyze() if (m_to_be_calced & Mood) { mood_analyze(); } - if (m_to_be_calced & NameHash) { - name_hash_analyze(); - } if (m_to_be_calced & FaceHash) { face_hash_analyze(); } @@ -46,7 +43,7 @@ void asst::InfrastOperImageAnalyzer::sort_by_loc() std::sort( m_result.begin(), m_result.end(), - [](const infrast::BattleRealTimeOper& lhs, const infrast::BattleRealTimeOper& rhs) -> bool { + [](const infrast::Oper& lhs, const infrast::Oper& rhs) -> bool { if (std::abs(lhs.rect.x - rhs.rect.x) < 5) { // x差距较小则理解为是同一排的,按y排序 return lhs.rect.y < rhs.rect.y; } @@ -62,7 +59,7 @@ void asst::InfrastOperImageAnalyzer::sort_by_mood() std::sort( m_result.begin(), m_result.end(), - [](const infrast::BattleRealTimeOper& lhs, const infrast::BattleRealTimeOper& rhs) -> bool { + [](const infrast::Oper& lhs, const infrast::Oper& rhs) -> bool { // 先按心情排序,心情低的放前面 if (std::fabs(lhs.mood_ratio - rhs.mood_ratio) > DoubleDiff) { return lhs.mood_ratio < rhs.mood_ratio; @@ -86,9 +83,9 @@ void asst::InfrastOperImageAnalyzer::oper_detect() const std::vector all_roi = { upper_roi, lower_roi }; const Rect skill_rect_move = Task.get("InfrastSkills")->rect_move; - const Rect hash_rect_move = Task.get("InfrastOperNameHash")->rect_move; + const Rect name_rect_move = Task.get("InfrastOperNameOcr")->rect_move; const Rect prg_rect_move = Task.get("InfrastOperMoodProgressBar")->roi; - const std::vector all_rect_move = { skill_rect_move, hash_rect_move, prg_rect_move }; + const std::vector all_rect_move = { skill_rect_move, name_rect_move, prg_rect_move }; InfrastSmileyImageAnalyzer smiley_analyzer(m_image); @@ -119,8 +116,9 @@ void asst::InfrastOperImageAnalyzer::oper_detect() cv::rectangle(m_image_draw, utils::make_rect(smiley_rect), cv::Scalar(0, 0, 255), 2); #endif // ASST_DEBUG - infrast::BattleRealTimeOper oper; + infrast::Oper oper; oper.smiley = smiley; + oper.name_img = m_image(utils::make_rect(smiley_rect.move(name_rect_move))); m_result.emplace_back(std::move(oper)); } } @@ -219,25 +217,6 @@ void asst::InfrastOperImageAnalyzer::face_hash_analyze() } } -void asst::InfrastOperImageAnalyzer::name_hash_analyze() -{ - LogTraceFunction; - - const auto task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastOperNameHash")); - - HashImageAnalyzer hash_analyzer(m_image); - - hash_analyzer.set_mask_range(task_ptr->mask_range); - hash_analyzer.set_need_bound(true); - for (auto&& oper : m_result) { - Rect roi = oper.smiley.rect.move(task_ptr->rect_move); - hash_analyzer.set_roi(roi); - hash_analyzer.analyze(); - oper.name_hash = hash_analyzer.get_hash().front(); - } -} - void asst::InfrastOperImageAnalyzer::skill_analyze() { LogTraceFunction; diff --git a/src/MeoAssistant/InfrastOperImageAnalyzer.h b/src/MeoAssistant/InfrastOperImageAnalyzer.h index dbc8982a15..13b5025a9f 100644 --- a/src/MeoAssistant/InfrastOperImageAnalyzer.h +++ b/src/MeoAssistant/InfrastOperImageAnalyzer.h @@ -14,7 +14,7 @@ namespace asst Smiley = 1, Mood = 2, FaceHash = 4, - NameHash = 8, + //NameHash = 8, Selected = 16, Doing = 32, Skill = 64, @@ -30,7 +30,7 @@ namespace asst void sort_by_loc(); void sort_by_mood(); - auto get_result() const noexcept -> const std::vector& + auto get_result() const noexcept -> const std::vector& { return m_result; } @@ -63,13 +63,12 @@ namespace asst void oper_detect(); void mood_analyze(); void face_hash_analyze(); - void name_hash_analyze(); void skill_analyze(); void selected_analyze(); void doing_analyze(); std::string m_facility; - std::vector m_result; + std::vector m_result; int m_to_be_calced = All; int m_num_of_opers_with_skills = 0; }; diff --git a/src/MeoAssistant/InfrastPowerTask.cpp b/src/MeoAssistant/InfrastPowerTask.cpp index 6e0a6fada1..fbcc9ba619 100644 --- a/src/MeoAssistant/InfrastPowerTask.cpp +++ b/src/MeoAssistant/InfrastPowerTask.cpp @@ -36,7 +36,7 @@ bool asst::InfrastPowerTask::_run() auto find_iter = std::find_if( m_all_available_opers.begin(), m_all_available_opers.end(), - [&](const infrast::BattleRealTimeOper& info) -> bool { + [&](const infrast::Oper& info) -> bool { return info.selected; }); bool need_shift = true; diff --git a/src/MeoAssistant/InfrastProductionTask.cpp b/src/MeoAssistant/InfrastProductionTask.cpp index 8a20c4f77f..9c01c6defe 100644 --- a/src/MeoAssistant/InfrastProductionTask.cpp +++ b/src/MeoAssistant/InfrastProductionTask.cpp @@ -10,6 +10,7 @@ #include "Logger.hpp" #include "MatchImageAnalyzer.h" #include "MultiMatchImageAnalyzer.h" +#include "OcrWithPreprocessImageAnalyzer.h" #include "Resource.h" #include "RuntimeStatus.h" #include "ProcessTask.h" @@ -207,7 +208,7 @@ size_t asst::InfrastProductionTask::opers_detect() } auto find_iter = std::find_if( m_all_available_opers.cbegin(), m_all_available_opers.cend(), - [&](const infrast::BattleRealTimeOper& oper) -> bool { + [&](const infrast::Oper& oper) -> bool { if (oper.skills != cur_oper.skills) { return false; } @@ -235,7 +236,7 @@ bool asst::InfrastProductionTask::optimal_calc() all_avaliable_combs.reserve(m_all_available_opers.size()); for (auto&& oper : m_all_available_opers) { auto comb = efficient_regex_calc(oper.skills); - comb.name_hash = oper.name_hash; + comb.name_img = oper.name_img; all_avaliable_combs.emplace_back(std::move(comb)); } @@ -299,9 +300,6 @@ bool asst::InfrastProductionTask::optimal_calc() return true; } - const int name_hash_thres = std::dynamic_pointer_cast( - Task.get("InfrastOperNameHash"))->dist_threshold; - // 遍历所有组合,找到效率最高的 auto& all_group = Resrc.infrast().get_skills_group(facility_name()); for (const infrast::SkillsGroup& group : all_group) { @@ -378,20 +376,24 @@ bool asst::InfrastProductionTask::optimal_calc() return arg == opt; }); if (find_iter != cur_available_opers.cend()) { - // 要求技能匹配的同时,hash也要匹配 bool hash_matched = false; - if (!opt.possible_hashs.empty()) { - for (const auto& [key, hash] : opt.possible_hashs) { - int dist = HashImageAnalyzer::hamming(find_iter->name_hash, hash); - Log.debug("optimal_calc | name hash dist", dist, hash, find_iter->name_hash); - if (dist < name_hash_thres) { - hash_matched = true; - break; - } - } + if (opt.name_filter.empty()) { + hash_matched = true; } else { - hash_matched = true; + OcrWithPreprocessImageAnalyzer name_analyzer(find_iter->name_img); + name_analyzer.set_replace( + std::dynamic_pointer_cast( + Task.get("CharsNameOcrReplace")) + ->replace_map); + Log.trace("Analyze name filter"); + if (!name_analyzer.analyze()) { + continue; + } + std::string name = name_analyzer.get_result().front().text; + hash_matched = std::find( + opt.name_filter.cbegin(), opt.name_filter.cend(), name) + != opt.name_filter.cend(); } if (!hash_matched) { ++find_iter; @@ -460,8 +462,6 @@ bool asst::InfrastProductionTask::opers_choose() auto& facility_info = Resrc.infrast().get_facility_info(facility_name()); int cur_max_num_of_opers = facility_info.max_num_of_opers - m_cur_num_of_lokced_opers; - const int name_hash_thres = std::dynamic_pointer_cast( - Task.get("InfrastOperNameHash"))->dist_threshold; const int face_hash_thres = std::dynamic_pointer_cast( Task.get("InfrastOperFaceHash"))->dist_threshold; @@ -499,7 +499,7 @@ bool asst::InfrastProductionTask::opers_choose() Log.trace("before mood filter, opers size:", cur_all_opers.size()); // 小于心情阈值的干员则不可用 auto remove_iter = std::remove_if(cur_all_opers.begin(), cur_all_opers.end(), - [&](const infrast::BattleRealTimeOper& rhs) -> bool { + [&](const infrast::Oper& rhs) -> bool { return rhs.mood_ratio < m_mood_threshold; }); cur_all_opers.erase(remove_iter, cur_all_opers.end()); @@ -508,24 +508,27 @@ bool asst::InfrastProductionTask::opers_choose() Log.trace("to find", opt_iter->skills.begin()->names.front()); auto find_iter = std::find_if( cur_all_opers.cbegin(), cur_all_opers.cend(), - [&](const infrast::BattleRealTimeOper& lhs) -> bool { + [&](const infrast::Oper& lhs) -> bool { if (lhs.skills != opt_iter->skills) { return false; } - if (!opt_iter->hash_filter) { + if (opt_iter->name_filter.empty()) { return true; } else { - Log.trace("to comp hash"); - // 既要技能相同,也要hash相同,双重校验 - for (const auto& [_, hash] : opt_iter->possible_hashs) { - int dist = HashImageAnalyzer::hamming(lhs.name_hash, hash); - Log.debug("opers_choose | name hash dist", dist); - if (dist < name_hash_thres) { - return true; - } + OcrWithPreprocessImageAnalyzer name_analyzer(lhs.name_img); + name_analyzer.set_replace( + std::dynamic_pointer_cast( + Task.get("CharsNameOcrReplace")) + ->replace_map); + Log.trace("Analyze name filter"); + if (!name_analyzer.analyze()) { + return false; } - return false; + std::string name = name_analyzer.get_result().front().text; + return std::find( + opt_iter->name_filter.cbegin(), opt_iter->name_filter.cend(), name) + != opt_iter->name_filter.cend(); } }); @@ -550,7 +553,7 @@ bool asst::InfrastProductionTask::opers_choose() { auto avlb_iter = std::find_if( m_all_available_opers.cbegin(), m_all_available_opers.cend(), - [&](const infrast::BattleRealTimeOper& lhs) -> bool { + [&](const infrast::Oper& lhs) -> bool { int dist = HashImageAnalyzer::hamming(lhs.face_hash, find_iter->face_hash); Log.debug("opers_choose | face hash dist", dist); return dist < face_hash_thres; diff --git a/src/MeoAssistant/InfrastProductionTask.h b/src/MeoAssistant/InfrastProductionTask.h index a465824d4f..bdea438a2b 100644 --- a/src/MeoAssistant/InfrastProductionTask.h +++ b/src/MeoAssistant/InfrastProductionTask.h @@ -6,35 +6,35 @@ namespace asst { - // 生产类设施的任务,适用于制造站/贸易站 - class InfrastProductionTask : public InfrastAbstractTask - { - public: - using InfrastAbstractTask::InfrastAbstractTask; - virtual ~InfrastProductionTask() = default; + // 生产类设施的任务,适用于制造站/贸易站 + class InfrastProductionTask : public InfrastAbstractTask + { + public: + using InfrastAbstractTask::InfrastAbstractTask; + virtual ~InfrastProductionTask() = default; - InfrastProductionTask& set_uses_of_drone(std::string uses_of_drones) noexcept; - std::string get_uses_of_drone() const noexcept; + InfrastProductionTask& set_uses_of_drone(std::string uses_of_drones) noexcept; + std::string get_uses_of_drone() const noexcept; - protected: - bool shift_facility_list(); - bool facility_list_detect(); - bool opers_detect_with_swipe(); - size_t opers_detect(); // 返回当前页面的干员数 - bool optimal_calc(); - bool opers_choose(); - bool use_drone(); - void set_product(std::string product_name) noexcept; + protected: + bool shift_facility_list(); + bool facility_list_detect(); + bool opers_detect_with_swipe(); + size_t opers_detect(); // 返回当前页面的干员数 + bool optimal_calc(); + bool opers_choose(); + bool use_drone(); + void set_product(std::string product_name) noexcept; - infrast::SkillsComb efficient_regex_calc( - std::unordered_set skills) const; + infrast::SkillsComb efficient_regex_calc( + std::unordered_set skills) const; - std::string m_product; - std::string m_uses_of_drones; - int m_cur_num_of_lokced_opers = 0; - std::vector m_all_available_opers; - std::vector m_optimal_combs; - std::vector m_facility_list_tabs; - size_t max_num_of_opers_per_page = 0; - }; + std::string m_product; + std::string m_uses_of_drones; + int m_cur_num_of_lokced_opers = 0; + std::vector m_all_available_opers; + std::vector m_optimal_combs; + std::vector m_facility_list_tabs; + size_t max_num_of_opers_per_page = 0; + }; } diff --git a/tools/ItemMappingCvt/main.cpp b/tools/ItemMappingCvt/main.cpp index 4569bc13c0..7dc0b13182 100644 --- a/tools/ItemMappingCvt/main.cpp +++ b/tools/ItemMappingCvt/main.cpp @@ -238,9 +238,9 @@ bool update_infrast_templates(const std::filesystem::path& input_dir, const std: const std::vector BlackList = { "[style]", - "bskill_dorm_", - "bskill_train_", - "bskill_ws_" + "bskill_dorm", + "bskill_train", + "bskill_ws" }; bool is_blacklist = false; @@ -265,7 +265,12 @@ bool update_infrast_templates(const std::filesystem::path& input_dir, const std: } } } - std::string out_file = (output_dir / entry.path().filename()).string(); + std::string filename = entry.path().filename().string(); + // 历史遗留问题,以前的图片是从wiki上爬的,都是大写开头 + // Windows下不区分大小写,现在新的小写文件名图片没法覆盖 + // 所以干脆全用大写开头算了 + filename[0] -= 32; + std::string out_file = (output_dir / filename).string(); if (!std::filesystem::exists(out_file)) { std::cout << "New infrast templ: " << out_file << std::endl;