From c0e23399f01212e7dc74a1043a20457e8a3c28c3 Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 28 May 2022 01:45:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor.=E9=87=8D=E6=9E=84=E8=82=89=E9=B8=BD?= =?UTF-8?q?=E9=80=89=E4=BA=BA=E9=80=BB=E8=BE=91=E3=80=82=E6=8B=9B=E5=8B=9F?= =?UTF-8?q?=E7=AD=89=E7=BA=A7=E8=AF=86=E5=88=AB=E3=80=81=E6=88=98=E6=96=97?= =?UTF-8?q?=E4=B8=AD=E6=8A=80=E8=83=BD=E9=87=8A=E6=94=BE=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=9A=82=E6=97=B6=E8=BF=98=E6=B2=A1=E5=81=9A=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/集成文档.md | 16 - resource/combat_recruit.json | 1464 ----------------- resource/roguelike_recruit.json | 1249 ++++++++++++++ resource/tasks.json | 28 +- .../template/Roguelike1RecruitOcrFlag.png | Bin 0 -> 818 bytes src/MeoAssistant/AutoRecruitTask.cpp | 2 +- src/MeoAssistant/BattleFormationTask.cpp | 2 +- src/MeoAssistant/BattleImageAnalyzer.cpp | 2 +- src/MeoAssistant/CombatRecruitConfiger.cpp | 50 - src/MeoAssistant/CombatRecruitConfiger.h | 44 - src/MeoAssistant/CreditShopImageAnalyzer.cpp | 2 +- src/MeoAssistant/InfrastClueImageAnalyzer.cpp | 2 +- .../InfrastFacilityImageAnalyzer.cpp | 4 +- src/MeoAssistant/InfrastProductionTask.cpp | 2 +- src/MeoAssistant/MeoAssistant.vcxproj | 5 +- src/MeoAssistant/MeoAssistant.vcxproj.filters | 7 +- src/MeoAssistant/MultiMatchImageAnalyzer.cpp | 2 +- src/MeoAssistant/MultiMatchImageAnalyzer.h | 2 +- src/MeoAssistant/OcrImageAnalyzer.cpp | 23 +- src/MeoAssistant/OcrImageAnalyzer.h | 9 +- .../OcrWithFlagTemplImageAnalyzer.cpp | 5 + .../OcrWithFlagTemplImageAnalyzer.h | 4 +- .../OcrWithPreprocessImageAnalyzer.cpp | 4 +- .../OcrWithPreprocessImageAnalyzer.h | 3 +- src/MeoAssistant/Resource.cpp | 6 +- src/MeoAssistant/Resource.h | 12 +- .../RoguelikeBattleTaskPlugin.cpp | 63 +- src/MeoAssistant/RoguelikeBattleTaskPlugin.h | 4 - .../RoguelikeFormationImageAnalyzer.cpp | 2 +- src/MeoAssistant/RoguelikeRecruitConfiger.cpp | 44 + src/MeoAssistant/RoguelikeRecruitConfiger.h | 38 + .../RoguelikeRecruitTaskPlugin.cpp | 85 +- src/MeoAssistant/RoguelikeRecruitTaskPlugin.h | 4 - .../RoguelikeSkillSelectionImageAnalyzer.cpp | 20 +- .../RoguelikeSkillSelectionTaskPlugin.cpp | 39 +- .../RoguelikeSkillSelectionTaskPlugin.h | 6 - src/MeoAssistant/RoguelikeTask.cpp | 30 - src/MeoAsstGui/Helper/AsstProxy.cs | 6 - tools/TestCaller/main.cpp | 18 +- 39 files changed, 1466 insertions(+), 1842 deletions(-) delete mode 100644 resource/combat_recruit.json create mode 100644 resource/roguelike_recruit.json create mode 100644 resource/template/Roguelike1RecruitOcrFlag.png delete mode 100644 src/MeoAssistant/CombatRecruitConfiger.cpp delete mode 100644 src/MeoAssistant/CombatRecruitConfiger.h create mode 100644 src/MeoAssistant/RoguelikeRecruitConfiger.cpp create mode 100644 src/MeoAssistant/RoguelikeRecruitConfiger.h diff --git a/docs/集成文档.md b/docs/集成文档.md index f0cf726130..c530f89a95 100644 --- a/docs/集成文档.md +++ b/docs/集成文档.md @@ -127,22 +127,6 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p // 0 - 尽可能一直往后打 // 1 - 第一层投资完源石锭就退出 // 2 - 投资过后再退出,没有投资就继续往后打 - - "opers": [ // 会去选择的干员,必选项。数组有序 - { - "name": string, // 干员名,必选项 - "skill": int, // 使用哪个技能,取值范围 [1, 3],可选项,默认 1 - // 若设置为 3, 当 3 技能不可用时,会选择 2 技能 - // 同理若设置为 2, 当 2 技能不可用时,会选择 1 技能(好像没有这种 case?) - "skill_usage": int // 技能用法。可选,默认 0 - // 0 - 不自动使用 - // 1 - 好了就用,有多少次用多少次(例如干员 棘刺 3 技能、桃金娘 1 技能等) - // 2 - 好了就用,仅使用一次(例如干员 山 2 技能) - // 3 - 自动判断使用时机(画饼.jpg) - // 如果是全自动的技能,填 0 - }, - ... - ] } ``` diff --git a/resource/combat_recruit.json b/resource/combat_recruit.json deleted file mode 100644 index 8169abc5c8..0000000000 --- a/resource/combat_recruit.json +++ /dev/null @@ -1,1464 +0,0 @@ -{ - "Lancet-2": { - "level": 1, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "Castle-3": { - "level": 1, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "THRM-EX": { - "level": 1, - "profession": "SPECIAL", - "subProfession": "executor", - "position": "MELEE" - }, - "正义骑士号": { - "level": 1, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "夜刀": { - "level": 2, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "黑角": { - "level": 2, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "巡林者": { - "level": 2, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "杜林": { - "level": 2, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "12F": { - "level": 2, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "芬": { - "level": 3, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "香草": { - "level": 3, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "预备干员-近战": { - "level": 3, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "翎羽": { - "level": 3, - "profession": "PIONEER", - "subProfession": "charger", - "position": "MELEE" - }, - "玫兰莎": { - "level": 3, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "泡普卡": { - "level": 3, - "profession": "WARRIOR", - "subProfession": "centurion", - "position": "MELEE" - }, - "卡缇": { - "level": 3, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "米格鲁": { - "level": 3, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "斑点": { - "level": 3, - "profession": "TANK", - "subProfession": "guardian", - "position": "MELEE" - }, - "克洛丝": { - "level": 3, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "安德切尔": { - "level": 3, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "预备干员-狙击": { - "level": 3, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "炎熔": { - "level": 3, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "芙蓉": { - "level": 3, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "安赛尔": { - "level": 3, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "预备干员-后勤": { - "level": 3, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "史都华德": { - "level": 3, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "预备干员-术师": { - "level": 3, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "梓兰": { - "level": 3, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "夜烟": { - "level": 4, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "远山": { - "level": 4, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "格雷伊": { - "level": 4, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "卡达": { - "level": 4, - "profession": "CASTER", - "subProfession": "funnel", - "position": "RANGED" - }, - "深靛": { - "level": 4, - "profession": "CASTER", - "subProfession": "mystic", - "position": "RANGED" - }, - "布丁": { - "level": 4, - "profession": "CASTER", - "subProfession": "chain", - "position": "RANGED" - }, - "杰西卡": { - "level": 4, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "流星": { - "level": 4, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "红云": { - "level": 4, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "梅": { - "level": 4, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "白雪": { - "level": 4, - "profession": "SNIPER", - "subProfession": "aoesniper", - "position": "RANGED" - }, - "松果": { - "level": 4, - "profession": "SNIPER", - "subProfession": "reaperrange", - "position": "RANGED" - }, - "安比尔": { - "level": 4, - "profession": "SNIPER", - "subProfession": "longrange", - "position": "RANGED" - }, - "酸糖": { - "level": 4, - "profession": "SNIPER", - "subProfession": "closerange", - "position": "RANGED" - }, - "讯使": { - "level": 4, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "清道夫": { - "level": 4, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "红豆": { - "level": 4, - "profession": "PIONEER", - "subProfession": "charger", - "position": "MELEE" - }, - "桃金娘": { - "level": 4, - "profession": "PIONEER", - "subProfession": "bearer", - "position": "MELEE" - }, - "豆苗": { - "level": 4, - "profession": "PIONEER", - "subProfession": "tactician", - "position": "RANGED" - }, - "杜宾": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "instructor", - "position": "MELEE" - }, - "缠丸": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "断罪者": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "霜叶": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "艾丝黛尔": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "centurion", - "position": "MELEE" - }, - "慕斯": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "artsfghter", - "position": "MELEE" - }, - "刻刀": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "sword", - "position": "MELEE" - }, - "宴": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "musha", - "position": "MELEE" - }, - "芳汀": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "砾": { - "level": 4, - "profession": "SPECIAL", - "subProfession": "executor", - "position": "MELEE" - }, - "孑": { - "level": 4, - "profession": "SPECIAL", - "subProfession": "merchant", - "position": "MELEE" - }, - "暗索": { - "level": 4, - "profession": "SPECIAL", - "subProfession": "hookmaster", - "position": "MELEE" - }, - "末药": { - "level": 4, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "嘉维尔": { - "level": 4, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "苏苏洛": { - "level": 4, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "调香师": { - "level": 4, - "profession": "MEDIC", - "subProfession": "ringhealer", - "position": "RANGED" - }, - "清流": { - "level": 4, - "profession": "MEDIC", - "subProfession": "healer", - "position": "RANGED" - }, - "褐果": { - "level": 4, - "profession": "MEDIC", - "subProfession": "wandermedic", - "position": "RANGED" - }, - "角峰": { - "level": 4, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "蛇屠箱": { - "level": 4, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "泡泡": { - "level": 4, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "古米": { - "level": 4, - "profession": "TANK", - "subProfession": "guardian", - "position": "MELEE" - }, - "坚雷": { - "level": 4, - "profession": "TANK", - "subProfession": "artsprotector", - "position": "MELEE" - }, - "深海色": { - "level": 4, - "profession": "SUPPORT", - "subProfession": "summoner", - "position": "RANGED" - }, - "地灵": { - "level": 4, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "波登可": { - "level": 4, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "罗比菈塔": { - "level": 4, - "profession": "SUPPORT", - "subProfession": "craftsman", - "position": "MELEE" - }, - "伊桑": { - "level": 4, - "profession": "SPECIAL", - "subProfession": "stalker", - "position": "MELEE" - }, - "阿消": { - "level": 4, - "profession": "SPECIAL", - "subProfession": "pusher", - "position": "MELEE" - }, - "白面鸮": { - "level": 5, - "profession": "MEDIC", - "subProfession": "ringhealer", - "position": "RANGED" - }, - "微风": { - "level": 5, - "profession": "MEDIC", - "subProfession": "ringhealer", - "position": "RANGED" - }, - "凛冬": { - "level": 5, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "德克萨斯": { - "level": 5, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "贾维": { - "level": 5, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "苇草": { - "level": 5, - "profession": "PIONEER", - "subProfession": "charger", - "position": "MELEE" - }, - "野鬃": { - "level": 5, - "profession": "PIONEER", - "subProfession": "charger", - "position": "MELEE" - }, - "极境": { - "level": 5, - "profession": "PIONEER", - "subProfession": "bearer", - "position": "MELEE" - }, - "夜半": { - "level": 5, - "profession": "PIONEER", - "subProfession": "tactician", - "position": "RANGED" - }, - "诗怀雅": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "instructor", - "position": "MELEE" - }, - "鞭刃": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "instructor", - "position": "MELEE" - }, - "芙兰卡": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "炎客": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "Sharp": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "因陀罗": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "fighter", - "position": "MELEE" - }, - "燧石": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "fighter", - "position": "MELEE" - }, - "拉普兰德": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "断崖": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "柏喙": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "sword", - "position": "MELEE" - }, - "战车": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "sword", - "position": "MELEE" - }, - "幽灵鲨": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "centurion", - "position": "MELEE" - }, - "布洛卡": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "centurion", - "position": "MELEE" - }, - "星极": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "artsfghter", - "position": "MELEE" - }, - "铸铁": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "artsfghter", - "position": "MELEE" - }, - "赤冬": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "musha", - "position": "MELEE" - }, - "羽毛笔": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "reaper", - "position": "MELEE" - }, - "龙舌兰": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "librator", - "position": "MELEE" - }, - "蓝毒": { - "level": 5, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "白金": { - "level": 5, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "灰喉": { - "level": 5, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "Stormeye": { - "level": 5, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "四月": { - "level": 5, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "寒芒克洛丝": { - "level": 5, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "陨星": { - "level": 5, - "profession": "SNIPER", - "subProfession": "aoesniper", - "position": "RANGED" - }, - "慑砂": { - "level": 5, - "profession": "SNIPER", - "subProfession": "aoesniper", - "position": "RANGED" - }, - "送葬人": { - "level": 5, - "profession": "SNIPER", - "subProfession": "reaperrange", - "position": "RANGED" - }, - "奥斯塔": { - "level": 5, - "profession": "SNIPER", - "subProfession": "reaperrange", - "position": "RANGED" - }, - "阿米娅": { - "level": 5, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "苦艾": { - "level": 5, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "特米米": { - "level": 5, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "天火": { - "level": 5, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "Pith": { - "level": 5, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "惊蛰": { - "level": 5, - "profession": "CASTER", - "subProfession": "chain", - "position": "RANGED" - }, - "蜜蜡": { - "level": 5, - "profession": "CASTER", - "subProfession": "phalanx", - "position": "RANGED" - }, - "莱恩哈特": { - "level": 5, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "薄绿": { - "level": 5, - "profession": "CASTER", - "subProfession": "phalanx", - "position": "RANGED" - }, - "爱丽丝": { - "level": 5, - "profession": "CASTER", - "subProfession": "mystic", - "position": "RANGED" - }, - "炎狱炎熔": { - "level": 5, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "蚀清": { - "level": 5, - "profession": "CASTER", - "subProfession": "blastcaster", - "position": "RANGED" - }, - "耶拉": { - "level": 5, - "profession": "CASTER", - "subProfession": "funnel", - "position": "RANGED" - }, - "洛洛": { - "level": 5, - "profession": "CASTER", - "subProfession": "funnel", - "position": "RANGED" - }, - "梅尔": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "summoner", - "position": "RANGED" - }, - "稀音": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "summoner", - "position": "RANGED" - }, - "赫默": { - "level": 5, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "华法琳": { - "level": 5, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "亚叶": { - "level": 5, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "Touch": { - "level": 5, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "锡兰": { - "level": 5, - "profession": "MEDIC", - "subProfession": "healer", - "position": "RANGED" - }, - "絮雨": { - "level": 5, - "profession": "MEDIC", - "subProfession": "healer", - "position": "RANGED" - }, - "图耶": { - "level": 5, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "桑葚": { - "level": 5, - "profession": "MEDIC", - "subProfession": "wandermedic", - "position": "RANGED" - }, - "蜜莓": { - "level": 5, - "profession": "MEDIC", - "subProfession": "wandermedic", - "position": "RANGED" - }, - "临光": { - "level": 5, - "profession": "TANK", - "subProfession": "guardian", - "position": "MELEE" - }, - "吽": { - "level": 5, - "profession": "TANK", - "subProfession": "guardian", - "position": "MELEE" - }, - "红": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "executor", - "position": "MELEE" - }, - "槐琥": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "executor", - "position": "MELEE" - }, - "卡夫卡": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "executor", - "position": "MELEE" - }, - "乌有": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "merchant", - "position": "MELEE" - }, - "雷蛇": { - "level": 5, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "可颂": { - "level": 5, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "拜松": { - "level": 5, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "火神": { - "level": 5, - "profession": "TANK", - "subProfession": "unyield", - "position": "MELEE" - }, - "石棉": { - "level": 5, - "profession": "TANK", - "subProfession": "artsprotector", - "position": "MELEE" - }, - "暮落": { - "level": 5, - "profession": "TANK", - "subProfession": "artsprotector", - "position": "MELEE" - }, - "闪击": { - "level": 5, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "暴雨": { - "level": 5, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "灰毫": { - "level": 5, - "profession": "TANK", - "subProfession": "fortress", - "position": "MELEE" - }, - "极光": { - "level": 5, - "profession": "TANK", - "subProfession": "duelist", - "position": "MELEE" - }, - "普罗旺斯": { - "level": 5, - "profession": "SNIPER", - "subProfession": "closerange", - "position": "RANGED" - }, - "守林人": { - "level": 5, - "profession": "SNIPER", - "subProfession": "longrange", - "position": "RANGED" - }, - "安哲拉": { - "level": 5, - "profession": "SNIPER", - "subProfession": "longrange", - "position": "RANGED" - }, - "熔泉": { - "level": 5, - "profession": "SNIPER", - "subProfession": "siegesniper", - "position": "RANGED" - }, - "崖心": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "hookmaster", - "position": "MELEE" - }, - "雪雉": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "hookmaster", - "position": "MELEE" - }, - "初雪": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "underminer", - "position": "RANGED" - }, - "巫恋": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "underminer", - "position": "RANGED" - }, - "真理": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "格劳克斯": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "掠风": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "craftsman", - "position": "MELEE" - }, - "空": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "bard", - "position": "RANGED" - }, - "海蒂": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "bard", - "position": "RANGED" - }, - "月禾": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "blessing", - "position": "RANGED" - }, - "九色鹿": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "blessing", - "position": "RANGED" - }, - "夏栎": { - "level": 5, - "profession": "SUPPORT", - "subProfession": "blessing", - "position": "RANGED" - }, - "狮蝎": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "stalker", - "position": "MELEE" - }, - "绮良": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "stalker", - "position": "MELEE" - }, - "食铁兽": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "pusher", - "position": "MELEE" - }, - "见行者": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "pusher", - "position": "MELEE" - }, - "罗宾": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "traper", - "position": "RANGED" - }, - "霜华": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "traper", - "position": "RANGED" - }, - "贝娜": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "dollkeeper", - "position": "MELEE" - }, - "风丸": { - "level": 5, - "profession": "SPECIAL", - "subProfession": "dollkeeper", - "position": "MELEE" - }, - "能天使": { - "level": 6, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "空弦": { - "level": 6, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "灰烬": { - "level": 6, - "profession": "SNIPER", - "subProfession": "fastshot", - "position": "RANGED" - }, - "黑": { - "level": 6, - "profession": "SNIPER", - "subProfession": "closerange", - "position": "RANGED" - }, - "远牙": { - "level": 6, - "profession": "SNIPER", - "subProfession": "longrange", - "position": "RANGED" - }, - "W": { - "level": 6, - "profession": "SNIPER", - "subProfession": "aoesniper", - "position": "RANGED" - }, - "菲亚梅塔": { - "level": 6, - "profession": "SNIPER", - "subProfession": "aoesniper", - "position": "RANGED" - }, - "早露": { - "level": 6, - "profession": "SNIPER", - "subProfession": "siegesniper", - "position": "RANGED" - }, - "迷迭香": { - "level": 6, - "profession": "SNIPER", - "subProfession": "bombarder", - "position": "RANGED" - }, - "假日威龙陈": { - "level": 6, - "profession": "SNIPER", - "subProfession": "reaperrange", - "position": "RANGED" - }, - "推进之王": { - "level": 6, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "风笛": { - "level": 6, - "profession": "PIONEER", - "subProfession": "charger", - "position": "MELEE" - }, - "嵯峨": { - "level": 6, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "琴柳": { - "level": 6, - "profession": "PIONEER", - "subProfession": "bearer", - "position": "MELEE" - }, - "焰尾": { - "level": 6, - "profession": "PIONEER", - "subProfession": "pioneer", - "position": "MELEE" - }, - "伊芙利特": { - "level": 6, - "profession": "CASTER", - "subProfession": "blastcaster", - "position": "RANGED" - }, - "莫斯提马": { - "level": 6, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "艾雅法拉": { - "level": 6, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "刻俄柏": { - "level": 6, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "夕": { - "level": 6, - "profession": "CASTER", - "subProfession": "splashcaster", - "position": "RANGED" - }, - "异客": { - "level": 6, - "profession": "CASTER", - "subProfession": "chain", - "position": "RANGED" - }, - "卡涅利安": { - "level": 6, - "profession": "CASTER", - "subProfession": "phalanx", - "position": "RANGED" - }, - "澄闪": { - "level": 6, - "profession": "CASTER", - "subProfession": "funnel", - "position": "RANGED" - }, - "灵知": { - "level": 6, - "profession": "SUPPORT", - "subProfession": "underminer", - "position": "RANGED" - }, - "安洁莉娜": { - "level": 6, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "铃兰": { - "level": 6, - "profession": "SUPPORT", - "subProfession": "slower", - "position": "RANGED" - }, - "麦哲伦": { - "level": 6, - "profession": "SUPPORT", - "subProfession": "summoner", - "position": "RANGED" - }, - "浊心斯卡蒂": { - "level": 6, - "profession": "SUPPORT", - "subProfession": "bard", - "position": "RANGED" - }, - "令": { - "level": 6, - "profession": "SUPPORT", - "subProfession": "summoner", - "position": "RANGED" - }, - "傀影": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "executor", - "position": "MELEE" - }, - "老鲤": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "merchant", - "position": "MELEE" - }, - "温蒂": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "pusher", - "position": "MELEE" - }, - "阿": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "geek", - "position": "RANGED" - }, - "歌蕾蒂娅": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "hookmaster", - "position": "MELEE" - }, - "水月": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "stalker", - "position": "MELEE" - }, - "归溟幽灵鲨": { - "level": 6, - "profession": "SPECIAL", - "subProfession": "dollkeeper", - "position": "MELEE" - }, - "闪灵": { - "level": 6, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "夜莺": { - "level": 6, - "profession": "MEDIC", - "subProfession": "ringhealer", - "position": "RANGED" - }, - "凯尔希": { - "level": 6, - "profession": "MEDIC", - "subProfession": "physician", - "position": "RANGED" - }, - "流明": { - "level": 6, - "profession": "MEDIC", - "subProfession": "healer", - "position": "RANGED" - }, - "星熊": { - "level": 6, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "塞雷娅": { - "level": 6, - "profession": "TANK", - "subProfession": "guardian", - "position": "MELEE" - }, - "瑕光": { - "level": 6, - "profession": "TANK", - "subProfession": "guardian", - "position": "MELEE" - }, - "年": { - "level": 6, - "profession": "TANK", - "subProfession": "protector", - "position": "MELEE" - }, - "泥岩": { - "level": 6, - "profession": "TANK", - "subProfession": "unyield", - "position": "MELEE" - }, - "森蚺": { - "level": 6, - "profession": "TANK", - "subProfession": "duelist", - "position": "MELEE" - }, - "号角": { - "level": 6, - "profession": "TANK", - "subProfession": "fortress", - "position": "MELEE" - }, - "山": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "fighter", - "position": "MELEE" - }, - "银灰": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "棘刺": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "陈": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "sword", - "position": "MELEE" - }, - "艾丽妮": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "sword", - "position": "MELEE" - }, - "煌": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "centurion", - "position": "MELEE" - }, - "史尔特尔": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "artsfghter", - "position": "MELEE" - }, - "赫拉格": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "musha", - "position": "MELEE" - }, - "帕拉斯": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "instructor", - "position": "MELEE" - }, - "耀骑士临光": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "暴行": { - "level": 5, - "profession": "WARRIOR", - "subProfession": "centurion", - "position": "MELEE" - }, - "空爆": { - "level": 3, - "profession": "SNIPER", - "subProfession": "aoesniper", - "position": "RANGED" - }, - "月见夜": { - "level": 3, - "profession": "WARRIOR", - "subProfession": "lord", - "position": "MELEE" - }, - "猎蜂": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "fighter", - "position": "MELEE" - }, - "杰克": { - "level": 4, - "profession": "WARRIOR", - "subProfession": "fighter", - "position": "MELEE" - }, - "夜魔": { - "level": 5, - "profession": "CASTER", - "subProfession": "corecaster", - "position": "RANGED" - }, - "格拉尼": { - "level": 5, - "profession": "PIONEER", - "subProfession": "charger", - "position": "MELEE" - }, - "斯卡蒂": { - "level": 6, - "profession": "WARRIOR", - "subProfession": "fearless", - "position": "MELEE" - }, - "预备干员": { - "Doc": "事实上没有叫这个名字的干员,但为了避免肉鸽中,requires设置了但找不到的问题,增设这个干员。", - "level": 3 - } -} \ No newline at end of file diff --git a/resource/roguelike_recruit.json b/resource/roguelike_recruit.json new file mode 100644 index 0000000000..7bf55969c1 --- /dev/null +++ b/resource/roguelike_recruit.json @@ -0,0 +1,1249 @@ +{ + "roles": [ + "Warrior", + "Pioneer", + "Tank", + "Sniper", + "Caster", + "Special", + "Medic", + "Support" + ], + "Warrior": [ + { + "name": "帕拉斯", + "level": 6, + "skill": 1 + }, + { + "name": "山", + "level": 6, + "skill": 2, + "skill_usage": 2 + }, + { + "name": "棘刺", + "level": 6, + "skill": 3, + "alternate_skill": 2 + }, + { + "name": "煌", + "level": 6, + "skill": 2 + }, + { + "name": "艾丽妮", + "level": 6, + "skill": 1 + }, + { + "name": "羽毛笔", + "level": 5, + "skill": 1 + }, + { + "name": "史尔特尔", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "赫拉格", + "level": 6, + "skill": 1 + }, + { + "name": "耀骑士临光", + "level": 6, + "skill": 1 + }, + { + "name": "拉普兰德", + "level": 5, + "skill": 2 + }, + { + "name": "杜宾", + "level": 4, + "skill": 1 + }, + { + "name": "陈", + "level": 6, + "skill": 3, + "alternate_skill": 2 + }, + { + "name": "斯卡蒂", + "level": 6, + "skill": 2 + }, + { + "name": "阿米娅", + "level": 5, + "skill": 1 + }, + { + "name": "银灰", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "Sharp", + "level": 5, + "skill": 1 + }, + { + "name": "龙舌兰", + "level": 5, + "skill": 1 + }, + { + "name": "幽灵鲨", + "level": 5, + "skill": 2 + }, + { + "name": "断罪者", + "level": 4, + "skill": 1 + }, + { + "name": "芳汀", + "level": 4, + "skill": 2 + }, + { + "name": "星极", + "level": 5, + "skill": 2 + }, + { + "name": "战车", + "level": 5, + "skill": 1 + }, + { + "name": "慕斯", + "level": 4, + "skill": 1 + }, + { + "name": "宴", + "level": 4, + "skill": 2 + }, + { + "name": "刻刀", + "level": 4, + "skill": 2 + }, + { + "name": "泡普卡", + "level": 3, + "skill": 1 + }, + { + "name": "月见夜", + "level": 3, + "skill": 1 + }, + { + "name": "玫兰莎", + "level": 3, + "skill": 1 + }, + { + "name": "霜叶", + "level": 4, + "skill": 2 + }, + { + "name": "赤冬", + "level": 5, + "skill": 2 + }, + { + "name": "芙兰卡", + "level": 5, + "skill": 2 + }, + { + "name": "断崖", + "level": 5, + "skill": 2 + }, + { + "name": "Castle-3", + "level": 2, + "skill": 0 + }, + { + "name": "缠丸", + "level": 4, + "skill": 2 + }, + { + "name": "杰克", + "level": 4, + "skill": 1 + }, + { + "name": "鞭刃", + "level": 5, + "skill": 2 + }, + { + "name": "燧石", + "level": 5, + "skill": 2 + }, + { + "name": "铸铁", + "level": 5, + "skill": 2 + }, + { + "name": "柏喙", + "level": 5, + "skill": 2 + }, + { + "name": "布洛卡", + "level": 5, + "skill": 2 + }, + { + "name": "炎客", + "level": 5, + "skill": 2 + }, + { + "name": "诗怀雅", + "level": 5, + "skill": 2 + }, + { + "name": "猎蜂", + "level": 4, + "skill": 2 + }, + { + "name": "暴行", + "level": 5, + "skill": 2 + }, + { + "name": "因陀罗", + "level": 5, + "skill": 2 + }, + { + "name": "艾丝黛尔", + "level": 4, + "skill": 2 + } + ], + "Pioneer": [ + { + "name": "芬", + "level": 3, + "skill": 1 + }, + { + "name": "风笛", + "level": 6, + "skill": 2 + }, + { + "name": "推进之王", + "level": 6, + "skill": 2 + }, + { + "name": "焰尾", + "level": 6, + "skill": 3, + "alternate_skill": 2 + }, + { + "name": "嵯峨", + "level": 6, + "skill": 2 + }, + { + "name": "德克萨斯", + "level": 5, + "skill": 2 + }, + { + "name": "凛冬", + "level": 5, + "skill": 1 + }, + { + "name": "贾维", + "level": 5, + "skill": 2 + }, + { + "name": "清道夫", + "level": 4, + "skill": 1 + }, + { + "name": "讯使", + "level": 4, + "skill": 1 + }, + { + "name": "夜半", + "level": 5, + "skill": 1 + }, + { + "name": "豆苗", + "level": 4, + "skill": 1 + }, + { + "name": "琴柳", + "level": 6, + "skill": 3 + }, + { + "name": "极境", + "level": 5, + "skill": 1 + }, + { + "name": "桃金娘", + "level": 4, + "skill": 1 + }, + { + "name": "香草", + "level": 3, + "skill": 1 + }, + { + "name": "夜刀", + "level": 2, + "skill": 0 + }, + { + "name": "野鬃", + "level": 5, + "skill": 1 + }, + { + "name": "翎羽", + "level": 3, + "skill": 1 + }, + { + "name": "红豆", + "level": 4, + "skill": 2 + }, + { + "name": "苇草", + "level": 5, + "skill": 1 + }, + { + "name": "格拉尼", + "level": 5, + "skill": 1 + }, + { + "name": "预备干员-近战", + "level": 3, + "skill": 0 + } + ], + "Tank": [ + { + "name": "泥岩", + "level": 6, + "skill": 2 + }, + { + "name": "塞雷娅", + "level": 6, + "skill": 2, + "alternate_skill": 1 + }, + { + "name": "斑点", + "level": 3, + "skill": 1 + }, + { + "name": "卡缇", + "level": 3, + "skill": 1 + }, + { + "name": "黑角", + "level": 3, + "skill": 0 + }, + { + "name": "古米", + "level": 4, + "skill": 1 + }, + { + "name": "号角", + "level": 6, + "skill": 3, + "alternate_skill": 2 + }, + { + "name": "临光", + "level": 5, + "skill": 1 + }, + { + "name": "星熊", + "level": 6, + "skill": 2 + }, + { + "name": "雷蛇", + "level": 5, + "skill": 2 + }, + { + "name": "森蚺", + "level": 6, + "skill": 3 + }, + { + "name": "年", + "level": 6, + "skill": 3 + }, + { + "name": "蛇屠箱", + "level": 4, + "skill": 2 + }, + { + "name": "瑕光", + "level": 6, + "skill": 2 + }, + { + "name": "米格鲁", + "level": 3, + "skill": 1 + }, + { + "name": "角峰", + "level": 4, + "skill": 2 + }, + { + "name": "火神", + "level": 5, + "skill": 2 + }, + { + "name": "可颂", + "level": 5, + "skill": 2 + }, + { + "name": "坚雷", + "level": 4, + "skill": 2 + }, + { + "name": "拜松", + "level": 4, + "skill": 2 + }, + { + "name": "暮落", + "level": 5, + "skill": 2 + }, + { + "name": "极光", + "level": 5, + "skill": 2 + }, + { + "name": "灰毫", + "level": 5, + "skill": 2 + }, + { + "name": "暴雨", + "level": 5, + "skill": 2 + }, + { + "name": "闪击", + "level": 5, + "skill": 2 + }, + { + "name": "泡泡", + "level": 4, + "skill": 2 + }, + { + "name": "石棉", + "level": 5, + "skill": 2 + }, + { + "name": "吽", + "level": 5, + "skill": 2 + } + ], + "Sniper": [ + { + "name": "蓝毒", + "level": 5, + "skill": 1 + }, + { + "name": "W", + "level": 6, + "skill": 2 + }, + { + "name": "菲亚梅塔", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "白金", + "level": 5, + "skill": 2 + }, + { + "name": "能天使", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "埃拉托", + "level": 5, + "skill": 1 + }, + { + "name": "灰烬", + "level": 6, + "skill": 1 + }, + { + "name": "灰喉", + "level": 5, + "skill": 1 + }, + { + "name": "假日威龙陈", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "空弦", + "level": 6, + "skill": 1 + }, + { + "name": "远牙", + "level": 6, + "skill": 3 + }, + { + "name": "松果", + "level": 4, + "skill": 2 + }, + { + "name": "普罗旺斯", + "level": 5, + "skill": 1 + }, + { + "name": "陨星", + "level": 5, + "skill": 1 + }, + { + "name": "梅", + "level": 4, + "skill": 1 + }, + { + "name": "流星", + "level": 4, + "skill": 1 + }, + { + "name": "早露", + "level": 6, + "skill": 3 + }, + { + "name": "黑", + "level": 6, + "skill": 3 + }, + { + "name": "安比尔", + "level": 4, + "skill": 2 + }, + { + "name": "克洛丝", + "level": 3, + "skill": 1 + }, + { + "name": "Stormeye", + "level": 5, + "skill": 1 + }, + { + "name": "寒芒克洛丝", + "level": 5, + "skill": 2 + }, + { + "name": "四月", + "level": 5, + "skill": 1 + }, + { + "name": "熔泉", + "level": 5, + "skill": 2 + }, + { + "name": "奥斯塔", + "level": 5, + "skill": 1 + }, + { + "name": "安哲拉", + "level": 5, + "skill": 2 + }, + { + "name": "慑砂", + "level": 5, + "skill": 2 + }, + { + "name": "送葬人", + "level": 5, + "skill": 2 + }, + { + "name": "守林人", + "level": 5, + "skill": 2 + }, + { + "name": "酸糖", + "level": 4, + "skill": 2 + }, + { + "name": "红云", + "level": 4, + "skill": 2 + }, + { + "name": "白雪", + "level": 4, + "skill": 2 + }, + { + "name": "杰西卡", + "level": 4, + "skill": 2 + }, + { + "name": "安德切尔", + "level": 3, + "skill": 1 + }, + { + "name": "空爆", + "level": 3, + "skill": 1 + }, + { + "name": "巡林者", + "level": 2, + "skill": 0 + }, + { + "name": "正义骑士号", + "level": 1, + "skill": 0 + } + ], + "Caster": [ + { + "name": "艾雅法拉", + "level": 6, + "skill": 2 + }, + { + "name": "澄闪", + "level": 6, + "skill": 2 + }, + { + "name": "史都华德", + "level": 3, + "skill": 1 + }, + { + "name": "异客", + "level": 6, + "skill": 3 + }, + { + "name": "伊芙利特", + "level": 6, + "skill": 2 + }, + { + "name": "阿米娅", + "level": 5, + "skill": 1 + }, + { + "name": "刻俄柏", + "level": 6, + "skill": 1 + }, + { + "name": "夕", + "level": 6, + "skill": 1 + }, + { + "name": "天火", + "level": 5, + "skill": 2 + }, + { + "name": "卡达", + "level": 4, + "skill": 2 + }, + { + "name": "炎熔", + "level": 3, + "skill": 1 + }, + { + "name": "Pith", + "level": 5, + "skill": 1 + }, + { + "name": "夜魔", + "level": 5, + "skill": 1 + }, + { + "name": "惊蛰", + "level": 5, + "skill": 1 + }, + { + "name": "苦艾", + "level": 5, + "skill": 1 + }, + { + "name": "莱恩哈特", + "level": 5, + "skill": 1 + }, + { + "name": "薄绿", + "level": 5, + "skill": 1 + }, + { + "name": "爱丽丝", + "level": 5, + "skill": 1 + }, + { + "name": "炎狱炎熔", + "level": 5, + "skill": 1 + }, + { + "name": "蚀清", + "level": 5, + "skill": 1 + }, + { + "name": "耶拉", + "level": 5, + "skill": 2 + }, + { + "name": "洛洛", + "level": 5, + "skill": 1 + }, + { + "name": "夜烟", + "level": 4, + "skill": 2 + }, + { + "name": "远山", + "level": 4, + "skill": 2 + }, + { + "name": "格雷伊", + "level": 4, + "skill": 1 + }, + { + "name": "深靛", + "level": 4, + "skill": 1 + }, + { + "name": "布丁", + "level": 4, + "skill": 1 + }, + { + "name": "杜林", + "level": 2, + "skill": 0 + }, + { + "name": "12F", + "level": 2, + "skill": 0 + }, + { + "name": "莫斯提马", + "level": 6, + "skill": 2 + }, + { + "name": "卡涅利安", + "level": 6, + "skill": 1 + }, + { + "name": "蜜蜡", + "level": 5, + "skill": 1 + }, + { + "name": "特米米", + "level": 5, + "skill": 2 + } + ], + "Special": [ + { + "name": "孑", + "level": 4, + "skill": 2 + }, + { + "name": "傀影", + "level": 6, + "skill": 2 + }, + { + "name": "温蒂", + "level": 6, + "skill": 2 + }, + { + "name": "歌蕾蒂娅", + "level": 6, + "skill": 1 + }, + { + "name": "红", + "level": 5, + "skill": 1 + }, + { + "name": "水月", + "level": 6, + "skill": 1 + }, + { + "name": "狮蝎", + "level": 5, + "skill": 1 + }, + { + "name": "绮良", + "level": 5, + "skill": 1 + }, + { + "name": "老鲤", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "伊桑", + "level": 4, + "skill": 1 + }, + { + "name": "风丸", + "level": 5, + "skill": 1 + }, + { + "name": "砾", + "level": 4, + "skill": 2 + }, + { + "name": "暗索", + "level": 4, + "skill": 1 + }, + { + "name": "阿消", + "level": 4, + "skill": 1 + }, + { + "name": "槐琥", + "level": 5, + "skill": 2 + }, + { + "name": "食铁兽", + "level": 5, + "skill": 1 + }, + { + "name": "雪雉", + "level": 5, + "skill": 1 + }, + { + "name": "见行者", + "level": 5, + "skill": 1 + }, + { + "name": "贝娜", + "level": 5, + "skill": 1 + }, + { + "name": "乌有", + "level": 5, + "skill": 2 + }, + { + "name": "崖心", + "level": 5, + "skill": 1 + }, + { + "name": "归溟幽灵鲨", + "level": 6, + "skill": 1 + }, + { + "name": "霜华", + "level": 5, + "skill": 1 + }, + { + "name": "罗宾", + "level": 5, + "skill": 1 + }, + { + "name": "卡夫卡", + "level": 5, + "skill": 1 + }, + { + "name": "阿", + "level": 6, + "skill": 2 + }, + { + "name": "THRM-EX", + "level": 2, + "skill": 0 + } + ], + "Medic": [ + { + "name": "安塞尔", + "level": 3, + "skill": 1 + }, + { + "name": "凯尔希", + "level": 6, + "skill": 3, + "alternate_skill": 2 + }, + { + "name": "夜莺", + "level": 6, + "skill": 2 + }, + { + "name": "白面鸮", + "level": 5, + "skill": 2 + }, + { + "name": "桑葚", + "level": 5, + "skill": 1 + }, + { + "name": "蜜莓", + "level": 5, + "skill": 1 + }, + { + "name": "苏苏洛", + "level": 4, + "skill": 2 + }, + { + "name": "调香师", + "level": 4, + "skill": 1 + }, + { + "name": "流明", + "level": 6, + "skill": 3, + "alternate_skill": 1 + }, + { + "name": "絮雨", + "level": 5, + "skill": 2 + }, + { + "name": "Touch", + "level": 5, + "skill": 1 + }, + { + "name": "赫默", + "level": 5, + "skill": 1 + }, + { + "name": "华法琳", + "level": 5, + "skill": 2 + }, + { + "name": "末药", + "level": 4, + "skill": 1 + }, + { + "name": "嘉维尔", + "level": 4, + "skill": 1 + }, + { + "name": "褐果", + "level": 4, + "skill": 1 + }, + { + "name": "芙蓉", + "level": 3, + "skill": 1 + }, + { + "name": "微风", + "level": 5, + "skill": 1 + }, + { + "name": "闪灵", + "level": 6, + "skill": 2 + }, + { + "name": "锡兰", + "level": 5, + "skill": 1 + }, + { + "name": "亚叶", + "level": 5, + "skill": 1 + }, + { + "name": "图耶", + "level": 5, + "skill": 1 + }, + { + "name": "清流", + "level": 4, + "skill": 1 + }, + { + "name": "Lancet-2", + "level": 2, + "skill": 0 + } + ], + "Support": [ + { + "name": "浊心斯卡蒂", + "level": 6, + "skill": 2 + }, + { + "name": "令", + "level": 6, + "skill": 3, + "alternate_skill": 2 + }, + { + "name": "梓兰", + "level": 3, + "skill": 1 + }, + { + "name": "波登可", + "level": 4, + "skill": 2 + }, + { + "name": "灵知", + "level": 6, + "skill": 1 + }, + { + "name": "安洁莉娜", + "level": 6, + "skill": 1 + }, + { + "name": "铃兰", + "level": 6, + "skill": 2 + }, + { + "name": "巫恋", + "level": 5, + "skill": 1 + }, + { + "name": "初雪", + "level": 5, + "skill": 1 + }, + { + "name": "真理", + "level": 5, + "skill": 1 + }, + { + "name": "格劳克斯", + "level": 5, + "skill": 1 + }, + { + "name": "月禾", + "level": 5, + "skill": 1 + }, + { + "name": "稀音", + "level": 5, + "skill": 2 + }, + { + "name": "九色鹿", + "level": 5, + "skill": 1 + }, + { + "name": "夏栎", + "level": 5, + "skill": 1, + "skill_usage": 2 + }, + { + "name": "掠风", + "level": 5, + "skill": 1 + }, + { + "name": "深海色", + "level": 4, + "skill": 1 + }, + { + "name": "地灵", + "level": 4, + "skill": 1 + }, + { + "name": "海蒂", + "level": 5, + "skill": 1 + }, + { + "name": "罗比菈塔", + "level": 4, + "skill": 1 + }, + { + "name": "麦哲伦", + "level": 6, + "skill": 1 + }, + { + "name": "梅尔", + "level": 5, + "skill": 1 + }, + { + "name": "空", + "level": 5, + "skill": 1 + } + ] +} diff --git a/resource/tasks.json b/resource/tasks.json index b731517219..bc705c2ff8 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -5493,14 +5493,23 @@ "Roguelike1ChooseOperConfirm" ] }, + "Roguelike1RecruitOcrFlag": { + "roi": [ + 600, + 100, + 500, + 500 + ], + "templThreshold": 0.99 + }, "Roguelike1RecruitOcr": { "algorithm": "OcrDetect", "text": [], "roi": [ - 560, - 69, - 666, - 614 + 13, + 26, + 120, + 23 ] }, "Roguelike1ChooseOperFlag": { @@ -6219,12 +6228,11 @@ "Roguelike1SkillSelectionName": { "algorithm": "OcrDetect", "text": [], - "action": "DoNothing", - "rectMove": [ - 150, - -50, - 180, - 120 + "roi": [ + 210, + 10, + 120, + 22 ] }, "Roguelike1SkillSelectionRect": { diff --git a/resource/template/Roguelike1RecruitOcrFlag.png b/resource/template/Roguelike1RecruitOcrFlag.png new file mode 100644 index 0000000000000000000000000000000000000000..d9563cb73b1cee76d43a324a4f9b8266eb22cf24 GIT binary patch literal 818 zcmV-21I_%2P)55dNU5DKJ0K_-Go)cF!kRkczt`?LCsdQ+))pac>UC8w~ zU`Ry3=D23h?)KtXEzL!Ia66Z~v-3VPvpXw(`Vq^3CM5(#a2!GPK_0Cwuh&{Mn}fwO zLf|MlC{7HN%L(o;1>CA+&{~l3i>$1?8wkn(PSX0=PyB>{Yh!SC$>+;klI{8_Qc7kj z9>Vqc<>xNe!dVDdFun8QGaBMDKo|X_gz<67qeoNRm_1@^tIf)<3deq2EtFn>48`ZBzDVR*WB zK!nFv_ws!Ey^oNRp9$__B66AOIcVc`!dOD2@ia-AGfbHF>-o0wAPdaWTuynG*HQCeZnR zflTkYMjEsRJdkO)T87F(it@F%eYF}m4&3`1s#QrYYdC9bgaC|-rG=&M6-ofqn?G8E zHXuDgX)@2&n--_7Hl=Z&rSE*8i|ax4p+i2e*sbrOZAAHc0LB4SJY4_lrFMG(q=EYH zmZ{rqMn-dVC(ha1>vF||!kEX@RF{+^2=Wex&2x@FXeOpJ1jA|mcy~&p(N8HM(BBRQ zc6ThVo`>97w3N#pQi60oNm+oOmP|~$6p9Y}yQjQ*-r?{tDNvsh>I@8&TB8(bWBG8R;x#{KJU0585dDG7#eD(N2u6mlph5{)q>xw* wQ3TRLS4ICMqa~TlD6ZQ?_7XFn`8zG}7i(S~SjWQJD*ylh07*qoM6N<$f SkillRectArray = { Task.get("BattleQuickFormationSkill1")->specific_rect, diff --git a/src/MeoAssistant/BattleImageAnalyzer.cpp b/src/MeoAssistant/BattleImageAnalyzer.cpp index adf7f1cb9d..dd39f9c075 100644 --- a/src/MeoAssistant/BattleImageAnalyzer.cpp +++ b/src/MeoAssistant/BattleImageAnalyzer.cpp @@ -105,7 +105,7 @@ bool asst::BattleImageAnalyzer::opers_analyze() if (!flags_analyzer.analyze()) { return false; } - flags_analyzer.sort_result(); + flags_analyzer.sort_result_horizontal(); const auto click_move = Task.get("BattleOperClickRange")->rect_move; const auto role_move = Task.get("BattleOperRoleRange")->rect_move; diff --git a/src/MeoAssistant/CombatRecruitConfiger.cpp b/src/MeoAssistant/CombatRecruitConfiger.cpp deleted file mode 100644 index 26a42a418f..0000000000 --- a/src/MeoAssistant/CombatRecruitConfiger.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "CombatRecruitConfiger.h" - -#include - -#include - -#include "Logger.hpp" - -bool asst::CombatRecruitConfiger::parse(const json::value& json) -{ - LogTraceFunction; - - for (const auto& [name, oper_json] : json.as_object()) { - CombatRecruitOperInfo oper_temp; - oper_temp.name = name; - //oper_temp.type = oper_json.get("profession", "unknown"); - static const std::unordered_map RoleMapping = { - { "MEDIC", BattleRole::Medic }, - { "WARRIOR", BattleRole::Warrior }, - { "SPECIAL", BattleRole::Special }, - { "SNIPER", BattleRole::Sniper }, - { "PIONEER", BattleRole::Pioneer }, - { "TANK", BattleRole::Tank }, - { "SUPPORT", BattleRole::Support }, - { "CASTER", BattleRole::Caster }, - { "unknown", BattleRole::Unknown } - }; - std::string role_str = oper_json.get("profession", "unknown"); - if (auto role_iter = RoleMapping.find(role_str); - role_iter == RoleMapping.cend()) { - oper_temp.role = role_iter->second; - } - else { - oper_temp.role = BattleRole::Unknown; - } - - oper_temp.subProfession = oper_json.get("subProfession", "unknown"); - oper_temp.position = oper_json.get("position", "unknown"); - oper_temp.level = oper_json.get("level", 0); - m_all_opers.emplace(name, std::move(oper_temp)); - m_all_opers_name.emplace_back(name); - } - - // // 按干员等级排个序 - // std::sort(m_all_opers.begin(), m_all_opers.end(), [](const auto& lhs, const auto& rhs) -> bool { - // return lhs.level > rhs.level; - // }); - - return true; -} diff --git a/src/MeoAssistant/CombatRecruitConfiger.h b/src/MeoAssistant/CombatRecruitConfiger.h deleted file mode 100644 index ac448294e1..0000000000 --- a/src/MeoAssistant/CombatRecruitConfiger.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -#include "AbstractConfiger.h" - -#include -#include -#include - -#include "AsstTypes.h" -#include "AsstBattleDef.h" - -namespace asst -{ - // 干员信息,战斗相关 - struct CombatRecruitOperInfo - { - std::string name; - BattleRole role; - int level = 0; - std::string subProfession; // TODO: 改成枚举 - std::string position; // 高台--RANGED, 地面--MELEE // TODO: 改成 TilePack::BuildableType 枚举 - }; - class CombatRecruitConfiger : public AbstractConfiger - { - public: - virtual ~CombatRecruitConfiger() = default; - - const std::unordered_map& get_all_opers() const noexcept - { - return m_all_opers; - } - - const std::vector& get_all_opers_name() const noexcept - { - return m_all_opers_name; - } - - protected: - virtual bool parse(const json::value& json) override; - - std::unordered_map m_all_opers; - std::vector m_all_opers_name; - }; -} diff --git a/src/MeoAssistant/CreditShopImageAnalyzer.cpp b/src/MeoAssistant/CreditShopImageAnalyzer.cpp index 9bb93c5d83..20482611bb 100644 --- a/src/MeoAssistant/CreditShopImageAnalyzer.cpp +++ b/src/MeoAssistant/CreditShopImageAnalyzer.cpp @@ -38,7 +38,7 @@ bool asst::CreditShopImageAnalyzer::commoditys_analyze() if (!mm_annlyzer.analyze()) { return false; } - mm_annlyzer.sort_result(); + mm_annlyzer.sort_result_horizontal(); auto credit_points_result = mm_annlyzer.get_result(); if (credit_points_result.empty()) { return false; diff --git a/src/MeoAssistant/InfrastClueImageAnalyzer.cpp b/src/MeoAssistant/InfrastClueImageAnalyzer.cpp index cbf0025ea3..93864402a4 100644 --- a/src/MeoAssistant/InfrastClueImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastClueImageAnalyzer.cpp @@ -22,7 +22,7 @@ bool asst::InfrastClueImageAnalyzer::clue_detect() if (!clue_analyzer.analyze()) { return false; } - clue_analyzer.sort_result(); + clue_analyzer.sort_result_horizontal(); for (const auto& res : clue_analyzer.get_result()) { m_result.emplace_back(res.rect, std::string()); } diff --git a/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp b/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp index e477d7fea0..fa90f6d881 100644 --- a/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp @@ -44,7 +44,7 @@ bool asst::InfrastFacilityImageAnalyzer::analyze() if (!task_analyze(task_name + task_name_suffix.at(cor_suffix_index))) { continue; } - mm_analyzer.sort_result(); + mm_analyzer.sort_result_horizontal(); cur_facility_result = mm_analyzer.get_result(); } else { @@ -65,7 +65,7 @@ bool asst::InfrastFacilityImageAnalyzer::analyze() } if (double cur_score = cur_max_iter->score; max_score < cur_score) { - mm_analyzer.sort_result(); + mm_analyzer.sort_result_horizontal(); max_score = cur_score; cur_facility_result = cur_res; cor_suffix_index = static_cast(i); diff --git a/src/MeoAssistant/InfrastProductionTask.cpp b/src/MeoAssistant/InfrastProductionTask.cpp index b0bdd75927..eef20ae2f3 100644 --- a/src/MeoAssistant/InfrastProductionTask.cpp +++ b/src/MeoAssistant/InfrastProductionTask.cpp @@ -638,7 +638,7 @@ bool asst::InfrastProductionTask::facility_list_detect() if (!mm_analyzer.analyze()) { return false; } - mm_analyzer.sort_result(); + mm_analyzer.sort_result_horizontal(); m_facility_list_tabs.reserve(mm_analyzer.get_result().size()); for (const auto& res : mm_analyzer.get_result()) { m_facility_list_tabs.emplace_back(res.rect); diff --git a/src/MeoAssistant/MeoAssistant.vcxproj b/src/MeoAssistant/MeoAssistant.vcxproj index 03ab638a22..4211ab2203 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj +++ b/src/MeoAssistant/MeoAssistant.vcxproj @@ -29,7 +29,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -174,6 +174,7 @@ + diff --git a/src/MeoAssistant/MeoAssistant.vcxproj.filters b/src/MeoAssistant/MeoAssistant.vcxproj.filters index 60b590cbfb..7efeb1cfae 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj.filters +++ b/src/MeoAssistant/MeoAssistant.vcxproj.filters @@ -312,7 +312,7 @@ 头文件\Task\Sub - + 头文件\Resource @@ -539,7 +539,7 @@ 源文件\Task\Sub - + 源文件\Resource @@ -568,5 +568,8 @@ 资源文件 + + 资源文件 + \ No newline at end of file diff --git a/src/MeoAssistant/MultiMatchImageAnalyzer.cpp b/src/MeoAssistant/MultiMatchImageAnalyzer.cpp index eb8ec2933b..d8e8a80927 100644 --- a/src/MeoAssistant/MultiMatchImageAnalyzer.cpp +++ b/src/MeoAssistant/MultiMatchImageAnalyzer.cpp @@ -26,7 +26,7 @@ bool asst::MultiMatchImageAnalyzer::analyze() return multi_match_templ(templ); } -void asst::MultiMatchImageAnalyzer::sort_result() +void asst::MultiMatchImageAnalyzer::sort_result_horizontal() { // 按位置排个序 std::sort(m_result.begin(), m_result.end(), diff --git a/src/MeoAssistant/MultiMatchImageAnalyzer.h b/src/MeoAssistant/MultiMatchImageAnalyzer.h index 2919a0afe9..85f26e171e 100644 --- a/src/MeoAssistant/MultiMatchImageAnalyzer.h +++ b/src/MeoAssistant/MultiMatchImageAnalyzer.h @@ -12,7 +12,7 @@ namespace asst virtual bool analyze() override; - void sort_result(); // 按位置排序,左上角的排在前面 + void sort_result_horizontal(); // 按位置排序,左上角的排在前面 void set_mask_range(int lower, int upper) noexcept; void set_mask_range(std::pair mask_range) noexcept; diff --git a/src/MeoAssistant/OcrImageAnalyzer.cpp b/src/MeoAssistant/OcrImageAnalyzer.cpp index b05f29922a..477d1d9367 100644 --- a/src/MeoAssistant/OcrImageAnalyzer.cpp +++ b/src/MeoAssistant/OcrImageAnalyzer.cpp @@ -75,14 +75,14 @@ bool asst::OcrImageAnalyzer::analyze() void asst::OcrImageAnalyzer::filter(const TextRectProc& filter_func) { - decltype(m_ocr_result) temp_result; + std::vector temp_result; - for (auto&& tr : m_ocr_result) { + for (auto&& tr : get_result()) { if (filter_func(tr)) { temp_result.emplace_back(std::move(tr)); } } - m_ocr_result = std::move(temp_result); + get_result() = std::move(temp_result); } void asst::OcrImageAnalyzer::set_use_cache(bool is_use) noexcept @@ -118,6 +118,11 @@ void asst::OcrImageAnalyzer::set_task_info(OcrTaskInfo task_info) noexcept } } +std::vector& asst::OcrImageAnalyzer::get_result() noexcept +{ + return m_ocr_result; +} + void asst::OcrImageAnalyzer::set_task_info(std::shared_ptr task_ptr) { set_task_info(*std::dynamic_pointer_cast(task_ptr)); @@ -147,10 +152,10 @@ const std::vector& asst::OcrImageAnalyzer::get_result() const no return m_ocr_result; } -void asst::OcrImageAnalyzer::sort_result() +void asst::OcrImageAnalyzer::sort_result_horizontal() { // 按位置排个序 - std::sort(m_ocr_result.begin(), m_ocr_result.end(), + std::sort(get_result().begin(), get_result().end(), [](const TextRect& lhs, const TextRect& rhs) -> bool { if (std::abs(lhs.rect.y - rhs.rect.y) < 5) { // y差距较小则理解为是同一排的,按x排序 return lhs.rect.x < rhs.rect.x; @@ -162,14 +167,14 @@ void asst::OcrImageAnalyzer::sort_result() ); } -void asst::OcrImageAnalyzer::sort_result_x_y() +void asst::OcrImageAnalyzer::sort_result_vertical() { // 按位置排个序(顺序如下) // +---+ // |1 3| // |2 4| // +---+ - std::sort(m_ocr_result.begin(), m_ocr_result.end(), + std::sort(get_result().begin(), get_result().end(), [](const TextRect& lhs, const TextRect& rhs) -> bool { if (std::abs(lhs.rect.x - rhs.rect.x) < 5) { // x差距较小则理解为是同一排的,按y排序 return lhs.rect.y < rhs.rect.y; @@ -183,7 +188,7 @@ void asst::OcrImageAnalyzer::sort_result_x_y() void asst::OcrImageAnalyzer::sort_result_by_score() { - std::sort(m_ocr_result.begin(), m_ocr_result.end(), + std::sort(get_result().begin(), get_result().end(), [](const TextRect& lhs, const TextRect& rhs) -> bool { return lhs.score > rhs.score; } @@ -201,7 +206,7 @@ void asst::OcrImageAnalyzer::sort_result_by_required() m_req_cache.emplace(m_required.at(i), i + 1); } - std::sort(m_ocr_result.begin(), m_ocr_result.end(), + std::sort(get_result().begin(), get_result().end(), [&m_req_cache](const auto& lhs, const auto& rhs) -> bool { return m_req_cache[lhs.text] < m_req_cache[rhs.text]; }); diff --git a/src/MeoAssistant/OcrImageAnalyzer.h b/src/MeoAssistant/OcrImageAnalyzer.h index 47671c9dc8..43e28804ce 100644 --- a/src/MeoAssistant/OcrImageAnalyzer.h +++ b/src/MeoAssistant/OcrImageAnalyzer.h @@ -19,10 +19,10 @@ namespace asst void filter(const TextRectProc& filter_func); - void sort_result(); // 按位置排序,左上角的排在前面,右上角在左下角前面 - void sort_result_x_y(); // 按位置排序,左上角的排在前面,左下角在右上角前面 - void sort_result_by_score(); // 按分数排序,得分最高的在前面 - void sort_result_by_required(); // 按传入的需求数组排序,传入的在前面结果接在前面 + virtual void sort_result_horizontal(); // 按位置排序,左上角的排在前面,右上角在左下角前面 + virtual void sort_result_vertical(); // 按位置排序,左上角的排在前面,左下角在右上角前面 + virtual void sort_result_by_score(); // 按分数排序,得分最高的在前面 + virtual void sort_result_by_required(); // 按传入的需求数组排序,传入的在前面结果接在前面 void set_required(std::vector required, bool full_match = false) noexcept; void set_replace(std::unordered_map replace) noexcept; @@ -35,6 +35,7 @@ namespace asst void set_pred(const TextRectProc& pred); virtual const std::vector& get_result() const noexcept; + virtual std::vector& get_result() noexcept; protected: virtual void set_task_info(OcrTaskInfo task_info) noexcept; diff --git a/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.cpp b/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.cpp index ba6f83beac..9e8e487751 100644 --- a/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.cpp +++ b/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.cpp @@ -71,3 +71,8 @@ void asst::OcrWithFlagTemplImageAnalyzer::set_flag_rect_move(Rect flag_rect_move { m_flag_rect_move = std::move(flag_rect_move); } + +std::vector& asst::OcrWithFlagTemplImageAnalyzer::get_result() noexcept +{ + return m_all_result; +} diff --git a/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.h b/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.h index 8fbcc50c30..e28a8df519 100644 --- a/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.h +++ b/src/MeoAssistant/OcrWithFlagTemplImageAnalyzer.h @@ -17,13 +17,15 @@ namespace asst virtual void set_roi(const Rect& roi) noexcept; virtual bool analyze() override; - + virtual const std::vector& get_result() const noexcept override; + virtual std::vector& get_result() noexcept override; void set_task_info(std::string templ_task_name, std::string ocr_task_name); void set_flag_rect_move(Rect flag_rect_move); protected: + MultiMatchImageAnalyzer m_multi_match_image_analyzer; Rect m_flag_rect_move; std::vector m_all_result; diff --git a/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.cpp b/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.cpp index 05287a07b6..2bc79ecc39 100644 --- a/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.cpp +++ b/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.cpp @@ -14,6 +14,9 @@ bool asst::OcrWithPreprocessImageAnalyzer::analyze() bounding_rect.y += m_roi.y; Rect new_roi = utils::make_rect(bounding_rect); + if (new_roi.empty()) { + return false; + } // todo: split if (m_expansion) { @@ -27,7 +30,6 @@ bool asst::OcrWithPreprocessImageAnalyzer::analyze() cv::rectangle(m_image_draw, utils::make_rect(new_roi), cv::Scalar(0, 0, 255), 1); #endif // ASST_DEBUG - return OcrImageAnalyzer::analyze(); } diff --git a/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.h b/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.h index 3863fa4b58..f1eeee46f6 100644 --- a/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.h +++ b/src/MeoAssistant/OcrWithPreprocessImageAnalyzer.h @@ -15,9 +15,10 @@ namespace asst void set_split(bool split); void set_expansion(int expansion); - protected: virtual void set_task_info(OcrTaskInfo task_info) noexcept override; + protected: + int m_threshold_lower = 140; int m_threshold_upper = 255; bool m_split = false; diff --git a/src/MeoAssistant/Resource.cpp b/src/MeoAssistant/Resource.cpp index 45a06f0cbd..63ab024db0 100644 --- a/src/MeoAssistant/Resource.cpp +++ b/src/MeoAssistant/Resource.cpp @@ -16,7 +16,7 @@ bool asst::Resource::load(const std::string& dir) constexpr static const char* TemplsFilename = "template"; constexpr static const char* GeneralCfgFilename = "config.json"; constexpr static const char* TaskDataFilename = "tasks.json"; - constexpr static const char* CombatRecruitCfgFilename = "combat_recruit.json"; + constexpr static const char* RoguelikeRecruitCfgFilename = "roguelike_recruit.json"; constexpr static const char* RecruitCfgFilename = "recruit.json"; constexpr static const char* ItemCfgFilename = "item_index.json"; constexpr static const char* InfrastCfgFilename = "infrast.json"; @@ -61,9 +61,9 @@ bool asst::Resource::load(const std::string& dir) overload = true; } - if (!m_combatrecruit_cfg_unique_ins.load(dir + CombatRecruitCfgFilename)) { + if (!m_roguelike_recruit_cfg_unique_ins.load(dir + RoguelikeRecruitCfgFilename)) { if (!m_loaded) { - m_last_error = std::string(CombatRecruitCfgFilename) + ": " + m_combatrecruit_cfg_unique_ins.get_last_error(); + m_last_error = std::string(RoguelikeRecruitCfgFilename) + ": " + m_roguelike_recruit_cfg_unique_ins.get_last_error(); return false; } } diff --git a/src/MeoAssistant/Resource.h b/src/MeoAssistant/Resource.h index fa8bc40cbe..5f3c346430 100644 --- a/src/MeoAssistant/Resource.h +++ b/src/MeoAssistant/Resource.h @@ -5,7 +5,7 @@ #include #include -#include "CombatRecruitConfiger.h" +#include "RoguelikeRecruitConfiger.h" #include "GeneralConfiger.h" #include "InfrastConfiger.h" #include "ItemConfiger.h" @@ -45,9 +45,9 @@ namespace asst { return m_recruit_cfg_unique_ins; } - CombatRecruitConfiger& combatrecruit() noexcept + RoguelikeRecruitConfiger& roguelike_recruit() noexcept { - return m_combatrecruit_cfg_unique_ins; + return m_roguelike_recruit_cfg_unique_ins; } ItemConfiger& item() noexcept { @@ -90,9 +90,9 @@ namespace asst { return m_recruit_cfg_unique_ins; } - const CombatRecruitConfiger& combatrecruit() const noexcept + const RoguelikeRecruitConfiger& roguelike_recruit() const noexcept { - return m_combatrecruit_cfg_unique_ins; + return m_roguelike_recruit_cfg_unique_ins; } const ItemConfiger& item() const noexcept { @@ -132,7 +132,7 @@ namespace asst TemplResource m_templ_resource_unique_ins; GeneralConfiger m_general_cfg_unique_ins; RecruitConfiger m_recruit_cfg_unique_ins; - CombatRecruitConfiger m_combatrecruit_cfg_unique_ins; + RoguelikeRecruitConfiger m_roguelike_recruit_cfg_unique_ins; CopilotConfiger m_copilot_cfg_unique_ins; RoguelikeCopilotConfiger m_roguelike_cfg_unique_ins; ItemConfiger m_item_cfg_unique_ins; diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index 15942bdebe..333ba88524 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -25,11 +25,6 @@ bool asst::RoguelikeBattleTaskPlugin::verify(AsstMsg msg, const json::value& det } } -void asst::RoguelikeBattleTaskPlugin::set_skill_usage(SkillUsageMap usage_map) -{ - m_skill_usage = std::move(usage_map); -} - void asst::RoguelikeBattleTaskPlugin::set_stage_name(std::string stage) { m_stage_name = std::move(stage); @@ -182,31 +177,31 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() // } //} - for (const Rect& rect : battle_analyzer.get_ready_skills()) { - // 找出这个可以使用的技能是哪个干员的(根据之前放干员的位置) - std::string name = "NotFound"; - for (const auto& [loc, oper_name] : m_used_tiles) { - auto point = m_normal_tile_info[loc].pos; - if (rect.include(point)) { - name = oper_name; - break; - } - } + //for (const Rect& rect : battle_analyzer.get_ready_skills()) { + // // 找出这个可以使用的技能是哪个干员的(根据之前放干员的位置) + // std::string name = "NotFound"; + // for (const auto& [loc, oper_name] : m_used_tiles) { + // auto point = m_normal_tile_info[loc].pos; + // if (rect.include(point)) { + // name = oper_name; + // break; + // } + // } - auto& usage = m_skill_usage[name]; - Log.info("Oper", name, ", skill usage", static_cast(usage)); - switch (usage) { - case BattleSkillUsage::Once: - use_skill(rect); - usage = BattleSkillUsage::OnceUsed; - return true; - break; - case BattleSkillUsage::Possibly: - use_skill(rect); - return true; - break; - } - } + // auto& usage = m_skill_usage[name]; + // Log.info("Oper", name, ", skill usage", static_cast(usage)); + // switch (usage) { + // case BattleSkillUsage::Once: + // use_skill(rect); + // usage = BattleSkillUsage::OnceUsed; + // return true; + // break; + // case BattleSkillUsage::Possibly: + // use_skill(rect); + // return true; + // break; + // } + //} const auto& opers = battle_analyzer.get_opers(); if (opers.empty()) { @@ -377,11 +372,11 @@ void asst::RoguelikeBattleTaskPlugin::clear() m_side_tile_info.clear(); m_used_tiles.clear(); - for (auto& [_, usage] : m_skill_usage) { - if (usage == BattleSkillUsage::OnceUsed) { - usage = BattleSkillUsage::Once; - } - } + //for (auto& [_, usage] : m_skill_usage) { + // if (usage == BattleSkillUsage::OnceUsed) { + // usage = BattleSkillUsage::Once; + // } + //} } //asst::Rect asst::RoguelikeBattleTaskPlugin::get_placed_by_cv() diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.h b/src/MeoAssistant/RoguelikeBattleTaskPlugin.h index 4f6a799142..2d56f4d580 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.h +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.h @@ -11,15 +11,12 @@ namespace asst class RoguelikeBattleTaskPlugin : public AbstractTaskPlugin { using Loc = asst::TilePack::BuildableType; - public: - using SkillUsageMap = std::unordered_map; public: using AbstractTaskPlugin::AbstractTaskPlugin; virtual ~RoguelikeBattleTaskPlugin() = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; - void set_skill_usage(SkillUsageMap usage_map); void set_stage_name(std::string stage); protected: @@ -51,6 +48,5 @@ namespace asst std::unordered_map m_used_tiles; std::string m_stage_name; - SkillUsageMap m_skill_usage; }; } diff --git a/src/MeoAssistant/RoguelikeFormationImageAnalyzer.cpp b/src/MeoAssistant/RoguelikeFormationImageAnalyzer.cpp index 40d5f9e81b..e1142fa412 100644 --- a/src/MeoAssistant/RoguelikeFormationImageAnalyzer.cpp +++ b/src/MeoAssistant/RoguelikeFormationImageAnalyzer.cpp @@ -13,7 +13,7 @@ bool asst::RoguelikeFormationImageAnalyzer::analyze() if (!opers_analyzer.analyze()) { return false; } - opers_analyzer.sort_result(); + opers_analyzer.sort_result_horizontal(); const auto& all_opers = opers_analyzer.get_result(); for (const MatchRect& oper_mr : all_opers) { FormationOper oper; diff --git a/src/MeoAssistant/RoguelikeRecruitConfiger.cpp b/src/MeoAssistant/RoguelikeRecruitConfiger.cpp new file mode 100644 index 0000000000..19903236b8 --- /dev/null +++ b/src/MeoAssistant/RoguelikeRecruitConfiger.cpp @@ -0,0 +1,44 @@ +#include "RoguelikeRecruitConfiger.h" + +#include + +#include + +#include "Logger.hpp" + +const asst::RoguelikeOperInfo& asst::RoguelikeRecruitConfiger::get_oper_info(const std::string& name) const noexcept + +{ + if (auto find_iter = m_all_opers.find(name); + find_iter != m_all_opers.cend()) { + return find_iter->second; + } + else { + static RoguelikeOperInfo empty; + return empty; + } +} + +bool asst::RoguelikeRecruitConfiger::parse(const json::value& json) +{ + LogTraceFunction; + + for (const auto& role_name : json.at("roles").as_array()) { + std::string str_role = role_name.as_string(); + for (const auto& oper_info : json.at(str_role).as_array()) { + std::string name = oper_info.at("name").as_string();; + RoguelikeOperInfo info; + info.name = name; + info.level = oper_info.at("level").as_integer(); + info.skill = oper_info.at("skill").as_integer(); + info.alternate_skill = oper_info.get("alternate_skill", 0); + info.skill_usage = static_cast(oper_info.get("skill_usage", 1)); + info.alternate_skill_usage = static_cast(oper_info.get("alternate_skill_usage", 1)); + + m_all_opers.emplace(name, std::move(info)); + m_ordered_all_opers_name.emplace_back(name); + } + } + + return true; +} diff --git a/src/MeoAssistant/RoguelikeRecruitConfiger.h b/src/MeoAssistant/RoguelikeRecruitConfiger.h new file mode 100644 index 0000000000..d42c497989 --- /dev/null +++ b/src/MeoAssistant/RoguelikeRecruitConfiger.h @@ -0,0 +1,38 @@ +#pragma once + +#include "AbstractConfiger.h" + +#include +#include +#include + +#include "AsstTypes.h" +#include "AsstBattleDef.h" + +namespace asst +{ + // 干员信息,战斗相关 + struct RoguelikeOperInfo + { + std::string name; + int level = 0; + int skill = 0; + int alternate_skill = 0; + BattleSkillUsage skill_usage = BattleSkillUsage::Possibly; + BattleSkillUsage alternate_skill_usage = BattleSkillUsage::Possibly; + }; + class RoguelikeRecruitConfiger : public AbstractConfiger + { + public: + virtual ~RoguelikeRecruitConfiger() = default; + + const RoguelikeOperInfo& get_oper_info(const std::string& name) const noexcept; + const auto& get_oper_order() const noexcept { return m_ordered_all_opers_name; } + + protected: + virtual bool parse(const json::value& json) override; + + std::unordered_map m_all_opers; + std::vector m_ordered_all_opers_name; + }; +} diff --git a/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp b/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp index 7d555e4ec2..c61dcab2af 100644 --- a/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp @@ -1,16 +1,11 @@ #include "RoguelikeRecruitTaskPlugin.h" -#include "OcrImageAnalyzer.h" +#include "OcrWithFlagTemplImageAnalyzer.h" #include "Controller.h" #include "TaskData.h" #include "Resource.h" #include "Logger.hpp" -void asst::RoguelikeRecruitTaskPlugin::set_opers(std::vector opers) -{ - m_opers = std::move(opers); -} - bool asst::RoguelikeRecruitTaskPlugin::verify(AsstMsg msg, const json::value& details) const { if (msg != AsstMsg::SubTaskCompleted @@ -30,88 +25,24 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() { LogTraceFunction; - OcrImageAnalyzer analyzer(m_ctrler->get_image()); - analyzer.set_task_info("Roguelike1RecruitOcr"); + OcrWithFlagTemplImageAnalyzer analyzer(m_ctrler->get_image()); + analyzer.set_task_info("Roguelike1RecruitOcrFlag", "Roguelike1RecruitOcr"); analyzer.set_replace( std::dynamic_pointer_cast( Task.get("CharsNameOcrReplace")) ->replace_map); - // 这里原来用m_opers作参数,但由于新的算法需要取左上角干员,将m_opers移到下面的demand_filter - // TODO 这里需要考虑出了新干员,但是资源文件没有更新的情况 - analyzer.set_required(Resrc.combatrecruit().get_all_opers_name()); + analyzer.set_required(Resrc.roguelike_recruit().get_oper_order()); if (!analyzer.analyze()) { return false; } - analyzer.sort_result_x_y(); - - { - std::string visible_opers = ""; // 界面上所有干员 - for (const auto& oper : analyzer.get_result()) { - visible_opers += oper.text + ", "; - } - Log.info("visible opers count:", analyzer.get_result().size(), "visible opers:", visible_opers); - } - // demand_filter - std::unordered_set opers_set(m_opers.cbegin(), m_opers.cend()); - analyzer.filter([&](const TextRect& x) -> bool { - return opers_set.find(x.text) != opers_set.cend(); - } - ); - - { - std::string required_opers = ""; // visible_opers 的基础上, 在 m_opers 里的干员 - for (const auto& oper : analyzer.get_result()) { - required_opers += oper.text + ", "; - } - Log.info("required opers count:", analyzer.get_result().size(), "required opers:", required_opers); - } - - if (analyzer.get_result().empty()) { - return false; - } - // 1. 根据出现在界面左上角的干员确定最高星级(此前应已判断第一个是否为临时招募) - const auto& all_opers = Resrc.combatrecruit().get_all_opers(); - const std::string& first_oper = analyzer.get_result().front().text; - - if (auto oper_iter = all_opers.find(first_oper); - oper_iter != all_opers.end()) { - int allow_level = oper_iter->second.level; - Log.info("allow level:", allow_level); - // availability_filter (based on level) - analyzer.filter([&](const TextRect& tr) -> bool { - if (auto iter = all_opers.find(tr.text); - iter != all_opers.end()) { - return iter->second.level <= allow_level; - } - else { - return false; - } - }); - } - else { - Log.error("Cannot recognize first oper:", first_oper); - } - - { - std::string available_opers = ""; // required_opers 的基础上, 能用的干员 - for (const auto& oper : analyzer.get_result()) { - available_opers += oper.text + ", "; - } - Log.info("available opers count:", analyzer.get_result().size(), "available opers:", available_opers); - } - - if (analyzer.get_result().empty()) { - return false; - } - // 2. 根据指定的干员的先后顺序决定人选(越靠前优先级越高) - analyzer.set_required(m_opers); analyzer.sort_result_by_required(); - Rect target = analyzer.get_result().front().rect; - m_ctrler->click(target); - Log.info("Choose:", analyzer.get_result().front().text); + + auto& res = analyzer.get_result().front(); + Log.info("Choose:", res.text); + m_ctrler->click(res.rect); return true; } diff --git a/src/MeoAssistant/RoguelikeRecruitTaskPlugin.h b/src/MeoAssistant/RoguelikeRecruitTaskPlugin.h index e913e1980f..39d147b99f 100644 --- a/src/MeoAssistant/RoguelikeRecruitTaskPlugin.h +++ b/src/MeoAssistant/RoguelikeRecruitTaskPlugin.h @@ -11,11 +11,7 @@ namespace asst virtual bool verify(AsstMsg msg, const json::value& details) const override; - void set_opers(std::vector opers); - protected: virtual bool _run() override; - - std::vector m_opers; }; } diff --git a/src/MeoAssistant/RoguelikeSkillSelectionImageAnalyzer.cpp b/src/MeoAssistant/RoguelikeSkillSelectionImageAnalyzer.cpp index db97e5e5c5..6906bb068d 100644 --- a/src/MeoAssistant/RoguelikeSkillSelectionImageAnalyzer.cpp +++ b/src/MeoAssistant/RoguelikeSkillSelectionImageAnalyzer.cpp @@ -1,10 +1,11 @@ #include "RoguelikeSkillSelectionImageAnalyzer.h" #include "AsstUtils.hpp" -#include "OcrImageAnalyzer.h" +#include "OcrWithPreprocessImageAnalyzer.h" #include "MultiMatchImageAnalyzer.h" #include "TaskData.h" #include "Logger.hpp" +#include "Resource.h" bool asst::RoguelikeSkillSelectionImageAnalyzer::analyze() { @@ -35,10 +36,11 @@ bool asst::RoguelikeSkillSelectionImageAnalyzer::analyze() std::string asst::RoguelikeSkillSelectionImageAnalyzer::name_analyze(const Rect& roi) { - OcrImageAnalyzer analyzer; - auto name_task_ptr = Task.get("Roguelike1SkillSelectionName"); - analyzer.set_task_info(name_task_ptr); - analyzer.set_image(m_image, roi.move(name_task_ptr->rect_move)); + OcrWithPreprocessImageAnalyzer analyzer; + auto name_task_ptr = std::dynamic_pointer_cast(Task.get("Roguelike1SkillSelectionName")); + analyzer.set_task_info(*name_task_ptr); + analyzer.set_image(m_image, roi.move(name_task_ptr->roi)); + analyzer.set_required(Resrc.roguelike_recruit().get_oper_order()); analyzer.set_replace( std::dynamic_pointer_cast( Task.get("CharsNameOcrReplace")) @@ -47,13 +49,7 @@ std::string asst::RoguelikeSkillSelectionImageAnalyzer::name_analyze(const Rect& if (!analyzer.analyze()) { return std::string(); } - analyzer.sort_result_by_score(); - for (const auto& result : analyzer.get_result()) { - if (result.text.find("临时招募") == std::string::npos) { - return result.text; - } - } - return std::string(); + return analyzer.get_result().front().text; } std::vector asst::RoguelikeSkillSelectionImageAnalyzer::skill_analyze(const Rect& roi) diff --git a/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp b/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp index 76afcdec49..50b8610c92 100644 --- a/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp @@ -3,6 +3,7 @@ #include "RoguelikeSkillSelectionImageAnalyzer.h" #include "Controller.h" #include "TaskData.h" +#include "Resource.h" #include "Logger.hpp" @@ -21,22 +22,8 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::va } } -void asst::RoguelikeSkillSelectionTaskPlugin::set_skill_map(SkillMap skill_mapping) -{ - m_skill_mapping = std::move(skill_mapping); -} - bool asst::RoguelikeSkillSelectionTaskPlugin::_run() { - //#ifdef ASST_DEBUG - // m_skill_mapping.clear(); - // m_skill_mapping.reserve(4); - // m_skill_mapping.emplace("山", 2); - // m_skill_mapping.emplace("芙蓉", 1); - // m_skill_mapping.emplace("梓兰", 1); - // m_skill_mapping.emplace("阿米娅", 3); - // m_skill_mapping.emplace("Unknown", 3); - //#endif auto image = m_ctrler->get_image(); RoguelikeSkillSelectionImageAnalyzer analyzer(image); @@ -44,24 +31,20 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() return false; } + const auto& rg_src = Resrc.roguelike_recruit(); for (const auto& [name, skill_vec] : analyzer.get_result()) { - int cor_req_skill = 3; - for (const auto& [req_name, req_skill] : m_skill_mapping) { - if (name.find(req_name) != std::string::npos) { - cor_req_skill = req_skill; - break; - } + const auto& oper_info = rg_src.get_oper_info(name); + int index = 0; + if (skill_vec.size() >= oper_info.skill) { + index = oper_info.skill - 1; } - size_t index = 0; - if (skill_vec.size() < cor_req_skill) { - index = skill_vec.size() - 1; - Log.info("skill", cor_req_skill, "not exists, use skill", index); + else if (skill_vec.size() >= oper_info.alternate_skill) { + index = oper_info.alternate_skill - 1; } - else { - index = cor_req_skill - 1; + + if (index) { + m_ctrler->click(skill_vec.at(index)); } - Rect target = skill_vec.at(index); - m_ctrler->click(target); } return true; diff --git a/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.h b/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.h index 64b198edc9..b72478182b 100644 --- a/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.h +++ b/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.h @@ -7,19 +7,13 @@ namespace asst { class RoguelikeSkillSelectionTaskPlugin final : public AbstractTaskPlugin { - public: - using SkillMap = std::unordered_map; public: using AbstractTaskPlugin::AbstractTaskPlugin; virtual ~RoguelikeSkillSelectionTaskPlugin() = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; - void set_skill_map(SkillMap skill_mapping); - protected: virtual bool _run() override; - - SkillMap m_skill_mapping; }; } diff --git a/src/MeoAssistant/RoguelikeTask.cpp b/src/MeoAssistant/RoguelikeTask.cpp index d88779f4e2..19a285cb92 100644 --- a/src/MeoAssistant/RoguelikeTask.cpp +++ b/src/MeoAssistant/RoguelikeTask.cpp @@ -38,31 +38,6 @@ bool asst::RoguelikeTask::set_params(const json::value& params) // 1 - 第一层投资完源石锭就退出 // 2 - 投资过后再退出,没有投资就继续往后打 - if (!params.contains("opers") || !params.at("opers").is_array()) { - return false; - } - - std::vector opers_vec; - RoguelikeSkillSelectionTaskPlugin::SkillMap skill_map; - RoguelikeBattleTaskPlugin::SkillUsageMap usage_map; - - for (auto& oper : params.at("opers").as_array()) { - if (!oper.contains("name") || !oper.at("name").is_string()) { - return false; - } - int skill = oper.get("skill", 1); - if (skill < 1 || 3 < skill) { - return false; - } - std::string name = oper.at("name").as_string(); - opers_vec.emplace_back(name); - skill_map.emplace(name, skill); - - auto usage = static_cast(oper.get("skill_usage", 0)); - usage_map.emplace(name, usage); - } - skill_map.emplace("Unknown", 3); - int mode = params.get("mode", 0); switch (mode) { case 0: @@ -78,10 +53,5 @@ bool asst::RoguelikeTask::set_params(const json::value& params) return false; } - m_recruit_task_ptr->set_opers(std::move(opers_vec)); - m_skill_task_ptr->set_skill_map(std::move(skill_map)); - - m_battle_task_ptr->set_skill_usage(std::move(usage_map)); - return true; } diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 9bf23303a8..47d5653f8a 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -688,12 +688,6 @@ namespace MeoAsstGui { var task_params = new JObject(); task_params["mode"] = mode; - task_params["opers"] = new JArray { - new JObject { { "name", "山" }, { "skill", 2 }, { "skill_usage", 2 } }, - new JObject { { "name", "棘刺" }, { "skill", 3 }, { "skill_usage", 1 } }, - new JObject { { "name", "芙蓉" }, { "skill", 1 }, { "skill_usage", 1 } }, - new JObject { { "name", "梓兰" }, { "skill", 1 }, { "skill_usage", 1 } }, - }; return AsstAppendTaskWithEncoding("Roguelike", task_params); } diff --git a/tools/TestCaller/main.cpp b/tools/TestCaller/main.cpp index 04e55b83cb..4c55704648 100644 --- a/tools/TestCaller/main.cpp +++ b/tools/TestCaller/main.cpp @@ -74,23 +74,7 @@ int main(/*int argc, char** argv*/) //)"); // AsstAppendTask(ptr, "Award", nullptr); // - //AsstAppendTask(ptr, "Roguelike", R"( - //{ - // "opers": [ - // { - // "name": "山", - // "skill": 2, - // "skill_usage": 1 - // }, - // { - // "name": "梓兰" - // }, - // { - // "name": "芙蓉" - // } - // ] - //} - //)"); + // AsstAppendTask(ptr, "Roguelike", nullptr); AsstAppendTask(ptr, "Debug", nullptr);