diff --git a/cheat-library/cheat-library.vcxproj b/cheat-library/cheat-library.vcxproj index aee5e68..e4d2263 100644 --- a/cheat-library/cheat-library.vcxproj +++ b/cheat-library/cheat-library.vcxproj @@ -101,6 +101,7 @@ + @@ -195,6 +196,7 @@ + diff --git a/cheat-library/cheat-library.vcxproj.filters b/cheat-library/cheat-library.vcxproj.filters index ae465d6..9eb96a0 100644 --- a/cheat-library/cheat-library.vcxproj.filters +++ b/cheat-library/cheat-library.vcxproj.filters @@ -267,6 +267,9 @@ Header Files + + Header Files + @@ -492,6 +495,9 @@ Source Files + + Source Files + diff --git a/cheat-library/src/user/cheat/cheat.cpp b/cheat-library/src/user/cheat/cheat.cpp index f931bbd..0a5bcfe 100644 --- a/cheat-library/src/user/cheat/cheat.cpp +++ b/cheat-library/src/user/cheat/cheat.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -107,6 +108,7 @@ namespace cheat FEAT_INST(AutoChallenge), FEAT_INST(MobVacuum), FEAT_INST(FakeTime), + FEAT_INST(GameSpeed), FEAT_INST(ChestTeleport), FEAT_INST(OculiTeleport), diff --git a/cheat-library/src/user/cheat/game/filters.cpp b/cheat-library/src/user/cheat/game/filters.cpp index 8a4a5b6..c703c22 100644 --- a/cheat-library/src/user/cheat/game/filters.cpp +++ b/cheat-library/src/user/cheat/game/filters.cpp @@ -311,7 +311,7 @@ namespace cheat::game::filters WhitelistFilter PressurePlate = { {EntityType__Enum_1::Field, EntityType__Enum_1::Gadget }, {"Gear_Gravity", "_LitPathPlate" } }; SimpleFilter SealLocations = { EntityType__Enum_1::Gadget, "_RunesKey" }; SimpleFilter SeelieLamp = { EntityType__Enum_1::Field, {"Gear_SeeliaLamp", "LifeSeelieBase"} }; - SimpleFilter Seelie = { EntityType__Enum_1::Platform, {"Gear_Seelie", "_LifeSeelie"}}; + SimpleFilter Seelie = { EntityType__Enum_1::Platform, {"Gear_Seelie", "_LifeSeelie"} }; SimpleFilter SmallRockPile = { EntityType__Enum_1::Gadget, "_StonePile_01" }; SimpleFilter StormBarrier = { EntityType__Enum_1::Field, "_WindField_PushField" }; SimpleFilter SwordHilt = { EntityType__Enum_1::Field, "_WastedSword_" }; @@ -367,7 +367,11 @@ namespace cheat::game::filters plant::MistFlowerCorolla, plant::FlamingFlowerStamen }; - + SimpleFilter BreakableObjects = { + puzzle::AncientRime, + puzzle::LargeRockPile, + puzzle::SmallRockPile + }; WhitelistFilter Doodads = { EntityType__Enum_1::Gadget, { diff --git a/cheat-library/src/user/cheat/game/filters.h b/cheat-library/src/user/cheat/game/filters.h index 174fe8e..54ef3f0 100644 --- a/cheat-library/src/user/cheat/game/filters.h +++ b/cheat-library/src/user/cheat/game/filters.h @@ -342,6 +342,7 @@ namespace cheat::game::filters extern SimpleFilter Chests; extern SimpleFilter Ores; extern SimpleFilter PlantDestroy; + extern SimpleFilter BreakableObjects; extern WhitelistFilter Doodads; extern SimpleFilter Animals; extern SimpleFilter AnimalDrop; diff --git a/cheat-library/src/user/cheat/world/AutoDestroy.cpp b/cheat-library/src/user/cheat/world/AutoDestroy.cpp index 34ae4b5..ce311d5 100644 --- a/cheat-library/src/user/cheat/world/AutoDestroy.cpp +++ b/cheat-library/src/user/cheat/world/AutoDestroy.cpp @@ -20,6 +20,8 @@ namespace cheat::feature NF(f_DestroyShields, "Destroy Shields", "AutoDestroy", false), NF(f_DestroyDoodads, "Destroy Doodads", "AutoDestroy", false), NF(f_DestroyPlants, "Destroy Plants", "AutoDestroy", false), + NF(f_DestroySpecialObjects, "Destroy Special Objects", "AutoDestroy", false), + NF(f_DestroySpecialChests, "Destroy Special Chests", "AutoDestroy", false), NF(f_Range, "Range", "AutoDestroy", 10.0f) { HookManager::install(app::MoleMole_LCAbilityElement_ReduceModifierDurability, LCAbilityElement_ReduceModifierDurability_Hook); @@ -40,12 +42,14 @@ namespace cheat::feature ImGui::Indent(); ConfigWidget("Ores", f_DestroyOres, "Ores and variants, e.g. electro crystals, marrows, etc."); ConfigWidget("Shields", f_DestroyShields, "Abyss mage/churl/slime shields."); - ImGui::SameLine(); - ImGui::TextColored(ImColor(255, 165, 0, 255), "Extremely risky!"); ConfigWidget("Doodads", f_DestroyDoodads, "Barrels, boxes, vases, etc."); - ImGui::SameLine(); - ImGui::TextColored(ImColor(255, 165, 0, 255), "Extremely risky!"); ConfigWidget("Plants", f_DestroyPlants, "Dandelion Seeds, Sakura Bloom, etc."); + ConfigWidget("Special Objects", f_DestroySpecialObjects, "Destroy Ancient Rime, Large and Small Rock Piles"); + ImGui::SameLine(); + ImGui::TextColored(ImColor(255, 165, 0, 255), "Risk Unknown!"); + ConfigWidget("Special Chests", f_DestroySpecialChests, "Destroy Chests with Brambles, Frozen, or In Rocks"); + ImGui::SameLine(); + ImGui::TextColored(ImColor(255, 165, 0, 255), "Risk Unknown!"); ImGui::Unindent(); ConfigWidget("Range (m)", f_Range, 0.1f, 1.0f, 15.0f); } @@ -57,13 +61,15 @@ namespace cheat::feature void AutoDestroy::DrawStatus() { - ImGui::Text("Destroy [%.01fm%s%s%s%s%s]", + ImGui::Text("Destroy [%.01fm%s%s%s%s%s%s%s]", f_Range.value(), - f_DestroyOres || f_DestroyShields || f_DestroyDoodads || f_DestroyPlants ? "|" : "", + f_DestroyOres || f_DestroyShields || f_DestroyDoodads || f_DestroyPlants || f_DestroySpecialObjects || f_DestroySpecialChests ? "|" : "", f_DestroyOres ? "O" : "", f_DestroyShields ? "S" : "", f_DestroyDoodads ? "D" : "", - f_DestroyPlants ? "P" : ""); + f_DestroyPlants ? "P" : "", + f_DestroySpecialObjects ? "SO" : "", + f_DestroySpecialChests ? "SC" : ""); } AutoDestroy& AutoDestroy::GetInstance() @@ -99,9 +105,11 @@ namespace cheat::feature (autoDestroy.f_DestroyOres && game::filters::combined::Ores.IsValid(manager.entity(entity))) || (autoDestroy.f_DestroyDoodads && (game::filters::combined::Doodads.IsValid(manager.entity(entity)) || game::filters::chest::SBramble.IsValid(manager.entity(entity)))) || (autoDestroy.f_DestroyShields && !game::filters::combined::MonsterBosses.IsValid(manager.entity(entity)) && ( - game::filters::combined::MonsterShielded.IsValid(manager.entity(entity)) || // For shields attached to monsters, e.g. abyss mage shields. - game::filters::combined::MonsterEquips.IsValid(manager.entity(entity)))) || // For shields/weapons equipped by monsters, e.g. rock shield. - (autoDestroy.f_DestroyPlants && game::filters::combined::PlantDestroy.IsValid(manager.entity(entity))) // For plants e.g dandelion seeds. + game::filters::combined::MonsterShielded.IsValid(manager.entity(entity)) || // For shields attached to monsters, e.g. abyss mage shields. + game::filters::combined::MonsterEquips.IsValid(manager.entity(entity)))) || // For shields/weapons equipped by monsters, e.g. rock shield. + (autoDestroy.f_DestroyPlants && game::filters::combined::PlantDestroy.IsValid(manager.entity(entity))) || // For plants e.g dandelion seeds. + (autoDestroy.f_DestroySpecialObjects && game::filters::combined::BreakableObjects.IsValid(manager.entity(entity))) || // For Breakable Objects e.g Ancient Rime, Large and Small Rock Piles. + (autoDestroy.f_DestroySpecialChests && game::filters::combined::Chests.IsValid(manager.entity(entity))) // For Special Chests e.g Brambles, Frozen, Encased in Rock. ) ) { diff --git a/cheat-library/src/user/cheat/world/AutoDestroy.h b/cheat-library/src/user/cheat/world/AutoDestroy.h index d4c47a0..6dc8a63 100644 --- a/cheat-library/src/user/cheat/world/AutoDestroy.h +++ b/cheat-library/src/user/cheat/world/AutoDestroy.h @@ -13,6 +13,8 @@ namespace cheat::feature config::Field> f_DestroyShields; config::Field> f_DestroyDoodads; config::Field> f_DestroyPlants; + config::Field> f_DestroySpecialObjects; + config::Field> f_DestroySpecialChests; config::Field f_Range; static AutoDestroy& GetInstance(); diff --git a/cheat-library/src/user/cheat/world/GameSpeed.cpp b/cheat-library/src/user/cheat/world/GameSpeed.cpp new file mode 100644 index 0000000..c63c4c8 --- /dev/null +++ b/cheat-library/src/user/cheat/world/GameSpeed.cpp @@ -0,0 +1,89 @@ +#include "pch-il2cpp.h" +#include "GameSpeed.h" + +#include +#include +#include + +namespace cheat::feature +{ + GameSpeed::GameSpeed() : Feature(), + NF(f_Enabled, "GameSpeed Enabled", "GameSpeed", false), + NF(f_Hotkey, "GameSpeed HotKey", "GameSpeed", Hotkey(VK_CAPITAL)), + NF(f_Speed, "GameSpeed Multiplier", "GameSpeed", 5.0f) + { + events::GameUpdateEvent += MY_METHOD_HANDLER(GameSpeed::OnGameUpdate); + } + + const FeatureGUIInfo& GameSpeed::GetGUIInfo() const + { + static const FeatureGUIInfo info{ "GameSpeed", "World", true }; + return info; + } + + void GameSpeed::DrawMain() + { + ConfigWidget("GameSpeed Enabled", f_Enabled, "Speeds up game with hotkey"); + if (f_Enabled) + { + ConfigWidget("GameSpeed Hotkey", f_Hotkey); + ConfigWidget(f_Speed, 1.0f, 0.0f, 20.0f, "Set GameSpeed Multiplier\n" \ + "Do NOT use this in the Open World, only use in menus/etc, VERY DANGEROUS!"); + } + } + + bool GameSpeed::NeedStatusDraw() const + { + return f_Enabled; + } + + void GameSpeed::DrawStatus() + { + ImGui::Text("GameSpeed"); + } + + GameSpeed& GameSpeed::GetInstance() + { + static GameSpeed instance; + return instance; + } + + void GameSpeed::OnGameUpdate() + { + static bool isSpeed = false; + float currentSpeed = app::Time_get_timeScale(nullptr); + + if (f_Enabled) + { + if (f_Hotkey.value().IsPressed() && !isSpeed) + { + if (currentSpeed == 1.0f) + { + app::Time_set_timeScale(f_Speed, nullptr); + isSpeed = true; + } + } + + if (!f_Hotkey.value().IsPressed() && isSpeed) + { + if (currentSpeed != 1.0f) + { + app::Time_set_timeScale(1.0f, nullptr); + isSpeed = false; + } + } + } + else + { + // Aditional check if user is still pressing key and they decide to disable the feature + if (isSpeed) + { + if (currentSpeed != 1.0f) + { + app::Time_set_timeScale(1.0f, nullptr); + isSpeed = false; + } + } + } + } +} diff --git a/cheat-library/src/user/cheat/world/GameSpeed.h b/cheat-library/src/user/cheat/world/GameSpeed.h new file mode 100644 index 0000000..53e5a5b --- /dev/null +++ b/cheat-library/src/user/cheat/world/GameSpeed.h @@ -0,0 +1,27 @@ +#pragma once +#include +#include + +namespace cheat::feature +{ + + class GameSpeed : public Feature + { + public: + config::Field> f_Enabled; + config::Field f_Hotkey; + config::Field f_Speed; + + static GameSpeed& GetInstance(); + + const FeatureGUIInfo& GetGUIInfo() const override; + void DrawMain() override; + + virtual bool NeedStatusDraw() const override; + void DrawStatus() override; + + void OnGameUpdate(); + private: + GameSpeed(); + }; +} \ No newline at end of file