From d7f91f239380a08d376d256b615bd5e7a2b166bf Mon Sep 17 00:00:00 2001 From: Joaquin <67109235+Taiga74164@users.noreply.github.com> Date: Sun, 24 Jul 2022 21:24:36 -0600 Subject: [PATCH] Fix #32 , Added Freeze Enemies --- cheat-library/cheat-library.vcxproj | 2 + cheat-library/cheat-library.vcxproj.filters | 6 ++ cheat-library/src/appdata/il2cpp-functions.h | 4 ++ cheat-library/src/user/cheat/cheat.cpp | 2 + cheat-library/src/user/cheat/game/Entity.cpp | 12 ++++ cheat-library/src/user/cheat/game/Entity.h | 3 +- .../src/user/cheat/player/NoClip.cpp | 4 ++ .../src/user/cheat/world/FreezeEnemies.cpp | 60 +++++++++++++++++++ .../src/user/cheat/world/FreezeEnemies.h | 27 +++++++++ 9 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 cheat-library/src/user/cheat/world/FreezeEnemies.cpp create mode 100644 cheat-library/src/user/cheat/world/FreezeEnemies.h diff --git a/cheat-library/cheat-library.vcxproj b/cheat-library/cheat-library.vcxproj index d84be75..4fd1b85 100644 --- a/cheat-library/cheat-library.vcxproj +++ b/cheat-library/cheat-library.vcxproj @@ -95,6 +95,7 @@ + @@ -182,6 +183,7 @@ + diff --git a/cheat-library/cheat-library.vcxproj.filters b/cheat-library/cheat-library.vcxproj.filters index 494df5e..fca6000 100644 --- a/cheat-library/cheat-library.vcxproj.filters +++ b/cheat-library/cheat-library.vcxproj.filters @@ -246,6 +246,9 @@ Header Files + + Header Files + @@ -450,6 +453,9 @@ Source Files + + Source Files + diff --git a/cheat-library/src/appdata/il2cpp-functions.h b/cheat-library/src/appdata/il2cpp-functions.h index e7a94dc..d292c64 100644 --- a/cheat-library/src/appdata/il2cpp-functions.h +++ b/cheat-library/src/appdata/il2cpp-functions.h @@ -255,6 +255,7 @@ DO_APP_FUNC(0x03187C30, Vector3, MoleMole_BaseEntity_GetRight, (BaseEntity* __th DO_APP_FUNC(0x03185DC0, Vector3, MoleMole_BaseEntity_GetUp, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x031A5120, bool, MoleMole_BaseEntity_IsActive, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x031AFEE0, Rigidbody*, MoleMole_BaseEntity_GetRigidbody, (BaseEntity* __this, MethodInfo* method)); +DO_APP_FUNC(0x0318DB20, Animator*, MoleMole_BaseEntity_get_animator, (BaseEntity* __this, MethodInfo* method)); // type should be 'MoleMole_VCCharacterCombat' not 'MoleMole_VCBaseMove' // function name should be 'GetVisualCombatComponent' not 'GetMoveComponent' @@ -318,6 +319,7 @@ DO_APP_FUNC(0x057E4470, void, Cursor_set_visible, (bool value, MethodInfo* metho DO_APP_FUNC(0x057E4460, void, Cursor_set_lockState, (CursorLockMode__Enum value, MethodInfo* method)); DO_APP_FUNC(0x057E4450, bool, Cursor_get_visible, (MethodInfo* method)); +DO_APP_FUNC(0x0571E980, void, Rigidbody_set_collisionDetectionMode, (Rigidbody* __this, CollisionDetectionMode__Enum value, MethodInfo* method)); DO_APP_FUNC(0x0571E9A0, void, Rigidbody_set_detectCollisions, (Rigidbody* __this, bool value, MethodInfo* method)); DO_APP_FUNC(0x0571E9E0, void, Rigidbody_set_isKinematic, (Rigidbody* __this, bool value, MethodInfo* method)); DO_APP_FUNC(0x0571E8F0, Vector3, Rigidbody_get_velocity, (Rigidbody* __this, MethodInfo* method)); @@ -335,6 +337,8 @@ DO_APP_FUNC(0x057E9D10, int32_t, Camera_get_pixelHeight, (Camera* __this, Method DO_APP_FUNC(0x0579EB70, int32_t, Screen_get_width, (MethodInfo* method)); DO_APP_FUNC(0x0579EB00, int32_t, Screen_get_height, (MethodInfo* method)); +DO_APP_FUNC(0x058236F0, void, Animator_set_speed, (Animator* __this, float value, MethodInfo* method)); + DO_APP_FUNC(0x058AE2D0, bool, Behaviour_get_isActiveAndEnabled, (Behaviour* __this, MethodInfo* method)); DO_APP_FUNC(0x05891610, Vector3, Quaternion_ToEulerAngles, (Quaternion rotation, MethodInfo* method)); diff --git a/cheat-library/src/user/cheat/cheat.cpp b/cheat-library/src/user/cheat/cheat.cpp index 249b63a..687f565 100644 --- a/cheat-library/src/user/cheat/cheat.cpp +++ b/cheat-library/src/user/cheat/cheat.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -91,6 +92,7 @@ namespace cheat FEAT_INST(VacuumLoot), FEAT_INST(DialogSkip), FEAT_INST(DumbEnemies), + FEAT_INST(FreezeEnemies), FEAT_INST(ElementalSight), FEAT_INST(KillAura), FEAT_INST(MobVacuum), diff --git a/cheat-library/src/user/cheat/game/Entity.cpp b/cheat-library/src/user/cheat/game/Entity.cpp index 71f564d..37c3747 100644 --- a/cheat-library/src/user/cheat/game/Entity.cpp +++ b/cheat-library/src/user/cheat/game/Entity.cpp @@ -205,6 +205,18 @@ namespace cheat::game SAFE_END(); } + app::Animator* Entity::animator() + { + if (!isLoaded()) + return nullptr; + + SAFE_BEGIN(); + return app::MoleMole_BaseEntity_get_animator(m_RawEntity, nullptr); + SAFE_ERROR(); + return nullptr; + SAFE_END(); + } + app::GameObject* Entity::gameObject() { if (!isLoaded()) diff --git a/cheat-library/src/user/cheat/game/Entity.h b/cheat-library/src/user/cheat/game/Entity.h index 65126ab..6a4e9b2 100644 --- a/cheat-library/src/user/cheat/game/Entity.h +++ b/cheat-library/src/user/cheat/game/Entity.h @@ -37,7 +37,8 @@ namespace cheat::game app::GameObject* gameObject(); app::Rigidbody* rigidbody(); - + app::Animator* animator(); + app::Vector3 forward(); app::Vector3 back(); app::Vector3 right(); diff --git a/cheat-library/src/user/cheat/player/NoClip.cpp b/cheat-library/src/user/cheat/player/NoClip.cpp index 6982c45..9a97c26 100644 --- a/cheat-library/src/user/cheat/player/NoClip.cpp +++ b/cheat-library/src/user/cheat/player/NoClip.cpp @@ -139,8 +139,12 @@ namespace cheat::feature auto rigidBody = avatarEntity->rigidbody(); if (rigidBody == nullptr) return; + if (!f_FreeflightMode) + { + app::Rigidbody_set_collisionDetectionMode(rigidBody, app::CollisionDetectionMode__Enum::Continuous, nullptr); app::Rigidbody_set_detectCollisions(rigidBody, false, nullptr); + } if (!f_VelocityMode) app::Rigidbody_set_velocity(rigidBody, zero, nullptr); diff --git a/cheat-library/src/user/cheat/world/FreezeEnemies.cpp b/cheat-library/src/user/cheat/world/FreezeEnemies.cpp new file mode 100644 index 0000000..b44cd50 --- /dev/null +++ b/cheat-library/src/user/cheat/world/FreezeEnemies.cpp @@ -0,0 +1,60 @@ +#include "pch-il2cpp.h" +#include "FreezeEnemies.h" + +#include + +#include +#include +#include + +namespace cheat::feature +{ + + FreezeEnemies::FreezeEnemies() : Feature(), + NF(f_Enabled, "Freeze Enemies", "FreezeEnemies", false) + { + events::GameUpdateEvent += MY_METHOD_HANDLER(FreezeEnemies::OnGameUpdate); + } + + const FeatureGUIInfo& FreezeEnemies::GetGUIInfo() const + { + static const FeatureGUIInfo info{ "", "World", false }; + return info; + } + + void FreezeEnemies::DrawMain() + { + ConfigWidget(f_Enabled, "Freezes all enemies' animation speed."); + } + + bool FreezeEnemies::NeedStatusDraw() const +{ + return f_Enabled; + } + + void FreezeEnemies::DrawStatus() + { + ImGui::Text("Freeze Enemies"); + } + + FreezeEnemies& FreezeEnemies::GetInstance() + { + static FreezeEnemies instance; + return instance; + } + + void FreezeEnemies::OnGameUpdate() + { + auto& manager = game::EntityManager::instance(); + + for (const auto& monster : manager.entities(game::filters::combined::Monsters)) + { + auto animator = monster->animator(); + if (animator == nullptr) + return; + + f_Enabled ? app::Animator_set_speed(animator, 0.f, nullptr) : app::Animator_set_speed(animator, 1.f, nullptr); + } + } +} + diff --git a/cheat-library/src/user/cheat/world/FreezeEnemies.h b/cheat-library/src/user/cheat/world/FreezeEnemies.h new file mode 100644 index 0000000..91741c4 --- /dev/null +++ b/cheat-library/src/user/cheat/world/FreezeEnemies.h @@ -0,0 +1,27 @@ +#pragma once +#include +#include + +namespace cheat::feature +{ + + class FreezeEnemies : public Feature + { + public: + config::Field> f_Enabled; + + static FreezeEnemies& GetInstance(); + + void OnGameUpdate(); + + const FeatureGUIInfo& GetGUIInfo() const override; + void DrawMain() override; + + virtual bool NeedStatusDraw() const override; + void DrawStatus() override; + + private: + FreezeEnemies(); + }; +} +