mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-18 10:10:45 +08:00
rft: 肉鸽callback中Int类型限定
This commit is contained in:
@@ -29,6 +29,7 @@ bool asst::RoguelikeSettlementTaskPlugin::verify(AsstMsg msg, const json::value&
|
||||
|
||||
bool asst::RoguelikeSettlementTaskPlugin::_run()
|
||||
{
|
||||
LogTraceFunction;
|
||||
const auto& task = Task.get("RoguelikeSettlementConfirm");
|
||||
auto json_msg = basic_info_with_what("RoguelikeSettlement");
|
||||
json_msg["details"]["game_pass"] = m_game_pass;
|
||||
@@ -60,21 +61,21 @@ bool asst::RoguelikeSettlementTaskPlugin::_run()
|
||||
|
||||
bool asst::RoguelikeSettlementTaskPlugin::get_settlement_info(json::value& info, const cv::Mat& image)
|
||||
{
|
||||
auto append_data = [&](const std::string& task_name, const std::string& ocr_result) {
|
||||
const auto& number_replace = Task.get<OcrTaskInfo>("NumberOcrReplace")->replace_map;
|
||||
const auto& append_data = [&](std::string task_name, const std::string& ocr_result) {
|
||||
int num = -1;
|
||||
if (!utils::chars_to_number(ocr_result, num)) {
|
||||
Log.error(__FUNCTION__, "convert str to int failed, task:", task_name, ", string:", ocr_result);
|
||||
return;
|
||||
}
|
||||
|
||||
auto tag = task_name.substr(task_name.find("-") + 1);
|
||||
utils::tolowers(tag);
|
||||
info["details"][tag] = num;
|
||||
utils::tolowers(task_name);
|
||||
info["details"][task_name] = num;
|
||||
};
|
||||
|
||||
auto analyze_battle_data = [&](const std::string& task_name) {
|
||||
RegionOCRer ocr(image);
|
||||
ocr.set_task_info(task_name);
|
||||
ocr.set_task_info("RoguelikeSettlementOcr-" + task_name);
|
||||
ocr.set_bin_threshold(0, 255);
|
||||
if (!ocr.analyze()) {
|
||||
Log.error(__FUNCTION__, "analyze battle data failed, task:", task_name);
|
||||
@@ -83,42 +84,41 @@ bool asst::RoguelikeSettlementTaskPlugin::get_settlement_info(json::value& info,
|
||||
append_data(task_name, ocr.get_result().text);
|
||||
};
|
||||
|
||||
auto analyze_text_data = [&](const std::string& task_name) {
|
||||
auto analyze_text_data = [&](const std::string& task_name, bool is_number) {
|
||||
RegionOCRer ocr(image);
|
||||
ocr.set_task_info(m_config->get_theme() + "@" + task_name);
|
||||
ocr.set_task_info(m_config->get_theme() + "@RoguelikeSettlementOcr-" + task_name);
|
||||
ocr.set_bin_threshold(50, 255);
|
||||
const auto& number_replace = Task.get<OcrTaskInfo>("NumberOcrReplace")->replace_map;
|
||||
auto task_replace = Task.get<OcrTaskInfo>(task_name)->replace_map;
|
||||
|
||||
auto merge_map = std::vector(number_replace.begin(), number_replace.end());
|
||||
const auto& task_replace = Task.get<OcrTaskInfo>("RoguelikeSettlementOcr-" + task_name)->replace_map;
|
||||
auto merge_map = number_replace;
|
||||
ranges::copy(task_replace, std::back_inserter(merge_map));
|
||||
ocr.set_replace(merge_map);
|
||||
if (!ocr.analyze()) {
|
||||
Log.error(__FUNCTION__, "analyze battle data failed, task:", task_name);
|
||||
return;
|
||||
}
|
||||
auto tag = task_name.substr(task_name.find("-") + 1);
|
||||
|
||||
if (is_number) {
|
||||
append_data(task_name, ocr.get_result().text);
|
||||
}
|
||||
else {
|
||||
std::string tag = task_name;
|
||||
utils::tolowers(tag);
|
||||
info["details"][tag] = ocr.get_result().text;
|
||||
}
|
||||
};
|
||||
|
||||
static const auto battle_task_name =
|
||||
std::vector<std::string> { "RoguelikeSettlementOcr-Floor", "RoguelikeSettlementOcr-Step",
|
||||
"RoguelikeSettlementOcr-Combat", "RoguelikeSettlementOcr-Recruit",
|
||||
"RoguelikeSettlementOcr-Collection", "RoguelikeSettlementOcr-BOSS",
|
||||
"RoguelikeSettlementOcr-Emergency" };
|
||||
static const auto text_task_name = std::vector<std::string> { "RoguelikeSettlementOcr-Difficulty",
|
||||
"RoguelikeSettlementOcr-Score",
|
||||
"RoguelikeSettlementOcr-Exp",
|
||||
"RoguelikeSettlementOcr-Skill" };
|
||||
static const auto& battle_tasks =
|
||||
std::vector<std::string> { "Floor", "Step", "Combat", "Recruit", "Collection", "BOSS", "Emergency" };
|
||||
static const auto& text_tasks = std::vector<std::pair<std::string, bool>> { { "Difficulty", true },
|
||||
{ "Score", true },
|
||||
{ "Exp", false },
|
||||
{ "Skill", false } };
|
||||
|
||||
ranges::for_each(battle_task_name, analyze_battle_data);
|
||||
ranges::for_each(battle_tasks, analyze_battle_data);
|
||||
|
||||
if (m_config->get_theme() == RoguelikeTheme::Phantom) {
|
||||
ranges::for_each(text_task_name | views::take(3), analyze_text_data);
|
||||
}
|
||||
else {
|
||||
ranges::for_each(text_task_name, analyze_text_data);
|
||||
using Theme = RoguelikeTheme;
|
||||
for (const auto& [task, is_number] : text_tasks | views::take(m_config->get_theme() == Theme::Phantom ? 3 : 4)) {
|
||||
analyze_text_data(task, is_number);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -921,8 +921,7 @@ public class RoguelikeSettingsUserControlModel : TaskViewModel
|
||||
{// 肉鸽结算
|
||||
var report = subTaskDetails;
|
||||
var pass = (bool)report!["game_pass"]!;
|
||||
var difficulty = int.TryParse((string)report["difficulty"]!, out var result) ? result : -1;
|
||||
// var difficulty = (int)(report["difficulty"] ?? -1);
|
||||
var difficulty = report["difficulty"]?.ToObject<int>() ?? -1;
|
||||
var roguelikeInfo = string.Format(
|
||||
LocalizationHelper.GetString("RoguelikeSettlement"),
|
||||
pass ? "✓" : "✗",
|
||||
|
||||
Reference in New Issue
Block a user