Merge pull request #364 from Taiga74164/changes-1

Fix #32 , Added Freeze Enemy Animation, Solved #207
This commit is contained in:
Taiga 2022-07-25 03:44:02 -07:00 committed by GitHub
commit 7fd48569b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 190 additions and 32 deletions

View File

@ -58,7 +58,7 @@ As well as setting up **`cheat-library`** as startup project.
#### Player #### Player
- Invincible - Invincible
- Attack Modifier - Attack Modifier
- No Cooldown Skill/Ultimate/Sprint - No Cooldown Skill/Ultimate/Sprint/Bow
- Unlimited Stamina - Unlimited Stamina
- No Clip - No Clip
@ -66,6 +66,7 @@ As well as setting up **`cheat-library`** as startup project.
- Auto Seelie - Auto Seelie
- Vacuum Loot - Vacuum Loot
- Dumb Enemies - Dumb Enemies
- Freeze Enemies
- Auto Destroy Objects - Auto Destroy Objects
- Auto Loot - Auto Loot
- Pickup Range - Pickup Range
@ -92,7 +93,7 @@ As well as setting up **`cheat-library`** as startup project.
- Chest Indicator - Chest Indicator
- Hide UI - Hide UI
- In-game Embedded Browser - In-game Embedded Browser
- Enable Peaking - Enable Peeking
- Profile Changer - Profile Changer
- Free Camera - Free Camera
- Texture Changer - Texture Changer
@ -135,9 +136,9 @@ As well as setting up **`cheat-library`** as startup project.
<h1 align="center">Bugs</h1> <h1 align="center">Bugs</h1>
Welcome to the short explanation for bug reporting Welcome to the short explanation for bug reporting
1. You Found a bug. 1. You found a bug.
1. write down what happened, as well as your first thoughts on what you think caused it. 1. Write down what happened, as well as your first thoughts on what you think caused it.
1. can it be reproduced? Yes or no. If yes: Explain in as much clear as possible. i.e what happens when the bug occurs and why it occurs. 1. Can it be reproduced? Yes or no. If yes: Explain in as much clear as possible. i.e what happens when the bug occurs and why it occurs.
1. Tell us which version you are using. copy the `SHA`/ Version Number of the latest commit when you built the mod. For example: `bd17a00ec388f3b93624280cde9e1c66e740edf9` / Release 0.7 1. Tell us which version you are using. copy the `SHA`/ Version Number of the latest commit when you built the mod. For example: `bd17a00ec388f3b93624280cde9e1c66e740edf9` / Release 0.7
## Bug reporting template ## Bug reporting template

View File

@ -34,7 +34,7 @@
<ClInclude Include="src\user\cheat\teleport\CustomTeleports.h" /> <ClInclude Include="src\user\cheat\teleport\CustomTeleports.h" />
<ClInclude Include="src\user\cheat\visuals\Browser.h" /> <ClInclude Include="src\user\cheat\visuals\Browser.h" />
<ClInclude Include="src\user\cheat\visuals\CameraZoom.h" /> <ClInclude Include="src\user\cheat\visuals\CameraZoom.h" />
<ClInclude Include="src\user\cheat\visuals\EnablePeaking.h" /> <ClInclude Include="src\user\cheat\visuals\EnablePeeking.h" />
<ClInclude Include="src\user\cheat\visuals\FPSUnlock.h" /> <ClInclude Include="src\user\cheat\visuals\FPSUnlock.h" />
<ClInclude Include="src\user\cheat\visuals\HideUI.h" /> <ClInclude Include="src\user\cheat\visuals\HideUI.h" />
<ClInclude Include="src\user\cheat\visuals\NoFog.h" /> <ClInclude Include="src\user\cheat\visuals\NoFog.h" />
@ -95,6 +95,7 @@
<ClInclude Include="src\user\cheat\world\AutoTreeFarm.h" /> <ClInclude Include="src\user\cheat\world\AutoTreeFarm.h" />
<ClInclude Include="src\user\cheat\world\DialogSkip.h" /> <ClInclude Include="src\user\cheat\world\DialogSkip.h" />
<ClInclude Include="src\user\cheat\world\DumbEnemies.h" /> <ClInclude Include="src\user\cheat\world\DumbEnemies.h" />
<ClInclude Include="src\user\cheat\world\FreezeEnemies.h" />
<ClInclude Include="src\user\cheat\world\KillAura.h" /> <ClInclude Include="src\user\cheat\world\KillAura.h" />
<ClInclude Include="src\user\cheat\world\MobVacuum.h" /> <ClInclude Include="src\user\cheat\world\MobVacuum.h" />
<ClInclude Include="src\user\cheat\world\VacuumLoot.h" /> <ClInclude Include="src\user\cheat\world\VacuumLoot.h" />
@ -124,7 +125,7 @@
<ClCompile Include="src\user\cheat\GenshinCM.cpp" /> <ClCompile Include="src\user\cheat\GenshinCM.cpp" />
<ClCompile Include="src\user\cheat\visuals\Browser.cpp" /> <ClCompile Include="src\user\cheat\visuals\Browser.cpp" />
<ClCompile Include="src\user\cheat\visuals\CameraZoom.cpp" /> <ClCompile Include="src\user\cheat\visuals\CameraZoom.cpp" />
<ClCompile Include="src\user\cheat\visuals\EnablePeaking.cpp" /> <ClCompile Include="src\user\cheat\visuals\EnablePeeking.cpp" />
<ClCompile Include="src\user\cheat\visuals\FPSUnlock.cpp" /> <ClCompile Include="src\user\cheat\visuals\FPSUnlock.cpp" />
<ClCompile Include="src\user\cheat\visuals\HideUI.cpp" /> <ClCompile Include="src\user\cheat\visuals\HideUI.cpp" />
<ClCompile Include="src\user\cheat\visuals\NoFog.cpp" /> <ClCompile Include="src\user\cheat\visuals\NoFog.cpp" />
@ -182,6 +183,7 @@
<ClCompile Include="src\user\cheat\world\AutoTreeFarm.cpp" /> <ClCompile Include="src\user\cheat\world\AutoTreeFarm.cpp" />
<ClCompile Include="src\user\cheat\world\DialogSkip.cpp" /> <ClCompile Include="src\user\cheat\world\DialogSkip.cpp" />
<ClCompile Include="src\user\cheat\world\DumbEnemies.cpp" /> <ClCompile Include="src\user\cheat\world\DumbEnemies.cpp" />
<ClCompile Include="src\user\cheat\world\FreezeEnemies.cpp" />
<ClCompile Include="src\user\cheat\world\KillAura.cpp" /> <ClCompile Include="src\user\cheat\world\KillAura.cpp" />
<ClCompile Include="src\user\cheat\world\MobVacuum.cpp" /> <ClCompile Include="src\user\cheat\world\MobVacuum.cpp" />
<ClCompile Include="src\user\cheat\world\VacuumLoot.cpp" /> <ClCompile Include="src\user\cheat\world\VacuumLoot.cpp" />

View File

@ -213,7 +213,7 @@
<ClInclude Include="src\user\cheat\visuals\Browser.h"> <ClInclude Include="src\user\cheat\visuals\Browser.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\user\cheat\visuals\EnablePeaking.h"> <ClInclude Include="src\user\cheat\visuals\EnablePeeking.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\user\cheat\visuals\TextureChanger.h"> <ClInclude Include="src\user\cheat\visuals\TextureChanger.h">
@ -246,6 +246,9 @@
<ClInclude Include="src\user\cheat\player\AutoRun.h"> <ClInclude Include="src\user\cheat\player\AutoRun.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\user\cheat\world\FreezeEnemies.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Font Include="res\Ruda-Bold.ttf" /> <Font Include="res\Ruda-Bold.ttf" />
@ -417,7 +420,7 @@
<ClCompile Include="src\user\cheat\visuals\Browser.cpp"> <ClCompile Include="src\user\cheat\visuals\Browser.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\user\cheat\visuals\EnablePeaking.cpp"> <ClCompile Include="src\user\cheat\visuals\EnablePeeking.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\user\cheat\visuals\TextureChanger.cpp"> <ClCompile Include="src\user\cheat\visuals\TextureChanger.cpp">
@ -450,6 +453,9 @@
<ClCompile Include="src\user\cheat\player\AutoRun.cpp"> <ClCompile Include="src\user\cheat\player\AutoRun.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\user\cheat\world\FreezeEnemies.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="res\res.rc"> <ResourceCompile Include="res\res.rc">

View File

@ -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(0x03185DC0, Vector3, MoleMole_BaseEntity_GetUp, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC(0x031A5120, bool, MoleMole_BaseEntity_IsActive, (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(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' // type should be 'MoleMole_VCCharacterCombat' not 'MoleMole_VCBaseMove'
// function name should be 'GetVisualCombatComponent' not 'GetMoveComponent' // function name should be 'GetVisualCombatComponent' not 'GetMoveComponent'
@ -318,6 +319,9 @@ 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(0x057E4460, void, Cursor_set_lockState, (CursorLockMode__Enum value, MethodInfo* method));
DO_APP_FUNC(0x057E4450, bool, Cursor_get_visible, (MethodInfo* method)); DO_APP_FUNC(0x057E4450, bool, Cursor_get_visible, (MethodInfo* method));
DO_APP_FUNC(0x0571E7C0, RigidbodyConstraints__Enum, Rigidbody_get_constraints, (Rigidbody* __this, MethodInfo* method));
DO_APP_FUNC(0x0571E990, void, Rigidbody_set_constraints, (Rigidbody* __this, RigidbodyConstraints__Enum value, 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(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(0x0571E9E0, void, Rigidbody_set_isKinematic, (Rigidbody* __this, bool value, MethodInfo* method));
DO_APP_FUNC(0x0571E8F0, Vector3, Rigidbody_get_velocity, (Rigidbody* __this, MethodInfo* method)); DO_APP_FUNC(0x0571E8F0, Vector3, Rigidbody_get_velocity, (Rigidbody* __this, MethodInfo* method));
@ -335,6 +339,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(0x0579EB70, int32_t, Screen_get_width, (MethodInfo* method));
DO_APP_FUNC(0x0579EB00, int32_t, Screen_get_height, (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(0x058AE2D0, bool, Behaviour_get_isActiveAndEnabled, (Behaviour* __this, MethodInfo* method));
DO_APP_FUNC(0x05891610, Vector3, Quaternion_ToEulerAngles, (Quaternion rotation, MethodInfo* method)); DO_APP_FUNC(0x05891610, Vector3, Quaternion_ToEulerAngles, (Quaternion rotation, MethodInfo* method));

View File

@ -22,6 +22,7 @@
#include <cheat/world/AutoLoot.h> #include <cheat/world/AutoLoot.h>
#include <cheat/world/DialogSkip.h> #include <cheat/world/DialogSkip.h>
#include <cheat/world/DumbEnemies.h> #include <cheat/world/DumbEnemies.h>
#include <cheat/world/FreezeEnemies.h>
#include <cheat/world/ElementalSight.h> #include <cheat/world/ElementalSight.h>
#include <cheat/world/KillAura.h> #include <cheat/world/KillAura.h>
#include <cheat/world/MobVacuum.h> #include <cheat/world/MobVacuum.h>
@ -50,7 +51,7 @@
#include <cheat/visuals/PaimonFollow.h> #include <cheat/visuals/PaimonFollow.h>
#include <cheat/visuals/HideUI.h> #include <cheat/visuals/HideUI.h>
#include <cheat/visuals/Browser.h> #include <cheat/visuals/Browser.h>
#include <cheat/visuals/EnablePeaking.h> #include <cheat/visuals/EnablePeeking.h>
#include <cheat/visuals/TextureChanger.h> #include <cheat/visuals/TextureChanger.h>
#include <cheat/visuals/FreeCamera.h> #include <cheat/visuals/FreeCamera.h>
@ -91,6 +92,7 @@ namespace cheat
FEAT_INST(VacuumLoot), FEAT_INST(VacuumLoot),
FEAT_INST(DialogSkip), FEAT_INST(DialogSkip),
FEAT_INST(DumbEnemies), FEAT_INST(DumbEnemies),
FEAT_INST(FreezeEnemies),
FEAT_INST(ElementalSight), FEAT_INST(ElementalSight),
FEAT_INST(KillAura), FEAT_INST(KillAura),
FEAT_INST(MobVacuum), FEAT_INST(MobVacuum),
@ -115,7 +117,7 @@ namespace cheat
FEAT_INST(PaimonFollow), FEAT_INST(PaimonFollow),
FEAT_INST(HideUI), FEAT_INST(HideUI),
FEAT_INST(Browser), FEAT_INST(Browser),
FEAT_INST(EnablePeaking), FEAT_INST(EnablePeeking),
FEAT_INST(TextureChanger), FEAT_INST(TextureChanger),
FEAT_INST(FreeCamera) FEAT_INST(FreeCamera)

View File

@ -205,6 +205,18 @@ namespace cheat::game
SAFE_END(); 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() app::GameObject* Entity::gameObject()
{ {
if (!isLoaded()) if (!isLoaded())

View File

@ -37,6 +37,7 @@ namespace cheat::game
app::GameObject* gameObject(); app::GameObject* gameObject();
app::Rigidbody* rigidbody(); app::Rigidbody* rigidbody();
app::Animator* animator();
app::Vector3 forward(); app::Vector3 forward();
app::Vector3 back(); app::Vector3 back();

View File

@ -139,8 +139,12 @@ namespace cheat::feature
auto rigidBody = avatarEntity->rigidbody(); auto rigidBody = avatarEntity->rigidbody();
if (rigidBody == nullptr) if (rigidBody == nullptr)
return; return;
if (!f_FreeflightMode) if (!f_FreeflightMode)
{
app::Rigidbody_set_collisionDetectionMode(rigidBody, app::CollisionDetectionMode__Enum::Continuous, nullptr);
app::Rigidbody_set_detectCollisions(rigidBody, false, nullptr); app::Rigidbody_set_detectCollisions(rigidBody, false, nullptr);
}
if (!f_VelocityMode) if (!f_VelocityMode)
app::Rigidbody_set_velocity(rigidBody, zero, nullptr); app::Rigidbody_set_velocity(rigidBody, zero, nullptr);

View File

@ -1,5 +1,5 @@
#include "pch-il2cpp.h" #include "pch-il2cpp.h"
#include "EnablePeaking.h" #include "EnablePeeking.h"
#include <helpers.h> #include <helpers.h>
@ -7,43 +7,43 @@ namespace cheat::feature
{ {
static void MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook(app::MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method); static void MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook(app::MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method);
EnablePeaking::EnablePeaking() : Feature(), EnablePeeking::EnablePeeking() : Feature(),
NF(f_Enabled, "Enable Peaking", "Visuals::EnablePeaking", false) NF(f_Enabled, "Enable Peeking", "Visuals::EnablePeeking", false)
{ {
HookManager::install(app::MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue, MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook); HookManager::install(app::MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue, MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook);
} }
const FeatureGUIInfo& EnablePeaking::GetGUIInfo() const const FeatureGUIInfo& EnablePeeking::GetGUIInfo() const
{ {
static const FeatureGUIInfo info{ "EnablePeaking", "Visuals", false }; static const FeatureGUIInfo info{ "EnablePeeking", "Visuals", false };
return info; return info;
} }
void EnablePeaking::DrawMain() void EnablePeeking::DrawMain()
{ {
ConfigWidget(f_Enabled, ";)"); ConfigWidget(f_Enabled, ";)");
} }
bool EnablePeaking::NeedStatusDraw() const bool EnablePeeking::NeedStatusDraw() const
{ {
return f_Enabled; return f_Enabled;
} }
void EnablePeaking::DrawStatus() void EnablePeeking::DrawStatus()
{ {
ImGui::Text("Enable Peaking"); ImGui::Text("Enable Peeking");
} }
EnablePeaking& EnablePeaking::GetInstance() EnablePeeking& EnablePeeking::GetInstance()
{ {
static EnablePeaking instance; static EnablePeeking instance;
return instance; return instance;
} }
static void MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook(app::MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method) static void MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook(app::MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method)
{ {
EnablePeaking& EnablePeaking = EnablePeaking::GetInstance(); EnablePeeking& EnablePeeking = EnablePeeking::GetInstance();
if (EnablePeaking.f_Enabled) if (EnablePeeking.f_Enabled)
value = 1; value = 1;
CALL_ORIGIN(MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook, __this, value, method); CALL_ORIGIN(MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook, __this, value, method);

View File

@ -0,0 +1,25 @@
#pragma once
#include <cheat-base/cheat/Feature.h>
#include <cheat-base/config/config.h>
namespace cheat::feature
{
class EnablePeeking : public Feature
{
public:
config::Field<config::Toggle<Hotkey>> f_Enabled;
static EnablePeeking& GetInstance();
const FeatureGUIInfo& GetGUIInfo() const override;
void DrawMain() override;
virtual bool NeedStatusDraw() const override;
void DrawStatus() override;
private:
EnablePeeking();
};
}

View File

@ -3,6 +3,7 @@
#include <helpers.h> #include <helpers.h>
#include <cheat/events.h> #include <cheat/events.h>
#include <cheat/game/EntityManager.h>
namespace cheat::feature namespace cheat::feature
{ {
@ -20,6 +21,7 @@ namespace cheat::feature
FreeCamera::FreeCamera() : Feature(), FreeCamera::FreeCamera() : Feature(),
NF(f_Enabled, "Free Camera", "Visuals::FreeCamera", false), NF(f_Enabled, "Free Camera", "Visuals::FreeCamera", false),
NF(f_FreezeAnimation, "Freeze Character Animation", "Visuals::FreeCamera", false),
NF(f_Speed, "Speed", "Visuals::FreeCamera", 1.0f), NF(f_Speed, "Speed", "Visuals::FreeCamera", 1.0f),
NF(f_LookSens, "Look Sensitivity", "Visuals::FreeCamera", 1.0f), NF(f_LookSens, "Look Sensitivity", "Visuals::FreeCamera", 1.0f),
NF(f_RollSpeed, "Roll Speed", "Visuals::FreeCamera", 1.0f), NF(f_RollSpeed, "Roll Speed", "Visuals::FreeCamera", 1.0f),
@ -50,6 +52,7 @@ namespace cheat::feature
void FreeCamera::DrawMain() void FreeCamera::DrawMain()
{ {
ConfigWidget("Enable", f_Enabled); ConfigWidget("Enable", f_Enabled);
ConfigWidget("Freeze Character Animation", f_FreezeAnimation, "Freezes the active character's animation.\nAfter disabling, jump to un-freeze your character.");
if (ImGui::BeginTable("FreeCameraDrawTable", 1, ImGuiTableFlags_NoBordersInBody)) if (ImGui::BeginTable("FreeCameraDrawTable", 1, ImGuiTableFlags_NoBordersInBody))
{ {
ImGui::TableNextRow(); ImGui::TableNextRow();
@ -245,5 +248,25 @@ namespace cheat::feature
} }
else else
DisableFreeCam(); DisableFreeCam();
// Taiga#5555: There's probably be a better way of implementing this. But for now, this is just what I came up with.
auto& manager = game::EntityManager::instance();
auto animator = manager.avatar()->animator();
auto rigidBody = manager.avatar()->rigidbody();
if (animator == nullptr && rigidBody == nullptr)
return;
if (f_FreezeAnimation)
{
//auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr);
//LOG_DEBUG("%s", magic_enum::enum_name(constraints).data());
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezePosition, nullptr);
app::Animator_set_speed(animator, 0.f, nullptr);
}
else
{
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
app::Animator_set_speed(animator, 1.f, nullptr);
}
} }
} }

View File

@ -8,6 +8,7 @@ namespace cheat::feature
{ {
public: public:
config::Field<config::Toggle<Hotkey>> f_Enabled; config::Field<config::Toggle<Hotkey>> f_Enabled;
config::Field<config::Toggle<Hotkey>> f_FreezeAnimation;
config::Field<float> f_Speed; config::Field<float> f_Speed;
config::Field<float> f_LookSens; config::Field<float> f_LookSens;
config::Field<float> f_RollSpeed; config::Field<float> f_RollSpeed;

View File

@ -0,0 +1,73 @@
#include "pch-il2cpp.h"
#include "FreezeEnemies.h"
#include <helpers.h>
#include <cheat/events.h>
#include <cheat/game/EntityManager.h>
#include <cheat/game/filters.h>
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;
}
// Taiga#5555: There's probably be a better way of implementing this. But for now, this is just what I came up with.
void FreezeEnemies::OnGameUpdate()
{
auto& manager = game::EntityManager::instance();
for (const auto& monster : manager.entities(game::filters::combined::Monsters))
{
auto animator = monster->animator();
auto rigidBody = monster->rigidbody();
if (animator == nullptr && rigidBody == nullptr)
return;
if (f_Enabled)
{
//auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr);
//LOG_DEBUG("%s", magic_enum::enum_name(constraints).data());
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeAll, nullptr);
app::Animator_set_speed(animator, 0.f, nullptr);
}
else
{
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
app::Animator_set_speed(animator, 1.f, nullptr);
}
}
}
}

View File

@ -5,12 +5,14 @@
namespace cheat::feature namespace cheat::feature
{ {
class EnablePeaking : public Feature class FreezeEnemies : public Feature
{ {
public: public:
config::Field<config::Toggle<Hotkey>> f_Enabled; config::Field<config::Toggle<Hotkey>> f_Enabled;
static EnablePeaking& GetInstance(); static FreezeEnemies& GetInstance();
void OnGameUpdate();
const FeatureGUIInfo& GetGUIInfo() const override; const FeatureGUIInfo& GetGUIInfo() const override;
void DrawMain() override; void DrawMain() override;
@ -19,7 +21,7 @@ namespace cheat::feature
void DrawStatus() override; void DrawStatus() override;
private: private:
EnablePeaking(); FreezeEnemies();
}; };
} }