From 68dbba8b04a1904ed156a6e76ac325fcf28bf2c2 Mon Sep 17 00:00:00 2001 From: Miya Date: Thu, 25 Aug 2022 03:28:51 +0800 Subject: [PATCH] add percent crash damage mode let you decide how many times to kill monsters --- .../src/user/cheat/world/KillAura.cpp | 60 +++++++++++++------ cheat-library/src/user/cheat/world/KillAura.h | 2 + 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/cheat-library/src/user/cheat/world/KillAura.cpp b/cheat-library/src/user/cheat/world/KillAura.cpp index abc1280..fb7fad8 100644 --- a/cheat-library/src/user/cheat/world/KillAura.cpp +++ b/cheat-library/src/user/cheat/world/KillAura.cpp @@ -16,12 +16,14 @@ namespace cheat::feature KillAura::KillAura() : Feature(), NF(f_Enabled, "Kill aura", "KillAura", false), NF(f_DamageMode, "Damage mode", "Damage mode", false), + NF(f_PercentDamageMode, "Percent damage mode", "Damage mode", false), NF(f_InstantDeathMode, "Instant death", "Instant death", false), NF(f_OnlyTargeted, "Only targeted", "KillAura", true), NF(f_Range, "Range", "KillAura", 15.0f), NF(f_AttackDelay, "Attack delay time (in ms)", "KillAura", 100), NF(f_RepeatDelay, "Repeat delay time (in ms)", "KillAura", 1000), - NF(f_DamageValue, "Crash damage value", "Damage mode", 233.0f) + NF(f_DamageValue, "Crash damage value", "Damage mode", 233.0f), + NF(f_PercentDamageTimes, "Times to kill", "Damage mode", 3) { events::GameUpdateEvent += MY_METHOD_HANDLER(KillAura::OnGameUpdate); HookManager::install(app::MoleMole_BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo, BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo_Hook); @@ -40,9 +42,20 @@ namespace cheat::feature ImGui::TextColored(ImColor(255, 165, 0, 255), "Choose any or both modes below."); ConfigWidget("Crash Damage Mode", f_DamageMode, "Kill aura causes crash damage for monster around you."); - if (f_DamageMode) { - ConfigWidget("Damage Value", f_DamageValue, 1, 0, 10000000, "Crash damage value"); + ImGui::Indent(); + ConfigWidget("Percent mode", f_PercentDamageMode, "Crash damage with percent value."); + if (f_DamageMode) + { + if (!f_PercentDamageMode) + { + ConfigWidget("Damage Value", f_DamageValue, 1, 0, 10000000, "Crash damage value"); + } + else + { + ConfigWidget("Kill times", f_PercentDamageTimes, 1, 1, 100, "How many times to kill."); + } } + ImGui::Unindent(); ConfigWidget("Instant Death Mode", f_InstantDeathMode, "Kill aura will attempt to instagib any valid target."); ImGui::SameLine(); ImGui::TextColored(ImColor(255, 165, 0, 255), "Can get buggy with bosses like PMA and Hydro Hypo."); @@ -59,8 +72,9 @@ namespace cheat::feature void KillAura::DrawStatus() { - ImGui::Text("Kill Aura [%s]\n[%.01fm|%s|%dms|%dms]", + ImGui::Text("Kill Aura [%s%s]\n[%.01fm|%s|%dms|%dms]", f_DamageMode && f_InstantDeathMode ? "Extreme" : f_DamageMode ? "Crash" : f_InstantDeathMode ? "Instant" : "None", + f_DamageMode ? !f_PercentDamageMode ? "|Fixed" : fmt::format("|Rate({})", f_PercentDamageTimes.value()).c_str() : "", f_Range.value(), f_OnlyTargeted ? "Aggro" : "All", f_AttackDelay.value(), @@ -159,21 +173,31 @@ namespace cheat::feature auto crashEvt = app::MoleMole_EventHelper_Allocate_103(*app::MoleMole_EventHelper_Allocate_103__MethodInfo); app::MoleMole_EvtCrash_Init(crashEvt, monster->runtimeID(), nullptr); - //Migita^Rin#1762: Fixed inaccurate damage caused by floating point precision(Maybe) - float FPValue; - if (f_DamageValue <= 10000000) FPValue = 27.0f; - if (f_DamageValue <= 9000000) FPValue = 22.5f; - if (f_DamageValue <= 8000000) FPValue = 20.0f; - if (f_DamageValue <= 7000000) FPValue = 17.5f; - if (f_DamageValue <= 6000000) FPValue = 15.0f; - if (f_DamageValue <= 5000000) FPValue = 12.5f; - if (f_DamageValue <= 4000000) FPValue = 10.0f; - if (f_DamageValue <= 3000000) FPValue = 7.5f; - if (f_DamageValue <= 2000000) FPValue = 5.0f; - if (f_DamageValue <= 1000000) FPValue = 2.5f; + if(!f_PercentDamageMode) + { + //Migita^Rin#1762: Fixed inaccurate damage caused by floating point precision(Maybe) + float FPValue; + if (f_DamageValue <= 10000000) FPValue = 27.0f; + if (f_DamageValue <= 9000000) FPValue = 22.5f; + if (f_DamageValue <= 8000000) FPValue = 20.0f; + if (f_DamageValue <= 7000000) FPValue = 17.5f; + if (f_DamageValue <= 6000000) FPValue = 15.0f; + if (f_DamageValue <= 5000000) FPValue = 12.5f; + if (f_DamageValue <= 4000000) FPValue = 10.0f; + if (f_DamageValue <= 3000000) FPValue = 7.5f; + if (f_DamageValue <= 2000000) FPValue = 5.0f; + if (f_DamageValue <= 1000000) FPValue = 2.5f; - crashEvt->fields.maxHp = f_DamageValue /0.4f + FPValue; - crashEvt->fields.velChange = 10000000; + crashEvt->fields.maxHp = f_DamageValue / 0.4f + FPValue; + crashEvt->fields.velChange = 10000000; + } + else + { + auto maxHP = app::MoleMole_SafeFloat_get_Value(combat->fields._combatProperty_k__BackingField->fields.maxHP, nullptr); + // should works. :p + crashEvt->fields.maxHp = maxHP / f_PercentDamageTimes / 0.4f + 5.0f; + crashEvt->fields.velChange = 10000000; + } crashEvt->fields.hitPos = monster->absolutePosition(); app::MoleMole_EventManager_FireEvent(eventManager, reinterpret_cast(crashEvt), false, nullptr); diff --git a/cheat-library/src/user/cheat/world/KillAura.h b/cheat-library/src/user/cheat/world/KillAura.h index 5eeee7f..50e07a2 100644 --- a/cheat-library/src/user/cheat/world/KillAura.h +++ b/cheat-library/src/user/cheat/world/KillAura.h @@ -10,12 +10,14 @@ namespace cheat::feature public: config::Field> f_Enabled; config::Field> f_DamageMode; + config::Field> f_PercentDamageMode; config::Field> f_InstantDeathMode; config::Field f_OnlyTargeted; config::Field f_Range; config::Field f_AttackDelay; config::Field f_RepeatDelay; config::Field f_DamageValue; + config::Field f_PercentDamageTimes; static KillAura& GetInstance();