feat: 重写烧水

This commit is contained in:
zzyyyl
2023-10-03 03:13:56 +08:00
parent 03740b8bd2
commit 3d80d2ee79
10 changed files with 546 additions and 108 deletions

View File

@@ -3742,9 +3742,69 @@
"Storage full"
]
},
"Phantom@Roguelike@LevelName_mode4": {
"Phantom@Roguelike@StrategyChange_mode0": {
"text": [
"Homeland Remnants"
"_aggressive",
"_pragmatic",
"_default"
],
"ocrReplace": [
[
"Mist-stricken Missteps",
"_aggressive"
],
[
"Sunset Courtyard",
"_aggressive"
],
[
"Homeland Remnants",
"_aggressive"
],
[
"Nightmare's Prelude",
"_pragmatic"
],
[
"Blood-soaked Corridor",
"_pragmatic"
],
[
"Hall of Desires",
"_default"
]
]
},
"Phantom@Roguelike@StrategyChange_mode4": {
"text": [
"_default",
"_exit"
],
"ocrReplace": [
[
"Mist-stricken Missteps",
"_default"
],
[
"Sunset Courtyard",
"_default"
],
[
"Homeland Remnants",
"_exit"
],
[
"Nightmare's Prelude",
"_exit"
],
[
"Blood-soaked Corridor",
"_exit"
],
[
"Hall of Desires",
"_exit"
]
]
},
"Phantom@Roguelike@NextLevel": {
@@ -3774,10 +3834,77 @@
"Mizuki@Roguelike@GetDropSelectRecruit": {
"templThreshold": 0.75
},
"Mizuki@Roguelike@LevelName_mode4": {
"Mizuki@Roguelike@StrategyChange_mode0": {
"text": [
"Raging Billows",
"Indigo Cradle"
"_aggressive",
"_pragmatic",
"_default"
],
"ocrReplace": [
[
"Sunshine Coast",
"_aggressive"
],
[
"Offshore Island",
"_aggressive"
],
[
"Raging Billows",
"_pragmatic"
],
[
"Secret Hotbed",
"_pragmatic"
],
[
"Sacrosant Cave",
"_default"
],
[
"Deep Sea Woodland",
"_default"
],
[
"Indigo Cradle",
"_SKIP_"
]
]
},
"Mizuki@Roguelike@StrategyChange_mode4": {
"text": [
"_default",
"_exit"
],
"ocrReplace": [
[
"Sunshine Coast",
"_default"
],
[
"Offshore Island",
"_default"
],
[
"Raging Billows",
"_exit"
],
[
"Secret Hotbed",
"_exit"
],
[
"Sacrosant Cave",
"_exit"
],
[
"Deep Sea Woodland",
"_exit"
],
[
"Indigo Cradle",
"_exit"
]
]
},
"Mizuki@Roguelike@NextLevel": {

View File

@@ -3636,15 +3636,68 @@
"예치금잔액최대달성"
]
},
"Phantom@Roguelike@LevelName_mode4": {
"Phantom@Roguelike@StrategyChange_mode0": {
"ocrReplace": [
[
"안개의기로",
"_aggressive"
],
[
"석양의정원",
"_aggressive"
],
[
"고향의잔.+$",
"고향의잔해"
],
[
"고향의잔해",
"_aggressive"
],
[
"악몽의시작",
"_pragmatic"
],
[
"붉은달회랑",
"_pragmatic"
],
[
"욕망의로비",
"_default"
]
]
},
"Phantom@Roguelike@StrategyChange_mode4": {
"ocrReplace": [
[
"안개의기로",
"_default"
],
[
"석양의정원",
"_default"
],
[
"고향의잔.+$",
"고향의잔해"
],
[
"고향의잔해",
"_exit"
],
[
"악몽의시작",
"_exit"
],
[
"붉은달회랑",
"_exit"
],
[
"욕망의로비",
"_exit"
]
],
"text": [
"고향의잔해"
]
},
"Phantom@Roguelike@NextLevel": {
@@ -3660,10 +3713,77 @@
"Phantom@Roguelike@StageEncounterOptionUnknown": {
"templThreshold": 0.95
},
"Mizuki@Roguelike@LevelName_mode4": {
"Mizuki@Roguelike@StrategyChange_mode0": {
"text": [
"맹렬한파도",
"짙푸른요람"
"_aggressive",
"_pragmatic",
"_default"
],
"ocrReplace": [
[
"하늘빛해안",
"_aggressive"
],
[
"연안외딴섬",
"_aggressive"
],
[
"맹렬한파도",
"_pragmatic"
],
[
"은밀한온상",
"_pragmatic"
],
[
"신성한동굴",
"_default"
],
[
"심해의숲",
"_default"
],
[
"짙푸른요람",
"_SKIP_"
]
]
},
"Mizuki@Roguelike@StrategyChange_mode4": {
"text": [
"_default",
"_exit"
],
"ocrReplace": [
[
"하늘빛해안",
"_default"
],
[
"연안외딴섬",
"_default"
],
[
"맹렬한파도",
"_exit"
],
[
"은밀한온상",
"_exit"
],
[
"신성한동굴",
"_exit"
],
[
"심해의숲",
"_exit"
],
[
"짙푸른요람",
"_exit"
]
]
},
"Mizuki@Roguelike@NextLevel": {

View File

@@ -2613,9 +2613,60 @@
"上限"
]
},
"Phantom@Roguelike@LevelName_mode4": {
"text": [
"故土殘軀"
"Phantom@Roguelike@StrategyChange_mode0": {
"ocrReplace": [
[
"迷霧歧途",
"_aggressive"
],
[
"落陽庭院",
"_aggressive"
],
[
"故土殘軀",
"_aggressive"
],
[
"噩夢之始",
"_pragmatic"
],
[
"血月長廊",
"_pragmatic"
],
[
"渴欲大廳",
"_default"
]
]
},
"Phantom@Roguelike@StrategyChange_mode4": {
"ocrReplace": [
[
"迷霧歧途",
"_default"
],
[
"落陽庭院",
"_default"
],
[
"故土殘軀",
"_exit"
],
[
"噩夢之始",
"_exit"
],
[
"血月長廊",
"_exit"
],
[
"渴欲大廳",
"_exit"
]
]
},
"Phantom@Roguelike@NextLevel": {
@@ -2636,10 +2687,68 @@
"選擇"
]
},
"Mizuki@Roguelike@LevelName_mode4": {
"text": [
"波濤略地",
"紺碧搖籃"
"Mizuki@Roguelike@StrategyChange_mode0": {
"ocrReplace": [
[
"天光海岸",
"_aggressive"
],
[
"離岸孤島",
"_aggressive"
],
[
"波濤略地",
"_pragmatic"
],
[
"隱秘溫床",
"_pragmatic"
],
[
"失塵岩洞",
"_default"
],
[
"幽海叢林",
"_default"
],
[
"紺碧搖籃",
"_SKIP_"
]
]
},
"Mizuki@Roguelike@StrategyChange_mode4": {
"ocrReplace": [
[
"天光海岸",
"_default"
],
[
"離岸孤島",
"_default"
],
[
"波濤略地",
"_exit"
],
[
"隱秘溫床",
"_exit"
],
[
"失塵岩洞",
"_exit"
],
[
"幽海叢林",
"_exit"
],
[
"紺碧搖籃",
"_exit"
]
]
},
"Mizuki@Roguelike@NextLevel": {

View File

@@ -8677,7 +8677,8 @@
160
]
},
"Roguelike@ExitThenAbandon_mode4": {
"Roguelike@ExitThenAbandon_ToHardest": {
"template": "Roguelike@ExitThenAbandon.png",
"action": "ClickSelf",
"cache": false,
"roi": [
@@ -9194,10 +9195,7 @@
"Roguelike@ClickToStartPointAfterFailed"
]
},
"Roguelike@LevelName": {
"baseTask": "Roguelike@LevelName_mode1"
},
"Roguelike@LevelName_mode0": {
"Roguelike@StrategyChange_default": {
"algorithm": "OcrDetect",
"cache": false,
"text": [
@@ -9214,43 +9212,30 @@
"Roguelike@Stages#next"
]
},
"Roguelike@LevelName_mode1": {
"algorithm": "OcrDetect",
"cache": false,
"text": [
"_SKIP_"
],
"roi": [
593,
0,
186,
129
],
"next": [
"Roguelike@NextLevel"
]
"Roguelike@StrategyChange": {
"baseTask": "Roguelike@StrategyChange_default"
},
"Roguelike@LevelName_mode4": {
"algorithm": "OcrDetect",
"cache": false,
"text": [
"_SKIP_"
],
"roi": [
593,
0,
186,
129
],
"next": [
"Roguelike@ExitThenAbandon_mode4"
]
"Roguelike@StrategyChange_mode0": {
"baseTask": "Roguelike@StrategyChange_default"
},
"Roguelike@StrategyChange_mode1": {
"baseTask": "Roguelike@StrategyChange_default"
},
"Roguelike@StrategyChange_mode4": {
"baseTask": "Roguelike@StrategyChange_default"
},
"Roguelike@Stages": {
"Doc": "base_task",
"algorithm": "JustReturn",
"next": []
},
"Roguelike@Stages_exit": {
"Doc": "烧水和直升,在进入第三层之后直接退出",
"algorithm": "JustReturn",
"next": [
"Roguelike@ExitThenAbandon_ToHardest"
]
},
"Roguelike@NextLevel": {
"algorithm": "OcrDetect",
"action": "ClickSelf",
@@ -9263,7 +9248,7 @@
144
],
"next": [
"Roguelike@LevelName",
"Roguelike@StrategyChange",
"Roguelike@Stages#next"
]
},
@@ -10385,10 +10370,10 @@
"Phantom@Roguelike@Abandon"
]
},
"Phantom@Roguelike@ExitThenAbandon_mode4": {
"template": "Roguelike@ExitThenAbandon_mode4.png",
"Phantom@Roguelike@ExitThenAbandon_ToHardest": {
"template": "Roguelike@ExitThenAbandon.png",
"next": [
"Phantom@Roguelike@ExitThenAbandon",
"Phantom@Roguelike@ExitThenAbandon_ToHardest",
"Phantom@Roguelike@Abandon"
]
},
@@ -10430,10 +10415,7 @@
"Phantom@Roguelike@LastRewardConfirm": {},
"Phantom@Roguelike@MissionFailedFlag": {},
"Phantom@Roguelike@MissionFailedFlag2": {},
"Phantom@Roguelike@LevelName": {
"baseTask": "Phantom@Roguelike@LevelName_mode1"
},
"Phantom@Roguelike@LevelName_mode0": {
"Phantom@Roguelike@StrategyChange_mode0": {
"text": [
"_aggressive",
"_pragmatic",
@@ -10466,9 +10448,36 @@
]
]
},
"Phantom@Roguelike@LevelName_mode4": {
"Phantom@Roguelike@StrategyChange_mode4": {
"text": [
"故土残躯"
"_default",
"_exit"
],
"ocrReplace": [
[
"迷雾歧途",
"_default"
],
[
"落阳庭院",
"_default"
],
[
"故土残躯",
"_exit"
],
[
"噩梦之始",
"_exit"
],
[
"血月长廊",
"_exit"
],
[
"渴欲大厅",
"_exit"
]
]
},
"Phantom@Roguelike@Stages": {
@@ -10868,10 +10877,10 @@
"Mizuki@Roguelike@DataTraceback"
]
},
"Mizuki@Roguelike@ExitThenAbandon_mode4": {
"Mizuki@Roguelike@ExitThenAbandon_ToHardest": {
"template": "Roguelike@ExitThenAbandon.png",
"next": [
"Mizuki@Roguelike@ExitThenAbandon",
"Mizuki@Roguelike@ExitThenAbandon_ToHardest",
"Mizuki@Roguelike@Abandon",
"Mizuki@Roguelike@DiceConfirmThenAbandon",
"Mizuki@Roguelike@DataTraceback"
@@ -10979,10 +10988,7 @@
},
"Mizuki@Roguelike@MissionFailedFlag": {},
"Mizuki@Roguelike@MissionFailedFlag2": {},
"Mizuki@Roguelike@LevelName": {
"baseTask": "Mizuki@Roguelike@LevelName_mode1"
},
"Mizuki@Roguelike@LevelName_mode0": {
"Mizuki@Roguelike@StrategyChange_mode0": {
"text": [
"_aggressive",
"_pragmatic",
@@ -11019,10 +11025,40 @@
]
]
},
"Mizuki@Roguelike@LevelName_mode4": {
"Mizuki@Roguelike@StrategyChange_mode4": {
"text": [
"波涛略地",
"绀碧摇篮"
"_default",
"_exit"
],
"ocrReplace": [
[
"天光海岸",
"_default"
],
[
"离岸孤岛",
"_default"
],
[
"波涛略地",
"_exit"
],
[
"隐秘温床",
"_exit"
],
[
"失尘岩洞",
"_exit"
],
[
"幽海丛林",
"_exit"
],
[
"绀碧摇篮",
"_exit"
]
]
},
"Mizuki@Roguelike@Stages": {
@@ -11465,10 +11501,10 @@
"Sami@Roguelike@Abandon"
]
},
"Sami@Roguelike@ExitThenAbandon_mode4": {
"template": "Roguelike@ExitThenAbandon_mode4.png",
"Sami@Roguelike@ExitThenAbandon_ToHardest": {
"template": "Roguelike@ExitThenAbandon.png",
"next": [
"Sami@Roguelike@ExitThenAbandon",
"Sami@Roguelike@ExitThenAbandon_ToHardest",
"Sami@Roguelike@Abandon"
]
},
@@ -11588,10 +11624,7 @@
},
"Sami@Roguelike@MissionFailedFlag": {},
"Sami@Roguelike@MissionFailedFlag2": {},
"Sami@Roguelike@LevelName": {
"baseTask": "Sami@Roguelike@LevelName_mode1"
},
"Sami@Roguelike@LevelName_mode0": {
"Sami@Roguelike@StrategyChange_mode0": {
"text": [
"_aggressive",
"_pragmatic",
@@ -11628,10 +11661,40 @@
]
]
},
"Sami@Roguelike@LevelName_mode4": {
"Sami@Roguelike@StrategyChange_mode4": {
"text": [
"昧明冻土",
"深埋迷境"
"_default",
"_exit"
],
"ocrReplace": [
[
"初霜湖泽",
"_default"
],
[
"密静林地",
"_default"
],
[
"昧明冻土",
"_exit"
],
[
"积冰岩骸",
"_exit"
],
[
"无暇花园",
"_exit"
],
[
"远见之构",
"_exit"
],
[
"深埋迷境",
"_exit"
]
]
},
"Sami@Roguelike@Stages": {

View File

@@ -53,7 +53,7 @@ namespace asst
static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete";
static inline const std::string RoguelikeRecruitmentCount = "RoguelikeRecruitmentCount";
static inline const std::string RoguelikeMode = "RoguelikeMode";
static inline const std::string RoguelikeNeedChangeDifficulty = "RoguelikeNeedChangeDifficulty";
static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty";
static inline const std::string ProcessTaskLastTimePrefix = "#LastTime#";

View File

@@ -103,14 +103,23 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
bool start_with_elite_two = params.get("start_with_elite_two", false);
status()->set_properties(Status::RoguelikeMode, std::to_string(mode));
status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0");
status()->set_properties(Status::RoguelikeDifficulty, "0");
status()->set_properties(Status::RoguelikeStartWithEliteTwo, std::to_string(start_with_elite_two));
// 设置需要ocr的层名相关逻辑在RoguelikeStrategyChangeTaskPlugin
Task.set_task_base(theme + "@Roguelike@LevelName", theme + "@Roguelike@LevelName_mode" + std::to_string(mode));
// 设置层数选点策略,相关逻辑在 RoguelikeStrategyChangeTaskPlugin
{
Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_default");
std::string strategy_task = theme + "@Roguelike@StrategyChange";
std::string strategy_task_with_mode = strategy_task + "_mode" + std::to_string(mode);
if (Task.get(strategy_task_with_mode) == nullptr) {
strategy_task_with_mode = "#none"; // 没有对应的层数选点策略,使用默认策略(避战)
Log.warn(__FUNCTION__, "No strategy for mode", mode);
}
Task.set_task_base(strategy_task, strategy_task_with_mode);
}
if (mode == 4) {
// 获得热水壶和演讲时停止肉鸽,获得其他奖励时重开
// 获得热水壶和演讲时停止肉鸽(凹直升则继续),获得其他奖励时重开
std::string last_reward_stop_or_continue =
start_with_elite_two ? "Roguelike@LastReward_default" : "Roguelike@LastReward_stop";
Task.set_task_base("Roguelike@LastReward", last_reward_stop_or_continue);
@@ -120,7 +129,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_restart");
}
else {
// 重置开局奖励next
// 重置开局奖励 next,获得任意奖励均继续
Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_default");
Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_default");
Task.set_task_base("Roguelike@LastReward3", "Roguelike@LastReward_default");

View File

@@ -36,22 +36,15 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run()
// todo:以后可以根据传入的难度值选择难度?
// 当前难度
std::string recent_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value();
std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value();
// 需要开局凹直升
std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value();
if (m_roguelike_theme != "Phantom" && mode == "4") {
if (recent_difficulty == "max") {
// 到第三层退出,选最高难度开水壶
if (difficulty == "max") {
ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficulty_Hardest" }).run();
// 重置为最低难度需要凹开局直升时保证在难度max下寻找直升干员延后到找不到精二重置
if (start_with_elite_two == "0") {
status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0");
}
}
// 其他情况下开始,选最低难度
else {
ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficulty_Easiest" }).run();
status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0");
}
ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficultyConfirm" }).run();
ProcessTask(*this, { m_roguelike_theme + "@Roguelike@StartExploreConfirm" }).run();

View File

@@ -1,5 +1,6 @@
#include "RoguelikeLastRewardTaskPlugin.h"
#include "Config/TaskData.h"
#include "Status.h"
#include "Task/ProcessTask.h"
#include "Utils/Logger.hpp"
@@ -20,11 +21,17 @@ bool asst::RoguelikeLastRewardTaskPlugin::verify(AsstMsg msg, const json::value&
if (task_view.starts_with(roguelike_name)) {
task_view.remove_prefix(roguelike_name.length());
}
if (task_view == "Roguelike@ExitThenAbandon") {
if (task_view == "Roguelike@StartExplore") {
// 标记开始行动
m_need_change_difficulty_higher = false;
return true;
return false;
}
if (task_view == "Roguelike@ExitThenAbandon_mode4") {
if (task_view == "Roguelike@ExitThenAbandon") {
// 开始行动过且没有打完三层,重开低难度
return !m_need_change_difficulty_higher;
}
if (task_view == "Roguelike@ExitThenAbandon_ToHardest") {
// 打完低难度的三层,重开高难度烧水壶
m_need_change_difficulty_higher = true;
return true;
}
@@ -38,13 +45,23 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run()
LogTraceFunction;
std::string mode = status()->get_properties(Status::RoguelikeMode).value();
std::string stages_task_name = m_roguelike_theme + "@Roguelike@Stages";
std::string strategy_task_name = stages_task_name + "_default";
if (Task.get(strategy_task_name) == nullptr) {
Log.error("Strategy task", strategy_task_name, "doesn't exist!");
}
else {
// 重置选点策略
Task.set_task_base(stages_task_name, strategy_task_name);
}
if (m_roguelike_theme != "Phantom" && mode == "4") {
if (m_need_change_difficulty_higher) {
status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "max");
status()->set_properties(Status::RoguelikeDifficulty, "max");
}
else {
status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0");
status()->set_properties(Status::RoguelikeDifficulty, "0");
}
}
return true;

View File

@@ -437,7 +437,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string&
// 是否凹直升
std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value();
// 当前肉鸽难度
std::string recent_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value();
std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value();
for (; i != SwipeTimes; ++i) {
if (need_exit()) {
@@ -461,13 +461,13 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string&
if (it != chars.cend()) {
// 需要凹直升且当前为max难度时
if (start_with_elite_two == "1" && recent_difficulty == "max") {
if (start_with_elite_two == "1" && difficulty == "max") {
if (it->elite == 2) {
m_task_ptr->set_enable(false);
}
else {
// 重置难度并放弃
status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0");
status()->set_properties(Status::RoguelikeDifficulty, "0");
ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ExitThenAbandon" })
.set_times_limit("Roguelike@Abandon", 0)
.run();

View File

@@ -23,7 +23,7 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::verify(AsstMsg msg, const json::va
if (task_view.starts_with(roguelike_name)) {
task_view.remove_prefix(roguelike_name.length());
}
if (task_view == "Roguelike@LevelName") {
if (task_view == "Roguelike@StrategyChange") {
return true;
}
else {
@@ -39,7 +39,7 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::_run()
std::string mode = status()->get_properties(Status::RoguelikeMode).value();
// TODO: 这段识别有点冗余,要是 plugin 能获取识别结果就好了
std::string task_name = theme + "@Roguelike@LevelName";
std::string task_name = theme + "@Roguelike@StrategyChange";
OCRer analyzer(ctrler()->get_image());
analyzer.set_task_info(task_name);
if (!analyzer.analyze()) {