From 1f3d5cba1f472379bbadeab27d73c2a6a3d0f399 Mon Sep 17 00:00:00 2001 From: 0O0o0oOoO00 <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:08:13 +0800 Subject: [PATCH] add: no damage crack --- blcrack/cracker/cracker.cpp | 31 ++++++++++++++++++++++++++++++- blcrack/cracker/cracker.hpp | 4 ++++ blcrack/cracker/server.cpp | 22 ++++++++++++++++++++++ blcrack/http/cracker.http | 6 ++++++ 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/blcrack/cracker/cracker.cpp b/blcrack/cracker/cracker.cpp index 4dbdce5d0..80652dab7 100644 --- a/blcrack/cracker/cracker.cpp +++ b/blcrack/cracker/cracker.cpp @@ -227,6 +227,15 @@ void Cracker::disable_all() { disable_monster_kill_self(); disable_skip_battle_celebrate(); disable_better_global_speedup(); + disable_no_damage(); +} + +void Cracker::enable_no_damage() { + ENABLE(NO_DAMAGE); +} + +void Cracker::disable_no_damage() { + DISABLE(NO_DAMAGE); } void Cracker::enable_better_global_speedup() { @@ -623,7 +632,27 @@ void Cracker::hook_all_lua_functions() { } } - Lua::Table ret = m_original.FinishStageCommand_GeneralPackage(args); + Lua::Table ret; + if (IS_ENABLED(NO_DAMAGE)) { + Lua::Table battle_into = args[0]; + Lua::Table battle_statistics = battle_into["statistics"]; + Lua::Table battle_ship_info = args[1]; + for(int i = 1; i <= battle_ship_info.size(); ++i) { + double ship_id = battle_ship_info[i]["id"]; + Lua::Table item = battle_statistics[ship_id]; + Utils::Lua::print_table_fields_type(item); + item["output"] = 0.0; + item["damage"] = 0.0; + item["maxDamageOnce"] = 0.0; + item["kill_count"] = 0.0; + } + + std::vector new_args(args.begin(), args.end()); + new_args[0] = sol::make_object(L, battle_into); + ret = m_original.FinishStageCommand_GeneralPackage(L, sol::as_args(new_args)); + } else { + ret = m_original.FinishStageCommand_GeneralPackage(L, args); + } double speedup_rate; if (IS_ENABLED(GLOBAL_SPEEDUP)) { diff --git a/blcrack/cracker/cracker.hpp b/blcrack/cracker/cracker.hpp index dc58294f8..73df148e2 100644 --- a/blcrack/cracker/cracker.hpp +++ b/blcrack/cracker/cracker.hpp @@ -114,6 +114,9 @@ public: void disable_all(); + void enable_no_damage(); + void disable_no_damage(); + void enable_better_global_speedup(); void update_better_global_speedup_rate(double rate); void disable_better_global_speedup(); @@ -201,6 +204,7 @@ private: std::atomic MONSTER_KILL_SELF = false; std::atomic SKIP_BATTLE_CELEBRATE = false; std::atomic BETTER_GLOBAL_SPEEDUP = false; + std::atomic NO_DAMAGE = false; } m_flag; struct { diff --git a/blcrack/cracker/server.cpp b/blcrack/cracker/server.cpp index b31a803d8..45bd68577 100644 --- a/blcrack/cracker/server.cpp +++ b/blcrack/cracker/server.cpp @@ -806,6 +806,28 @@ CrackerServer::CrackerServer() { CRACK_OK(); }); + Post("/enable_no_damage", [](const httplib::Request& req, httplib::Response& res) { + try { + Cracker::Instance().enable_no_damage(); + } catch (std::exception& e) { + SPDLOG_ERROR("Enable no damage failed: {}", e.what()); + res.status = 500; + return; + } + CRACK_OK(); + }); + + Post("/disable_no_damage", [](const httplib::Request& req, httplib::Response& res) { + try { + Cracker::Instance().disable_no_damage(); + } catch (std::exception& e) { + SPDLOG_ERROR("Disable no damage failed: {}", e.what()); + res.status = 500; + return; + } + CRACK_OK(); + }); + Post("/init", [](const httplib::Request& req, httplib::Response& res) { try { Cracker::Instance(); diff --git a/blcrack/http/cracker.http b/blcrack/http/cracker.http index f2479fe4e..ffba5833e 100644 --- a/blcrack/http/cracker.http +++ b/blcrack/http/cracker.http @@ -155,6 +155,12 @@ POST http://{{Host}}:{{Port}}/update_better_global_speedup_rate ### POST http://{{Host}}:{{Port}}/disable_better_global_speedup +### +POST http://{{Host}}:{{Port}}/enable_no_damage + +### +POST http://{{Host}}:{{Port}}/disable_no_damage + ### POST http://{{Host}}:{{Port}}/is_alive