From 1c58fd942b97fd548bfd0f9d229475e3b65365a6 Mon Sep 17 00:00:00 2001 From: NctimeAza <102260794+NctimeAza@users.noreply.github.com> Date: Wed, 10 Aug 2022 17:53:23 +0800 Subject: [PATCH] Fixed inaccurate actual damage value --- .../src/user/cheat/world/KillAura.cpp | 22 ++++++++++++++----- cheat-library/src/user/cheat/world/KillAura.h | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/cheat-library/src/user/cheat/world/KillAura.cpp b/cheat-library/src/user/cheat/world/KillAura.cpp index 5e03ff3..abc1280 100644 --- a/cheat-library/src/user/cheat/world/KillAura.cpp +++ b/cheat-library/src/user/cheat/world/KillAura.cpp @@ -21,7 +21,7 @@ namespace cheat::feature 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) + NF(f_DamageValue, "Crash damage value", "Damage mode", 233.0f) { events::GameUpdateEvent += MY_METHOD_HANDLER(KillAura::OnGameUpdate); HookManager::install(app::MoleMole_BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo, BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo_Hook); @@ -153,14 +153,26 @@ namespace cheat::feature } attackSet.erase(monster->runtimeID()); - - int Damage = f_DamageValue * 2.5 + 2; - + auto combat = monster->combat(); auto crashEvt = app::MoleMole_EventHelper_Allocate_103(*app::MoleMole_EventHelper_Allocate_103__MethodInfo); app::MoleMole_EvtCrash_Init(crashEvt, monster->runtimeID(), nullptr); - crashEvt->fields.maxHp = Damage; + + //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.hitPos = monster->absolutePosition(); diff --git a/cheat-library/src/user/cheat/world/KillAura.h b/cheat-library/src/user/cheat/world/KillAura.h index f42c23a..5eeee7f 100644 --- a/cheat-library/src/user/cheat/world/KillAura.h +++ b/cheat-library/src/user/cheat/world/KillAura.h @@ -15,7 +15,7 @@ namespace cheat::feature config::Field f_Range; config::Field f_AttackDelay; config::Field f_RepeatDelay; - config::Field f_DamageValue; + config::Field f_DamageValue; static KillAura& GetInstance();