Merge branch 'master' into fall_control

This commit is contained in:
Taiga 2022-08-24 01:39:51 -06:00 committed by GitHub
commit 9967b57c85
64 changed files with 121754 additions and 107015 deletions

View File

@ -56,19 +56,18 @@ As well as setting up **`cheat-library`** as startup project.
- Notifications - Notifications
#### Player #### Player
- Invincible - God Mode(Invincible)
- Attack Modifier - Attack Modifier: Multi-Hit/Target/Animation
- No Cooldown Skill/Ultimate/Sprint/Bow - No Cooldown: Skill/Ultimate/Sprint/Bow
- Unlimited Stamina - Unlimited Stamina
- No Clip - No Clip
#### World #### World
- Auto Seelie - Auto Seelie
- Vacuum Loot
- Dumb Enemies - Dumb Enemies
- Freeze Enemies - Freeze Enemies
- Auto Destroy Objects - Auto Destroy: Ores/Shields/Doodas/Plants
- Auto Loot - Auto Loot/Open Chests
- Pickup Range - Pickup Range
- Auto Talk - Auto Talk
- Auto Tree Farm - Auto Tree Farm
@ -77,6 +76,7 @@ As well as setting up **`cheat-library`** as startup project.
- Auto Fish - Auto Fish
- Kill Aura - Kill Aura
- Mob Vacuum - Mob Vacuum
- Vacuum Loot
#### Teleport #### Teleport
- Chest/Oculi Teleport (Teleports to nearest) - Chest/Oculi Teleport (Teleports to nearest)
@ -94,16 +94,17 @@ As well as setting up **`cheat-library`** as startup project.
- Hide UI - Hide UI
- In-game Embedded Browser - In-game Embedded Browser
- Enable Peeking - Enable Peeking
- Profile Changer - Profile Changer: UID/Nickname/AR/WorldLevel/Avatar/Namecard
- Custom Weather
- Free Camera - Free Camera
- Texture Changer
- Paimon Follow - Paimon Follow
- Texture Changer
#### Debugging #### Debugging
- Entities Manager - Entities Manager
- Position Info - Position Info
- FPS Graph - FPS Graph
- Packet Sniffer - [Packet Sniffer](https://github.com/Akebi-Group/Akebi-PacketSniffer)
<h1 align="center">Demo</h1> <h1 align="center">Demo</h1>

View File

@ -431,6 +431,9 @@ namespace cheat
if (settings.f_NotificationsShow) if (settings.f_NotificationsShow)
DrawNotifications(); DrawNotifications();
if (settings.f_ShowStyleEditor)
ImGui::ShowStyleEditor();
if (settings.f_MenuKey.value().IsReleased() && !ImGui::IsAnyItemActive()) if (settings.f_MenuKey.value().IsReleased() && !ImGui::IsAnyItemActive())
ToggleMenuShow(); ToggleMenuShow();
} }

View File

@ -1,16 +1,20 @@
#include <pch.h> #include <pch.h>
#include "Settings.h" #include "Settings.h"
#include <cheat-base/render/gui-util.h>
#include <cheat-base/render/renderer.h>
#include <cheat-base/cheat/CheatManagerBase.h> #include <cheat-base/cheat/CheatManagerBase.h>
#include <cheat-base/render/renderer.h>
#include <cheat-base/render/gui-util.h>
#include <misc/cpp/imgui_stdlib.h>
#include <cheat-base/util.h>
#include "shlwapi.h"
#pragma comment(lib, "shlwapi.lib")
namespace cheat::feature namespace cheat::feature
{ {
Settings::Settings() : Feature(), Settings::Settings() : Feature(),
NF(f_MenuKey, "Show Cheat Menu Key", "General", Hotkey(VK_F1)), NF(f_MenuKey, "Show Cheat Menu Key", "General", Hotkey(VK_F1)),
NF(f_HotkeysEnabled, "Hotkeys Enabled", "General", true), NF(f_HotkeysEnabled, "Hotkeys Enabled", "General", true),
NF(f_FontSize, "Font size", "General", 16.0f),
NF(f_StatusMove, "Move Status Window", "General::StatusWindow", true), NF(f_StatusMove, "Move Status Window", "General::StatusWindow", true),
NF(f_StatusShow, "Show Status Window", "General::StatusWindow", true), NF(f_StatusShow, "Show Status Window", "General::StatusWindow", true),
@ -28,11 +32,31 @@ namespace cheat::feature
NF(f_ConsoleLogging, "Console Logging", "General::Logging", true), NF(f_ConsoleLogging, "Console Logging", "General::Logging", true),
NF(f_FastExitEnable, "Fast Exit", "General::FastExit", false), NF(f_FastExitEnable, "Fast Exit", "General::FastExit", false),
NF(f_HotkeyExit, "Hotkeys", "General::FastExit", Hotkey(VK_F12)) NF(f_HotkeyExit, "Hotkeys", "General::FastExit", Hotkey(VK_F12)),
NF(f_FontSize, "Font Size", "General", 16.0f),
NF(f_ShowStyleEditor, "Show Colors Customization", "General", false),
NFS(f_DefaultTheme, "Theme", "General::Colors", "Default"),
themesDir(util::GetCurrentPath() / "themes")
{ {
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize)); renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
f_HotkeyExit.value().PressedEvent += MY_METHOD_HANDLER(Settings::OnExitKeyPressed); f_HotkeyExit.value().PressedEvent += MY_METHOD_HANDLER(Settings::OnExitKeyPressed);
if (!std::filesystem::exists(themesDir))
std::filesystem::create_directory(themesDir);
}
bool inited = false;
void Settings::Init() {
if (this->f_DefaultTheme.value() != "Default" && !inited)
{
LOG_INFO("Loading theme: %s", themesDir / (f_DefaultTheme.value() + ".json").c_str());
if (!std::filesystem::exists(themesDir / (f_DefaultTheme.value() + ".json")))
f_DefaultTheme = "Default";
else Colors_Import(f_DefaultTheme.value());
inited = true;
}
} }
const FeatureGUIInfo& Settings::GetGUIInfo() const const FeatureGUIInfo& Settings::GetGUIInfo() const
@ -41,6 +65,35 @@ namespace cheat::feature
return info; return info;
} }
void Settings::Colors_Export(std::string name)
{
ImGuiStyle& style = ImGui::GetStyle();
auto colors = style.Colors;
nlohmann::json json;
for (int i = 0; i < ImGuiCol_COUNT; i++)
json[ImGui::GetStyleColorName((ImGuiCol)i)] = { colors[i].x, colors[i].y, colors[i].z, colors[i].w };
std::ofstream file(themesDir / (name + ".json"));
file << std::setw(4) << json << std::endl;
}
void Settings::Colors_Import(std::string name)
{
ImGuiStyle& style = ImGui::GetStyle();
auto colors = style.Colors;
nlohmann::json json;
std::ifstream file(themesDir / (name + ".json"));
file >> json;
for (int i = 0; i < ImGuiCol_COUNT; i++)
{
auto color = json[ImGui::GetStyleColorName((ImGuiCol)i)];
colors[i].x = color[0];
colors[i].y = color[1];
colors[i].z = color[2];
colors[i].w = color[3];
}
}
void Settings::DrawMain() void Settings::DrawMain()
{ {
@ -50,11 +103,6 @@ namespace cheat::feature
"Key to toggle main menu visibility. Cannot be empty.\n"\ "Key to toggle main menu visibility. Cannot be empty.\n"\
"If you forget this key, you can see or set it in your config file."); "If you forget this key, you can see or set it in your config file.");
ConfigWidget(f_HotkeysEnabled, "Enable hotkeys."); ConfigWidget(f_HotkeysEnabled, "Enable hotkeys.");
if (ConfigWidget(f_FontSize, 1, 8, 64, "Font size for cheat interface."))
{
f_FontSize = std::clamp(f_FontSize.value(), 8, 64);
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
}
} }
ImGui::EndGroupPanel(); ImGui::EndGroupPanel();
@ -121,6 +169,47 @@ namespace cheat::feature
ImGui::EndDisabled(); ImGui::EndDisabled();
} }
ImGui::EndGroupPanel(); ImGui::EndGroupPanel();
ImGui::BeginGroupPanel("Interface Customization");
{
if (ConfigWidget(f_FontSize, 1, 8, 64, "Adjust interface font size."))
{
f_FontSize = std::clamp(f_FontSize.value(), 8, 64);
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
}
ImGui::Spacing();
ConfigWidget(f_ShowStyleEditor, "Show colors customization window.");
ImGui::Spacing();
ImGui::Text("Save Customized Color");
static std::string nameBuffer_;
ImGui::InputText("Color Name", &nameBuffer_);
if (ImGui::Button("Save"))
Colors_Export(nameBuffer_);
ImGui::SameLine();
if (std::filesystem::exists(themesDir / (nameBuffer_ + ".json")))
{
if (this->f_DefaultTheme.value() != nameBuffer_)
{
if (ImGui::Button("Set as default"))
{
f_DefaultTheme = nameBuffer_;
}
ImGui::SameLine();
if (ImGui::Button("Load"))
{
Colors_Import(nameBuffer_);
}
}
}
else
{
ImGui::Text("Color does not exist.");
}
}
ImGui::EndGroupPanel();
} }
Settings& Settings::GetInstance() Settings& Settings::GetInstance()
@ -137,4 +226,3 @@ namespace cheat::feature
ExitProcess(0); ExitProcess(0);
} }
} }

View File

@ -10,7 +10,6 @@ namespace cheat::feature
public: public:
config::Field<Hotkey> f_MenuKey; config::Field<Hotkey> f_MenuKey;
config::Field<bool> f_HotkeysEnabled; config::Field<bool> f_HotkeysEnabled;
config::Field<int> f_FontSize;
config::Field<bool> f_StatusMove; config::Field<bool> f_StatusMove;
config::Field<bool> f_StatusShow; config::Field<bool> f_StatusShow;
@ -30,10 +29,19 @@ namespace cheat::feature
config::Field<bool> f_FastExitEnable; config::Field<bool> f_FastExitEnable;
config::Field<Hotkey> f_HotkeyExit; config::Field<Hotkey> f_HotkeyExit;
config::Field<int> f_FontSize;
config::Field<bool> f_ShowStyleEditor;
std::filesystem::path themesDir;
config::Field<std::string> f_DefaultTheme;
static Settings& GetInstance(); static Settings& GetInstance();
const FeatureGUIInfo& GetGUIInfo() const override; const FeatureGUIInfo& GetGUIInfo() const override;
void DrawMain() override; void DrawMain() override;
void Init();
void Colors_Export(std::string name);
void Colors_Import(std::string name);
private: private:

View File

@ -12,6 +12,7 @@
#include <cheat-base/render/backend/dx12-hook.h> #include <cheat-base/render/backend/dx12-hook.h>
#include <cheat-base/ResourceLoader.h> #include <cheat-base/ResourceLoader.h>
#include <cheat-base/cheat/misc/Settings.h>
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
@ -253,6 +254,9 @@ namespace renderer
pContext->OMSetRenderTargets(1, &mainRenderTargetView, nullptr); pContext->OMSetRenderTargets(1, &mainRenderTargetView, nullptr);
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
auto& themes = cheat::feature::Settings::GetInstance();
themes.Init();
} }
static LRESULT CALLBACK hWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) static LRESULT CALLBACK hWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

View File

@ -25,6 +25,7 @@
<ClInclude Include="src\user\cheat\player\FallControl.h" /> <ClInclude Include="src\user\cheat\player\FallControl.h" />
<ClInclude Include="src\user\cheat\visuals\TextureChanger.h" /> <ClInclude Include="src\user\cheat\visuals\TextureChanger.h" />
<ClInclude Include="src\user\cheat\visuals\FreeCamera.h" /> <ClInclude Include="src\user\cheat\visuals\FreeCamera.h" />
<ClInclude Include="src\user\cheat\world\AutoChallenge.h" />
<ClInclude Include="src\user\cheat\world\AutoSeelie.h" /> <ClInclude Include="src\user\cheat\world\AutoSeelie.h" />
<ClInclude Include="src\user\cheat\world\CustomWeather.h" /> <ClInclude Include="src\user\cheat\world\CustomWeather.h" />
<ClInclude Include="src\user\cheat\world\FakeTime.h" /> <ClInclude Include="src\user\cheat\world\FakeTime.h" />
@ -119,6 +120,7 @@
<ClCompile Include="src\user\cheat\player\FallControl.cpp" /> <ClCompile Include="src\user\cheat\player\FallControl.cpp" />
<ClCompile Include="src\user\cheat\visuals\TextureChanger.cpp" /> <ClCompile Include="src\user\cheat\visuals\TextureChanger.cpp" />
<ClCompile Include="src\user\cheat\visuals\FreeCamera.cpp" /> <ClCompile Include="src\user\cheat\visuals\FreeCamera.cpp" />
<ClCompile Include="src\user\cheat\world\AutoChallenge.cpp" />
<ClCompile Include="src\user\cheat\world\AutoSeelie.cpp" /> <ClCompile Include="src\user\cheat\world\AutoSeelie.cpp" />
<ClCompile Include="src\user\cheat\world\CustomWeather.cpp" /> <ClCompile Include="src\user\cheat\world\CustomWeather.cpp" />
<ClCompile Include="src\user\cheat\world\FakeTime.cpp" /> <ClCompile Include="src\user\cheat\world\FakeTime.cpp" />
@ -224,12 +226,19 @@
<Image Include="res\iconsHD\Azhdaha.png" /> <Image Include="res\iconsHD\Azhdaha.png" />
<Image Include="res\iconsHD\Boar.png" /> <Image Include="res\iconsHD\Boar.png" />
<Image Include="res\iconsHD\BookPage.png" /> <Image Include="res\iconsHD\BookPage.png" />
<Image Include="res\iconsHD\BouncyMushroom.png" />
<Image Include="res\iconsHD\Cat.png" /> <Image Include="res\iconsHD\Cat.png" />
<Image Include="res\iconsHD\Cicin.png" /> <Image Include="res\iconsHD\Cicin.png" />
<Image Include="res\iconsHD\ClusterleafOfCultivation.png" />
<Image Include="res\iconsHD\Crane.png" /> <Image Include="res\iconsHD\Crane.png" />
<Image Include="res\iconsHD\CryoBathysmalVishap.png" /> <Image Include="res\iconsHD\CryoBathysmalVishap.png" />
<Image Include="res\iconsHD\Dendroculus.png" /> <Image Include="res\iconsHD\Dendroculus.png" />
<Image Include="res\iconsHD\DendroGranum.png" />
<Image Include="res\iconsHD\DendroPile.png" />
<Image Include="res\iconsHD\DendroProjector.png" />
<Image Include="res\iconsHD\DendroRock.png" />
<Image Include="res\iconsHD\Dog.png" /> <Image Include="res\iconsHD\Dog.png" />
<Image Include="res\iconsHD\DreadfulWithering.png" />
<Image Include="res\iconsHD\DunlinsTooth.png" /> <Image Include="res\iconsHD\DunlinsTooth.png" />
<Image Include="res\iconsHD\Dvalin.png" /> <Image Include="res\iconsHD\Dvalin.png" />
<Image Include="res\iconsHD\Eel.png" /> <Image Include="res\iconsHD\Eel.png" />
@ -418,6 +427,7 @@
<Image Include="res\iconsHD\NilotpalaLotus.png" /> <Image Include="res\iconsHD\NilotpalaLotus.png" />
<Image Include="res\iconsHD\Nobushi.png" /> <Image Include="res\iconsHD\Nobushi.png" />
<Image Include="res\iconsHD\NoctilucousJade.png" /> <Image Include="res\iconsHD\NoctilucousJade.png" />
<Image Include="res\iconsHD\NurseriesInTheWilds.png" />
<Image Include="res\iconsHD\OceanCrab.png" /> <Image Include="res\iconsHD\OceanCrab.png" />
<Image Include="res\iconsHD\Oceanid.png" /> <Image Include="res\iconsHD\Oceanid.png" />
<Image Include="res\iconsHD\OceanidSummons.png" /> <Image Include="res\iconsHD\OceanidSummons.png" />
@ -427,6 +437,7 @@
<Image Include="res\iconsHD\Padisarah.png" /> <Image Include="res\iconsHD\Padisarah.png" />
<Image Include="res\iconsHD\PaleRedCrab.png" /> <Image Include="res\iconsHD\PaleRedCrab.png" />
<Image Include="res\iconsHD\PerpetualMechanicalArray.png" /> <Image Include="res\iconsHD\PerpetualMechanicalArray.png" />
<Image Include="res\iconsHD\PhantasmalGate.png" />
<Image Include="res\iconsHD\PhaseGate.png" /> <Image Include="res\iconsHD\PhaseGate.png" />
<Image Include="res\iconsHD\PhilanemoMushroom.png" /> <Image Include="res\iconsHD\PhilanemoMushroom.png" />
<Image Include="res\iconsHD\Pigeon.png" /> <Image Include="res\iconsHD\Pigeon.png" />
@ -465,6 +476,7 @@
<Image Include="res\iconsHD\RukkhashavaMushrooms.png" /> <Image Include="res\iconsHD\RukkhashavaMushrooms.png" />
<Image Include="res\iconsHD\RustyKoi.png" /> <Image Include="res\iconsHD\RustyKoi.png" />
<Image Include="res\iconsHD\SacredSakura.png" /> <Image Include="res\iconsHD\SacredSakura.png" />
<Image Include="res\iconsHD\SaghiraMachine.png" />
<Image Include="res\iconsHD\SakuraBloom.png" /> <Image Include="res\iconsHD\SakuraBloom.png" />
<Image Include="res\iconsHD\Salamander.png" /> <Image Include="res\iconsHD\Salamander.png" />
<Image Include="res\iconsHD\Samachurl.png" /> <Image Include="res\iconsHD\Samachurl.png" />
@ -507,6 +519,7 @@
<Image Include="res\iconsHD\Starshroom.png" /> <Image Include="res\iconsHD\Starshroom.png" />
<Image Include="res\iconsHD\Starsilver.png" /> <Image Include="res\iconsHD\Starsilver.png" />
<Image Include="res\iconsHD\StatueofTheSeven.png" /> <Image Include="res\iconsHD\StatueofTheSeven.png" />
<Image Include="res\iconsHD\StonePillarSeal.png" />
<Image Include="res\iconsHD\StormBarrier.png" /> <Image Include="res\iconsHD\StormBarrier.png" />
<Image Include="res\iconsHD\Stormstone.png" /> <Image Include="res\iconsHD\Stormstone.png" />
<Image Include="res\iconsHD\StrangeTooth.png" /> <Image Include="res\iconsHD\StrangeTooth.png" />
@ -530,7 +543,8 @@
<Image Include="res\iconsHD\TorchPuzzle.png" /> <Image Include="res\iconsHD\TorchPuzzle.png" />
<Image Include="res\iconsHD\TreasureHoarder.png" /> <Image Include="res\iconsHD\TreasureHoarder.png" />
<Image Include="res\iconsHD\TriangularMechanism.png" /> <Image Include="res\iconsHD\TriangularMechanism.png" />
<Image Include="res\iconsHD\Tukan.png" /> <Image Include="res\iconsHD\DuskBird.png" />
<Image Include="res\iconsHD\TriYanaSeeds.png" />
<Image Include="res\iconsHD\UnagiMeat.png" /> <Image Include="res\iconsHD\UnagiMeat.png" />
<Image Include="res\iconsHD\UniqueRocks.png" /> <Image Include="res\iconsHD\UniqueRocks.png" />
<Image Include="res\iconsHD\UnusualHilichurl.png" /> <Image Include="res\iconsHD\UnusualHilichurl.png" />
@ -563,12 +577,19 @@
<Image Include="res\icons\Azhdaha.png" /> <Image Include="res\icons\Azhdaha.png" />
<Image Include="res\icons\Boar.png" /> <Image Include="res\icons\Boar.png" />
<Image Include="res\icons\BookPage.png" /> <Image Include="res\icons\BookPage.png" />
<Image Include="res\icons\BouncyMushroom.png" />
<Image Include="res\icons\Cat.png" /> <Image Include="res\icons\Cat.png" />
<Image Include="res\icons\Cicin.png" /> <Image Include="res\icons\Cicin.png" />
<Image Include="res\icons\ClusterleafOfCultivation.png" />
<Image Include="res\icons\Crane.png" /> <Image Include="res\icons\Crane.png" />
<Image Include="res\icons\CryoBathysmalVishap.png" /> <Image Include="res\icons\CryoBathysmalVishap.png" />
<Image Include="res\icons\Dendroculus.png" /> <Image Include="res\icons\Dendroculus.png" />
<Image Include="res\icons\DendroGranum.png" />
<Image Include="res\icons\DendroPile.png" />
<Image Include="res\icons\DendroProjector.png" />
<Image Include="res\icons\DendroRock.png" />
<Image Include="res\icons\Dog.png" /> <Image Include="res\icons\Dog.png" />
<Image Include="res\icons\DreadfulWithering.png" />
<Image Include="res\icons\DunlinsTooth.png" /> <Image Include="res\icons\DunlinsTooth.png" />
<Image Include="res\icons\Dvalin.png" /> <Image Include="res\icons\Dvalin.png" />
<Image Include="res\icons\Eel.png" /> <Image Include="res\icons\Eel.png" />
@ -757,6 +778,7 @@
<Image Include="res\icons\NilotpalaLotus.png" /> <Image Include="res\icons\NilotpalaLotus.png" />
<Image Include="res\icons\Nobushi.png" /> <Image Include="res\icons\Nobushi.png" />
<Image Include="res\icons\NoctilucousJade.png" /> <Image Include="res\icons\NoctilucousJade.png" />
<Image Include="res\icons\NurseriesInTheWilds.png" />
<Image Include="res\icons\OceanCrab.png" /> <Image Include="res\icons\OceanCrab.png" />
<Image Include="res\icons\Oceanid.png" /> <Image Include="res\icons\Oceanid.png" />
<Image Include="res\icons\OceanidSummons.png" /> <Image Include="res\icons\OceanidSummons.png" />
@ -766,6 +788,7 @@
<Image Include="res\icons\Padisarah.png" /> <Image Include="res\icons\Padisarah.png" />
<Image Include="res\icons\PaleRedCrab.png" /> <Image Include="res\icons\PaleRedCrab.png" />
<Image Include="res\icons\PerpetualMechanicalArray.png" /> <Image Include="res\icons\PerpetualMechanicalArray.png" />
<Image Include="res\icons\PhantasmalGate.png" />
<Image Include="res\icons\PhaseGate.png" /> <Image Include="res\icons\PhaseGate.png" />
<Image Include="res\icons\PhilanemoMushroom.png" /> <Image Include="res\icons\PhilanemoMushroom.png" />
<Image Include="res\icons\Pigeon.png" /> <Image Include="res\icons\Pigeon.png" />
@ -804,6 +827,7 @@
<Image Include="res\icons\RukkhashavaMushrooms.png" /> <Image Include="res\icons\RukkhashavaMushrooms.png" />
<Image Include="res\icons\RustyKoi.png" /> <Image Include="res\icons\RustyKoi.png" />
<Image Include="res\icons\SacredSakura.png" /> <Image Include="res\icons\SacredSakura.png" />
<Image Include="res\icons\SaghiraMachine.png" />
<Image Include="res\icons\SakuraBloom.png" /> <Image Include="res\icons\SakuraBloom.png" />
<Image Include="res\icons\Salamander.png" /> <Image Include="res\icons\Salamander.png" />
<Image Include="res\icons\Samachurl.png" /> <Image Include="res\icons\Samachurl.png" />
@ -846,6 +870,7 @@
<Image Include="res\icons\Starshroom.png" /> <Image Include="res\icons\Starshroom.png" />
<Image Include="res\icons\Starsilver.png" /> <Image Include="res\icons\Starsilver.png" />
<Image Include="res\icons\StatueofTheSeven.png" /> <Image Include="res\icons\StatueofTheSeven.png" />
<Image Include="res\icons\StonePillarSeal.png" />
<Image Include="res\icons\StormBarrier.png" /> <Image Include="res\icons\StormBarrier.png" />
<Image Include="res\icons\Stormstone.png" /> <Image Include="res\icons\Stormstone.png" />
<Image Include="res\icons\StrangeTooth.png" /> <Image Include="res\icons\StrangeTooth.png" />
@ -869,7 +894,8 @@
<Image Include="res\icons\TorchPuzzle.png" /> <Image Include="res\icons\TorchPuzzle.png" />
<Image Include="res\icons\TreasureHoarder.png" /> <Image Include="res\icons\TreasureHoarder.png" />
<Image Include="res\icons\TriangularMechanism.png" /> <Image Include="res\icons\TriangularMechanism.png" />
<Image Include="res\icons\Tukan.png" /> <Image Include="res\icons\DuskBird.png" />
<Image Include="res\icons\TriYanaSeeds.png" />
<Image Include="res\icons\UnagiMeat.png" /> <Image Include="res\icons\UnagiMeat.png" />
<Image Include="res\icons\UniqueRocks.png" /> <Image Include="res\icons\UniqueRocks.png" />
<Image Include="res\icons\UnusualHilichurl.png" /> <Image Include="res\icons\UnusualHilichurl.png" />
@ -1016,7 +1042,7 @@
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch-il2cpp.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch-il2cpp.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>$(ProjectDir)src/appdata;$(ProjectDir)src/framework;$(ProjectDir)res/;$(ProjectDir)src/user;$(SolutionDir)cheat-base/src/;$(SolutionDir)cheat-base/vendor/imgui/;$(SolutionDir)cheat-base/vendor/json/single_include/;$(SolutionDir)cheat-base/vendor/magic_enum/include/;$(SolutionDir)cheat-base/vendor/fmt/include/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/simpleIni/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/detours/</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src/appdata;$(ProjectDir)src/framework;$(ProjectDir)res/;$(ProjectDir)src/user;$(SolutionDir)cheat-base/src/;$(SolutionDir)cheat-base/vendor/imgui/;$(SolutionDir)cheat-base/vendor/json/single_include/;$(SolutionDir)cheat-base/vendor/magic_enum/include/;$(SolutionDir)cheat-base/vendor/fmt/include/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/simpleIni/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/detours/</AdditionalIncludeDirectories>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>

View File

@ -258,6 +258,9 @@
<ClInclude Include="src\user\cheat\player\FallControl.h"> <ClInclude Include="src\user\cheat\player\FallControl.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\user\cheat\world\AutoChallenge.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Font Include="res\Ruda-Bold.ttf" /> <Font Include="res\Ruda-Bold.ttf" />
@ -474,6 +477,9 @@
<ClCompile Include="src\user\cheat\player\FallControl.cpp"> <ClCompile Include="src\user\cheat\player\FallControl.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\user\cheat\world\AutoChallenge.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="res\res.rc"> <ResourceCompile Include="res\res.rc">
@ -2409,9 +2415,6 @@
<Image Include="res\iconsHD\SumeruRose.png"> <Image Include="res\iconsHD\SumeruRose.png">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
<Image Include="res\iconsHD\Tukan.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\Viparyas.png"> <Image Include="res\iconsHD\Viparyas.png">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
@ -2439,9 +2442,6 @@
<Image Include="res\iconsHD\RukkhashavaMushrooms.png"> <Image Include="res\iconsHD\RukkhashavaMushrooms.png">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
<Image Include="res\icons\Tukan.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\Viparyas.png"> <Image Include="res\icons\Viparyas.png">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
@ -2526,5 +2526,83 @@
<Image Include="res\icons\BookPage.png"> <Image Include="res\icons\BookPage.png">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
<Image Include="res\icons\DuskBird.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\DuskBird.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\TriYanaSeeds.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\BouncyMushroom.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\ClusterleafOfCultivation.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\DendroGranum.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\DendroPile.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\DendroProjector.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\DendroRock.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\DreadfulWithering.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\NurseriesInTheWilds.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\PhantasmalGate.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\SaghiraMachine.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\iconsHD\StonePillarSeal.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\StonePillarSeal.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\TriYanaSeeds.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\BouncyMushroom.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\ClusterleafOfCultivation.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\DendroGranum.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\DendroPile.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\DendroProjector.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\DendroRock.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\DreadfulWithering.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\NurseriesInTheWilds.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\PhantasmalGate.png">
<Filter>Resource Files</Filter>
</Image>
<Image Include="res\icons\SaghiraMachine.png">
<Filter>Resource Files</Filter>
</Image>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,12 +1,12 @@
{ {
"game_version": "2.8", "game_version": "3.0",
"modules": { "modules": {
"UnityPlayer.dll": { "UnityPlayer.dll": {
"checksum": 4999961552328781053, "checksum": 18225598526199471527,
"timestamp": 0 "timestamp": 0
}, },
"UserAssembly.dll": { "UserAssembly.dll": {
"checksum": 807890720029543258, "checksum": 10799527772725786707,
"timestamp": 0 "timestamp": 0
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because it is too large Load Diff

View File

@ -72,6 +72,8 @@ AssemblyChecksums RCDATA "assembly_checksum.json"
// PNG // PNG
// //
#pragma region iconsHD
HDABIDINGANGELFISH PNG "iconsHD\\AbidingAngelfish.png" HDABIDINGANGELFISH PNG "iconsHD\\AbidingAngelfish.png"
HDABYSSMAGE PNG "iconsHD\\AbyssMage.png" HDABYSSMAGE PNG "iconsHD\\AbyssMage.png"
@ -144,6 +146,8 @@ HDBOOKPAGE PNG "iconsHD\\BookPage.png"
HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png" HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png"
HDBOUNCYMUSHROOM PNG "iconsHD\\BouncyMushroom.png"
HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png" HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png"
HDBROWNSHIRAKODAI PNG "iconsHD\\BrownShirakodai.png" HDBROWNSHIRAKODAI PNG "iconsHD\\BrownShirakodai.png"
@ -166,6 +170,10 @@ HDCHILLEDMEAT PNG "iconsHD\\ChilledMeat.png"
HDCICIN PNG "iconsHD\\Cicin.png" HDCICIN PNG "iconsHD\\Cicin.png"
HDCLOUDLEISURESTEPS PNG "iconsHD\\CloudleisureSteps.png"
HDCLUSTERLEAFOFCULTIVATION PNG "iconsHD\\ClusterleafOfCultivation.png"
HDCOMMONCHEST PNG "iconsHD\\CommonChest.png" HDCOMMONCHEST PNG "iconsHD\\CommonChest.png"
HDCOOKINGINGREDIENT PNG "iconsHD\\CookingIngredient.png" HDCOOKINGINGREDIENT PNG "iconsHD\\CookingIngredient.png"
@ -220,14 +228,28 @@ HDDENDROBIUM PNG "iconsHD\\Dendrobium.png"
HDDENDROCULUS PNG "iconsHD\\Dendroculus.png" HDDENDROCULUS PNG "iconsHD\\Dendroculus.png"
HDDENDROGRANUM PNG "iconsHD\\DendroGranum.png"
HDDENDROPILE PNG "iconsHD\\DendroPile.png"
HDDENDROPROJECTOR PNG "iconsHD\\DendroProjector.png"
HDDENDROROCK PNG "iconsHD\\DendroRock.png"
HDDIVDARAY PNG "iconsHD\\DivdaRay.png" HDDIVDARAY PNG "iconsHD\\DivdaRay.png"
HDDOG PNG "iconsHD\\Dog.png" HDDOG PNG "iconsHD\\Dog.png"
HDDOMAIN PNG "iconsHD\\Domain.png" HDDOMAIN PNG "iconsHD\\Domain.png"
HDDREADFULWITHERING PNG "iconsHD\\DreadfulWithering.png"
HDDREAMFORM PNG "iconsHD\\DreamForm.png"
HDDUNLINSTOOTH PNG "iconsHD\\DunlinsTooth.png" HDDUNLINSTOOTH PNG "iconsHD\\DunlinsTooth.png"
HDDUSKBIRD PNG "iconsHD\\DuskBird.png"
HDDVALIN PNG "iconsHD\\Dvalin.png" HDDVALIN PNG "iconsHD\\Dvalin.png"
HDECHOINGCONCH PNG "iconsHD\\EchoingConch.png" HDECHOINGCONCH PNG "iconsHD\\EchoingConch.png"
@ -362,6 +384,8 @@ HDHORSETAIL PNG "iconsHD\\Horsetail.png"
HDHYDROABYSSHERALD PNG "iconsHD\\HydroAbyssHerald.png" HDHYDROABYSSHERALD PNG "iconsHD\\HydroAbyssHerald.png"
HDHYDROBATHYSMALVISHAP PNG "iconsHD\\HydroBathysmalVishap.png"
HDHYDROHYPOSTASIS PNG "iconsHD\\HydroHypostasis.png" HDHYDROHYPOSTASIS PNG "iconsHD\\HydroHypostasis.png"
HDILLUSION PNG "iconsHD\\Illusion.png" HDILLUSION PNG "iconsHD\\Illusion.png"
@ -442,6 +466,8 @@ HDMATSUTAKE PNG "iconsHD\\Matsutake.png"
HDMEDAKA PNG "iconsHD\\Medaka.png" HDMEDAKA PNG "iconsHD\\Medaka.png"
HDMELODICBLOOM PNG "iconsHD\\MelodicBloom.png"
HDMERCHANT PNG "iconsHD\\Merchant.png" HDMERCHANT PNG "iconsHD\\Merchant.png"
HDMILLELITH PNG "iconsHD\\Millelith.png" HDMILLELITH PNG "iconsHD\\Millelith.png"
@ -474,6 +500,8 @@ HDNOBUSHI PNG "iconsHD\\Nobushi.png"
HDNOCTILUCOUSJADE PNG "iconsHD\\NoctilucousJade.png" HDNOCTILUCOUSJADE PNG "iconsHD\\NoctilucousJade.png"
HDNURSERIESINTHEWILDS PNG "iconsHD\\NurseriesInTheWilds.png"
HDOCEANCRAB PNG "iconsHD\\OceanCrab.png" HDOCEANCRAB PNG "iconsHD\\OceanCrab.png"
HDOCEANID PNG "iconsHD\\Oceanid.png" HDOCEANID PNG "iconsHD\\Oceanid.png"
@ -506,6 +534,8 @@ HDPALEREDCRAB PNG "iconsHD\\PaleRedCrab.png"
HDPERPETUALMECHANICALARRAY PNG "iconsHD\\PerpetualMechanicalArray.png" HDPERPETUALMECHANICALARRAY PNG "iconsHD\\PerpetualMechanicalArray.png"
HDPHANTASMALGATE PNG "iconsHD\\PhantasmalGate.png"
HDPHASEGATE PNG "iconsHD\\PhaseGate.png" HDPHASEGATE PNG "iconsHD\\PhaseGate.png"
HDPHILANEMOMUSHROOM PNG "iconsHD\\PhilanemoMushroom.png" HDPHILANEMOMUSHROOM PNG "iconsHD\\PhilanemoMushroom.png"
@ -584,6 +614,8 @@ HDRUSTYKOI PNG "iconsHD\\RustyKoi.png"
HDSACREDSAKURA PNG "iconsHD\\SacredSakura.png" HDSACREDSAKURA PNG "iconsHD\\SacredSakura.png"
HDSAGHIRAMACHINE PNG "iconsHD\\SaghiraMachine.png"
HDSAKURABLOOM PNG "iconsHD\\SakuraBloom.png" HDSAKURABLOOM PNG "iconsHD\\SakuraBloom.png"
HDSALAMANDER PNG "iconsHD\\Salamander.png" HDSALAMANDER PNG "iconsHD\\Salamander.png"
@ -606,8 +638,6 @@ HDSEAGRASS PNG "iconsHD\\Seagrass.png"
HDSEALEDCHEST PNG "iconsHD\\SealedChest.png" HDSEALEDCHEST PNG "iconsHD\\SealedChest.png"
HDSEALLOCATIONS PNG "iconsHD\\SealLocationI.png"
HDSEALLOCATIONI PNG "iconsHD\\SealLocationI.png" HDSEALLOCATIONI PNG "iconsHD\\SealLocationI.png"
HDSEALLOCATIONII PNG "iconsHD\\SealLocationII.png" HDSEALLOCATIONII PNG "iconsHD\\SealLocationII.png"
@ -616,6 +646,8 @@ HDSEALLOCATIONIII PNG "iconsHD\\SealLocationIII.png"
HDSEALLOCATIONIV PNG "iconsHD\\SealLocationIV.png" HDSEALLOCATIONIV PNG "iconsHD\\SealLocationIV.png"
HDSEALLOCATIONS PNG "iconsHD\\SealLocationI.png"
HDSEALLOCATIONV PNG "iconsHD\\SealLocationV.png" HDSEALLOCATIONV PNG "iconsHD\\SealLocationV.png"
HDSEELIE PNG "iconsHD\\Seelie.png" HDSEELIE PNG "iconsHD\\Seelie.png"
@ -664,12 +696,16 @@ HDSQUIRREL PNG "iconsHD\\Squirrel.png"
HDSTARCONCH PNG "iconsHD\\Starconch.png" HDSTARCONCH PNG "iconsHD\\Starconch.png"
HDSTARLIGHTCOALESCENCE PNG "iconsHD\\StarlightCoalescence.png"
HDSTARSHROOM PNG "iconsHD\\Starshroom.png" HDSTARSHROOM PNG "iconsHD\\Starshroom.png"
HDSTARSILVER PNG "iconsHD\\Starsilver.png" HDSTARSILVER PNG "iconsHD\\Starsilver.png"
HDSTATUEOFTHESEVEN PNG "iconsHD\\StatueofTheSeven.png" HDSTATUEOFTHESEVEN PNG "iconsHD\\StatueofTheSeven.png"
HDSTONEPILLARSEAL PNG "iconsHD\\StonePillarSeal.png"
HDSTORMBARRIER PNG "iconsHD\\StormBarrier.png" HDSTORMBARRIER PNG "iconsHD\\StormBarrier.png"
HDSTORMSTONE PNG "iconsHD\\Stormstone.png" HDSTORMSTONE PNG "iconsHD\\Stormstone.png"
@ -704,6 +740,8 @@ HDTHECRUXTHEALCOR PNG "iconsHD\\TheCruxTheAlcor.png"
HDTHEGREATSNOWBOARKING PNG "iconsHD\\TheGreatSnowboarKing.png" HDTHEGREATSNOWBOARKING PNG "iconsHD\\TheGreatSnowboarKing.png"
HDTHERAVENFORUM PNG "iconsHD\\TheRavenForum.png"
HDTHREEBOXES PNG "iconsHD\\ThreeBoxes.png" HDTHREEBOXES PNG "iconsHD\\ThreeBoxes.png"
HDTHUNDERMANIFESTATION PNG "iconsHD\\ThunderManifestation.png" HDTHUNDERMANIFESTATION PNG "iconsHD\\ThunderManifestation.png"
@ -716,7 +754,7 @@ HDTREASUREHOARDER PNG "iconsHD\\TreasureHoarder.png"
HDTRIANGULARMECHANISM PNG "iconsHD\\TriangularMechanism.png" HDTRIANGULARMECHANISM PNG "iconsHD\\TriangularMechanism.png"
HDTUKAN PNG "iconsHD\\Tukan.png" HDTRIYANASEEDS PNG "iconsHD\\TriYanaSeeds.png"
HDUNAGIMEAT PNG "iconsHD\\UnagiMeat.png" HDUNAGIMEAT PNG "iconsHD\\UnagiMeat.png"
@ -771,17 +809,11 @@ HDWORLDQUESTS PNG "iconsHD\\WorldQuests.png"
HDYUMEMIRUWOOD PNG "iconsHD\\YumemiruWood.png" HDYUMEMIRUWOOD PNG "iconsHD\\YumemiruWood.png"
HDZAYTUNPEACH PNG "iconsHD\\ZaytunPeach.png" HDZAYTUNPEACH PNG "iconsHD\\ZaytunPeach.png"
#pragma endregion
HDMELODICBLOOM PNG "iconsHD\\MelodicBloom.png"
HDCLOUDLEISURESTEPS PNG "iconsHD\\CloudleisureSteps.png"
HDDREAMFORM PNG "iconsHD\\DreamForm.png"
HDSTARLIGHTCOALESCENCE PNG "iconsHD\\StarlightCoalescence.png"
HDTHERAVENFORUM PNG "iconsHD\\TheRavenForum.png"
#pragma region icons
ABIDINGANGELFISH PNG "icons\\AbidingAngelfish.png" ABIDINGANGELFISH PNG "icons\\AbidingAngelfish.png"
ABYSSMAGE PNG "icons\\AbyssMage.png" ABYSSMAGE PNG "icons\\AbyssMage.png"
@ -858,6 +890,8 @@ BOOKPAGE PNG "icons\\BookPage.png"
BOOTWEASEL PNG "icons\\BootWeasel.png" BOOTWEASEL PNG "icons\\BootWeasel.png"
BOUNCYMUSHROOM PNG "icons\\BouncyMushroom.png"
BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png" BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png"
BROWNSHIRAKODAI PNG "icons\\BrownShirakodai.png" BROWNSHIRAKODAI PNG "icons\\BrownShirakodai.png"
@ -880,6 +914,10 @@ CHILLEDMEAT PNG "icons\\ChilledMeat.png"
CICIN PNG "icons\\Cicin.png" CICIN PNG "icons\\Cicin.png"
CLOUDLEISURESTEPS PNG "icons\\CloudleisureSteps.png"
CLUSTERLEAFOFCULTIVATION PNG "icons\\ClusterleafOfCultivation.png"
COMMONCHEST PNG "icons\\CommonChest.png" COMMONCHEST PNG "icons\\CommonChest.png"
COOKINGINGREDIENT PNG "icons\\CookingIngredient.png" COOKINGINGREDIENT PNG "icons\\CookingIngredient.png"
@ -934,14 +972,28 @@ DENDROBIUM PNG "icons\\Dendrobium.png"
DENDROCULUS PNG "icons\\Dendroculus.png" DENDROCULUS PNG "icons\\Dendroculus.png"
DENDROGRANUM PNG "icons\\DendroGranum.png"
DENDROPILE PNG "icons\\DendroPile.png"
DENDROPROJECTOR PNG "icons\\DendroProjector.png"
DENDROROCK PNG "icons\\DendroRock.png"
DIVDARAY PNG "icons\\DivdaRay.png" DIVDARAY PNG "icons\\DivdaRay.png"
DOG PNG "icons\\Dog.png" DOG PNG "icons\\Dog.png"
DOMAIN PNG "icons\\Domain.png" DOMAIN PNG "icons\\Domain.png"
DREADFULWITHERING PNG "icons\\DreadfulWithering.png"
DREAMFORM PNG "icons\\DreamForm.png"
DUNLINSTOOTH PNG "icons\\DunlinsTooth.png" DUNLINSTOOTH PNG "icons\\DunlinsTooth.png"
DUSKBIRD PNG "icons\\DuskBird.png"
DVALIN PNG "icons\\Dvalin.png" DVALIN PNG "icons\\Dvalin.png"
ECHOINGCONCH PNG "icons\\EchoingConch.png" ECHOINGCONCH PNG "icons\\EchoingConch.png"
@ -1076,6 +1128,8 @@ HORSETAIL PNG "icons\\Horsetail.png"
HYDROABYSSHERALD PNG "icons\\HydroAbyssHerald.png" HYDROABYSSHERALD PNG "icons\\HydroAbyssHerald.png"
HYDROBATHYSMALVISHAP PNG "icons\\HydroBathysmalVishap.png"
HYDROHYPOSTASIS PNG "icons\\HydroHypostasis.png" HYDROHYPOSTASIS PNG "icons\\HydroHypostasis.png"
ILLUSION PNG "icons\\Illusion.png" ILLUSION PNG "icons\\Illusion.png"
@ -1156,6 +1210,8 @@ MATSUTAKE PNG "icons\\Matsutake.png"
MEDAKA PNG "icons\\Medaka.png" MEDAKA PNG "icons\\Medaka.png"
MELODICBLOOM PNG "icons\\MelodicBloom.png"
MERCHANT PNG "icons\\Merchant.png" MERCHANT PNG "icons\\Merchant.png"
MILLELITH PNG "icons\\Millelith.png" MILLELITH PNG "icons\\Millelith.png"
@ -1190,6 +1246,8 @@ NOCTILUCOUSJADE PNG "icons\\NoctilucousJade.png"
NPC PNG "icons\\Npc.png" NPC PNG "icons\\Npc.png"
NURSERIESINTHEWILDS PNG "icons\\NurseriesInTheWilds.png"
OCEANCRAB PNG "icons\\OceanCrab.png" OCEANCRAB PNG "icons\\OceanCrab.png"
OCEANID PNG "icons\\Oceanid.png" OCEANID PNG "icons\\Oceanid.png"
@ -1222,6 +1280,8 @@ PALEREDCRAB PNG "icons\\PaleRedCrab.png"
PERPETUALMECHANICALARRAY PNG "icons\\PerpetualMechanicalArray.png" PERPETUALMECHANICALARRAY PNG "icons\\PerpetualMechanicalArray.png"
PHANTASMALGATE PNG "icons\\PhantasmalGate.png"
PHASEGATE PNG "icons\\PhaseGate.png" PHASEGATE PNG "icons\\PhaseGate.png"
PHILANEMOMUSHROOM PNG "icons\\PhilanemoMushroom.png" PHILANEMOMUSHROOM PNG "icons\\PhilanemoMushroom.png"
@ -1300,6 +1360,8 @@ RUSTYKOI PNG "icons\\RustyKoi.png"
SACREDSAKURA PNG "icons\\SacredSakura.png" SACREDSAKURA PNG "icons\\SacredSakura.png"
SAGHIRAMACHINE PNG "icons\\SaghiraMachine.png"
SAKURABLOOM PNG "icons\\SakuraBloom.png" SAKURABLOOM PNG "icons\\SakuraBloom.png"
SALAMANDER PNG "icons\\Salamander.png" SALAMANDER PNG "icons\\Salamander.png"
@ -1322,8 +1384,6 @@ SEAGRASS PNG "icons\\Seagrass.png"
SEALEDCHEST PNG "icons\\SealedChest.png" SEALEDCHEST PNG "icons\\SealedChest.png"
SEALLOCATIONS PNG "icons\\SealLocationI.png"
SEALLOCATIONI PNG "icons\\SealLocationI.png" SEALLOCATIONI PNG "icons\\SealLocationI.png"
SEALLOCATIONII PNG "icons\\SealLocationII.png" SEALLOCATIONII PNG "icons\\SealLocationII.png"
@ -1332,6 +1392,8 @@ SEALLOCATIONIII PNG "icons\\SealLocationIII.png"
SEALLOCATIONIV PNG "icons\\SealLocationIV.png" SEALLOCATIONIV PNG "icons\\SealLocationIV.png"
SEALLOCATIONS PNG "icons\\SealLocationI.png"
SEALLOCATIONV PNG "icons\\SealLocationV.png" SEALLOCATIONV PNG "icons\\SealLocationV.png"
SEELIE PNG "icons\\Seelie.png" SEELIE PNG "icons\\Seelie.png"
@ -1380,12 +1442,16 @@ SQUIRREL PNG "icons\\Squirrel.png"
STARCONCH PNG "icons\\Starconch.png" STARCONCH PNG "icons\\Starconch.png"
STARLIGHTCOALESCENCE PNG "icons\\StarlightCoalescence.png"
STARSHROOM PNG "icons\\Starshroom.png" STARSHROOM PNG "icons\\Starshroom.png"
STARSILVER PNG "icons\\Starsilver.png" STARSILVER PNG "icons\\Starsilver.png"
STATUEOFTHESEVEN PNG "icons\\StatueofTheSeven.png" STATUEOFTHESEVEN PNG "icons\\StatueofTheSeven.png"
STONEPILLARSEAL PNG "icons\\StonePillarSeal.png"
STORMBARRIER PNG "icons\\StormBarrier.png" STORMBARRIER PNG "icons\\StormBarrier.png"
STORMSTONE PNG "icons\\Stormstone.png" STORMSTONE PNG "icons\\Stormstone.png"
@ -1420,6 +1486,8 @@ THECRUXTHEALCOR PNG "icons\\TheCruxTheAlcor.png"
THEGREATSNOWBOARKING PNG "icons\\TheGreatSnowboarKing.png" THEGREATSNOWBOARKING PNG "icons\\TheGreatSnowboarKing.png"
THERAVENFORUM PNG "icons\\TheRavenForum.png"
THREEBOXES PNG "icons\\ThreeBoxes.png" THREEBOXES PNG "icons\\ThreeBoxes.png"
THUNDERMANIFESTATION PNG "icons\\ThunderManifestation.png" THUNDERMANIFESTATION PNG "icons\\ThunderManifestation.png"
@ -1432,7 +1500,7 @@ TREASUREHOARDER PNG "icons\\TreasureHoarder.png"
TRIANGULARMECHANISM PNG "icons\\TriangularMechanism.png" TRIANGULARMECHANISM PNG "icons\\TriangularMechanism.png"
TUKAN PNG "icons\\Tukan.png" TRIYANASEEDS PNG "icons\\TriYanaSeeds.png"
UNAGIMEAT PNG "icons\\UnagiMeat.png" UNAGIMEAT PNG "icons\\UnagiMeat.png"
@ -1487,16 +1555,7 @@ WORLDQUESTS PNG "icons\\WorldQuests.png"
YUMEMIRUWOOD PNG "icons\\YumemiruWood.png" YUMEMIRUWOOD PNG "icons\\YumemiruWood.png"
ZAYTUNPEACH PNG "icons\\ZaytunPeach.png" ZAYTUNPEACH PNG "icons\\ZaytunPeach.png"
#pragma endregion
MELODICBLOOM PNG "icons\\MelodicBloom.png"
CLOUDLEISURESTEPS PNG "icons\\CloudleisureSteps.png"
DREAMFORM PNG "icons\\DreamForm.png"
STARLIGHTCOALESCENCE PNG "icons\\StarlightCoalescence.png"
THERAVENFORUM PNG "icons\\TheRavenForum.png"
#endif // English (United States) resources #endif // English (United States) resources
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -42,6 +42,7 @@
#include <cheat/world/AutoFish.h> #include <cheat/world/AutoFish.h>
#include <cheat/world/AutoCook.h> #include <cheat/world/AutoCook.h>
#include <cheat/world/AutoChallenge.h>
#include <cheat/world/CustomWeather.h> #include <cheat/world/CustomWeather.h>
#include <cheat/visuals/NoFog.h> #include <cheat/visuals/NoFog.h>
@ -99,6 +100,7 @@ namespace cheat
FEAT_INST(FreezeEnemies), FEAT_INST(FreezeEnemies),
FEAT_INST(ElementalSight), FEAT_INST(ElementalSight),
FEAT_INST(KillAura), FEAT_INST(KillAura),
FEAT_INST(AutoChallenge),
FEAT_INST(MobVacuum), FEAT_INST(MobVacuum),
FEAT_INST(FakeTime), FEAT_INST(FakeTime),

View File

@ -581,27 +581,30 @@ namespace cheat::feature
ADD_FILTER_FIELD(chest, LuxuriousChest); ADD_FILTER_FIELD(chest, LuxuriousChest);
ADD_FILTER_FIELD(chest, RemarkableChest); ADD_FILTER_FIELD(chest, RemarkableChest);
// Other Chests // Other Chests
ADD_FILTER_FIELD(chest, BuriedChest); //ADD_FILTER_FIELD(chest, BuriedChest); // Shared name, commented for now
ADD_FILTER_FIELD(chest, SearchPoint); ADD_FILTER_FIELD(chest, SearchPoint);
ADD_FILTER_FIELD(featured, Anemoculus); ADD_FILTER_FIELD(featured, Anemoculus);
ADD_FILTER_FIELD(featured, CrimsonAgate); ADD_FILTER_FIELD(featured, CrimsonAgate);
ADD_FILTER_FIELD(featured, Electroculus);
ADD_FILTER_FIELD(featured, Dendroculus); ADD_FILTER_FIELD(featured, Dendroculus);
ADD_FILTER_FIELD(featured, EchoingConch); ADD_FILTER_FIELD(featured, Electroculus);
ADD_FILTER_FIELD(featured, Electrogranum); ADD_FILTER_FIELD(featured, Electrogranum);
ADD_FILTER_FIELD(featured, FishingPoint); ADD_FILTER_FIELD(featured, FishingPoint);
ADD_FILTER_FIELD(featured, Geoculus); ADD_FILTER_FIELD(featured, Geoculus);
ADD_FILTER_FIELD(featured, ImagingConch);
ADD_FILTER_FIELD(featured, ItemDrops); ADD_FILTER_FIELD(featured, ItemDrops);
ADD_FILTER_FIELD(featured, KeySigil); ADD_FILTER_FIELD(featured, KeySigil);
ADD_FILTER_FIELD(featured, Lumenspar); ADD_FILTER_FIELD(featured, Lumenspar);
ADD_FILTER_FIELD(featured, ShrineOfDepth); ADD_FILTER_FIELD(featured, ShrineOfDepth);
ADD_FILTER_FIELD(featured, TimeTrialChallenge); ADD_FILTER_FIELD(featured, TimeTrialChallenge);
ADD_FILTER_FIELD(guide, BouncyMushroom);
ADD_FILTER_FIELD(guide, CampfireTorch); ADD_FILTER_FIELD(guide, CampfireTorch);
ADD_FILTER_FIELD(guide, ClusterleafOfCultivation);
ADD_FILTER_FIELD(guide, DayNightSwitchingMechanism); ADD_FILTER_FIELD(guide, DayNightSwitchingMechanism);
ADD_FILTER_FIELD(guide, DendroGranum);
ADD_FILTER_FIELD(guide, DendroPile);
ADD_FILTER_FIELD(guide, DendroRock);
ADD_FILTER_FIELD(guide, EnkanomiyaPhaseGate); ADD_FILTER_FIELD(guide, EnkanomiyaPhaseGate);
ADD_FILTER_FIELD(guide, MysteriousCarvings); ADD_FILTER_FIELD(guide, MysteriousCarvings);
ADD_FILTER_FIELD(guide, PhaseGate); ADD_FILTER_FIELD(guide, PhaseGate);
@ -623,6 +626,7 @@ namespace cheat::feature
ADD_FILTER_FIELD(living, Crow); ADD_FILTER_FIELD(living, Crow);
ADD_FILTER_FIELD(living, CrystalCore); ADD_FILTER_FIELD(living, CrystalCore);
ADD_FILTER_FIELD(living, Dog); ADD_FILTER_FIELD(living, Dog);
ADD_FILTER_FIELD(living, DuskBird);
ADD_FILTER_FIELD(living, Eel); ADD_FILTER_FIELD(living, Eel);
ADD_FILTER_FIELD(living, Falcon); ADD_FILTER_FIELD(living, Falcon);
ADD_FILTER_FIELD(living, Finch); ADD_FILTER_FIELD(living, Finch);
@ -640,7 +644,6 @@ namespace cheat::feature
ADD_FILTER_FIELD(living, Salamander); ADD_FILTER_FIELD(living, Salamander);
ADD_FILTER_FIELD(living, Squirrel); ADD_FILTER_FIELD(living, Squirrel);
ADD_FILTER_FIELD(living, Starconch); ADD_FILTER_FIELD(living, Starconch);
ADD_FILTER_FIELD(living, Tukan);
ADD_FILTER_FIELD(living, Weasel); ADD_FILTER_FIELD(living, Weasel);
ADD_FILTER_FIELD(living, Wigeon); ADD_FILTER_FIELD(living, Wigeon);
@ -710,7 +713,6 @@ namespace cheat::feature
ADD_FILTER_FIELD(monster, Hilichurl); ADD_FILTER_FIELD(monster, Hilichurl);
ADD_FILTER_FIELD(monster, HydroAbyssHerald); ADD_FILTER_FIELD(monster, HydroAbyssHerald);
ADD_FILTER_FIELD(monster, HydroBathysmalVishap); ADD_FILTER_FIELD(monster, HydroBathysmalVishap);
ADD_FILTER_FIELD(monster, HydroHypostasisSummon);
ADD_FILTER_FIELD(monster, Kairagi); ADD_FILTER_FIELD(monster, Kairagi);
ADD_FILTER_FIELD(monster, Millelith); ADD_FILTER_FIELD(monster, Millelith);
ADD_FILTER_FIELD(monster, Mitachurl); ADD_FILTER_FIELD(monster, Mitachurl);
@ -789,7 +791,7 @@ namespace cheat::feature
ADD_FILTER_FIELD(plant, SweetFlower); ADD_FILTER_FIELD(plant, SweetFlower);
ADD_FILTER_FIELD(plant, Valberry); ADD_FILTER_FIELD(plant, Valberry);
ADD_FILTER_FIELD(plant, Violetgrass); ADD_FILTER_FIELD(plant, Violetgrass);
//ADD_FILTER_FIELD(plant, Viparyas); ADD_FILTER_FIELD(plant, Viparyas);
ADD_FILTER_FIELD(plant, WindwheelAster); ADD_FILTER_FIELD(plant, WindwheelAster);
ADD_FILTER_FIELD(plant, Wolfhook); ADD_FILTER_FIELD(plant, Wolfhook);
ADD_FILTER_FIELD(plant, ZaytunPeach); ADD_FILTER_FIELD(plant, ZaytunPeach);
@ -798,39 +800,41 @@ namespace cheat::feature
ADD_FILTER_FIELD(puzzle, BakeDanuki); ADD_FILTER_FIELD(puzzle, BakeDanuki);
ADD_FILTER_FIELD(puzzle, BloattyFloatty); ADD_FILTER_FIELD(puzzle, BloattyFloatty);
ADD_FILTER_FIELD(puzzle, CubeDevices); ADD_FILTER_FIELD(puzzle, CubeDevices);
ADD_FILTER_FIELD(puzzle, DendroProjector);
ADD_FILTER_FIELD(puzzle, DreadfulWithering);
ADD_FILTER_FIELD(puzzle, EightStoneTablets); ADD_FILTER_FIELD(puzzle, EightStoneTablets);
ADD_FILTER_FIELD(puzzle, ElectricConduction); ADD_FILTER_FIELD(puzzle, ElectricConduction);
ADD_FILTER_FIELD(puzzle, RelayStone);
ADD_FILTER_FIELD(puzzle, ElectroSeelie); ADD_FILTER_FIELD(puzzle, ElectroSeelie);
ADD_FILTER_FIELD(puzzle, ElementalMonument); ADD_FILTER_FIELD(puzzle, ElementalMonument);
ADD_FILTER_FIELD(puzzle, FloatingAnemoSlime); ADD_FILTER_FIELD(puzzle, FloatingAnemoSlime);
ADD_FILTER_FIELD(puzzle, Geogranum); ADD_FILTER_FIELD(puzzle, Geogranum);
ADD_FILTER_FIELD(puzzle, GeoPuzzle); ADD_FILTER_FIELD(puzzle, GeoPuzzle);
ADD_FILTER_FIELD(puzzle, LargeRockPile); ADD_FILTER_FIELD(puzzle, LargeRockPile);
ADD_FILTER_FIELD(puzzle, LightUpTilePuzzle);
ADD_FILTER_FIELD(puzzle, LightningStrikeProbe); ADD_FILTER_FIELD(puzzle, LightningStrikeProbe);
ADD_FILTER_FIELD(puzzle, LightUpTilePuzzle);
ADD_FILTER_FIELD(puzzle, LumenCage); ADD_FILTER_FIELD(puzzle, LumenCage);
ADD_FILTER_FIELD(puzzle, LuminousSeelie); ADD_FILTER_FIELD(puzzle, LuminousSeelie);
ADD_FILTER_FIELD(puzzle, MistBubble); ADD_FILTER_FIELD(puzzle, MistBubble);
ADD_FILTER_FIELD(puzzle, NurseriesInTheWilds);
ADD_FILTER_FIELD(puzzle, OozingConcretions); ADD_FILTER_FIELD(puzzle, OozingConcretions);
ADD_FILTER_FIELD(puzzle, PhantasmalGate);
ADD_FILTER_FIELD(puzzle, PirateHelm); ADD_FILTER_FIELD(puzzle, PirateHelm);
ADD_FILTER_FIELD(puzzle, PressurePlate); ADD_FILTER_FIELD(puzzle, PressurePlate);
ADD_FILTER_FIELD(puzzle, RelayStone);
ADD_FILTER_FIELD(puzzle, SaghiraMachine);
ADD_FILTER_FIELD(puzzle, SealLocations); ADD_FILTER_FIELD(puzzle, SealLocations);
ADD_FILTER_FIELD(puzzle, Seelie); ADD_FILTER_FIELD(puzzle, Seelie);
ADD_FILTER_FIELD(puzzle, SeelieLamp); ADD_FILTER_FIELD(puzzle, SeelieLamp);
ADD_FILTER_FIELD(puzzle, SmallRockPile); ADD_FILTER_FIELD(puzzle, SmallRockPile);
ADD_FILTER_FIELD(puzzle, StonePillarSeal);
ADD_FILTER_FIELD(puzzle, StormBarrier); ADD_FILTER_FIELD(puzzle, StormBarrier);
ADD_FILTER_FIELD(puzzle, SwordHilt); ADD_FILTER_FIELD(puzzle, SwordHilt);
ADD_FILTER_FIELD(puzzle, Temari); ADD_FILTER_FIELD(puzzle, Temari);
ADD_FILTER_FIELD(puzzle, TorchPuzzle); ADD_FILTER_FIELD(puzzle, TorchPuzzle);
ADD_FILTER_FIELD(puzzle, TriYanaSeeds);
ADD_FILTER_FIELD(puzzle, UniqueRocks); ADD_FILTER_FIELD(puzzle, UniqueRocks);
ADD_FILTER_FIELD(puzzle, WarmingSeelie); ADD_FILTER_FIELD(puzzle, WarmingSeelie);
ADD_FILTER_FIELD(puzzle, WindmillMechanism); ADD_FILTER_FIELD(puzzle, WindmillMechanism);
ADD_FILTER_FIELD(puzzle, MelodicBloom);
ADD_FILTER_FIELD(puzzle, CloudleisureSteps);
ADD_FILTER_FIELD(puzzle, DreamForm);
ADD_FILTER_FIELD(puzzle, StarlightCoalescence);
ADD_FILTER_FIELD(puzzle, TheRavenForum);
} }
#undef ADD_FILTER_FIELD #undef ADD_FILTER_FIELD
} }

View File

@ -24,7 +24,7 @@ namespace cheat::game
entityFilters[filter] = { false, 0 }; entityFilters[filter] = { false, 0 };
auto& entry = entityFilters[filter]; auto& entry = entityFilters[filter];
auto timestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr); auto timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
if (entry.second + m_LifeTime > timestamp) if (entry.second + m_LifeTime > timestamp)
return entry.first; return entry.first;

View File

@ -75,6 +75,11 @@ namespace cheat::game::filters
SimpleFilter RuinBrazier = { EntityType__Enum_1::Gadget, "_AncientHeatSource" }; SimpleFilter RuinBrazier = { EntityType__Enum_1::Gadget, "_AncientHeatSource" };
SimpleFilter Stormstone = { EntityType__Enum_1::Gadget, "_ReginLamp" }; SimpleFilter Stormstone = { EntityType__Enum_1::Gadget, "_ReginLamp" };
SimpleFilter TriangularMechanism = { EntityType__Enum_1::Field, "_TuningFork" }; SimpleFilter TriangularMechanism = { EntityType__Enum_1::Field, "_TuningFork" };
SimpleFilter DendroGranum = { EntityType__Enum_1::Gadget, "GrassSeedCreate" };
SimpleFilter BouncyMushroom = { EntityType__Enum_1::Gadget, "JumpMushroom" };
SimpleFilter ClusterleafOfCultivation = { EntityType__Enum_1::Field, "RaioFlower" };
SimpleFilter DendroRock = { EntityType__Enum_1::Field, "GrassSealStone" };
SimpleFilter DendroPile = { EntityType__Enum_1::Field, "XuMiPlantinshitou" };
} }
namespace living namespace living
@ -101,7 +106,7 @@ namespace cheat::game::filters
SimpleFilter Falcon = { EntityType__Enum_1::Monster, "Falcon" }; SimpleFilter Falcon = { EntityType__Enum_1::Monster, "Falcon" };
SimpleFilter LucklightFly = { EntityType__Enum_1::EnvAnimal, "Boltbug_" }; SimpleFilter LucklightFly = { EntityType__Enum_1::EnvAnimal, "Boltbug_" };
SimpleFilter Salamander = { EntityType__Enum_1::EnvAnimal, "Salamander" }; SimpleFilter Salamander = { EntityType__Enum_1::EnvAnimal, "Salamander" };
SimpleFilter Tukan = { EntityType__Enum_1::Monster, "Pigeon_Beak" }; SimpleFilter DuskBird = { EntityType__Enum_1::Monster, "Pigeon_Beak" };
SimpleFilter Pigeon = { EntityType__Enum_1::Monster, "Pigeon_0" }; SimpleFilter Pigeon = { EntityType__Enum_1::Monster, "Pigeon_0" };
SimpleFilter Crow = { EntityType__Enum_1::Monster, "Crow" }; SimpleFilter Crow = { EntityType__Enum_1::Monster, "Crow" };
SimpleFilter Finch = { EntityType__Enum_1::Monster, "Tit" }; SimpleFilter Finch = { EntityType__Enum_1::Monster, "Tit" };
@ -277,7 +282,7 @@ namespace cheat::game::filters
SimpleFilter Padisarah = { EntityType__Enum_1::GatherObject, "_Pasusalan" }; SimpleFilter Padisarah = { EntityType__Enum_1::GatherObject, "_Pasusalan" };
SimpleFilter RukkhashavaMushrooms = { EntityType__Enum_1::GatherObject, "_HolyMushroom" }; SimpleFilter RukkhashavaMushrooms = { EntityType__Enum_1::GatherObject, "_HolyMushroom" };
SimpleFilter SumeruRose = { EntityType__Enum_1::GatherObject, "_XumiRose" }; SimpleFilter SumeruRose = { EntityType__Enum_1::GatherObject, "_XumiRose" };
//SimpleFilter Viparyas = { EntityType__Enum_1::GatherObject, "_" }; SimpleFilter Viparyas = { EntityType__Enum_1::GatherObject, "_DreamerPlant" };
SimpleFilter ZaytunPeach = { EntityType__Enum_1::GatherObject, "_Olea" }; SimpleFilter ZaytunPeach = { EntityType__Enum_1::GatherObject, "_Olea" };
} }
@ -320,7 +325,15 @@ namespace cheat::game::filters
WhitelistFilter DreamForm = { {EntityType__Enum_1::Field, EntityType__Enum_1::Platform }, "_AnimalSeelie" }; WhitelistFilter DreamForm = { {EntityType__Enum_1::Field, EntityType__Enum_1::Platform }, "_AnimalSeelie" };
SimpleFilter StarlightCoalescence = { EntityType__Enum_1::Field, "_PaperStar" }; SimpleFilter StarlightCoalescence = { EntityType__Enum_1::Field, "_PaperStar" };
SimpleFilter TheRavenForum = { EntityType__Enum_1::Gadget, "_NightCrowStatue" }; SimpleFilter TheRavenForum = { EntityType__Enum_1::Gadget, "_NightCrowStatue" };
WhitelistFilter TimeTrialChallengeCollection = { { EntityType__Enum_1::Field, EntityType__Enum_1::Gadget }, { "SkillObj_EmptyGadget", "_GlideChampOrb" } };
SimpleFilter Bombbarrel = { EntityType__Enum_1::Gadget, "_Bombbarrel" };
SimpleFilter NurseriesInTheWilds = { EntityType__Enum_1::Field, "PlantDrawStart" };
SimpleFilter SaghiraMachine = { EntityType__Enum_1::Gadget, "FatuiMaranaWell" };
SimpleFilter StonePillarSeal = { EntityType__Enum_1::Gadget, "GrassSealRing_" };
SimpleFilter TriYanaSeeds = { EntityType__Enum_1::Gadget, "XuMiVisualizationplant" };
SimpleFilter DendroProjector = { EntityType__Enum_1::Gadget, "AyusProjector" };
SimpleFilter DreadfulWithering = { EntityType__Enum_1::Gadget, "DeathZonePoint" };
SimpleFilter PhantasmalGate = { EntityType__Enum_1::Field, "DreamlandDoor" };
} }
namespace combined namespace combined
@ -394,7 +407,7 @@ namespace cheat::game::filters
living::Squirrel, living::Squirrel,
living::Boar, living::Boar,
living::Weasel, living::Weasel,
living::Tukan living::DuskBird
}; };
SimpleFilter AnimalPickUp = { SimpleFilter AnimalPickUp = {
living::CrystalCore, living::CrystalCore,

View File

@ -76,6 +76,11 @@ namespace cheat::game::filters
extern SimpleFilter RuinBrazier; extern SimpleFilter RuinBrazier;
extern SimpleFilter Stormstone; extern SimpleFilter Stormstone;
extern SimpleFilter TriangularMechanism; extern SimpleFilter TriangularMechanism;
extern SimpleFilter DendroGranum;
extern SimpleFilter BouncyMushroom;
extern SimpleFilter ClusterleafOfCultivation;
extern SimpleFilter DendroRock;
extern SimpleFilter DendroPile;
} }
namespace living namespace living
@ -102,7 +107,7 @@ namespace cheat::game::filters
extern SimpleFilter LucklightFly; extern SimpleFilter LucklightFly;
extern SimpleFilter Npc; extern SimpleFilter Npc;
extern SimpleFilter Salamander; extern SimpleFilter Salamander;
extern SimpleFilter Tukan; extern SimpleFilter DuskBird;
extern SimpleFilter Pigeon; extern SimpleFilter Pigeon;
extern SimpleFilter Crow; extern SimpleFilter Crow;
extern SimpleFilter Finch; extern SimpleFilter Finch;
@ -277,7 +282,7 @@ namespace cheat::game::filters
extern SimpleFilter Padisarah; extern SimpleFilter Padisarah;
extern SimpleFilter RukkhashavaMushrooms; extern SimpleFilter RukkhashavaMushrooms;
extern SimpleFilter SumeruRose; extern SimpleFilter SumeruRose;
//extern SimpleFilter Viparyas; extern SimpleFilter Viparyas;
extern SimpleFilter ZaytunPeach; extern SimpleFilter ZaytunPeach;
} }
@ -320,6 +325,15 @@ namespace cheat::game::filters
extern WhitelistFilter DreamForm; extern WhitelistFilter DreamForm;
extern SimpleFilter StarlightCoalescence; extern SimpleFilter StarlightCoalescence;
extern SimpleFilter TheRavenForum; extern SimpleFilter TheRavenForum;
extern WhitelistFilter TimeTrialChallengeCollection;
extern SimpleFilter Bombbarrel;
extern SimpleFilter NurseriesInTheWilds;
extern SimpleFilter SaghiraMachine;
extern SimpleFilter StonePillarSeal;
extern SimpleFilter TriYanaSeeds;
extern SimpleFilter DendroProjector;
extern SimpleFilter DreadfulWithering;
extern SimpleFilter PhantasmalGate;
} }
namespace combined namespace combined

View File

@ -563,13 +563,13 @@ namespace cheat::feature
std::lock_guard _userDataLock(m_UserDataMutex); std::lock_guard _userDataLock(m_UserDataMutex);
LOG_WARNING("Complete point at %.0f.", game::EntityManager::instance().avatar()->distance(pointData->levelPosition)); LOG_WARNING("Complete point at %.0f.", game::EntityManager::instance().avatar()->distance(pointData->levelPosition));
if (m_CompletedPoints.count(pointData) > 0) if (std::find_if(m_CompletedPoints.begin(), m_CompletedPoints.end(), [=](PointData* data) { return pointData->id == data->id; }) != std::end(m_CompletedPoints))
return; return;
pointData->completed = true; pointData->completed = true;
pointData->completeTimestamp = util::GetCurrentTimeMillisec(); pointData->completeTimestamp = util::GetCurrentTimeMillisec();
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount++; m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount++;
m_CompletedPoints.insert(pointData); m_CompletedPoints.push_back(pointData);
SaveCompletedPoints(); SaveCompletedPoints();
} }
@ -578,13 +578,14 @@ namespace cheat::feature
{ {
std::lock_guard _userDataLock(m_UserDataMutex); std::lock_guard _userDataLock(m_UserDataMutex);
if (m_CompletedPoints.count(pointData) == 0) auto pointDataIterator = std::find_if(m_CompletedPoints.begin(), m_CompletedPoints.end(), [=](PointData* data) { return pointData->id == data->id; });
if (pointDataIterator == m_CompletedPoints.end())
return; return;
pointData->completed = false; pointData->completed = false;
pointData->completeTimestamp = 0; pointData->completeTimestamp = 0;
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--; m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
m_CompletedPoints.erase(pointData); m_CompletedPoints.erase(pointDataIterator);
SaveCompletedPoints(); SaveCompletedPoints();
} }
@ -595,11 +596,12 @@ namespace cheat::feature
if (m_CompletedPoints.empty()) if (m_CompletedPoints.empty())
return; return;
PointData* pointData = *m_CompletedPoints.begin(); auto pointDataIterator = --m_CompletedPoints.end();
PointData* pointData = *pointDataIterator;
pointData->completed = false; pointData->completed = false;
pointData->completeTimestamp = 0; pointData->completeTimestamp = 0;
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--; m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
m_CompletedPoints.erase(pointData); m_CompletedPoints.erase(pointDataIterator);
SaveCompletedPoints(); SaveCompletedPoints();
} }
@ -916,7 +918,7 @@ namespace cheat::feature
} }
auto& point = points[pointID]; auto& point = points[pointID];
if (m_CompletedPoints.count(&point) > 0) if (std::find_if(m_CompletedPoints.begin(), m_CompletedPoints.end(), [=](PointData* data) { return point.id == data->id; }) != std::end(m_CompletedPoints))
{ {
LOG_WARNING("Completed point %u duplicate.", pointID); LOG_WARNING("Completed point %u duplicate.", pointID);
return; return;
@ -926,7 +928,7 @@ namespace cheat::feature
point.completeTimestamp = data["complete_timestamp"]; point.completeTimestamp = data["complete_timestamp"];
labelData->completedCount++; labelData->completedCount++;
m_CompletedPoints.insert(&point); m_CompletedPoints.push_back(&point);
} }
void InteractiveMap::LoadFixedPointData(LabelData* labelData, const nlohmann::json& data) void InteractiveMap::LoadFixedPointData(LabelData* labelData, const nlohmann::json& data)
@ -1026,6 +1028,7 @@ namespace cheat::feature
void InteractiveMap::LoadCompletedPoints() void InteractiveMap::LoadCompletedPoints()
{ {
LoadUserData(f_CompletedPointsJson, &InteractiveMap::LoadCompletedPointData); LoadUserData(f_CompletedPointsJson, &InteractiveMap::LoadCompletedPointData);
ReorderCompletedPointDataByTimestamp();
} }
void InteractiveMap::SaveCompletedPoints() void InteractiveMap::SaveCompletedPoints()
@ -1040,6 +1043,11 @@ namespace cheat::feature
m_CompletedPoints.clear(); m_CompletedPoints.clear();
} }
void InteractiveMap::ReorderCompletedPointDataByTimestamp()
{
m_CompletedPoints.sort([](PointData* a, PointData* b) { return a->completeTimestamp < b->completeTimestamp; });
}
void InteractiveMap::LoadCustomPoints() void InteractiveMap::LoadCustomPoints()
{ {
LoadUserData(f_CustomPointsJson, &InteractiveMap::LoadCustomPointData); LoadUserData(f_CustomPointsJson, &InteractiveMap::LoadCustomPointData);
@ -1779,9 +1787,11 @@ namespace cheat::feature
INIT_FILTER(chest, RemarkableChest); INIT_FILTER(chest, RemarkableChest);
INIT_FILTER(featured, Anemoculus); INIT_FILTER(featured, Anemoculus);
INIT_FILTER(featured, CrimsonAgate); INIT_FILTER(featured, CrimsonAgate);
INIT_FILTER(featured, Dendroculus);
INIT_FILTER(featured, Electroculus); INIT_FILTER(featured, Electroculus);
//INIT_FILTER(featured, Electrogranum); //INIT_FILTER(featured, Electrogranum);
INIT_FILTER(featured, Geoculus); INIT_FILTER(featured, Geoculus);
INIT_FILTER(featured, KeySigil);
INIT_FILTER(featured, Lumenspar); INIT_FILTER(featured, Lumenspar);
//INIT_FILTER(featured, KeySigil); //INIT_FILTER(featured, KeySigil);
//INIT_FILTER(featured, ShrineOfDepth); //INIT_FILTER(featured, ShrineOfDepth);
@ -1917,8 +1927,10 @@ namespace cheat::feature
INIT_DETECT_ITEM(Anemoculus); INIT_DETECT_ITEM(Anemoculus);
INIT_DETECT_ITEM(CrimsonAgate); INIT_DETECT_ITEM(CrimsonAgate);
INIT_DETECT_ITEM(Dendroculus);
INIT_DETECT_ITEM(Electroculus); INIT_DETECT_ITEM(Electroculus);
INIT_DETECT_ITEM(Geoculus); INIT_DETECT_ITEM(Geoculus);
INIT_DETECT_ITEM(KeySigil);
INIT_DETECT_ITEM(Lumenspar); INIT_DETECT_ITEM(Lumenspar);
#undef INIT_DETECT_ITEM #undef INIT_DETECT_ITEM

View File

@ -146,7 +146,7 @@ namespace cheat::feature
std::unordered_set<PointData*> m_CustomPoints; std::unordered_set<PointData*> m_CustomPoints;
std::unordered_set<PointData*> m_FixedPoints; std::unordered_set<PointData*> m_FixedPoints;
std::unordered_set<PointData*> m_CompletedPoints; std::list<PointData*> m_CompletedPoints;
std::mutex m_PointMutex; std::mutex m_PointMutex;
// PointData* m_SelectedPoint; // PointData* m_SelectedPoint;
@ -182,6 +182,7 @@ namespace cheat::feature
void LoadCompletedPointData(LabelData* labelData, const nlohmann::json& data); void LoadCompletedPointData(LabelData* labelData, const nlohmann::json& data);
void SaveCompletedPointData(nlohmann::json& jObject, PointData* point); void SaveCompletedPointData(nlohmann::json& jObject, PointData* point);
bool ResetCompletedPointData(LabelData* label, PointData* point); bool ResetCompletedPointData(LabelData* label, PointData* point);
void ReorderCompletedPointDataByTimestamp();
void LoadCustomPointData(LabelData* labelData, const nlohmann::json& data); void LoadCustomPointData(LabelData* labelData, const nlohmann::json& data);
void SaveCustomPointData(nlohmann::json& jObject, PointData* point); void SaveCustomPointData(nlohmann::json& jObject, PointData* point);

View File

@ -203,7 +203,8 @@ namespace cheat::feature
for (auto entity : entities) { for (auto entity : entities) {
auto entityPos = entity->absolutePosition(); auto entityPos = entity->absolutePosition();
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}"; std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
auto entityDetails = fmt::format(baseString, auto entityDetails = fmt::format(
fmt::runtime(baseString),
fmt::ptr(entity), fmt::ptr(entity),
entity->runtimeID(), entity->runtimeID(),
entity->name().c_str(), entity->name().c_str(),
@ -222,7 +223,8 @@ namespace cheat::feature
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}"; std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
if (csvFriendly && includeHeaders) if (csvFriendly && includeHeaders)
baseString = headerString.append(baseString); baseString = headerString.append(baseString);
auto entityDetails = fmt::format(baseString, auto entityDetails = fmt::format(
fmt::runtime(baseString),
fmt::ptr(entity), fmt::ptr(entity),
entity->runtimeID(), entity->runtimeID(),
entity->name().c_str(), entity->name().c_str(),

View File

@ -13,11 +13,17 @@ namespace cheat::feature
return inst.OnRecordUserData(nType); return inst.OnRecordUserData(nType);
} }
static int CrashReporter_Hook(__int64 a1, __int64 a2, const char* a3)
{
return 0;
}
ProtectionBypass::ProtectionBypass() : Feature(), ProtectionBypass::ProtectionBypass() : Feature(),
NFEX(f_Enabled, "Disable Protection", "m_DisableMhyProt", "General", true, false), NFEX(f_Enabled, "Disable Protection", "m_DisableMhyProt", "General", true, false),
m_CorrectSignatures({}) m_CorrectSignatures({})
{ {
HookManager::install(app::Unity_RecordUserData, RecordUserData_Hook); HookManager::install(app::Unity_RecordUserData, RecordUserData_Hook);
HookManager::install(app::CrashReporter, CrashReporter_Hook);
} }
void ProtectionBypass::Init() void ProtectionBypass::Init()

View File

@ -79,9 +79,9 @@ namespace cheat::feature
static bool afterDash = false; static bool afterDash = false;
auto& manager = game::EntityManager::instance(); auto& manager = game::EntityManager::instance();
if (manager.avatar()->runtimeID() != entityId) auto entity = manager.entity(entityId);
return; if (entity->type() == app::EntityType__Enum_1::Vehicle || entity->isAvatar())
{
// LOG_DEBUG("Movement packet: %s", magic_enum::enum_name(syncInfo->fields.motionState).data()); // LOG_DEBUG("Movement packet: %s", magic_enum::enum_name(syncInfo->fields.motionState).data());
if (f_Enabled && f_PacketReplacement) if (f_Enabled && f_PacketReplacement)
{ {
@ -106,11 +106,16 @@ namespace cheat::feature
if (afterDash) if (afterDash)
syncInfo->fields.motionState = app::MotionState__Enum::MotionRun; syncInfo->fields.motionState = app::MotionState__Enum::MotionRun;
break; break;
case app::MotionState__Enum::MotionSkiffDash:
case app::MotionState__Enum::MotionSkiffPoweredDash:
syncInfo->fields.motionState = app::MotionState__Enum::MotionSkiffNormal;
break;
} }
if (state != app::MotionState__Enum::MotionJump && state != app::MotionState__Enum::MotionFallOnGround) if (state != app::MotionState__Enum::MotionJump && state != app::MotionState__Enum::MotionFallOnGround)
afterDash = state == app::MotionState__Enum::MotionDash; afterDash = state == app::MotionState__Enum::MotionDash;
} }
} }
}
void InfiniteStamina::DataItem_HandleNormalProp_Hook(app::DataItem* __this, uint32_t type, int64_t value, app::DataPropOp__Enum state, MethodInfo* method) void InfiniteStamina::DataItem_HandleNormalProp_Hook(app::DataItem* __this, uint32_t type, int64_t value, app::DataPropOp__Enum state, MethodInfo* method)
{ {

View File

@ -10,6 +10,9 @@ namespace cheat::feature
{ {
static void LCBaseCombat_DoHitEntity_Hook(app::LCBaseCombat* __this, uint32_t targetID, app::AttackResult* attackResult, static void LCBaseCombat_DoHitEntity_Hook(app::LCBaseCombat* __this, uint32_t targetID, app::AttackResult* attackResult,
bool ignoreCheckCanBeHitInMP, MethodInfo* method); bool ignoreCheckCanBeHitInMP, MethodInfo* method);
static void VCAnimatorEvent_HandleProcessItem_Hook(app::MoleMole_VCAnimatorEvent* __this,
app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem* processItem,
app::AnimatorStateInfo processStateInfo, app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_TriggerMode__Enum mode, MethodInfo* method);
RapidFire::RapidFire() : Feature(), RapidFire::RapidFire() : Feature(),
NF(f_Enabled, "Attack Multiplier", "RapidFire", false), NF(f_Enabled, "Attack Multiplier", "RapidFire", false),
@ -20,9 +23,11 @@ namespace cheat::feature
NF(f_minMultiplier, "Min Multiplier", "RapidFire", 1), NF(f_minMultiplier, "Min Multiplier", "RapidFire", 1),
NF(f_maxMultiplier, "Max Multiplier", "RapidFire", 3), NF(f_maxMultiplier, "Max Multiplier", "RapidFire", 3),
NF(f_MultiTarget, "Multi-target", "RapidFire", false), NF(f_MultiTarget, "Multi-target", "RapidFire", false),
NF(f_MultiTargetRadius, "Multi-target Radius", "RapidFire", 20.0f) NF(f_MultiTargetRadius, "Multi-target Radius", "RapidFire", 20.0f),
NF(f_MultiAnimation, "Multi-animation", "RapidFire", false)
{ {
HookManager::install(app::MoleMole_LCBaseCombat_DoHitEntity, LCBaseCombat_DoHitEntity_Hook); HookManager::install(app::MoleMole_LCBaseCombat_DoHitEntity, LCBaseCombat_DoHitEntity_Hook);
HookManager::install(app::MoleMole_VCAnimatorEvent_HandleProcessItem, VCAnimatorEvent_HandleProcessItem_Hook);
} }
const FeatureGUIInfo& RapidFire::GetGUIInfo() const const FeatureGUIInfo& RapidFire::GetGUIInfo() const
@ -40,8 +45,7 @@ namespace cheat::feature
ConfigWidget("Multi-hit Mode", f_MultiHit, "Enables multi-hit.\n" \ ConfigWidget("Multi-hit Mode", f_MultiHit, "Enables multi-hit.\n" \
"Multiplies your attack count.\n" \ "Multiplies your attack count.\n" \
"This is not well tested, and can be detected by anticheat.\n" \ "This is not well tested, and can be detected by anticheat.\n" \
"Not recommended to be used with main accounts or used with high values.\n" \ "Not recommended to be used with main accounts or used with high values.\n");
"Known issues with certain multi-hit attacks, e.g. Xiao E, Ayaka CA, etc.");
ImGui::Indent(); ImGui::Indent();
@ -77,11 +81,14 @@ namespace cheat::feature
ImGui::Indent(); ImGui::Indent();
ConfigWidget("Radius (m)", f_MultiTargetRadius, 0.1f, 5.0f, 50.0f, "Radius to check for valid targets."); ConfigWidget("Radius (m)", f_MultiTargetRadius, 0.1f, 5.0f, 50.0f, "Radius to check for valid targets.");
ImGui::Unindent(); ImGui::Unindent();
ConfigWidget("Multi-animation", f_MultiAnimation, "Enables multi-animation attacks.\n" \
"Do keep in mind that the character's audio will also be spammed.");
} }
bool RapidFire::NeedStatusDraw() const bool RapidFire::NeedStatusDraw() const
{ {
return f_Enabled && (f_MultiHit || f_MultiTarget); return f_Enabled && (f_MultiHit || f_MultiTarget || f_MultiAnimation);
} }
void RapidFire::DrawStatus() void RapidFire::DrawStatus()
@ -97,6 +104,9 @@ namespace cheat::feature
} }
if (f_MultiTarget) if (f_MultiTarget)
ImGui::Text("Multi-Target [%.01fm]", f_MultiTargetRadius.value()); ImGui::Text("Multi-Target [%.01fm]", f_MultiTargetRadius.value());
if (f_MultiAnimation)
ImGui::Text("Multi-Animation");
} }
RapidFire& RapidFire::GetInstance() RapidFire& RapidFire::GetInstance()
@ -183,6 +193,20 @@ namespace cheat::feature
return attackerID == avatarID || IsAvatarOwner(attacker); return attackerID == avatarID || IsAvatarOwner(attacker);
} }
bool IsConfigByAvatar(game::Entity& attacker)
{
if (attacker.raw() == nullptr)
return false;
auto& manager = game::EntityManager::instance();
auto avatarID = manager.avatar()->raw()->fields._configID_k__BackingField;
auto attackerID = attacker.raw()->fields._configID_k__BackingField;
// Taiga#5555: IDs can be found in ConfigAbility_Avatar_*.json or GadgetExcelConfigData.json
bool bulletID = attackerID >= 40000160 && attackerID <= 41069999;
return avatarID == attackerID || bulletID || attacker.type() == app::EntityType__Enum_1::Bullet;
}
bool IsValidByFilter(game::Entity* entity) bool IsValidByFilter(game::Entity* entity)
{ {
if (game::filters::combined::OrganicTargets.IsValid(entity) || if (game::filters::combined::OrganicTargets.IsValid(entity) ||
@ -203,7 +227,7 @@ namespace cheat::feature
{ {
auto attacker = game::Entity(__this->fields._._._entity); auto attacker = game::Entity(__this->fields._._._entity);
RapidFire& rapidFire = RapidFire::GetInstance(); RapidFire& rapidFire = RapidFire::GetInstance();
if (!IsAttackByAvatar(attacker) || !rapidFire.f_Enabled) if (!IsConfigByAvatar(attacker) || !IsAttackByAvatar(attacker) || !rapidFire.f_Enabled)
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method); return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
auto& manager = game::EntityManager::instance(); auto& manager = game::EntityManager::instance();
@ -242,9 +266,24 @@ namespace cheat::feature
if (rapidFire.f_MultiHit) { if (rapidFire.f_MultiHit) {
int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult); int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult);
for (int i = 0; i < attackCount; i++) for (int i = 0; i < attackCount; i++)
CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, entity->runtimeID(), attackResult, ignoreCheckCanBeHitInMP, method); app::MoleMole_LCBaseCombat_FireBeingHitEvent(__this, entity->runtimeID(), attackResult, method);
} else CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, entity->runtimeID(), attackResult, ignoreCheckCanBeHitInMP, method); }
} }
CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
}
static void VCAnimatorEvent_HandleProcessItem_Hook(app::MoleMole_VCAnimatorEvent* __this,
app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem* processItem,
app::AnimatorStateInfo processStateInfo, app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_TriggerMode__Enum mode, MethodInfo* method)
{
auto attacker = game::Entity(__this->fields._._._entity);
RapidFire& rapidFire = RapidFire::GetInstance();
if (rapidFire.f_MultiAnimation && IsAttackByAvatar(attacker))
processItem->fields.lastTime = 0;
CALL_ORIGIN(VCAnimatorEvent_HandleProcessItem_Hook, __this, processItem, processStateInfo, mode, method);
} }
} }

View File

@ -19,6 +19,7 @@ namespace cheat::feature
config::Field<int> f_maxMultiplier; config::Field<int> f_maxMultiplier;
config::Field<config::Toggle<Hotkey>> f_MultiTarget; config::Field<config::Toggle<Hotkey>> f_MultiTarget;
config::Field<float> f_MultiTargetRadius; config::Field<float> f_MultiTargetRadius;
config::Field<config::Toggle<Hotkey>> f_MultiAnimation;
static RapidFire& GetInstance(); static RapidFire& GetInstance();

View File

@ -20,12 +20,16 @@ namespace cheat::feature
NF(f_Enabled, "Custom Teleport", "CustomTeleports", false), NF(f_Enabled, "Custom Teleport", "CustomTeleports", false),
NF(f_Next, "Teleport Next", "CustomTeleports", Hotkey(VK_OEM_6)), NF(f_Next, "Teleport Next", "CustomTeleports", Hotkey(VK_OEM_6)),
NF(f_Previous, "Teleport Previous", "CustomTeleports", Hotkey(VK_OEM_4)), NF(f_Previous, "Teleport Previous", "CustomTeleports", Hotkey(VK_OEM_4)),
NF(f_Interpolate, "Custom Teleport", "CustomTeleports", false), NF(f_Auto, "Auto Teleport", "CustomTeleports", false),
NF(f_DelayTime, "Delay time (in s)", "CustomTeleports", 20),
NF(f_Interpolate, "Interpolate Teleport", "CustomTeleports", false),
NF(f_Speed, "Interpolation Speed", "CustomTeleports", 10.0f), NF(f_Speed, "Interpolation Speed", "CustomTeleports", 10.0f),
dir(util::GetCurrentPath() / "teleports") dir(util::GetCurrentPath() /= "teleports"),
nextTime(0)
{ {
f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext); f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext);
f_Previous.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnPrevious); f_Previous.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnPrevious);
events::GameUpdateEvent += MY_METHOD_HANDLER(CustomTeleports::OnGameUpdate);
} }
const FeatureGUIInfo& CustomTeleports::GetGUIInfo() const const FeatureGUIInfo& CustomTeleports::GetGUIInfo() const
@ -79,7 +83,7 @@ namespace cheat::feature
} }
} }
Teleport CustomTeleports::SerializeFromJson(std::string json, bool fromfile) std::optional<Teleport> CustomTeleports::SerializeFromJson(std::string json, bool fromfile)
{ {
nlohmann::json j; nlohmann::json j;
try { j = nlohmann::json::parse(json); } try { j = nlohmann::json::parse(json); }
@ -87,8 +91,11 @@ namespace cheat::feature
{ {
LOG_ERROR("Invalid JSON Format"); LOG_ERROR("Invalid JSON Format");
LOG_ERROR("Failed to parse JSON: %s", e.what()); LOG_ERROR("Failed to parse JSON: %s", e.what());
return std::nullopt;
} }
std::string teleportName; std::string teleportName;
teleportName = j["name"]; teleportName = j["name"];
if (j["name"].is_null() && fromfile) if (j["name"].is_null() && fromfile)
{ {
@ -99,6 +106,7 @@ namespace cheat::feature
if (j["description"].is_null()) description = ""; if (j["description"].is_null()) description = "";
else description = j["description"]; else description = j["description"];
return Teleport_(teleportName, { j["position"][0], j["position"][1], j["position"][2] }, description); return Teleport_(teleportName, { j["position"][0], j["position"][1], j["position"][2] }, description);
} }
void CustomTeleports::ReloadTeleports() void CustomTeleports::ReloadTeleports()
@ -113,7 +121,8 @@ namespace cheat::feature
std::ifstream ifs(file.path()); std::ifstream ifs(file.path());
std::string json; std::string json;
std::getline(ifs, json); std::getline(ifs, json);
SerializeTeleport(SerializeFromJson(json, true)); auto t = SerializeFromJson(json, true);
if(t.has_value()) SerializeTeleport(t.value());
} }
} }
} }
@ -188,10 +197,35 @@ namespace cheat::feature
void CustomTeleports::OnPrevious() void CustomTeleports::OnPrevious()
{ {
if (f_Auto) return;
OnTeleportKeyPressed(false); OnTeleportKeyPressed(false);
} }
void CustomTeleports::OnNext() void CustomTeleports::OnNext()
{ {
if (f_Auto) return;
OnTeleportKeyPressed(true);
}
void CustomTeleports::OnGameUpdate()
{
if (!f_Enabled || !f_Auto)
return;
auto currentTime = util::GetCurrentTimeMillisec();
if (currentTime < nextTime)
return;
auto loadingManager = GET_SINGLETON(MoleMole_LoadingManager);
if (loadingManager == nullptr || !app::MoleMole_LoadingManager_IsLoaded(loadingManager, nullptr))
return;
auto camera = app::Camera_get_main(nullptr);
if (camera == nullptr) return;
if (!app::Behaviour_get_isActiveAndEnabled(reinterpret_cast<app::Behaviour*>(camera), nullptr))
return;
nextTime = currentTime + (int64_t)f_DelayTime * 1000;
OnTeleportKeyPressed(true); OnTeleportKeyPressed(true);
} }
@ -260,26 +294,35 @@ namespace cheat::feature
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Load from JSON")) if (ImGui::Button("Load from JSON"))
{ {
if (!JSONBuffer_.empty()) {
auto t = SerializeFromJson(JSONBuffer_, false);
if (t.has_value()) {
selectedIndex = -1; selectedIndex = -1;
UpdateIndexName(); UpdateIndexName();
SerializeTeleport(SerializeFromJson(JSONBuffer_, false)); SerializeTeleport(t.value());
JSONBuffer_ = ""; }
JSONBuffer_.clear();
}
} }
ImGui::InputTextMultiline("JSON input", &JSONBuffer_, ImVec2(0, 50), ImGuiInputTextFlags_AllowTabInput); ImGui::InputTextMultiline("JSON input", &JSONBuffer_, ImVec2(0, 50), ImGuiInputTextFlags_AllowTabInput);
ConfigWidget("Teleport Next", f_Next, true, "Press to teleport next of selected"); ConfigWidget("Teleport Next", f_Next, true, "Press to teleport next of selected.");
ConfigWidget("Teleport Previous", f_Previous, true, "Press to teleport previous of selected"); ConfigWidget("Teleport Previous", f_Previous, true, "Press to teleport previous of selected.");
ConfigWidget("Enable", f_Enabled, ConfigWidget("Enable", f_Enabled,
"Enable teleport-through-list functionality\n" "Enable teleport-through-list functionality.\n"
"Usage:\n" "Usage:\n"
"1. Put Checkmark to the teleports you want to teleport using hotkey\n" "1. Put Checkmark to the teleports you want to teleport using hotkey\n"
"2. Single click the teleport (with checkmark) to select where you want to start\n" "2. Single click the teleport (with checkmark) to select where you want to start\n"
"3. You can now press Next or Previous Hotkey to Teleport through the Checklist\n" "3. You can now press Next or Previous Hotkey to Teleport through the Checklist\n"
"Initially it will teleport the player to the selection made\n" "Initially it will teleport the player to the selection made\n"
"Note: Double click or click the arrow to open teleport details"); "Note: Double click or click the arrow to open teleport details");
ConfigWidget("Enable Interpolation", f_Interpolate, "Enable interpolation between teleports when using keybinds"); ConfigWidget("Enable Interpolation", f_Interpolate, "Enable interpolation between teleports when using keybinds."); ImGui::SameLine(); ImGui::SetNextItemWidth(300.0f);
ConfigWidget("Interpolation Speed", f_Speed, 0.1f, 0.1f, 99.0f, ConfigWidget("Interpolation Speed", f_Speed, 0.1f, 0.1f, 99.0f,
"Interpolation speed.\n recommended setting below or equal to 0.1."); "Interpolation speed.\n recommended setting below or equal to 0.1.");
ConfigWidget("Auto Teleport", f_Auto, "Enable automatic forward teleporation between teleports"); ImGui::SameLine(); ImGui::SetNextItemWidth(300.0f);
ConfigWidget("Delay Time (s)", f_DelayTime, 1, 0, 60, "Delay (in s) between teleport.\n"
"Note: This is not fully tested detection-wise.\nNot recommended with low values.");
if (ImGui::Button("Delete Checked")) if (ImGui::Button("Delete Checked"))
{ {
@ -396,10 +439,13 @@ namespace cheat::feature
if (ImGui::Button(("Select##Button" + stringIndex).c_str())) if (ImGui::Button(("Select##Button" + stringIndex).c_str()))
{ {
auto isChecked = checkedIndices.find(index) != checkedIndices.end();
if (isChecked) {
selectedIndex = index; selectedIndex = index;
selectedByClick = true; selectedByClick = true;
UpdateIndexName(); UpdateIndexName();
} }
}
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::PushStyleColor(ImGuiCol_Text, selected ? IM_COL32(40, 90, 175, 255) : ImGui::ColorConvertFloat4ToU32(ImGui::GetStyle().Colors[ImGuiCol_Text])); ImGui::PushStyleColor(ImGuiCol_Text, selected ? IM_COL32(40, 90, 175, 255) : ImGui::ColorConvertFloat4ToU32(ImGui::GetStyle().Colors[ImGuiCol_Text]));
@ -432,7 +478,7 @@ namespace cheat::feature
void CustomTeleports::DrawStatus() void CustomTeleports::DrawStatus()
{ {
ImGui::Text("Custom Teleport\n[%s]", selectedIndexName); ImGui::Text("Custom Teleport\n[%s|%s]", f_Auto ? "Auto" : "Manual", selectedIndexName);
} }
CustomTeleports &CustomTeleports::GetInstance() CustomTeleports &CustomTeleports::GetInstance()

View File

@ -4,6 +4,7 @@
#include <cheat-base/cheat/Feature.h> #include <cheat-base/cheat/Feature.h>
#include <cheat-base/config/Config.h> #include <cheat-base/config/Config.h>
#include <cheat-base/thread-safe.h>
#include <set> #include <set>
namespace cheat::feature namespace cheat::feature
@ -27,9 +28,11 @@ 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_Interpolate; config::Field<config::Toggle<Hotkey>> f_Interpolate;
config::Field<config::Toggle<Hotkey>> f_Auto;
config::Field<float> f_Speed; config::Field<float> f_Speed;
config::Field<Hotkey> f_Next; config::Field<Hotkey> f_Next;
config::Field<Hotkey> f_Previous; config::Field<Hotkey> f_Previous;
config::Field<int> f_DelayTime;
static CustomTeleports& GetInstance(); static CustomTeleports& GetInstance();
const FeatureGUIInfo& GetGUIInfo() const override; const FeatureGUIInfo& GetGUIInfo() const override;
@ -38,12 +41,13 @@ namespace cheat::feature
Teleport Teleport_(std::string name, app::Vector3 position, std::string description); Teleport Teleport_(std::string name, app::Vector3 position, std::string description);
void SerializeTeleport(Teleport t); void SerializeTeleport(Teleport t);
void ReloadTeleports(); void ReloadTeleports();
Teleport SerializeFromJson(std::string json, bool fromfile); std::optional<Teleport> SerializeFromJson(std::string json, bool fromfile);
void DrawMain() override; void DrawMain() override;
virtual bool NeedStatusDraw() const override; virtual bool NeedStatusDraw() const override;
void DrawStatus() override; void DrawStatus() override;
void OnGameUpdate();
std::vector<Teleport> Teleports; std::vector<Teleport> Teleports;
std::filesystem::path dir; std::filesystem::path dir;
@ -55,6 +59,7 @@ namespace cheat::feature
int selectedIndex = -1; int selectedIndex = -1;
std::string selectedName; std::string selectedName;
std::string selectedIndexName; std::string selectedIndexName;
SafeValue<int64_t> nextTime;
CustomTeleports(); CustomTeleports();
void TeleportTo(app::Vector3 position, bool interpolate); void TeleportTo(app::Vector3 position, bool interpolate);
void OnTeleportKeyPressed(bool next); void OnTeleportKeyPressed(bool next);

View File

@ -11,6 +11,8 @@ namespace cheat::feature
app::GameObject* mainCam = nullptr; app::GameObject* mainCam = nullptr;
app::Object_1* freeCamObj = nullptr; app::Object_1* freeCamObj = nullptr;
app::Object_1* mainCamObj = nullptr; app::Object_1* mainCamObj = nullptr;
app::GameObject* damageOverlay = nullptr;
app::GameObject* hpOverlay = nullptr;
app::Transform* freeCam_Transform; app::Transform* freeCam_Transform;
app::Component_1* freeCam_Camera; app::Component_1* freeCam_Camera;
app::Component_1* mainCam_Camera; app::Component_1* mainCam_Camera;
@ -22,6 +24,8 @@ 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_FreezeAnimation, "Freeze Character Animation", "Visuals::FreeCamera", false),
NF(f_DamageOverlay, "Damage Overlay", "Visuals::FreeCamera", false),
NF(f_HpOverlay, "Enemy HP Overlay", "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),
@ -52,7 +56,13 @@ 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."); ConfigWidget("Freeze Character Animation", f_FreezeAnimation, "Freezes the active character's animation.");
if (f_Enabled)
{
ConfigWidget("Toggle Damage Overlay", f_DamageOverlay, "Remove damage output overlay");
ConfigWidget("Toggle Enemy HP Overlay", f_HpOverlay, "Remove enemy HP overlay");
}
if (ImGui::BeginTable("FreeCameraDrawTable", 1, ImGuiTableFlags_NoBordersInBody)) if (ImGui::BeginTable("FreeCameraDrawTable", 1, ImGuiTableFlags_NoBordersInBody))
{ {
ImGui::TableNextRow(); ImGui::TableNextRow();
@ -245,9 +255,23 @@ namespace cheat::feature
} }
if (freeCamObj) if (freeCamObj)
EnableFreeCam(); EnableFreeCam();
if (damageOverlay == nullptr)
damageOverlay = app::GameObject_Find(string_to_il2cppi("/Canvas/Pages/InLevelMainPage/GrpMainPage/ParticleDamageTextContainer"), nullptr);
else
app::GameObject_SetActive(damageOverlay, !f_DamageOverlay, nullptr);
if (hpOverlay == nullptr)
hpOverlay = app::GameObject_Find(string_to_il2cppi("AvatarBoardCanvasV2(Clone)"), nullptr);
else
app::GameObject_SetActive(hpOverlay, !f_DamageOverlay, nullptr);
} }
else else
{
DisableFreeCam(); DisableFreeCam();
damageOverlay = nullptr;
hpOverlay = nullptr;
}
// Taiga#5555: There's probably be a better way of implementing this. But for now, this is just what I came up with. // 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& manager = game::EntityManager::instance();
@ -256,17 +280,24 @@ namespace cheat::feature
if (animator == nullptr && rigidBody == nullptr) if (animator == nullptr && rigidBody == nullptr)
return; return;
static bool changed = false;
if (f_FreezeAnimation) if (f_FreezeAnimation)
{ {
//auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr); //auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr);
//LOG_DEBUG("%s", magic_enum::enum_name(constraints).data()); //LOG_DEBUG("%s", magic_enum::enum_name(constraints).data());
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezePosition, nullptr); app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezePosition, nullptr);
app::Animator_set_speed(animator, 0.f, nullptr); app::Animator_set_speed(animator, 0.f, nullptr);
changed = false;
} }
else else
{ {
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr); app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
if (!changed)
{
app::Animator_set_speed(animator, 1.f, nullptr); app::Animator_set_speed(animator, 1.f, nullptr);
changed = true;
}
} }
} }
} }

View File

@ -9,6 +9,8 @@ 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<config::Toggle<Hotkey>> f_FreezeAnimation;
config::Field<bool> f_DamageOverlay;
config::Field<bool> f_HpOverlay;
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,85 @@
#include "pch-il2cpp.h"
#include "AutoChallenge.h"
#include <cheat/events.h>
#include <cheat/game/EntityManager.h>
#include <cheat/game/filters.h>
namespace cheat::feature
{
AutoChallenge::AutoChallenge() : Feature(),
NF(f_Enabled, "Auto challenge", "AutoChallenge", false),
NF(f_BombDestroy, "Bomb destroy", "AutoChallenge", false),
NF(f_Delay, "Collect delay", "AutoChallenge", 1000),
NF(f_Range, "Collect range", "AutoChallenge", 20.f)
{
events::GameUpdateEvent += MY_METHOD_HANDLER(AutoChallenge::OnGameUpdate);
}
const FeatureGUIInfo& AutoChallenge::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "Auto Challenge", "World", true };
return info;
}
void AutoChallenge::DrawMain()
{
ConfigWidget("Enabled", f_Enabled, "Auto collect time challenge item");
ImGui::SameLine();
ConfigWidget("Destroy Bomb", f_BombDestroy, "Auto destroy bombbarrel");
ImGui::SameLine();
ImGui::TextColored(ImColor(255, 165, 0, 255), "I haven't tested how high the risk is");
ImGui::SetNextItemWidth(200.f);
ConfigWidget("Range", f_Range, 0.1f, 0.f, 300.f, "Collect range.");
ImGui::SameLine();
ImGui::SetNextItemWidth(200.f);
ConfigWidget("Delay", f_Delay, 1, 0, 2000, "Collect delay.");
}
bool AutoChallenge::NeedStatusDraw() const
{
return f_Enabled;
}
void AutoChallenge::DrawStatus()
{
ImGui::Text("Challenge [%.01fm]", f_Range.value());
}
AutoChallenge& AutoChallenge::GetInstance()
{
static AutoChallenge instance;
return instance;
}
void AutoChallenge::OnGameUpdate()
{
static uint64_t lastTime = 0;
auto timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
if (!f_Enabled || lastTime + f_Delay > timestamp)
return;
auto& entityManager = game::EntityManager::instance();
auto avatarEntity = entityManager.avatar();
for (auto& entity : entityManager.entities(game::filters::puzzle::TimeTrialChallengeCollection))
{
if (avatarEntity->distance(entity) > f_Range)
continue;
auto combat = entity->combat();
if (combat != nullptr)
{
auto combatProp = combat->fields._combatProperty_k__BackingField;
auto maxHP = app::MoleMole_SafeFloat_get_Value(combatProp->fields.maxHP, nullptr);
// so many entities named "SkillObj_EmptyGadget", but the collection's hp is 99999.f
if (maxHP > 99998 && maxHP < 99999.9)
{
entity->setRelativePosition(avatarEntity->relativePosition());
}
}
}
}
}

View File

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

View File

@ -14,6 +14,8 @@ namespace cheat::feature
app::Component_1* Profirency = nullptr; app::Component_1* Profirency = nullptr;
} }
static std::map<std::string, int> qualities{ {"Suspicious", 1}, {"Normal", 2}, {"Delicious", 3} };
static void PlayerModule_RequestPlayerCook(app::MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method); static void PlayerModule_RequestPlayerCook(app::MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method);
static void PlayerModule_OnPlayerCookRsp(app::MoleMole_PlayerModule* __this, app::PlayerCookRsp* rsp, MethodInfo* method); static void PlayerModule_OnPlayerCookRsp(app::MoleMole_PlayerModule* __this, app::PlayerCookRsp* rsp, MethodInfo* method);
static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method); static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method);
@ -22,7 +24,7 @@ namespace cheat::feature
NF(f_Enabled, "Standart Cooking", "AutoCook", false), NF(f_Enabled, "Standart Cooking", "AutoCook", false),
NF(f_FastProficiency, "Fast Proficiency", "AutoCook", false), NF(f_FastProficiency, "Fast Proficiency", "AutoCook", false),
NF(f_CountField, "Count Item", "AutoCook", 1), NF(f_CountField, "Count Item", "AutoCook", 1),
NF(f_QualityField, "Quality", "AutoCook", 1) NF(f_QualityField, "Quality", "AutoCook", "Normal")
{ {
HookManager::install(app::MoleMole_PlayerModule_RequestPlayerCook, PlayerModule_RequestPlayerCook); HookManager::install(app::MoleMole_PlayerModule_RequestPlayerCook, PlayerModule_RequestPlayerCook);
HookManager::install(app::MoleMole_PlayerModule_OnPlayerCookRsp, PlayerModule_OnPlayerCookRsp); HookManager::install(app::MoleMole_PlayerModule_OnPlayerCookRsp, PlayerModule_OnPlayerCookRsp);
@ -43,7 +45,19 @@ namespace cheat::feature
ConfigWidget("Count Item", f_CountField, 1, 1, 100, ConfigWidget("Count Item", f_CountField, 1, 1, 100,
"How much to cook at a time.\n" \ "How much to cook at a time.\n" \
"(For standard mode only.)"); "(For standard mode only.)");
ConfigWidget("Quality Cooking", f_QualityField, 1, 1, 3, "Quality of the cook."); if (ImGui::BeginCombo("Cooking Quality", f_QualityField.value().c_str()))
{
for (auto& [qualityName, quality] : qualities)
{
bool is_selected = (f_QualityField.value().c_str() == qualityName);
if (ImGui::Selectable(qualityName.c_str(), is_selected))
f_QualityField.value() = qualityName;
if (is_selected)
ImGui::SetItemDefaultFocus();
}
ImGui::EndCombo();
}
} }
bool AutoCook::NeedStatusDraw() const bool AutoCook::NeedStatusDraw() const
@ -53,7 +67,10 @@ namespace cheat::feature
void AutoCook::DrawStatus() void AutoCook::DrawStatus()
{ {
ImGui::Text("Auto Cooking [%s]", f_FastProficiency ? "Proficiency" : "Standart"); if (f_FastProficiency)
ImGui::Text("Auto Cooking [Proficiency]");
else
ImGui::Text("Auto Cooking [Standart, %s]", f_QualityField.value().c_str());
} }
AutoCook& AutoCook::GetInstance() AutoCook& AutoCook::GetInstance()
@ -82,7 +99,12 @@ namespace cheat::feature
if (autoCook.f_Enabled || autoCook.f_FastProficiency) if (autoCook.f_Enabled || autoCook.f_FastProficiency)
{ {
autoCook.CookFoodMaxNum = app::MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum(recipeId, nullptr); autoCook.CookFoodMaxNum = app::MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum(recipeId, nullptr);
qteQuality = autoCook.f_QualityField;
// To prevent possible crashes
if (!qualities.count(autoCook.f_QualityField.value()))
autoCook.f_QualityField.value() = "Normal";
qteQuality = qualities.find(autoCook.f_QualityField.value())->second;
if (!autoCook.f_FastProficiency && autoCook.f_Enabled) { if (!autoCook.f_FastProficiency && autoCook.f_Enabled) {
count = autoCook.f_CountField; count = autoCook.f_CountField;
@ -127,7 +149,11 @@ namespace cheat::feature
AutoCook& autoCook = AutoCook::GetInstance(); AutoCook& autoCook = AutoCook::GetInstance();
if (autoCook.f_Enabled || autoCook.f_FastProficiency) if (autoCook.f_Enabled || autoCook.f_FastProficiency)
{ {
rsp->fields.qteQuality_ = autoCook.f_QualityField; // To prevent possible crashes
if (!qualities.count(autoCook.f_QualityField.value()))
autoCook.f_QualityField.value() = "Normal";
rsp->fields.qteQuality_ = qualities.find(autoCook.f_QualityField.value())->second;
rsp->fields.cookCount_ = autoCook.f_CountField; rsp->fields.cookCount_ = autoCook.f_CountField;
if (autoCook.f_FastProficiency) if (autoCook.f_FastProficiency)
rsp->fields.cookCount_ = 1; rsp->fields.cookCount_ = 1;
@ -144,7 +170,7 @@ namespace cheat::feature
{ {
__this->fields._pageMono->fields._qteTime = 0; __this->fields._pageMono->fields._qteTime = 0;
__this->fields._pageMono->fields._autoQteTime = 0; __this->fields._pageMono->fields._autoQteTime = 0;
app::CookingQtePageContext_CloseItemGotPanel(__this, nullptr); // Auto Close Panel app::MoleMole_CookingQtePageContext_CloseItemGotPanel(__this, nullptr); // Auto Close Panel
} }
return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method); return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method);
} }

View File

@ -12,7 +12,7 @@ namespace cheat::feature
config::Field<config::Toggle<Hotkey>> f_FastProficiency; config::Field<config::Toggle<Hotkey>> f_FastProficiency;
config::Field<int> f_CountField; config::Field<int> f_CountField;
config::Field<int> f_QualityField; config::Field<std::string> f_QualityField;
int CookFoodMaxNum; // Maximum quantity at a time int CookFoodMaxNum; // Maximum quantity at a time
int CookCount; int CookCount;

View File

@ -7,6 +7,7 @@
#include <cheat/events.h> #include <cheat/events.h>
#include <cheat/game/SimpleFilter.h> #include <cheat/game/SimpleFilter.h>
#include <cheat/game/EntityManager.h> #include <cheat/game/EntityManager.h>
#include <cheat/world/AutoChallenge.h>
#include <cheat/game/filters.h> #include <cheat/game/filters.h>
namespace cheat::feature namespace cheat::feature
@ -81,7 +82,17 @@ namespace cheat::feature
{ {
auto& manager = game::EntityManager::instance(); auto& manager = game::EntityManager::instance();
auto& autoDestroy = AutoDestroy::GetInstance(); auto& autoDestroy = AutoDestroy::GetInstance();
auto& autoChallenge = AutoChallenge::GetInstance();
auto entity = __this->fields._._._entity; auto entity = __this->fields._._._entity;
// call origin ReduceModifierDurability without correct modifierDurabilityIndex will coz game crash.
// so use this hook function to destroy challenge's bombbarrel
if (autoChallenge.f_Enabled && autoChallenge.f_BombDestroy &&
autoChallenge.f_Range > manager.avatar()->distance(entity) &&
game::filters::puzzle::Bombbarrel.IsValid(manager.entity(entity))
)
{
reduceDurability = 1000.f;
}
if (autoDestroy.f_Enabled && if (autoDestroy.f_Enabled &&
autoDestroy.f_Range > manager.avatar()->distance(entity) && autoDestroy.f_Range > manager.avatar()->distance(entity) &&
( (

View File

@ -91,7 +91,7 @@ namespace cheat::feature
} }
std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex); std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex);
autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch; autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch;
} }
void AutoFish::FishingModule_OnFishBattleEndRsp_Hook(void* __this, app::FishBattleEndRsp* rsp, MethodInfo* method) void AutoFish::FishingModule_OnFishBattleEndRsp_Hook(void* __this, app::FishBattleEndRsp* rsp, MethodInfo* method)
@ -115,7 +115,7 @@ namespace cheat::feature
{ {
LOG_WARNING("Failed to catch fish, retrying in %u ms", autoFish.f_DelayBeforeCatch); LOG_WARNING("Failed to catch fish, retrying in %u ms", autoFish.f_DelayBeforeCatch);
std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex); std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex);
autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch; autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch;
return; return;
} }
@ -123,7 +123,7 @@ namespace cheat::feature
return; return;
std::lock_guard<std::mutex> _lock(autoFish.m_RecastTimestampMutex); std::lock_guard<std::mutex> _lock(autoFish.m_RecastTimestampMutex);
autoFish.m_RecastTimestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr) + autoFish.f_DelayBeforeRecast; autoFish.m_RecastTimestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr) + autoFish.f_DelayBeforeRecast;
} }
void AutoFish::FishingModule_OnExitFishingRsp_Hook(void* __this, void* rsp, MethodInfo* method) void AutoFish::FishingModule_OnExitFishingRsp_Hook(void* __this, void* rsp, MethodInfo* method)
@ -154,7 +154,7 @@ namespace cheat::feature
void AutoFish::OnGameUpdate() void AutoFish::OnGameUpdate()
{ {
auto timestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr); auto timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
std::lock_guard<std::mutex> _lock(m_BattleFinishTimestampMutex); std::lock_guard<std::mutex> _lock(m_BattleFinishTimestampMutex);
std::lock_guard<std::mutex> _lock2(m_RecastTimestampMutex); std::lock_guard<std::mutex> _lock2(m_RecastTimestampMutex);

View File

@ -13,6 +13,8 @@ namespace cheat::feature
static bool LCSelectPickup_IsInPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method); static bool LCSelectPickup_IsInPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method);
static bool LCSelectPickup_IsOutPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method); static bool LCSelectPickup_IsOutPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method);
float g_default_range = 3.0f;
AutoLoot::AutoLoot() : Feature(), AutoLoot::AutoLoot() : Feature(),
NF(f_AutoPickup, "Auto-pickup drops", "AutoLoot", false), NF(f_AutoPickup, "Auto-pickup drops", "AutoLoot", false),
NF(f_AutoTreasure, "Auto-open treasures", "AutoLoot", false), NF(f_AutoTreasure, "Auto-open treasures", "AutoLoot", false),
@ -26,7 +28,9 @@ namespace cheat::feature
NF(f_Investigate, "Search points", "AutoLoot", false), NF(f_Investigate, "Search points", "AutoLoot", false),
NF(f_QuestInteract, "Quest interacts", "AutoLoot", false), NF(f_QuestInteract, "Quest interacts", "AutoLoot", false),
NF(f_Others, "Other treasures", "AutoLoot", false), NF(f_Others, "Other treasures", "AutoLoot", false),
NF(f_DelayTime, "Delay time (in ms)", "AutoLoot", 150), NF(f_DelayTime, "Delay time (in ms)", "AutoLoot", 200),
NF(f_UseDelayTimeFluctuation, "Use delay fluctuation", "AutoLoot", false),
NF(f_DelayTimeFluctuation, "Delay fluctuation +(in ms)", "AutoLoot", 200),
NF(f_CustomRange, "Pickup Range", "AutoLoot", 5.0f), NF(f_CustomRange, "Pickup Range", "AutoLoot", 5.0f),
toBeLootedItems(), nextLootTime(0) toBeLootedItems(), nextLootTime(0)
{ {
@ -82,6 +86,17 @@ namespace cheat::feature
} }
ImGui::EndGroupPanel(); ImGui::EndGroupPanel();
ImGui::BeginGroupPanel("Looting delay fluctuation");
{
ConfigWidget("Enabled", f_UseDelayTimeFluctuation, "Enable delay fluctuation.\n" \
"Simulates human clicking delay as manual clickling never consistent.");
ImGui::SameLine();
ImGui::TextColored(ImColor(255, 165, 0, 255), "Read the note!");
ImGui::SetNextItemWidth(100.0f);
ConfigWidget("Delay range +(ms)", f_DelayTimeFluctuation, 1, 0, 1000, "Delay randomly fluctuates between 'Delay Time'+'Delay Time+range'");
}
ImGui::EndGroupPanel();
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
ImGui::BeginGroupPanel("Auto-Treasure"); ImGui::BeginGroupPanel("Auto-Treasure");
{ {
@ -120,12 +135,13 @@ namespace cheat::feature
void AutoLoot::DrawStatus() void AutoLoot::DrawStatus()
{ {
ImGui::Text("Auto Loot\n[%s%s%s%s%s]", ImGui::Text("Auto Loot\n[%s%s%s%s%s%s]",
f_AutoPickup ? "AP" : "", f_AutoPickup ? "AP" : "",
f_AutoTreasure ? fmt::format("{}AT", f_AutoPickup ? "|" : "").c_str() : "", f_AutoTreasure ? fmt::format("{}AT", f_AutoPickup ? "|" : "").c_str() : "",
f_UseCustomRange ? fmt::format("{}CR{:.1f}m", f_AutoPickup || f_AutoTreasure ? "|" : "", f_CustomRange.value()).c_str() : "", f_UseCustomRange ? fmt::format("{}CR{:.1f}m", f_AutoPickup || f_AutoTreasure ? "|" : "", f_CustomRange.value()).c_str() : "",
f_PickupFilter ? fmt::format("{}PF", f_AutoPickup || f_AutoTreasure || f_UseCustomRange ? "|" : "").c_str() : "", f_PickupFilter ? fmt::format("{}PF", f_AutoPickup || f_AutoTreasure || f_UseCustomRange ? "|" : "").c_str() : "",
f_AutoPickup || f_AutoTreasure ? fmt::format("|{}ms", f_DelayTime.value()).c_str() : "" f_AutoPickup || f_AutoTreasure ? fmt::format("|{}ms", f_DelayTime.value()).c_str() : "",
f_UseDelayTimeFluctuation ? fmt::format("|FL+{}ms", f_DelayTimeFluctuation.value()).c_str() : ""
); );
} }
@ -171,7 +187,7 @@ namespace cheat::feature
auto& manager = game::EntityManager::instance(); auto& manager = game::EntityManager::instance();
for (auto& entity : manager.entities(game::filters::combined::Chests)) for (auto& entity : manager.entities(game::filters::combined::Chests))
{ {
float range = f_UseCustomRange ? f_CustomRange : 3.5f; float range = f_UseCustomRange ? f_CustomRange : g_default_range;
if (manager.avatar()->distance(entity) >= range) if (manager.avatar()->distance(entity) >= range)
continue; continue;
@ -220,13 +236,20 @@ namespace cheat::feature
return; return;
app::MoleMole_ItemModule_PickItem(itemModule, *entityId, nullptr); app::MoleMole_ItemModule_PickItem(itemModule, *entityId, nullptr);
nextLootTime = currentTime + (int)f_DelayTime;
int fluctuation = 0;
if (f_UseDelayTimeFluctuation)
{
fluctuation = std::rand() % (f_DelayTimeFluctuation + 1);
}
nextLootTime = currentTime + (int)f_DelayTime + fluctuation;
} }
void AutoLoot::OnCheckIsInPosition(bool& result, app::BaseEntity* entity) void AutoLoot::OnCheckIsInPosition(bool& result, app::BaseEntity* entity)
{ {
if (f_AutoPickup || f_UseCustomRange) { if (f_AutoPickup || f_UseCustomRange) {
float pickupRange = f_UseCustomRange ? f_CustomRange : 3.5f; float pickupRange = f_UseCustomRange ? f_CustomRange : g_default_range;
if (f_PickupFilter) if (f_PickupFilter)
{ {
if (!f_PickupFilter_Animals && entity->fields.entityType == app::EntityType__Enum_1::EnvAnimal || if (!f_PickupFilter_Animals && entity->fields.entityType == app::EntityType__Enum_1::EnvAnimal ||

View File

@ -12,9 +12,11 @@ namespace cheat::feature
config::Field<config::Toggle<Hotkey>> f_AutoPickup; config::Field<config::Toggle<Hotkey>> f_AutoPickup;
config::Field<config::Toggle<Hotkey>> f_AutoTreasure; config::Field<config::Toggle<Hotkey>> f_AutoTreasure;
config::Field<config::Toggle<Hotkey>> f_UseCustomRange; config::Field<config::Toggle<Hotkey>> f_UseCustomRange;
config::Field<config::Toggle<Hotkey>> f_UseDelayTimeFluctuation;
config::Field<config::Toggle<Hotkey>> f_PickupFilter; config::Field<config::Toggle<Hotkey>> f_PickupFilter;
config::Field<int> f_DelayTime; config::Field<int> f_DelayTime;
config::Field<int> f_DelayTimeFluctuation;
config::Field<float> f_CustomRange; config::Field<float> f_CustomRange;
config::Field<bool> f_Chest; config::Field<bool> f_Chest;

View File

@ -162,7 +162,7 @@ namespace cheat::feature
static std::unordered_set<app::SceneTreeObject*> s_AttackQueueSet; static std::unordered_set<app::SceneTreeObject*> s_AttackQueueSet;
static uint64_t s_LastAttackTimestamp = 0; static uint64_t s_LastAttackTimestamp = 0;
uint64_t timestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr); uint64_t timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
if (!m_Enabled || s_LastAttackTimestamp + m_AttackDelay > timestamp) if (!m_Enabled || s_LastAttackTimestamp + m_AttackDelay > timestamp)
return; return;

View File

@ -20,7 +20,8 @@ namespace cheat::feature
NF(f_OnlyTargeted, "Only targeted", "KillAura", true), NF(f_OnlyTargeted, "Only targeted", "KillAura", true),
NF(f_Range, "Range", "KillAura", 15.0f), NF(f_Range, "Range", "KillAura", 15.0f),
NF(f_AttackDelay, "Attack delay time (in ms)", "KillAura", 100), NF(f_AttackDelay, "Attack delay time (in ms)", "KillAura", 100),
NF(f_RepeatDelay, "Repeat delay time (in ms)", "KillAura", 1000) NF(f_RepeatDelay, "Repeat delay time (in ms)", "KillAura", 1000),
NF(f_DamageValue, "Crash damage value", "Damage mode", 233.0f)
{ {
events::GameUpdateEvent += MY_METHOD_HANDLER(KillAura::OnGameUpdate); events::GameUpdateEvent += MY_METHOD_HANDLER(KillAura::OnGameUpdate);
HookManager::install(app::MoleMole_BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo, BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo_Hook); HookManager::install(app::MoleMole_BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo, BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo_Hook);
@ -39,6 +40,9 @@ namespace cheat::feature
ImGui::TextColored(ImColor(255, 165, 0, 255), "Choose any or both modes below."); ImGui::TextColored(ImColor(255, 165, 0, 255), "Choose any or both modes below.");
ConfigWidget("Crash Damage Mode", f_DamageMode, "Kill aura causes crash damage for monster around you."); ConfigWidget("Crash Damage Mode", f_DamageMode, "Kill aura causes crash damage for monster around you.");
if (f_DamageMode) {
ConfigWidget("Damage Value", f_DamageValue, 1, 0, 10000000, "Crash damage value");
}
ConfigWidget("Instant Death Mode", f_InstantDeathMode, "Kill aura will attempt to instagib any valid target."); ConfigWidget("Instant Death Mode", f_InstantDeathMode, "Kill aura will attempt to instagib any valid target.");
ImGui::SameLine(); ImGui::SameLine();
ImGui::TextColored(ImColor(255, 165, 0, 255), "Can get buggy with bosses like PMA and Hydro Hypo."); ImGui::TextColored(ImColor(255, 165, 0, 255), "Can get buggy with bosses like PMA and Hydro Hypo.");
@ -151,12 +155,25 @@ namespace cheat::feature
attackSet.erase(monster->runtimeID()); attackSet.erase(monster->runtimeID());
auto combat = monster->combat(); auto combat = monster->combat();
auto maxHP = app::MoleMole_SafeFloat_get_Value(combat->fields._combatProperty_k__BackingField->fields.maxHP, nullptr);
auto crashEvt = app::MoleMole_EventHelper_Allocate_103(*app::MoleMole_EventHelper_Allocate_103__MethodInfo); auto crashEvt = app::MoleMole_EventHelper_Allocate_103(*app::MoleMole_EventHelper_Allocate_103__MethodInfo);
app::MoleMole_EvtCrash_Init(crashEvt, monster->runtimeID(), nullptr); app::MoleMole_EvtCrash_Init(crashEvt, monster->runtimeID(), nullptr);
crashEvt->fields.maxHp = maxHP;
crashEvt->fields.velChange = 1000; //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(); crashEvt->fields.hitPos = monster->absolutePosition();
app::MoleMole_EventManager_FireEvent(eventManager, reinterpret_cast<app::BaseEvent*>(crashEvt), false, nullptr); app::MoleMole_EventManager_FireEvent(eventManager, reinterpret_cast<app::BaseEvent*>(crashEvt), false, nullptr);

View File

@ -15,6 +15,8 @@ namespace cheat::feature
config::Field<float> f_Range; config::Field<float> f_Range;
config::Field<int> f_AttackDelay; config::Field<int> f_AttackDelay;
config::Field<int> f_RepeatDelay; config::Field<int> f_RepeatDelay;
config::Field<float> f_DamageValue;
static KillAura& GetInstance(); static KillAura& GetInstance();

View File

@ -127,7 +127,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>$(ProjectDir)include/;$(SolutionDir)cheat-base/src;$(SolutionDir)cheat-base/vendor/simpleIni/</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)include/;$(SolutionDir)cheat-base/src;$(SolutionDir)cheat-base/vendor/simpleIni/</AdditionalIncludeDirectories>
<LanguageStandard_C>stdc17</LanguageStandard_C> <LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile> </ClCompile>