diff --git a/resource/config.json b/resource/config.json index 2f5b3c19b3..7b7664dfe9 100644 --- a/resource/config.json +++ b/resource/config.json @@ -32,6 +32,7 @@ "penguinReport": { "Doc": "企鹅物流汇报: https://penguin-stats.cn/", "url": "https://penguin-stats.io/PenguinStats/api/v2/report", + "url_Doc": "企鹅的汇报用的同一个url,就不区分recruit和drop了", "timeout": 10000, "headers": { "Content-Type": "application/json" @@ -39,7 +40,8 @@ }, "yituliuReport": { "Doc": "一图流汇报:https://yituliu.site/maarecruitdata", - "url": "https://backend.yituliu.site/maa/upload/recruit", + "recruitUrl": "https://backend.yituliu.site/maa/upload/recruit", + "dropUrl": "https://developer.yituliu.site/stage/drop/upload", "timeout": 5000, "headers": { "Content-Type": "application/json" diff --git a/src/MaaCore/Config/GeneralConfig.cpp b/src/MaaCore/Config/GeneralConfig.cpp index 4a1018db8b..01b9478166 100644 --- a/src/MaaCore/Config/GeneralConfig.cpp +++ b/src/MaaCore/Config/GeneralConfig.cpp @@ -42,7 +42,8 @@ bool asst::GeneralConfig::parse(const json::value& json) } } if (auto yituliu_opt = options_json.find("yituliuReport")) { - m_options.yituliu_report.url = yituliu_opt->get("url", std::string()); + m_options.yituliu_report.drop_url = yituliu_opt->get("dropUrl", std::string()); + m_options.yituliu_report.recruit_url = yituliu_opt->get("recruitUrl", std::string()); m_options.yituliu_report.timeout = yituliu_opt->get("timeout", 5000); if (auto headers_opt = yituliu_opt->find("headers")) { m_options.yituliu_report.headers.clear(); diff --git a/src/MaaCore/Config/GeneralConfig.h b/src/MaaCore/Config/GeneralConfig.h index dbfab61e03..3a30239546 100644 --- a/src/MaaCore/Config/GeneralConfig.h +++ b/src/MaaCore/Config/GeneralConfig.h @@ -14,6 +14,8 @@ namespace asst struct RequestInfo { std::string url; // 上传地址 + std::string drop_url; + std::string recruit_url; std::unordered_map headers; // 请求头 int timeout = 0; // 超时时间 }; diff --git a/src/MaaCore/Task/Fight/SideStoryReopenTask.cpp b/src/MaaCore/Task/Fight/SideStoryReopenTask.cpp index 36838a0c62..b0739049f4 100644 --- a/src/MaaCore/Task/Fight/SideStoryReopenTask.cpp +++ b/src/MaaCore/Task/Fight/SideStoryReopenTask.cpp @@ -33,9 +33,9 @@ bool asst::SideStoryReopenTask::set_server(std::string server) m_server = std::move(server); return true; } -bool asst::SideStoryReopenTask::set_enable_penguid(bool enable) +bool asst::SideStoryReopenTask::set_enable_penguin(bool enable) { - m_enable_penguid = enable; + m_enable_penguin = enable; return true; } bool asst::SideStoryReopenTask::set_penguin_id(std::string id) @@ -43,6 +43,12 @@ bool asst::SideStoryReopenTask::set_penguin_id(std::string id) m_penguin_id = std::move(id); return true; } +bool asst::SideStoryReopenTask::set_enable_yituliu(bool enable) +{ + // 暂时没用上,其他地方加了这里也加一个 + m_enable_yituliu = enable; + return true; +} bool asst::SideStoryReopenTask::_run() { LogTraceFunction; @@ -190,7 +196,8 @@ bool asst::SideStoryReopenTask::fight(bool use_medicine, bool use_stone) auto plugin = fight_task.register_plugin(); plugin->set_drop_stats(std::move(m_drop_stats)); - plugin->set_enable_penguid(m_enable_penguid); + plugin->set_enable_penguin(m_enable_penguin); + plugin->set_enable_yituliu(m_enable_yituliu); plugin->set_server(m_server); plugin->set_penguin_id(m_penguin_id); auto result = fight_task.run(); diff --git a/src/MaaCore/Task/Fight/SideStoryReopenTask.h b/src/MaaCore/Task/Fight/SideStoryReopenTask.h index 65e37aee5e..07f3a8408b 100644 --- a/src/MaaCore/Task/Fight/SideStoryReopenTask.h +++ b/src/MaaCore/Task/Fight/SideStoryReopenTask.h @@ -15,10 +15,12 @@ namespace asst void set_expiring_medicine(int expiring_medicine); void set_stone(int stone); - bool set_enable_penguid(bool enable); + bool set_enable_penguin(bool enable); bool set_penguin_id(std::string id); bool set_server(std::string server); + bool set_enable_yituliu(bool enable); + private: virtual bool _run() override; // 判断如果处于普通关页面,直接短路导航 @@ -42,9 +44,11 @@ namespace asst bool m_sanity_not_enough = false; std::unordered_map m_drop_stats; // 企鹅物流上报用 - bool m_enable_penguid = false; + bool m_enable_penguin = false; std::string m_penguin_id; std::string m_server = "CN"; + // 一图流上报用 + bool m_enable_yituliu = false; }; } diff --git a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp index 7c50dc70f8..6e4a5b2980 100644 --- a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp @@ -49,9 +49,9 @@ void asst::StageDropsTaskPlugin::set_task_ptr(AbstractTask* ptr) m_cast_ptr = dynamic_cast(ptr); } -bool asst::StageDropsTaskPlugin::set_enable_penguid(bool enable) +bool asst::StageDropsTaskPlugin::set_enable_penguin(bool enable) { - m_enable_penguid = enable; + m_enable_penguin = enable; return true; } @@ -61,6 +61,12 @@ bool asst::StageDropsTaskPlugin::set_penguin_id(std::string id) return true; } +bool asst::StageDropsTaskPlugin::set_enable_yituliu(bool enable) +{ + m_enable_yituliu = enable; + return true; +} + bool asst::StageDropsTaskPlugin::set_server(std::string server) { m_server = std::move(server); @@ -94,11 +100,28 @@ bool asst::StageDropsTaskPlugin::_run() stop_task(); } - if (m_enable_penguid && !m_is_annihilation) { + if (m_is_annihilation) { + Log.info(__FUNCTION__, "Annihilation is not supported by PenguinStats"); + Log.info(__FUNCTION__, "Annihilation is not supported by Yituliu"); + return true; + } + + if (m_enable_penguin) { if (!upload_to_penguin()) { + Log.error(__FUNCTION__, "upload_to_penguin failed"); save_img(utils::path("debug") / utils::path("drops")); } } + else { + Log.info(__FUNCTION__, "PenguinStats is disabled"); + } + + if (m_enable_yituliu) { + upload_to_yituliu(); + } + else { + Log.info(__FUNCTION__, "Yituliu is disabled"); + } return true; } @@ -259,7 +282,7 @@ void asst::StageDropsTaskPlugin::set_start_button_delay() m_cast_ptr->set_post_delay("StartButton2WaitTime", static_cast(delay)); } -bool asst::StageDropsTaskPlugin::upload_to_penguin() +bool asst::StageDropsTaskPlugin::upload_to_server(const std::string& subtask, ReportType report_type) { LogTraceFunction; @@ -268,9 +291,8 @@ bool asst::StageDropsTaskPlugin::upload_to_penguin() } json::value cb_info = basic_info(); - cb_info["subtask"] = "ReportToPenguinStats"; + cb_info["subtask"] = subtask; - // Doc: https://developer.penguin-stats_vec.io/public-api/api-v2-instruction/report-api std::string stage_id = m_cur_info_json.get("stage", "stageId", std::string()); if (stage_id.empty()) { cb_info["why"] = "UnknownStage"; @@ -330,18 +352,37 @@ bool asst::StageDropsTaskPlugin::upload_to_penguin() extra_headers.insert({ "authorization", "PenguinID " + m_penguin_id }); } - if (!m_report_penguin_task_ptr) { - m_report_penguin_task_ptr = std::make_shared(report_penguin_callback, this); + std::shared_ptr report_task_ptr; + if (report_type == ReportType::PenguinStats) { + report_task_ptr = m_report_penguin_task_ptr; + if (!m_report_penguin_task_ptr) { + report_task_ptr = std::make_shared(report_penguin_callback, this); + } + } + else if (report_type == ReportType::YituliuBigDataStageDrops) { + report_task_ptr = m_report_yituliu_task_ptr; + if (!m_report_yituliu_task_ptr) { + report_task_ptr = std::make_shared(report_yituliu_callback, this); + } } - m_report_penguin_task_ptr->set_report_type(ReportType::PenguinStats) + report_task_ptr->set_report_type(report_type) .set_body(body.to_string()) .set_extra_headers(extra_headers) .set_retry_times(5) .run(); + return true; } +bool asst::StageDropsTaskPlugin::upload_to_penguin() +{ + LogTraceFunction; + + const bool result = upload_to_server("ReportToPenguinStats", ReportType::PenguinStats); + return result; +} + void asst::StageDropsTaskPlugin::report_penguin_callback(AsstMsg msg, const json::value& detail, AbstractTask* task_ptr) { LogTraceFunction; @@ -359,6 +400,25 @@ void asst::StageDropsTaskPlugin::report_penguin_callback(AsstMsg msg, const json p_this->callback(msg, detail); } +void asst::StageDropsTaskPlugin::upload_to_yituliu() +{ + LogTraceFunction; + + upload_to_server("ReportToYituliu", ReportType::YituliuBigDataStageDrops); +} + +void asst::StageDropsTaskPlugin::report_yituliu_callback(AsstMsg msg, const json::value& detail, AbstractTask* task_ptr) +{ + LogTraceFunction; + + auto p_this = dynamic_cast(task_ptr); + if (!p_this) { + return; + } + + p_this->callback(msg, detail); +} + bool asst::StageDropsTaskPlugin::check_stage_valid() { LogTraceFunction; diff --git a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.h b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.h index bc889e93ba..560bb5f6f9 100644 --- a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.h +++ b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.h @@ -8,6 +8,7 @@ #include "Config/Miscellaneous/StageDropsConfig.h" #include "Status.h" +#include "Task/ReportDataTask.h" namespace asst { @@ -23,11 +24,13 @@ namespace asst virtual bool verify(AsstMsg msg, const json::value& details) const override; virtual void set_task_ptr(AbstractTask* ptr) override; - bool set_enable_penguid(bool enable); + bool set_enable_penguin(bool enable); bool set_penguin_id(std::string id); bool set_server(std::string server); bool set_specify_quantity(std::unordered_map quantity); + bool set_enable_yituliu(bool enable); + private: virtual bool _run() override; @@ -37,8 +40,11 @@ namespace asst bool check_stage_valid(); bool check_specify_quantity() const; void stop_task(); + bool upload_to_server(const std::string& subtask, ReportType report_type); bool upload_to_penguin(); // 返回值表示该次掉落是否通过企鹅检查 + void upload_to_yituliu(); static void report_penguin_callback(AsstMsg msg, const json::value& detail, AbstractTask* task_ptr); + static void report_yituliu_callback(AsstMsg msg, const json::value& detail, AbstractTask* task_ptr); static inline constexpr int64_t RecognitionTimeOffset = 20; static inline const std::string LastStartTimeKey = Status::ProcessTaskLastTimePrefix + "Fight@StartButton2"; @@ -57,8 +63,10 @@ namespace asst bool m_start_button_delay_is_set = false; ProcessTask* m_cast_ptr = nullptr; std::shared_ptr m_report_penguin_task_ptr = nullptr; - bool m_enable_penguid = false; + std::shared_ptr m_report_yituliu_task_ptr = nullptr; + bool m_enable_penguin = false; std::string m_penguin_id; + bool m_enable_yituliu = false; std::string m_server = "CN"; std::unordered_map m_specify_quantity; }; diff --git a/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.cpp b/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.cpp index c1cee5c479..d489652f4c 100644 --- a/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.cpp +++ b/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.cpp @@ -124,7 +124,7 @@ void asst::StageQueueMissionCompletedPlugin::drop_info_callback(std::string stag callback(AsstMsg::SubTaskExtraInfo, info); m_cur_info_json = std::move(details); - if (m_enable_penguid) { + if (m_enable_penguin) { upload_to_penguin(stage_code, analyzer.get_stars()); } } @@ -133,9 +133,9 @@ bool asst::StageQueueMissionCompletedPlugin::set_server(std::string server) m_server = std::move(server); return true; } -bool asst::StageQueueMissionCompletedPlugin::set_enable_penguid(bool enable) +bool asst::StageQueueMissionCompletedPlugin::set_enable_penguin(bool enable) { - m_enable_penguid = enable; + m_enable_penguin = enable; return true; } bool asst::StageQueueMissionCompletedPlugin::set_penguin_id(std::string id) @@ -143,6 +143,12 @@ bool asst::StageQueueMissionCompletedPlugin::set_penguin_id(std::string id) m_penguin_id = std::move(id); return true; } +bool asst::StageQueueMissionCompletedPlugin::set_enable_yituliu(bool enable) +{ + // 暂时没用上,其他地方加了这里也加一个 + m_enable_yituliu = enable; + return true; +} void asst::StageQueueMissionCompletedPlugin::upload_to_penguin(std::string stage_code, int stars) { LogTraceFunction; diff --git a/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.h b/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.h index d0ea470992..7e56e1706f 100644 --- a/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.h +++ b/src/MaaCore/Task/Fight/StageQueueMissionCompletedPlugin.h @@ -22,10 +22,12 @@ namespace asst void set_drop_stats(std::unordered_map m_drop_stats); std::unordered_map get_drop_stats(); - bool set_enable_penguid(bool enable); + bool set_enable_penguin(bool enable); bool set_penguin_id(std::string id); bool set_server(std::string server); + bool set_enable_yituliu(bool enable); + private: virtual bool _run() override; @@ -38,9 +40,11 @@ namespace asst std::unordered_map m_drop_stats; json::value m_cur_info_json; // 企鹅物流上报用 - bool m_enable_penguid = false; + bool m_enable_penguin = false; std::string m_penguin_id; std::string m_server = "CN"; std::shared_ptr m_report_penguin_task_ptr = nullptr; + // 一图流上报用 + bool m_enable_yituliu = false; }; } diff --git a/src/MaaCore/Task/Interface/FightTask.cpp b/src/MaaCore/Task/Interface/FightTask.cpp index 3ec9138376..c6e44944bb 100644 --- a/src/MaaCore/Task/Interface/FightTask.cpp +++ b/src/MaaCore/Task/Interface/FightTask.cpp @@ -69,7 +69,8 @@ bool asst::FightTask::set_params(const json::value& params) const int expiring_medicine = params.get("expiring_medicine", 0); const int stone = params.get("stone", 0); const int times = params.get("times", INT_MAX); - bool enable_penguid = params.get("report_to_penguin", false); + bool enable_penguin = params.get("report_to_penguin", false); + bool enable_yituliu = params.get("report_to_yituliu", false); std::string penguin_id = params.get("penguin_id", ""); std::string server = params.get("server", "CN"); std::string client_type = params.get("client_type", std::string()); @@ -124,14 +125,16 @@ bool asst::FightTask::set_params(const json::value& params) m_medicine_plugin->set_use_expiring(expiring_medicine != 0); m_medicine_plugin->set_dr_grandet(is_dr_grandet); m_dr_grandet_task_plugin_ptr->set_enable(is_dr_grandet); - m_stage_drops_plugin_ptr->set_enable_penguid(enable_penguid); + m_stage_drops_plugin_ptr->set_enable_penguin(enable_penguin); m_stage_drops_plugin_ptr->set_penguin_id(penguin_id); + m_stage_drops_plugin_ptr->set_enable_yituliu(enable_yituliu); m_sidestory_reopen_task_ptr->set_medicine(medicine); m_sidestory_reopen_task_ptr->set_expiring_medicine(expiring_medicine); m_sidestory_reopen_task_ptr->set_stone(stone); - m_sidestory_reopen_task_ptr->set_enable_penguid(enable_penguid); + m_sidestory_reopen_task_ptr->set_enable_penguin(enable_penguin); m_sidestory_reopen_task_ptr->set_penguin_id(std::move(penguin_id)); + m_sidestory_reopen_task_ptr->set_enable_yituliu(enable_yituliu); m_sidestory_reopen_task_ptr->set_server(server); return true; diff --git a/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp b/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp index 7562fab4ed..b108753711 100644 --- a/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp @@ -787,7 +787,7 @@ void asst::AutoRecruitTask::upload_to_yituliu(const json::value& details) m_report_yituliu_task_ptr = std::make_shared(report_yituliu_callback, this); } - m_report_yituliu_task_ptr->set_report_type(ReportType::YituliuBigData) + m_report_yituliu_task_ptr->set_report_type(ReportType::YituliuBigDataAutoRecruit) .set_body(body.to_string()) .set_retry_times(0) .run(); diff --git a/src/MaaCore/Task/ReportDataTask.cpp b/src/MaaCore/Task/ReportDataTask.cpp index d1527d4766..70c841b20a 100644 --- a/src/MaaCore/Task/ReportDataTask.cpp +++ b/src/MaaCore/Task/ReportDataTask.cpp @@ -45,8 +45,9 @@ bool asst::ReportDataTask::_run() case ReportType::PenguinStats: report_func = std::bind(&ReportDataTask::report_to_penguin, this); break; - case ReportType::YituliuBigData: - report_func = std::bind(&ReportDataTask::report_to_yituliu, this); + case ReportType::YituliuBigDataAutoRecruit: + case ReportType::YituliuBigDataStageDrops: + report_func = std::bind(&ReportDataTask::report_to_yituliu, this, m_report_type); break; default: return false; @@ -149,13 +150,23 @@ void asst::ReportDataTask::report_to_penguin() } } -void asst::ReportDataTask::report_to_yituliu() +void asst::ReportDataTask::report_to_yituliu(ReportType reportType) { LogTraceFunction; - constexpr std::string_view YituliuSubtaskName = "ReportToYituliu"; - const std::string& url = Config.get_options().yituliu_report.url; - int timeout = Config.get_options().yituliu_report.timeout; + constexpr std::string_view yituliu_subtask_name = "ReportToYituliu"; + std::string url; + switch (reportType) { + case ReportType::YituliuBigDataAutoRecruit: + url = Config.get_options().yituliu_report.recruit_url; + break; + case ReportType::YituliuBigDataStageDrops: + url = Config.get_options().yituliu_report.drop_url; + break; + default: + return; + } + const int timeout = Config.get_options().yituliu_report.timeout; cpr::Header headers = {}; for (const auto& [header_key, value] : Config.get_options().yituliu_report.headers) { @@ -166,7 +177,7 @@ void asst::ReportDataTask::report_to_yituliu() headers.emplace(field); } - report(YituliuSubtaskName, url, headers, timeout); + report(yituliu_subtask_name, url, headers, timeout); } cpr::Response asst::ReportDataTask::report(std::string_view subtask, const std::string& url, const cpr::Header& headers, diff --git a/src/MaaCore/Task/ReportDataTask.h b/src/MaaCore/Task/ReportDataTask.h index 6d49e55887..4d564bcade 100644 --- a/src/MaaCore/Task/ReportDataTask.h +++ b/src/MaaCore/Task/ReportDataTask.h @@ -14,7 +14,8 @@ namespace asst { Invalid, PenguinStats, - YituliuBigData, + YituliuBigDataAutoRecruit, + YituliuBigDataStageDrops, }; using TaskCallback = std::function; @@ -40,7 +41,7 @@ namespace asst virtual void callback(AsstMsg msg, const json::value& detail) override; void report_to_penguin(); - void report_to_yituliu(); + void report_to_yituliu(ReportType reportType); cpr::Response report( std::string_view subtask, const std::string& url, const cpr::Header& headers, const int timeout, HttpResponsePred success_cond = [](const cpr::Response& response) -> bool { diff --git a/src/MaaWpfGui/Constants/ConfigurationKeys.cs b/src/MaaWpfGui/Constants/ConfigurationKeys.cs index f69d4dd777..bb1962da62 100644 --- a/src/MaaWpfGui/Constants/ConfigurationKeys.cs +++ b/src/MaaWpfGui/Constants/ConfigurationKeys.cs @@ -157,6 +157,9 @@ namespace MaaWpfGui.Constants public const string PenguinId = "Penguin.Id"; public const string IsDrGrandet = "Penguin.IsDrGrandet"; + public const string EnablePenguin = "Penguin.EnablePenguin"; + + public const string EnableYituliu = "Yituliu.EnableYituliu"; public const string BluestacksConfigPath = "Bluestacks.Config.Path"; public const string BluestacksConfigKeyword = "Bluestacks.Config.Keyword"; diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 383bd32239..a5cd91e73f 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -1541,7 +1541,7 @@ namespace MaaWpfGui.Main private readonly Dictionary _latestTaskId = new Dictionary(); private static JObject SerializeFightTaskParams(string stage, int maxMedicine, int maxStone, int maxTimes, - string dropsItemId, int dropsItemQuantity, bool reportToPenguin = true) + string dropsItemId, int dropsItemQuantity) { var taskParams = new JObject { @@ -1549,7 +1549,8 @@ namespace MaaWpfGui.Main ["medicine"] = maxMedicine, ["stone"] = maxStone, ["times"] = maxTimes, - ["report_to_penguin"] = reportToPenguin, + ["report_to_penguin"] = Instances.SettingsViewModel.EnablePenguin, + ["report_to_yituliu"] = Instances.SettingsViewModel.EnableYituliu, }; if (dropsItemQuantity != 0 && !string.IsNullOrWhiteSpace(dropsItemId)) { @@ -1753,8 +1754,8 @@ namespace MaaWpfGui.Main }; } - taskParams["report_to_penguin"] = true; - taskParams["report_to_yituliu"] = true; + taskParams["report_to_penguin"] = Instances.SettingsViewModel.EnablePenguin; + taskParams["report_to_yituliu"] = Instances.SettingsViewModel.EnableYituliu; taskParams["penguin_id"] = Instances.SettingsViewModel.PenguinId; taskParams["server"] = Instances.SettingsViewModel.ServerType; @@ -1952,8 +1953,8 @@ namespace MaaWpfGui.Main ["set_time"] = setTime, ["expedite"] = false, ["expedite_times"] = 0, - ["report_to_penguin"] = true, - ["report_to_yituliu"] = true, + ["report_to_penguin"] = false, + ["report_to_yituliu"] = false, }; int recruitmentTime; if (Instances.RecognizerViewModel.IsLevel3UseShortTime) diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 4f7a9bdff9..47a68122d2 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -253,6 +253,8 @@ Enter 2nd floor after investing Refresh Rogue Trader with Dice Penguin Report ID (Number part only) + Report Penguin + Report Yituliu Dr. Grandet Mode Wait on the sanity confirmation screen until the current sanity recovers to 1 point, then confirm immediately. Credit shopping @@ -442,7 +444,7 @@ Other client types are not supported For video recognition, please open the 「Copilot」 tab and drag the strategy video into it. The video aspect ratio needs to be 16:9 without interference factors such as black borders, emulator borders, special shapes and screen corrections. - + Gacha Gacha Once Gacha Ten Times @@ -468,7 +470,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla REAL GACHA! Got it Don't show again - + Identifying…… Identification completed diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index f5ec4b769e..160b233b3e 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -253,6 +253,8 @@ 投資後に階層2へ ダイスで品揃えを更新する Penguin-StatsのレポートのID(デジタル部分のみ) + Penguin-Statsの報告 + Yituliuの報告 Dr.グランデモード 理性の回復画面で、現在の待機中の回復が完了するまで待ってから、理性剤などを使用します。 FP交換 diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index fe2e00f49f..adf44a3cd1 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -252,7 +252,9 @@ 오리지늄각뿔 투자 투자 후 2 층 진입 상점 새로고침(指路鳞) - 펭귄 물류 보고 ID (숫자만) + Penguin-Stats 보고 ID (숫자만) + Penguin-Stats 신고 + Yituliu 신고 그랑데 영감 모드 회복제나 순오리지늄 사용 시 이성이 자연 회복될 때까지 기다렸다가 회복되는 즉시 사용합니다. 크레딧 구매 @@ -442,7 +444,7 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산) “자동 지휘” 페이지에서 영상 파일을 드래그하여 시작하세요. 동영상의 해상도는 16:9여야 하며, 검은색 테두리, 에뮬레이터 테두리, 특수한 모양의 화면 보정 등의 방해 요소가 없어야 합니다. - + 헤드헌팅 1회 진행 10회 진행 @@ -468,7 +470,7 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산) 실제 뽑기입니다 확인 다시 보지 않기 - + 식별 중…… 식별 완료 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 876546db2b..ef712bdca4 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -253,6 +253,8 @@ 投资后进入第二层 刷新商店(指路鳞) 企鹅物流汇报ID(仅数字部分) + 上报企鹅物流 + 上报一图流 博朗台模式 在恢复理智确认界面等待,直到当前的 1 点理智恢复完成再立即确认。 信用交易所自动购物 @@ -442,7 +444,7 @@ 请打开「自动战斗」页,将攻略视频文件拖入后开始即可。 需要视频分辨率为 16:9,且无黑边、模拟器边框、异形屏矫正等干扰因素。 - + 牛牛抽卡 寻访一次 寻访十次 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index c8f7660675..58d27739bc 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -253,6 +253,8 @@ 投資後進入第二層 刷新商店(指路鱗) 企鵝物流匯報 ID(僅數字部分) + 上報企鵝物流 + 上報一圖流 博朗台模式 在恢復理智確認界面等待,直到當前的 1 點理智恢復完成再立即確認。 信用購物 @@ -468,7 +470,7 @@ 真正的抽卡 知道了 下次不再提示 - + 正在辨識…… 辨識完成 diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index a05bf8705c..59a7cd0011 100644 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -2303,6 +2303,36 @@ namespace MaaWpfGui.ViewModels.UI } } + private bool _enablePenguin = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.EnablePenguin, bool.TrueString)); + + /// + /// Gets or sets a value indicating whether to enable penguin upload. + /// + public bool EnablePenguin + { + get => _enablePenguin; + set + { + SetAndNotify(ref _enablePenguin, value); + ConfigurationHelper.SetValue(ConfigurationKeys.EnablePenguin, value.ToString()); + } + } + + private bool _enableYituliu = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.EnableYituliu, bool.TrueString)); + + /// + /// Gets or sets a value indicating whether to enable yituliu upload. + /// + public bool EnableYituliu + { + get => _enableYituliu; + set + { + SetAndNotify(ref _enableYituliu, value); + ConfigurationHelper.SetValue(ConfigurationKeys.EnableYituliu, value.ToString()); + } + } + private bool _isDrGrandet = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.IsDrGrandet, bool.FalseString)); /// diff --git a/src/MaaWpfGui/Views/UserControl/FightSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/FightSettingsUserControl.xaml index a3133857be..bc0f8ab6eb 100644 --- a/src/MaaWpfGui/Views/UserControl/FightSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/FightSettingsUserControl.xaml @@ -148,7 +148,7 @@ - + - + - + + + TextWrapping="Wrap" + Visibility="{c:Binding EnablePenguin}" /> + Text="{Binding PenguinId}" + Visibility="{c:Binding EnablePenguin}" /> +