From aff533beee5c3edcebc5af46f688d303c33ae6a2 Mon Sep 17 00:00:00 2001 From: 0O0o0oOoO00 <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Thu, 22 May 2025 18:48:51 +0800 Subject: [PATCH] add: lua function args count check --- blcrack/cracker/cracker.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/blcrack/cracker/cracker.cpp b/blcrack/cracker/cracker.cpp index e0dd03afc..0dd26c8ea 100644 --- a/blcrack/cracker/cracker.cpp +++ b/blcrack/cracker/cracker.cpp @@ -226,10 +226,13 @@ void Cracker::enable_global_speedup() { m_state["GetBattleCheckResult"] = [this, gen_new_total_time](sol::this_state L, Lua::VariadicArgs args) { CALLED(GetBattleCheckResult); - double total_time = args[2]; - std::vector new_args(args.begin(), args.end()); - new_args[2] = sol::make_object(L, gen_new_total_time(total_time)); - return m_original.GetBattleCheckResult(sol::as_args(new_args)); + if (args.size() >= 3) { + double total_time = args[2]; + std::vector new_args(args.begin(), args.end()); + new_args[2] = sol::make_object(L, gen_new_total_time(total_time)); + return m_original.GetBattleCheckResult(sol::as_args(new_args)); + } + return m_original.GetBattleCheckResult(L, args); }; m_state["FinishStageCommand"]["GeneralPackage"] = [this, gen_new_total_time](sol::this_state L, Lua::VariadicArgs args) -> Lua::Table { @@ -255,8 +258,12 @@ void Cracker::disable_global_speedup() { } void Cracker::enable_gg_factor() { - m_state["Ship"]["intimacyAdditions"] = [this](Lua::VariadicArgs args) -> Lua::Object { + m_state["Ship"]["intimacyAdditions"] = [this](sol::this_state L, Lua::VariadicArgs args) -> Lua::Object { CALLED(Ship.intimacyAdditions); + if (args.size() < 2) { + return m_original.Ship_intimacyAdditions(L, args); + } + Lua::Table self = args[0]; int intimacy_level = m_lua_res.Ship_getIntimacyLevel(self); Lua::Table attr_bonus_table = m_lua_res.pg_intimacy_template.get(intimacy_level); @@ -329,6 +336,10 @@ void Cracker::disable_no_emotion_warning() { void Cracker::enable_no_bb_animation() { m_state["ys"]["Battle"]["BattleManualWeaponAutoBot"]["SetActive"] = [this](sol::this_state L, Lua::VariadicArgs args) -> Lua::Object { CALLED(ys.Battle.BattleManualWeaponAutoBot.SetActive); + if (args.size() < 3) { + return m_original.ys_Battle_BattleManualWeaponAutoBot_SetActive(L, args); + } + std::vector new_args(args.begin(), args.end()); new_args[2] = sol::make_object(L, false); Lua::Object res = m_original.ys_Battle_BattleManualWeaponAutoBot_SetActive(sol::as_args(new_args));