rft: 肉鸽callback中Int类型限定

This commit is contained in:
status102
2025-06-23 23:00:07 +08:00
parent 5549177320
commit c5cde83b77
2 changed files with 28 additions and 29 deletions

View File

@@ -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;

View File

@@ -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 ? "✓" : "✗",