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();
+ };
+}
+