Merge branch 'master' into fall_control
19
README.md
@ -56,19 +56,18 @@ As well as setting up **`cheat-library`** as startup project.
|
||||
- Notifications
|
||||
|
||||
#### Player
|
||||
- Invincible
|
||||
- Attack Modifier
|
||||
- No Cooldown Skill/Ultimate/Sprint/Bow
|
||||
- God Mode(Invincible)
|
||||
- Attack Modifier: Multi-Hit/Target/Animation
|
||||
- No Cooldown: Skill/Ultimate/Sprint/Bow
|
||||
- Unlimited Stamina
|
||||
- No Clip
|
||||
|
||||
#### World
|
||||
- Auto Seelie
|
||||
- Vacuum Loot
|
||||
- Dumb Enemies
|
||||
- Freeze Enemies
|
||||
- Auto Destroy Objects
|
||||
- Auto Loot
|
||||
- Auto Destroy: Ores/Shields/Doodas/Plants
|
||||
- Auto Loot/Open Chests
|
||||
- Pickup Range
|
||||
- Auto Talk
|
||||
- Auto Tree Farm
|
||||
@ -77,6 +76,7 @@ As well as setting up **`cheat-library`** as startup project.
|
||||
- Auto Fish
|
||||
- Kill Aura
|
||||
- Mob Vacuum
|
||||
- Vacuum Loot
|
||||
|
||||
#### Teleport
|
||||
- Chest/Oculi Teleport (Teleports to nearest)
|
||||
@ -94,16 +94,17 @@ As well as setting up **`cheat-library`** as startup project.
|
||||
- Hide UI
|
||||
- In-game Embedded Browser
|
||||
- Enable Peeking
|
||||
- Profile Changer
|
||||
- Profile Changer: UID/Nickname/AR/WorldLevel/Avatar/Namecard
|
||||
- Custom Weather
|
||||
- Free Camera
|
||||
- Texture Changer
|
||||
- Paimon Follow
|
||||
- Texture Changer
|
||||
|
||||
#### Debugging
|
||||
- Entities Manager
|
||||
- Position Info
|
||||
- FPS Graph
|
||||
- Packet Sniffer
|
||||
- [Packet Sniffer](https://github.com/Akebi-Group/Akebi-PacketSniffer)
|
||||
|
||||
|
||||
<h1 align="center">Demo</h1>
|
||||
|
@ -431,6 +431,9 @@ namespace cheat
|
||||
if (settings.f_NotificationsShow)
|
||||
DrawNotifications();
|
||||
|
||||
if (settings.f_ShowStyleEditor)
|
||||
ImGui::ShowStyleEditor();
|
||||
|
||||
if (settings.f_MenuKey.value().IsReleased() && !ImGui::IsAnyItemActive())
|
||||
ToggleMenuShow();
|
||||
}
|
||||
|
@ -1,45 +1,98 @@
|
||||
#include <pch.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/render/renderer.h>
|
||||
#include <cheat-base/render/gui-util.h>
|
||||
#include <misc/cpp/imgui_stdlib.h>
|
||||
#include <cheat-base/util.h>
|
||||
|
||||
namespace cheat::feature
|
||||
#include "shlwapi.h"
|
||||
#pragma comment(lib, "shlwapi.lib")
|
||||
|
||||
namespace cheat::feature
|
||||
{
|
||||
Settings::Settings() : Feature(),
|
||||
Settings::Settings() : Feature(),
|
||||
NF(f_MenuKey, "Show Cheat Menu Key", "General", Hotkey(VK_F1)),
|
||||
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_StatusShow, "Show Status Window", "General::StatusWindow", true),
|
||||
|
||||
NF(f_InfoMove, "Move Info Window", "General::InfoWindow", true),
|
||||
NF(f_InfoShow, "Show Info Window", "General::InfoWindow", true),
|
||||
|
||||
|
||||
NF(f_InfoMove, "Move Info Window", "General::InfoWindow", true),
|
||||
NF(f_InfoShow, "Show Info Window", "General::InfoWindow", true),
|
||||
|
||||
NF(f_FpsMove, "Move FPS Indicator", "General::FPS", false),
|
||||
NF(f_FpsShow, "Show FPS Indicator", "General::FPS", true),
|
||||
|
||||
NF(f_NotificationsShow, "Show Notifications", "General::Notify", true),
|
||||
NF(f_NotificationsShow, "Show Notifications", "General::Notify", true),
|
||||
NF(f_NotificationsDelay, "Notifications Delay", "General::Notify", 500),
|
||||
|
||||
NF(f_FileLogging, "File Logging", "General::Logging", false),
|
||||
|
||||
NF(f_FileLogging, "File Logging", "General::Logging", false),
|
||||
NF(f_ConsoleLogging, "Console Logging", "General::Logging", true),
|
||||
|
||||
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));
|
||||
f_HotkeyExit.value().PressedEvent += MY_METHOD_HANDLER(Settings::OnExitKeyPressed);
|
||||
}
|
||||
if (!std::filesystem::exists(themesDir))
|
||||
std::filesystem::create_directory(themesDir);
|
||||
|
||||
const FeatureGUIInfo& Settings::GetGUIInfo() const
|
||||
{
|
||||
static const FeatureGUIInfo info{ "", "Settings", false };
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
static const FeatureGUIInfo info{ "", "Settings", false };
|
||||
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()
|
||||
{
|
||||
@ -50,12 +103,7 @@ namespace cheat::feature
|
||||
"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.");
|
||||
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::BeginGroupPanel("Logging");
|
||||
@ -101,7 +149,7 @@ namespace cheat::feature
|
||||
ImGui::BeginGroupPanel("Show Notifications");
|
||||
{
|
||||
ConfigWidget(f_NotificationsShow, "Notifications on the bottom-right corner of the window will be displayed.");
|
||||
ConfigWidget(f_NotificationsDelay, 1,1,10000, "Delay in milliseconds between notifications.");
|
||||
ConfigWidget(f_NotificationsDelay, 1, 1, 10000, "Delay in milliseconds between notifications.");
|
||||
}
|
||||
ImGui::EndGroupPanel();
|
||||
|
||||
@ -109,7 +157,7 @@ namespace cheat::feature
|
||||
{
|
||||
ConfigWidget("Enabled",
|
||||
f_FastExitEnable,
|
||||
"Enable Fast Exit.\n"
|
||||
"Enable Fast Exit.\n"
|
||||
);
|
||||
if (!f_FastExitEnable)
|
||||
ImGui::BeginDisabled();
|
||||
@ -121,13 +169,54 @@ namespace cheat::feature
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
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()
|
||||
{
|
||||
static Settings instance;
|
||||
return instance;
|
||||
}
|
||||
Settings& Settings::GetInstance()
|
||||
{
|
||||
static Settings instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void Settings::OnExitKeyPressed()
|
||||
{
|
||||
@ -137,4 +226,3 @@ namespace cheat::feature
|
||||
ExitProcess(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,25 +2,24 @@
|
||||
#include <cheat-base/cheat/Feature.h>
|
||||
#include <cheat-base/config/config.h>
|
||||
|
||||
namespace cheat::feature
|
||||
namespace cheat::feature
|
||||
{
|
||||
|
||||
class Settings : public Feature
|
||||
{
|
||||
{
|
||||
public:
|
||||
config::Field<Hotkey> f_MenuKey;
|
||||
config::Field<bool> f_HotkeysEnabled;
|
||||
config::Field<int> f_FontSize;
|
||||
|
||||
config::Field<bool> f_StatusMove;
|
||||
config::Field<bool> f_StatusShow;
|
||||
|
||||
config::Field<bool> f_InfoMove;
|
||||
config::Field<bool> f_InfoShow;
|
||||
|
||||
|
||||
config::Field<bool> f_FpsShow;
|
||||
config::Field<bool> f_FpsMove;
|
||||
|
||||
|
||||
config::Field<bool> f_NotificationsShow;
|
||||
config::Field<int> f_NotificationsDelay;
|
||||
|
||||
@ -30,11 +29,20 @@ namespace cheat::feature
|
||||
config::Field<bool> f_FastExitEnable;
|
||||
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();
|
||||
|
||||
const FeatureGUIInfo& GetGUIInfo() const override;
|
||||
void DrawMain() override;
|
||||
|
||||
void Init();
|
||||
void Colors_Export(std::string name);
|
||||
void Colors_Import(std::string name);
|
||||
|
||||
private:
|
||||
|
||||
void OnExitKeyPressed();
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <cheat-base/render/backend/dx12-hook.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);
|
||||
|
||||
@ -33,14 +34,14 @@ namespace renderer
|
||||
static constexpr int _fontsCount = _fontSizeMax / _fontSizeStep;
|
||||
static std::array<ImFont*, _fontsCount> _fonts;
|
||||
|
||||
static Data _customFontData {};
|
||||
static Data _customFontData{};
|
||||
|
||||
static WNDPROC OriginalWndProcHandler;
|
||||
static ID3D11RenderTargetView* mainRenderTargetView;
|
||||
|
||||
static void OnRenderDX11(ID3D11DeviceContext* pContext);
|
||||
static void OnInitializeDX11(HWND window, ID3D11Device* pDevice, ID3D11DeviceContext* pContext, IDXGISwapChain* pChain);
|
||||
|
||||
|
||||
static void OnPreRenderDX12();
|
||||
static void OnPostRenderDX12(ID3D12GraphicsCommandList* commandList);
|
||||
static void OnInitializeDX12(HWND window, ID3D12Device* pDevice, UINT buffersCounts, ID3D12DescriptorHeap* pDescriptorHeapImGuiRender);
|
||||
@ -106,7 +107,7 @@ namespace renderer
|
||||
return io.FontDefault;
|
||||
}
|
||||
int fontSizeInt = static_cast<int>(fontSize);
|
||||
int fontIndex = fontSizeInt / _fontSizeStep +
|
||||
int fontIndex = fontSizeInt / _fontSizeStep +
|
||||
(fontSizeInt % _fontSizeStep > (_fontSizeStep / 2) ? 1 : 0) - 1;
|
||||
fontIndex = std::clamp(fontIndex, 0, _fontsCount - 1);
|
||||
return _fonts[fontIndex];
|
||||
@ -122,7 +123,7 @@ namespace renderer
|
||||
|
||||
int fontSizeInt = static_cast<int>(fontSize);
|
||||
int fontIndex = fontSizeInt / _fontSizeStep;
|
||||
int fontAligned = fontIndex * _fontSizeStep +
|
||||
int fontAligned = fontIndex * _fontSizeStep +
|
||||
((fontSizeInt % _fontSizeStep) > _fontSizeStep / 2 ? _fontSizeStep : 0);
|
||||
fontAligned = std::clamp(fontAligned, _fontSizeStep, _fontSizeMax);
|
||||
|
||||
@ -138,7 +139,7 @@ namespace renderer
|
||||
{
|
||||
return _globalFontSize;
|
||||
}
|
||||
|
||||
|
||||
static void LoadCustomFont()
|
||||
{
|
||||
if (_customFontData.data == nullptr)
|
||||
@ -195,7 +196,7 @@ namespace renderer
|
||||
reinterpret_cast<LONG_PTR>(hWndProc)));
|
||||
|
||||
ImGui_ImplWin32_Init(window);
|
||||
ImGui_ImplDX12_Init(pDevice, buffersCounts, DXGI_FORMAT_R8G8B8A8_UNORM,
|
||||
ImGui_ImplDX12_Init(pDevice, buffersCounts, DXGI_FORMAT_R8G8B8A8_UNORM,
|
||||
pDescriptorHeapImGuiRender,
|
||||
pDescriptorHeapImGuiRender->GetCPUDescriptorHandleForHeapStart(),
|
||||
pDescriptorHeapImGuiRender->GetGPUDescriptorHandleForHeapStart());
|
||||
@ -253,6 +254,9 @@ namespace renderer
|
||||
|
||||
pContext->OMSetRenderTargets(1, &mainRenderTargetView, nullptr);
|
||||
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)
|
||||
|
@ -25,6 +25,7 @@
|
||||
<ClInclude Include="src\user\cheat\player\FallControl.h" />
|
||||
<ClInclude Include="src\user\cheat\visuals\TextureChanger.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\CustomWeather.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\visuals\TextureChanger.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\CustomWeather.cpp" />
|
||||
<ClCompile Include="src\user\cheat\world\FakeTime.cpp" />
|
||||
@ -224,12 +226,19 @@
|
||||
<Image Include="res\iconsHD\Azhdaha.png" />
|
||||
<Image Include="res\iconsHD\Boar.png" />
|
||||
<Image Include="res\iconsHD\BookPage.png" />
|
||||
<Image Include="res\iconsHD\BouncyMushroom.png" />
|
||||
<Image Include="res\iconsHD\Cat.png" />
|
||||
<Image Include="res\iconsHD\Cicin.png" />
|
||||
<Image Include="res\iconsHD\ClusterleafOfCultivation.png" />
|
||||
<Image Include="res\iconsHD\Crane.png" />
|
||||
<Image Include="res\iconsHD\CryoBathysmalVishap.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\DreadfulWithering.png" />
|
||||
<Image Include="res\iconsHD\DunlinsTooth.png" />
|
||||
<Image Include="res\iconsHD\Dvalin.png" />
|
||||
<Image Include="res\iconsHD\Eel.png" />
|
||||
@ -418,6 +427,7 @@
|
||||
<Image Include="res\iconsHD\NilotpalaLotus.png" />
|
||||
<Image Include="res\iconsHD\Nobushi.png" />
|
||||
<Image Include="res\iconsHD\NoctilucousJade.png" />
|
||||
<Image Include="res\iconsHD\NurseriesInTheWilds.png" />
|
||||
<Image Include="res\iconsHD\OceanCrab.png" />
|
||||
<Image Include="res\iconsHD\Oceanid.png" />
|
||||
<Image Include="res\iconsHD\OceanidSummons.png" />
|
||||
@ -427,6 +437,7 @@
|
||||
<Image Include="res\iconsHD\Padisarah.png" />
|
||||
<Image Include="res\iconsHD\PaleRedCrab.png" />
|
||||
<Image Include="res\iconsHD\PerpetualMechanicalArray.png" />
|
||||
<Image Include="res\iconsHD\PhantasmalGate.png" />
|
||||
<Image Include="res\iconsHD\PhaseGate.png" />
|
||||
<Image Include="res\iconsHD\PhilanemoMushroom.png" />
|
||||
<Image Include="res\iconsHD\Pigeon.png" />
|
||||
@ -465,6 +476,7 @@
|
||||
<Image Include="res\iconsHD\RukkhashavaMushrooms.png" />
|
||||
<Image Include="res\iconsHD\RustyKoi.png" />
|
||||
<Image Include="res\iconsHD\SacredSakura.png" />
|
||||
<Image Include="res\iconsHD\SaghiraMachine.png" />
|
||||
<Image Include="res\iconsHD\SakuraBloom.png" />
|
||||
<Image Include="res\iconsHD\Salamander.png" />
|
||||
<Image Include="res\iconsHD\Samachurl.png" />
|
||||
@ -507,6 +519,7 @@
|
||||
<Image Include="res\iconsHD\Starshroom.png" />
|
||||
<Image Include="res\iconsHD\Starsilver.png" />
|
||||
<Image Include="res\iconsHD\StatueofTheSeven.png" />
|
||||
<Image Include="res\iconsHD\StonePillarSeal.png" />
|
||||
<Image Include="res\iconsHD\StormBarrier.png" />
|
||||
<Image Include="res\iconsHD\Stormstone.png" />
|
||||
<Image Include="res\iconsHD\StrangeTooth.png" />
|
||||
@ -530,7 +543,8 @@
|
||||
<Image Include="res\iconsHD\TorchPuzzle.png" />
|
||||
<Image Include="res\iconsHD\TreasureHoarder.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\UniqueRocks.png" />
|
||||
<Image Include="res\iconsHD\UnusualHilichurl.png" />
|
||||
@ -563,12 +577,19 @@
|
||||
<Image Include="res\icons\Azhdaha.png" />
|
||||
<Image Include="res\icons\Boar.png" />
|
||||
<Image Include="res\icons\BookPage.png" />
|
||||
<Image Include="res\icons\BouncyMushroom.png" />
|
||||
<Image Include="res\icons\Cat.png" />
|
||||
<Image Include="res\icons\Cicin.png" />
|
||||
<Image Include="res\icons\ClusterleafOfCultivation.png" />
|
||||
<Image Include="res\icons\Crane.png" />
|
||||
<Image Include="res\icons\CryoBathysmalVishap.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\DreadfulWithering.png" />
|
||||
<Image Include="res\icons\DunlinsTooth.png" />
|
||||
<Image Include="res\icons\Dvalin.png" />
|
||||
<Image Include="res\icons\Eel.png" />
|
||||
@ -757,6 +778,7 @@
|
||||
<Image Include="res\icons\NilotpalaLotus.png" />
|
||||
<Image Include="res\icons\Nobushi.png" />
|
||||
<Image Include="res\icons\NoctilucousJade.png" />
|
||||
<Image Include="res\icons\NurseriesInTheWilds.png" />
|
||||
<Image Include="res\icons\OceanCrab.png" />
|
||||
<Image Include="res\icons\Oceanid.png" />
|
||||
<Image Include="res\icons\OceanidSummons.png" />
|
||||
@ -766,6 +788,7 @@
|
||||
<Image Include="res\icons\Padisarah.png" />
|
||||
<Image Include="res\icons\PaleRedCrab.png" />
|
||||
<Image Include="res\icons\PerpetualMechanicalArray.png" />
|
||||
<Image Include="res\icons\PhantasmalGate.png" />
|
||||
<Image Include="res\icons\PhaseGate.png" />
|
||||
<Image Include="res\icons\PhilanemoMushroom.png" />
|
||||
<Image Include="res\icons\Pigeon.png" />
|
||||
@ -804,6 +827,7 @@
|
||||
<Image Include="res\icons\RukkhashavaMushrooms.png" />
|
||||
<Image Include="res\icons\RustyKoi.png" />
|
||||
<Image Include="res\icons\SacredSakura.png" />
|
||||
<Image Include="res\icons\SaghiraMachine.png" />
|
||||
<Image Include="res\icons\SakuraBloom.png" />
|
||||
<Image Include="res\icons\Salamander.png" />
|
||||
<Image Include="res\icons\Samachurl.png" />
|
||||
@ -846,6 +870,7 @@
|
||||
<Image Include="res\icons\Starshroom.png" />
|
||||
<Image Include="res\icons\Starsilver.png" />
|
||||
<Image Include="res\icons\StatueofTheSeven.png" />
|
||||
<Image Include="res\icons\StonePillarSeal.png" />
|
||||
<Image Include="res\icons\StormBarrier.png" />
|
||||
<Image Include="res\icons\Stormstone.png" />
|
||||
<Image Include="res\icons\StrangeTooth.png" />
|
||||
@ -869,7 +894,8 @@
|
||||
<Image Include="res\icons\TorchPuzzle.png" />
|
||||
<Image Include="res\icons\TreasureHoarder.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\UniqueRocks.png" />
|
||||
<Image Include="res\icons\UnusualHilichurl.png" />
|
||||
@ -1016,7 +1042,7 @@
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<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>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
|
@ -258,6 +258,9 @@
|
||||
<ClInclude Include="src\user\cheat\player\FallControl.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\user\cheat\world\AutoChallenge.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Font Include="res\Ruda-Bold.ttf" />
|
||||
@ -474,6 +477,9 @@
|
||||
<ClCompile Include="src\user\cheat\player\FallControl.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\user\cheat\world\AutoChallenge.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="res\res.rc">
|
||||
@ -2409,9 +2415,6 @@
|
||||
<Image Include="res\iconsHD\SumeruRose.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="res\iconsHD\Tukan.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="res\iconsHD\Viparyas.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
@ -2439,9 +2442,6 @@
|
||||
<Image Include="res\iconsHD\RukkhashavaMushrooms.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="res\icons\Tukan.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="res\icons\Viparyas.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
@ -2526,5 +2526,83 @@
|
||||
<Image Include="res\icons\BookPage.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</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>
|
||||
</Project>
|
@ -1,12 +1,12 @@
|
||||
{
|
||||
"game_version": "2.8",
|
||||
"game_version": "3.0",
|
||||
"modules": {
|
||||
"UnityPlayer.dll": {
|
||||
"checksum": 4999961552328781053,
|
||||
"checksum": 18225598526199471527,
|
||||
"timestamp": 0
|
||||
},
|
||||
"UserAssembly.dll": {
|
||||
"checksum": 807890720029543258,
|
||||
"checksum": 10799527772725786707,
|
||||
"timestamp": 0
|
||||
}
|
||||
}
|
||||
|
BIN
cheat-library/res/icons/BouncyMushroom.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
cheat-library/res/icons/ClusterleafOfCultivation.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
cheat-library/res/icons/DendroGranum.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
cheat-library/res/icons/DendroPile.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
cheat-library/res/icons/DendroProjector.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
cheat-library/res/icons/DendroRock.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
cheat-library/res/icons/DreadfulWithering.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
cheat-library/res/icons/NurseriesInTheWilds.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
cheat-library/res/icons/PhantasmalGate.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
cheat-library/res/icons/SaghiraMachine.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
cheat-library/res/icons/StonePillarSeal.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
cheat-library/res/icons/TriYanaSeeds.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
cheat-library/res/iconsHD/BouncyMushroom.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
cheat-library/res/iconsHD/ClusterleafOfCultivation.png
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
cheat-library/res/iconsHD/DendroGranum.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
cheat-library/res/iconsHD/DendroPile.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
cheat-library/res/iconsHD/DendroProjector.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
cheat-library/res/iconsHD/DendroRock.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
cheat-library/res/iconsHD/DreadfulWithering.png
Normal file
After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
BIN
cheat-library/res/iconsHD/NurseriesInTheWilds.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
cheat-library/res/iconsHD/PhantasmalGate.png
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
cheat-library/res/iconsHD/SaghiraMachine.png
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
cheat-library/res/iconsHD/StonePillarSeal.png
Normal file
After Width: | Height: | Size: 124 KiB |
BIN
cheat-library/res/iconsHD/TriYanaSeeds.png
Normal file
After Width: | Height: | Size: 27 KiB |
@ -72,6 +72,8 @@ AssemblyChecksums RCDATA "assembly_checksum.json"
|
||||
// PNG
|
||||
//
|
||||
|
||||
#pragma region iconsHD
|
||||
|
||||
HDABIDINGANGELFISH PNG "iconsHD\\AbidingAngelfish.png"
|
||||
|
||||
HDABYSSMAGE PNG "iconsHD\\AbyssMage.png"
|
||||
@ -144,6 +146,8 @@ HDBOOKPAGE PNG "iconsHD\\BookPage.png"
|
||||
|
||||
HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png"
|
||||
|
||||
HDBOUNCYMUSHROOM PNG "iconsHD\\BouncyMushroom.png"
|
||||
|
||||
HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png"
|
||||
|
||||
HDBROWNSHIRAKODAI PNG "iconsHD\\BrownShirakodai.png"
|
||||
@ -166,6 +170,10 @@ HDCHILLEDMEAT PNG "iconsHD\\ChilledMeat.png"
|
||||
|
||||
HDCICIN PNG "iconsHD\\Cicin.png"
|
||||
|
||||
HDCLOUDLEISURESTEPS PNG "iconsHD\\CloudleisureSteps.png"
|
||||
|
||||
HDCLUSTERLEAFOFCULTIVATION PNG "iconsHD\\ClusterleafOfCultivation.png"
|
||||
|
||||
HDCOMMONCHEST PNG "iconsHD\\CommonChest.png"
|
||||
|
||||
HDCOOKINGINGREDIENT PNG "iconsHD\\CookingIngredient.png"
|
||||
@ -212,7 +220,7 @@ HDDANDY PNG "iconsHD\\Dandy.png"
|
||||
|
||||
HDDAWNCATCHER PNG "iconsHD\\Dawncatcher.png"
|
||||
|
||||
HDDAYNIGHTSWITCHINGMECHANISM PNG "iconsHD\\DayNightSwitchingMechanism.png"
|
||||
HDDAYNIGHTSWITCHINGMECHANISM PNG "iconsHD\\DayNightSwitchingMechanism.png"
|
||||
|
||||
HDDEEPSEAUNAGI PNG "iconsHD\\DeepSeaUnagi.png"
|
||||
|
||||
@ -220,14 +228,28 @@ HDDENDROBIUM PNG "iconsHD\\Dendrobium.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"
|
||||
|
||||
HDDOG PNG "iconsHD\\Dog.png"
|
||||
|
||||
HDDOMAIN PNG "iconsHD\\Domain.png"
|
||||
|
||||
HDDREADFULWITHERING PNG "iconsHD\\DreadfulWithering.png"
|
||||
|
||||
HDDREAMFORM PNG "iconsHD\\DreamForm.png"
|
||||
|
||||
HDDUNLINSTOOTH PNG "iconsHD\\DunlinsTooth.png"
|
||||
|
||||
HDDUSKBIRD PNG "iconsHD\\DuskBird.png"
|
||||
|
||||
HDDVALIN PNG "iconsHD\\Dvalin.png"
|
||||
|
||||
HDECHOINGCONCH PNG "iconsHD\\EchoingConch.png"
|
||||
@ -240,7 +262,7 @@ HDELECTRICCONDUCTION PNG "iconsHD\\ElectricConduction.png
|
||||
|
||||
HDELECTROABYSSLECTOR PNG "iconsHD\\ElectroAbyssLector.png"
|
||||
|
||||
HDELECTROBATHYSMALVISHAP PNG "iconsHD\\ElectroBathysmalVishap.png"
|
||||
HDELECTROBATHYSMALVISHAP PNG "iconsHD\\ElectroBathysmalVishap.png"
|
||||
|
||||
HDELECTROCRYSTAL PNG "iconsHD\\ElectroCrystal.png"
|
||||
|
||||
@ -260,7 +282,7 @@ HDELEMENTALMONUMENT PNG "iconsHD\\ElementalMonument.png"
|
||||
|
||||
HDEMERALDFINCH PNG "iconsHD\\EmeraldFinch.png"
|
||||
|
||||
HDENEMIESFIRSTTIMEVICTORY PNG "iconsHD\\EnemiesFirstTimeVictory.png"
|
||||
HDENEMIESFIRSTTIMEVICTORY PNG "iconsHD\\EnemiesFirstTimeVictory.png"
|
||||
|
||||
HDENKANOMIYAPHASEGATE PNG "iconsHD\\EnkanomiyaPhaseGate.png"
|
||||
|
||||
@ -362,6 +384,8 @@ HDHORSETAIL PNG "iconsHD\\Horsetail.png"
|
||||
|
||||
HDHYDROABYSSHERALD PNG "iconsHD\\HydroAbyssHerald.png"
|
||||
|
||||
HDHYDROBATHYSMALVISHAP PNG "iconsHD\\HydroBathysmalVishap.png"
|
||||
|
||||
HDHYDROHYPOSTASIS PNG "iconsHD\\HydroHypostasis.png"
|
||||
|
||||
HDILLUSION PNG "iconsHD\\Illusion.png"
|
||||
@ -426,7 +450,7 @@ HDLUMINESCENTSPINE PNG "iconsHD\\LuminescentSpine.png"
|
||||
|
||||
HDLUNGEDSTICKLEBACK PNG "iconsHD\\LungedStickleback.png"
|
||||
|
||||
HDLUPUSBOREASDOMINATOROFWOLVES PNG "iconsHD\\LupusBoreasDominatorofWolves.png"
|
||||
HDLUPUSBOREASDOMINATOROFWOLVES PNG "iconsHD\\LupusBoreasDominatorofWolves.png"
|
||||
|
||||
HDLUXURIOUSCHEST PNG "iconsHD\\LuxuriousChest.png"
|
||||
|
||||
@ -442,6 +466,8 @@ HDMATSUTAKE PNG "iconsHD\\Matsutake.png"
|
||||
|
||||
HDMEDAKA PNG "iconsHD\\Medaka.png"
|
||||
|
||||
HDMELODICBLOOM PNG "iconsHD\\MelodicBloom.png"
|
||||
|
||||
HDMERCHANT PNG "iconsHD\\Merchant.png"
|
||||
|
||||
HDMILLELITH PNG "iconsHD\\Millelith.png"
|
||||
@ -474,6 +500,8 @@ HDNOBUSHI PNG "iconsHD\\Nobushi.png"
|
||||
|
||||
HDNOCTILUCOUSJADE PNG "iconsHD\\NoctilucousJade.png"
|
||||
|
||||
HDNURSERIESINTHEWILDS PNG "iconsHD\\NurseriesInTheWilds.png"
|
||||
|
||||
HDOCEANCRAB PNG "iconsHD\\OceanCrab.png"
|
||||
|
||||
HDOCEANID PNG "iconsHD\\Oceanid.png"
|
||||
@ -506,6 +534,8 @@ HDPALEREDCRAB PNG "iconsHD\\PaleRedCrab.png"
|
||||
|
||||
HDPERPETUALMECHANICALARRAY PNG "iconsHD\\PerpetualMechanicalArray.png"
|
||||
|
||||
HDPHANTASMALGATE PNG "iconsHD\\PhantasmalGate.png"
|
||||
|
||||
HDPHASEGATE PNG "iconsHD\\PhaseGate.png"
|
||||
|
||||
HDPHILANEMOMUSHROOM PNG "iconsHD\\PhilanemoMushroom.png"
|
||||
@ -584,6 +614,8 @@ HDRUSTYKOI PNG "iconsHD\\RustyKoi.png"
|
||||
|
||||
HDSACREDSAKURA PNG "iconsHD\\SacredSakura.png"
|
||||
|
||||
HDSAGHIRAMACHINE PNG "iconsHD\\SaghiraMachine.png"
|
||||
|
||||
HDSAKURABLOOM PNG "iconsHD\\SakuraBloom.png"
|
||||
|
||||
HDSALAMANDER PNG "iconsHD\\Salamander.png"
|
||||
@ -606,8 +638,6 @@ HDSEAGRASS PNG "iconsHD\\Seagrass.png"
|
||||
|
||||
HDSEALEDCHEST PNG "iconsHD\\SealedChest.png"
|
||||
|
||||
HDSEALLOCATIONS PNG "iconsHD\\SealLocationI.png"
|
||||
|
||||
HDSEALLOCATIONI PNG "iconsHD\\SealLocationI.png"
|
||||
|
||||
HDSEALLOCATIONII PNG "iconsHD\\SealLocationII.png"
|
||||
@ -616,6 +646,8 @@ HDSEALLOCATIONIII PNG "iconsHD\\SealLocationIII.png"
|
||||
|
||||
HDSEALLOCATIONIV PNG "iconsHD\\SealLocationIV.png"
|
||||
|
||||
HDSEALLOCATIONS PNG "iconsHD\\SealLocationI.png"
|
||||
|
||||
HDSEALLOCATIONV PNG "iconsHD\\SealLocationV.png"
|
||||
|
||||
HDSEELIE PNG "iconsHD\\Seelie.png"
|
||||
@ -664,12 +696,16 @@ HDSQUIRREL PNG "iconsHD\\Squirrel.png"
|
||||
|
||||
HDSTARCONCH PNG "iconsHD\\Starconch.png"
|
||||
|
||||
HDSTARLIGHTCOALESCENCE PNG "iconsHD\\StarlightCoalescence.png"
|
||||
|
||||
HDSTARSHROOM PNG "iconsHD\\Starshroom.png"
|
||||
|
||||
HDSTARSILVER PNG "iconsHD\\Starsilver.png"
|
||||
|
||||
HDSTATUEOFTHESEVEN PNG "iconsHD\\StatueofTheSeven.png"
|
||||
|
||||
HDSTONEPILLARSEAL PNG "iconsHD\\StonePillarSeal.png"
|
||||
|
||||
HDSTORMBARRIER PNG "iconsHD\\StormBarrier.png"
|
||||
|
||||
HDSTORMSTONE PNG "iconsHD\\Stormstone.png"
|
||||
@ -704,6 +740,8 @@ HDTHECRUXTHEALCOR PNG "iconsHD\\TheCruxTheAlcor.png"
|
||||
|
||||
HDTHEGREATSNOWBOARKING PNG "iconsHD\\TheGreatSnowboarKing.png"
|
||||
|
||||
HDTHERAVENFORUM PNG "iconsHD\\TheRavenForum.png"
|
||||
|
||||
HDTHREEBOXES PNG "iconsHD\\ThreeBoxes.png"
|
||||
|
||||
HDTHUNDERMANIFESTATION PNG "iconsHD\\ThunderManifestation.png"
|
||||
@ -716,7 +754,7 @@ HDTREASUREHOARDER PNG "iconsHD\\TreasureHoarder.png"
|
||||
|
||||
HDTRIANGULARMECHANISM PNG "iconsHD\\TriangularMechanism.png"
|
||||
|
||||
HDTUKAN PNG "iconsHD\\Tukan.png"
|
||||
HDTRIYANASEEDS PNG "iconsHD\\TriYanaSeeds.png"
|
||||
|
||||
HDUNAGIMEAT PNG "iconsHD\\UnagiMeat.png"
|
||||
|
||||
@ -771,17 +809,11 @@ HDWORLDQUESTS PNG "iconsHD\\WorldQuests.png"
|
||||
HDYUMEMIRUWOOD PNG "iconsHD\\YumemiruWood.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"
|
||||
|
||||
ABYSSMAGE PNG "icons\\AbyssMage.png"
|
||||
@ -858,6 +890,8 @@ BOOKPAGE PNG "icons\\BookPage.png"
|
||||
|
||||
BOOTWEASEL PNG "icons\\BootWeasel.png"
|
||||
|
||||
BOUNCYMUSHROOM PNG "icons\\BouncyMushroom.png"
|
||||
|
||||
BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png"
|
||||
|
||||
BROWNSHIRAKODAI PNG "icons\\BrownShirakodai.png"
|
||||
@ -880,6 +914,10 @@ CHILLEDMEAT PNG "icons\\ChilledMeat.png"
|
||||
|
||||
CICIN PNG "icons\\Cicin.png"
|
||||
|
||||
CLOUDLEISURESTEPS PNG "icons\\CloudleisureSteps.png"
|
||||
|
||||
CLUSTERLEAFOFCULTIVATION PNG "icons\\ClusterleafOfCultivation.png"
|
||||
|
||||
COMMONCHEST PNG "icons\\CommonChest.png"
|
||||
|
||||
COOKINGINGREDIENT PNG "icons\\CookingIngredient.png"
|
||||
@ -934,14 +972,28 @@ DENDROBIUM PNG "icons\\Dendrobium.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"
|
||||
|
||||
DOG PNG "icons\\Dog.png"
|
||||
|
||||
DOMAIN PNG "icons\\Domain.png"
|
||||
|
||||
DREADFULWITHERING PNG "icons\\DreadfulWithering.png"
|
||||
|
||||
DREAMFORM PNG "icons\\DreamForm.png"
|
||||
|
||||
DUNLINSTOOTH PNG "icons\\DunlinsTooth.png"
|
||||
|
||||
DUSKBIRD PNG "icons\\DuskBird.png"
|
||||
|
||||
DVALIN PNG "icons\\Dvalin.png"
|
||||
|
||||
ECHOINGCONCH PNG "icons\\EchoingConch.png"
|
||||
@ -1076,6 +1128,8 @@ HORSETAIL PNG "icons\\Horsetail.png"
|
||||
|
||||
HYDROABYSSHERALD PNG "icons\\HydroAbyssHerald.png"
|
||||
|
||||
HYDROBATHYSMALVISHAP PNG "icons\\HydroBathysmalVishap.png"
|
||||
|
||||
HYDROHYPOSTASIS PNG "icons\\HydroHypostasis.png"
|
||||
|
||||
ILLUSION PNG "icons\\Illusion.png"
|
||||
@ -1140,7 +1194,7 @@ LUMINESCENTSPINE PNG "icons\\LuminescentSpine.png"
|
||||
|
||||
LUNGEDSTICKLEBACK PNG "icons\\LungedStickleback.png"
|
||||
|
||||
LUPUSBOREASDOMINATOROFWOLVES PNG "icons\\LupusBoreasDominatorofWolves.png"
|
||||
LUPUSBOREASDOMINATOROFWOLVES PNG "icons\\LupusBoreasDominatorofWolves.png"
|
||||
|
||||
LUXURIOUSCHEST PNG "icons\\LuxuriousChest.png"
|
||||
|
||||
@ -1156,6 +1210,8 @@ MATSUTAKE PNG "icons\\Matsutake.png"
|
||||
|
||||
MEDAKA PNG "icons\\Medaka.png"
|
||||
|
||||
MELODICBLOOM PNG "icons\\MelodicBloom.png"
|
||||
|
||||
MERCHANT PNG "icons\\Merchant.png"
|
||||
|
||||
MILLELITH PNG "icons\\Millelith.png"
|
||||
@ -1182,7 +1238,7 @@ MYSTERIOUSCARVINGS PNG "icons\\MysteriousCarvings.png"
|
||||
|
||||
NAKUWEED PNG "icons\\NakuWeed.png"
|
||||
|
||||
NILOTPALALOTUS PNG "icons\\NilotpalaLotus.png"
|
||||
NILOTPALALOTUS PNG "icons\\NilotpalaLotus.png"
|
||||
|
||||
NOBUSHI PNG "icons\\Nobushi.png"
|
||||
|
||||
@ -1190,6 +1246,8 @@ NOCTILUCOUSJADE PNG "icons\\NoctilucousJade.png"
|
||||
|
||||
NPC PNG "icons\\Npc.png"
|
||||
|
||||
NURSERIESINTHEWILDS PNG "icons\\NurseriesInTheWilds.png"
|
||||
|
||||
OCEANCRAB PNG "icons\\OceanCrab.png"
|
||||
|
||||
OCEANID PNG "icons\\Oceanid.png"
|
||||
@ -1220,7 +1278,9 @@ PADISARAH PNG "icons\\Padisarah.png"
|
||||
|
||||
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"
|
||||
|
||||
@ -1300,6 +1360,8 @@ RUSTYKOI PNG "icons\\RustyKoi.png"
|
||||
|
||||
SACREDSAKURA PNG "icons\\SacredSakura.png"
|
||||
|
||||
SAGHIRAMACHINE PNG "icons\\SaghiraMachine.png"
|
||||
|
||||
SAKURABLOOM PNG "icons\\SakuraBloom.png"
|
||||
|
||||
SALAMANDER PNG "icons\\Salamander.png"
|
||||
@ -1322,8 +1384,6 @@ SEAGRASS PNG "icons\\Seagrass.png"
|
||||
|
||||
SEALEDCHEST PNG "icons\\SealedChest.png"
|
||||
|
||||
SEALLOCATIONS PNG "icons\\SealLocationI.png"
|
||||
|
||||
SEALLOCATIONI PNG "icons\\SealLocationI.png"
|
||||
|
||||
SEALLOCATIONII PNG "icons\\SealLocationII.png"
|
||||
@ -1332,6 +1392,8 @@ SEALLOCATIONIII PNG "icons\\SealLocationIII.png"
|
||||
|
||||
SEALLOCATIONIV PNG "icons\\SealLocationIV.png"
|
||||
|
||||
SEALLOCATIONS PNG "icons\\SealLocationI.png"
|
||||
|
||||
SEALLOCATIONV PNG "icons\\SealLocationV.png"
|
||||
|
||||
SEELIE PNG "icons\\Seelie.png"
|
||||
@ -1380,12 +1442,16 @@ SQUIRREL PNG "icons\\Squirrel.png"
|
||||
|
||||
STARCONCH PNG "icons\\Starconch.png"
|
||||
|
||||
STARLIGHTCOALESCENCE PNG "icons\\StarlightCoalescence.png"
|
||||
|
||||
STARSHROOM PNG "icons\\Starshroom.png"
|
||||
|
||||
STARSILVER PNG "icons\\Starsilver.png"
|
||||
|
||||
STATUEOFTHESEVEN PNG "icons\\StatueofTheSeven.png"
|
||||
|
||||
STONEPILLARSEAL PNG "icons\\StonePillarSeal.png"
|
||||
|
||||
STORMBARRIER PNG "icons\\StormBarrier.png"
|
||||
|
||||
STORMSTONE PNG "icons\\Stormstone.png"
|
||||
@ -1420,6 +1486,8 @@ THECRUXTHEALCOR PNG "icons\\TheCruxTheAlcor.png"
|
||||
|
||||
THEGREATSNOWBOARKING PNG "icons\\TheGreatSnowboarKing.png"
|
||||
|
||||
THERAVENFORUM PNG "icons\\TheRavenForum.png"
|
||||
|
||||
THREEBOXES PNG "icons\\ThreeBoxes.png"
|
||||
|
||||
THUNDERMANIFESTATION PNG "icons\\ThunderManifestation.png"
|
||||
@ -1432,7 +1500,7 @@ TREASUREHOARDER PNG "icons\\TreasureHoarder.png"
|
||||
|
||||
TRIANGULARMECHANISM PNG "icons\\TriangularMechanism.png"
|
||||
|
||||
TUKAN PNG "icons\\Tukan.png"
|
||||
TRIYANASEEDS PNG "icons\\TriYanaSeeds.png"
|
||||
|
||||
UNAGIMEAT PNG "icons\\UnagiMeat.png"
|
||||
|
||||
@ -1487,16 +1555,7 @@ WORLDQUESTS PNG "icons\\WorldQuests.png"
|
||||
YUMEMIRUWOOD PNG "icons\\YumemiruWood.png"
|
||||
|
||||
ZAYTUNPEACH PNG "icons\\ZaytunPeach.png"
|
||||
|
||||
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"
|
||||
#pragma endregion
|
||||
|
||||
#endif // English (United States) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
#include <cheat/world/AutoFish.h>
|
||||
#include <cheat/world/AutoCook.h>
|
||||
#include <cheat/world/AutoChallenge.h>
|
||||
#include <cheat/world/CustomWeather.h>
|
||||
|
||||
#include <cheat/visuals/NoFog.h>
|
||||
@ -99,6 +100,7 @@ namespace cheat
|
||||
FEAT_INST(FreezeEnemies),
|
||||
FEAT_INST(ElementalSight),
|
||||
FEAT_INST(KillAura),
|
||||
FEAT_INST(AutoChallenge),
|
||||
FEAT_INST(MobVacuum),
|
||||
FEAT_INST(FakeTime),
|
||||
|
||||
|
@ -581,27 +581,30 @@ namespace cheat::feature
|
||||
ADD_FILTER_FIELD(chest, LuxuriousChest);
|
||||
ADD_FILTER_FIELD(chest, RemarkableChest);
|
||||
// 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(featured, Anemoculus);
|
||||
ADD_FILTER_FIELD(featured, CrimsonAgate);
|
||||
ADD_FILTER_FIELD(featured, Electroculus);
|
||||
ADD_FILTER_FIELD(featured, Dendroculus);
|
||||
ADD_FILTER_FIELD(featured, EchoingConch);
|
||||
ADD_FILTER_FIELD(featured, Electroculus);
|
||||
ADD_FILTER_FIELD(featured, Electrogranum);
|
||||
ADD_FILTER_FIELD(featured, FishingPoint);
|
||||
ADD_FILTER_FIELD(featured, Geoculus);
|
||||
ADD_FILTER_FIELD(featured, ImagingConch);
|
||||
ADD_FILTER_FIELD(featured, ItemDrops);
|
||||
ADD_FILTER_FIELD(featured, KeySigil);
|
||||
ADD_FILTER_FIELD(featured, Lumenspar);
|
||||
ADD_FILTER_FIELD(featured, ShrineOfDepth);
|
||||
ADD_FILTER_FIELD(featured, TimeTrialChallenge);
|
||||
|
||||
ADD_FILTER_FIELD(guide, BouncyMushroom);
|
||||
ADD_FILTER_FIELD(guide, CampfireTorch);
|
||||
ADD_FILTER_FIELD(guide, ClusterleafOfCultivation);
|
||||
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, MysteriousCarvings);
|
||||
ADD_FILTER_FIELD(guide, PhaseGate);
|
||||
@ -623,6 +626,7 @@ namespace cheat::feature
|
||||
ADD_FILTER_FIELD(living, Crow);
|
||||
ADD_FILTER_FIELD(living, CrystalCore);
|
||||
ADD_FILTER_FIELD(living, Dog);
|
||||
ADD_FILTER_FIELD(living, DuskBird);
|
||||
ADD_FILTER_FIELD(living, Eel);
|
||||
ADD_FILTER_FIELD(living, Falcon);
|
||||
ADD_FILTER_FIELD(living, Finch);
|
||||
@ -640,7 +644,6 @@ namespace cheat::feature
|
||||
ADD_FILTER_FIELD(living, Salamander);
|
||||
ADD_FILTER_FIELD(living, Squirrel);
|
||||
ADD_FILTER_FIELD(living, Starconch);
|
||||
ADD_FILTER_FIELD(living, Tukan);
|
||||
ADD_FILTER_FIELD(living, Weasel);
|
||||
ADD_FILTER_FIELD(living, Wigeon);
|
||||
|
||||
@ -710,7 +713,6 @@ namespace cheat::feature
|
||||
ADD_FILTER_FIELD(monster, Hilichurl);
|
||||
ADD_FILTER_FIELD(monster, HydroAbyssHerald);
|
||||
ADD_FILTER_FIELD(monster, HydroBathysmalVishap);
|
||||
ADD_FILTER_FIELD(monster, HydroHypostasisSummon);
|
||||
ADD_FILTER_FIELD(monster, Kairagi);
|
||||
ADD_FILTER_FIELD(monster, Millelith);
|
||||
ADD_FILTER_FIELD(monster, Mitachurl);
|
||||
@ -789,7 +791,7 @@ namespace cheat::feature
|
||||
ADD_FILTER_FIELD(plant, SweetFlower);
|
||||
ADD_FILTER_FIELD(plant, Valberry);
|
||||
ADD_FILTER_FIELD(plant, Violetgrass);
|
||||
//ADD_FILTER_FIELD(plant, Viparyas);
|
||||
ADD_FILTER_FIELD(plant, Viparyas);
|
||||
ADD_FILTER_FIELD(plant, WindwheelAster);
|
||||
ADD_FILTER_FIELD(plant, Wolfhook);
|
||||
ADD_FILTER_FIELD(plant, ZaytunPeach);
|
||||
@ -798,39 +800,41 @@ namespace cheat::feature
|
||||
ADD_FILTER_FIELD(puzzle, BakeDanuki);
|
||||
ADD_FILTER_FIELD(puzzle, BloattyFloatty);
|
||||
ADD_FILTER_FIELD(puzzle, CubeDevices);
|
||||
ADD_FILTER_FIELD(puzzle, DendroProjector);
|
||||
ADD_FILTER_FIELD(puzzle, DreadfulWithering);
|
||||
ADD_FILTER_FIELD(puzzle, EightStoneTablets);
|
||||
ADD_FILTER_FIELD(puzzle, ElectricConduction);
|
||||
ADD_FILTER_FIELD(puzzle, RelayStone);
|
||||
ADD_FILTER_FIELD(puzzle, ElectroSeelie);
|
||||
ADD_FILTER_FIELD(puzzle, ElementalMonument);
|
||||
ADD_FILTER_FIELD(puzzle, FloatingAnemoSlime);
|
||||
ADD_FILTER_FIELD(puzzle, Geogranum);
|
||||
ADD_FILTER_FIELD(puzzle, GeoPuzzle);
|
||||
ADD_FILTER_FIELD(puzzle, LargeRockPile);
|
||||
ADD_FILTER_FIELD(puzzle, LightUpTilePuzzle);
|
||||
ADD_FILTER_FIELD(puzzle, LightningStrikeProbe);
|
||||
ADD_FILTER_FIELD(puzzle, LightUpTilePuzzle);
|
||||
ADD_FILTER_FIELD(puzzle, LumenCage);
|
||||
ADD_FILTER_FIELD(puzzle, LuminousSeelie);
|
||||
ADD_FILTER_FIELD(puzzle, MistBubble);
|
||||
ADD_FILTER_FIELD(puzzle, NurseriesInTheWilds);
|
||||
ADD_FILTER_FIELD(puzzle, OozingConcretions);
|
||||
ADD_FILTER_FIELD(puzzle, PhantasmalGate);
|
||||
ADD_FILTER_FIELD(puzzle, PirateHelm);
|
||||
ADD_FILTER_FIELD(puzzle, PressurePlate);
|
||||
ADD_FILTER_FIELD(puzzle, RelayStone);
|
||||
ADD_FILTER_FIELD(puzzle, SaghiraMachine);
|
||||
ADD_FILTER_FIELD(puzzle, SealLocations);
|
||||
ADD_FILTER_FIELD(puzzle, Seelie);
|
||||
ADD_FILTER_FIELD(puzzle, SeelieLamp);
|
||||
ADD_FILTER_FIELD(puzzle, SmallRockPile);
|
||||
ADD_FILTER_FIELD(puzzle, StonePillarSeal);
|
||||
ADD_FILTER_FIELD(puzzle, StormBarrier);
|
||||
ADD_FILTER_FIELD(puzzle, SwordHilt);
|
||||
ADD_FILTER_FIELD(puzzle, Temari);
|
||||
ADD_FILTER_FIELD(puzzle, TorchPuzzle);
|
||||
ADD_FILTER_FIELD(puzzle, TriYanaSeeds);
|
||||
ADD_FILTER_FIELD(puzzle, UniqueRocks);
|
||||
ADD_FILTER_FIELD(puzzle, WarmingSeelie);
|
||||
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
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ namespace cheat::game
|
||||
entityFilters[filter] = { false, 0 };
|
||||
|
||||
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)
|
||||
return entry.first;
|
||||
|
||||
|
@ -75,6 +75,11 @@ namespace cheat::game::filters
|
||||
SimpleFilter RuinBrazier = { EntityType__Enum_1::Gadget, "_AncientHeatSource" };
|
||||
SimpleFilter Stormstone = { EntityType__Enum_1::Gadget, "_ReginLamp" };
|
||||
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
|
||||
@ -101,7 +106,7 @@ namespace cheat::game::filters
|
||||
SimpleFilter Falcon = { EntityType__Enum_1::Monster, "Falcon" };
|
||||
SimpleFilter LucklightFly = { EntityType__Enum_1::EnvAnimal, "Boltbug_" };
|
||||
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 Crow = { EntityType__Enum_1::Monster, "Crow" };
|
||||
SimpleFilter Finch = { EntityType__Enum_1::Monster, "Tit" };
|
||||
@ -277,7 +282,7 @@ namespace cheat::game::filters
|
||||
SimpleFilter Padisarah = { EntityType__Enum_1::GatherObject, "_Pasusalan" };
|
||||
SimpleFilter RukkhashavaMushrooms = { EntityType__Enum_1::GatherObject, "_HolyMushroom" };
|
||||
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" };
|
||||
}
|
||||
|
||||
@ -320,7 +325,15 @@ namespace cheat::game::filters
|
||||
WhitelistFilter DreamForm = { {EntityType__Enum_1::Field, EntityType__Enum_1::Platform }, "_AnimalSeelie" };
|
||||
SimpleFilter StarlightCoalescence = { EntityType__Enum_1::Field, "_PaperStar" };
|
||||
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
|
||||
@ -394,7 +407,7 @@ namespace cheat::game::filters
|
||||
living::Squirrel,
|
||||
living::Boar,
|
||||
living::Weasel,
|
||||
living::Tukan
|
||||
living::DuskBird
|
||||
};
|
||||
SimpleFilter AnimalPickUp = {
|
||||
living::CrystalCore,
|
||||
|
@ -76,6 +76,11 @@ namespace cheat::game::filters
|
||||
extern SimpleFilter RuinBrazier;
|
||||
extern SimpleFilter Stormstone;
|
||||
extern SimpleFilter TriangularMechanism;
|
||||
extern SimpleFilter DendroGranum;
|
||||
extern SimpleFilter BouncyMushroom;
|
||||
extern SimpleFilter ClusterleafOfCultivation;
|
||||
extern SimpleFilter DendroRock;
|
||||
extern SimpleFilter DendroPile;
|
||||
}
|
||||
|
||||
namespace living
|
||||
@ -102,7 +107,7 @@ namespace cheat::game::filters
|
||||
extern SimpleFilter LucklightFly;
|
||||
extern SimpleFilter Npc;
|
||||
extern SimpleFilter Salamander;
|
||||
extern SimpleFilter Tukan;
|
||||
extern SimpleFilter DuskBird;
|
||||
extern SimpleFilter Pigeon;
|
||||
extern SimpleFilter Crow;
|
||||
extern SimpleFilter Finch;
|
||||
@ -277,7 +282,7 @@ namespace cheat::game::filters
|
||||
extern SimpleFilter Padisarah;
|
||||
extern SimpleFilter RukkhashavaMushrooms;
|
||||
extern SimpleFilter SumeruRose;
|
||||
//extern SimpleFilter Viparyas;
|
||||
extern SimpleFilter Viparyas;
|
||||
extern SimpleFilter ZaytunPeach;
|
||||
}
|
||||
|
||||
@ -320,6 +325,15 @@ namespace cheat::game::filters
|
||||
extern WhitelistFilter DreamForm;
|
||||
extern SimpleFilter StarlightCoalescence;
|
||||
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
|
||||
@ -343,4 +357,4 @@ namespace cheat::game::filters
|
||||
extern SimpleFilter OrganicTargets;
|
||||
extern SimpleFilter Lightning;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -563,13 +563,13 @@ namespace cheat::feature
|
||||
std::lock_guard _userDataLock(m_UserDataMutex);
|
||||
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;
|
||||
|
||||
pointData->completed = true;
|
||||
pointData->completeTimestamp = util::GetCurrentTimeMillisec();
|
||||
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount++;
|
||||
m_CompletedPoints.insert(pointData);
|
||||
m_CompletedPoints.push_back(pointData);
|
||||
|
||||
SaveCompletedPoints();
|
||||
}
|
||||
@ -578,13 +578,14 @@ namespace cheat::feature
|
||||
{
|
||||
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;
|
||||
|
||||
pointData->completed = false;
|
||||
pointData->completeTimestamp = 0;
|
||||
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
|
||||
m_CompletedPoints.erase(pointData);
|
||||
m_CompletedPoints.erase(pointDataIterator);
|
||||
|
||||
SaveCompletedPoints();
|
||||
}
|
||||
@ -595,11 +596,12 @@ namespace cheat::feature
|
||||
if (m_CompletedPoints.empty())
|
||||
return;
|
||||
|
||||
PointData* pointData = *m_CompletedPoints.begin();
|
||||
auto pointDataIterator = --m_CompletedPoints.end();
|
||||
PointData* pointData = *pointDataIterator;
|
||||
pointData->completed = false;
|
||||
pointData->completeTimestamp = 0;
|
||||
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
|
||||
m_CompletedPoints.erase(pointData);
|
||||
m_CompletedPoints.erase(pointDataIterator);
|
||||
|
||||
SaveCompletedPoints();
|
||||
}
|
||||
@ -916,7 +918,7 @@ namespace cheat::feature
|
||||
}
|
||||
|
||||
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);
|
||||
return;
|
||||
@ -926,7 +928,7 @@ namespace cheat::feature
|
||||
point.completeTimestamp = data["complete_timestamp"];
|
||||
labelData->completedCount++;
|
||||
|
||||
m_CompletedPoints.insert(&point);
|
||||
m_CompletedPoints.push_back(&point);
|
||||
}
|
||||
|
||||
void InteractiveMap::LoadFixedPointData(LabelData* labelData, const nlohmann::json& data)
|
||||
@ -1026,6 +1028,7 @@ namespace cheat::feature
|
||||
void InteractiveMap::LoadCompletedPoints()
|
||||
{
|
||||
LoadUserData(f_CompletedPointsJson, &InteractiveMap::LoadCompletedPointData);
|
||||
ReorderCompletedPointDataByTimestamp();
|
||||
}
|
||||
|
||||
void InteractiveMap::SaveCompletedPoints()
|
||||
@ -1040,6 +1043,11 @@ namespace cheat::feature
|
||||
m_CompletedPoints.clear();
|
||||
}
|
||||
|
||||
void InteractiveMap::ReorderCompletedPointDataByTimestamp()
|
||||
{
|
||||
m_CompletedPoints.sort([](PointData* a, PointData* b) { return a->completeTimestamp < b->completeTimestamp; });
|
||||
}
|
||||
|
||||
void InteractiveMap::LoadCustomPoints()
|
||||
{
|
||||
LoadUserData(f_CustomPointsJson, &InteractiveMap::LoadCustomPointData);
|
||||
@ -1779,9 +1787,11 @@ namespace cheat::feature
|
||||
INIT_FILTER(chest, RemarkableChest);
|
||||
INIT_FILTER(featured, Anemoculus);
|
||||
INIT_FILTER(featured, CrimsonAgate);
|
||||
INIT_FILTER(featured, Dendroculus);
|
||||
INIT_FILTER(featured, Electroculus);
|
||||
//INIT_FILTER(featured, Electrogranum);
|
||||
INIT_FILTER(featured, Geoculus);
|
||||
INIT_FILTER(featured, KeySigil);
|
||||
INIT_FILTER(featured, Lumenspar);
|
||||
//INIT_FILTER(featured, KeySigil);
|
||||
//INIT_FILTER(featured, ShrineOfDepth);
|
||||
@ -1917,8 +1927,10 @@ namespace cheat::feature
|
||||
|
||||
INIT_DETECT_ITEM(Anemoculus);
|
||||
INIT_DETECT_ITEM(CrimsonAgate);
|
||||
INIT_DETECT_ITEM(Dendroculus);
|
||||
INIT_DETECT_ITEM(Electroculus);
|
||||
INIT_DETECT_ITEM(Geoculus);
|
||||
INIT_DETECT_ITEM(KeySigil);
|
||||
INIT_DETECT_ITEM(Lumenspar);
|
||||
|
||||
#undef INIT_DETECT_ITEM
|
||||
|
@ -146,7 +146,7 @@ namespace cheat::feature
|
||||
|
||||
std::unordered_set<PointData*> m_CustomPoints;
|
||||
std::unordered_set<PointData*> m_FixedPoints;
|
||||
std::unordered_set<PointData*> m_CompletedPoints;
|
||||
std::list<PointData*> m_CompletedPoints;
|
||||
|
||||
std::mutex m_PointMutex;
|
||||
// PointData* m_SelectedPoint;
|
||||
@ -182,6 +182,7 @@ namespace cheat::feature
|
||||
void LoadCompletedPointData(LabelData* labelData, const nlohmann::json& data);
|
||||
void SaveCompletedPointData(nlohmann::json& jObject, PointData* point);
|
||||
bool ResetCompletedPointData(LabelData* label, PointData* point);
|
||||
void ReorderCompletedPointDataByTimestamp();
|
||||
|
||||
void LoadCustomPointData(LabelData* labelData, const nlohmann::json& data);
|
||||
void SaveCustomPointData(nlohmann::json& jObject, PointData* point);
|
||||
|
@ -203,7 +203,8 @@ namespace cheat::feature
|
||||
for (auto entity : entities) {
|
||||
auto entityPos = entity->absolutePosition();
|
||||
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
|
||||
auto entityDetails = fmt::format(baseString,
|
||||
auto entityDetails = fmt::format(
|
||||
fmt::runtime(baseString),
|
||||
fmt::ptr(entity),
|
||||
entity->runtimeID(),
|
||||
entity->name().c_str(),
|
||||
@ -222,7 +223,8 @@ namespace cheat::feature
|
||||
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
|
||||
if (csvFriendly && includeHeaders)
|
||||
baseString = headerString.append(baseString);
|
||||
auto entityDetails = fmt::format(baseString,
|
||||
auto entityDetails = fmt::format(
|
||||
fmt::runtime(baseString),
|
||||
fmt::ptr(entity),
|
||||
entity->runtimeID(),
|
||||
entity->name().c_str(),
|
||||
|
@ -13,11 +13,17 @@ namespace cheat::feature
|
||||
return inst.OnRecordUserData(nType);
|
||||
}
|
||||
|
||||
static int CrashReporter_Hook(__int64 a1, __int64 a2, const char* a3)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
ProtectionBypass::ProtectionBypass() : Feature(),
|
||||
NFEX(f_Enabled, "Disable Protection", "m_DisableMhyProt", "General", true, false),
|
||||
m_CorrectSignatures({})
|
||||
{
|
||||
HookManager::install(app::Unity_RecordUserData, RecordUserData_Hook);
|
||||
HookManager::install(app::CrashReporter, CrashReporter_Hook);
|
||||
}
|
||||
|
||||
void ProtectionBypass::Init()
|
||||
|
@ -79,36 +79,41 @@ namespace cheat::feature
|
||||
static bool afterDash = false;
|
||||
|
||||
auto& manager = game::EntityManager::instance();
|
||||
if (manager.avatar()->runtimeID() != entityId)
|
||||
return;
|
||||
|
||||
// LOG_DEBUG("Movement packet: %s", magic_enum::enum_name(syncInfo->fields.motionState).data());
|
||||
if (f_Enabled && f_PacketReplacement)
|
||||
auto entity = manager.entity(entityId);
|
||||
if (entity->type() == app::EntityType__Enum_1::Vehicle || entity->isAvatar())
|
||||
{
|
||||
auto state = syncInfo->fields.motionState;
|
||||
switch (state)
|
||||
// LOG_DEBUG("Movement packet: %s", magic_enum::enum_name(syncInfo->fields.motionState).data());
|
||||
if (f_Enabled && f_PacketReplacement)
|
||||
{
|
||||
case app::MotionState__Enum::MotionDash:
|
||||
case app::MotionState__Enum::MotionClimb:
|
||||
case app::MotionState__Enum::MotionClimbJump:
|
||||
case app::MotionState__Enum::MotionStandbyToClimb:
|
||||
case app::MotionState__Enum::MotionSwimDash:
|
||||
case app::MotionState__Enum::MotionSwimIdle:
|
||||
case app::MotionState__Enum::MotionSwimMove:
|
||||
case app::MotionState__Enum::MotionSwimJump:
|
||||
case app::MotionState__Enum::MotionFly:
|
||||
case app::MotionState__Enum::MotionFight:
|
||||
case app::MotionState__Enum::MotionDashBeforeShake:
|
||||
case app::MotionState__Enum::MotionDangerDash:
|
||||
syncInfo->fields.motionState = app::MotionState__Enum::MotionRun;
|
||||
break;
|
||||
case app::MotionState__Enum::MotionJump:
|
||||
if (afterDash)
|
||||
auto state = syncInfo->fields.motionState;
|
||||
switch (state)
|
||||
{
|
||||
case app::MotionState__Enum::MotionDash:
|
||||
case app::MotionState__Enum::MotionClimb:
|
||||
case app::MotionState__Enum::MotionClimbJump:
|
||||
case app::MotionState__Enum::MotionStandbyToClimb:
|
||||
case app::MotionState__Enum::MotionSwimDash:
|
||||
case app::MotionState__Enum::MotionSwimIdle:
|
||||
case app::MotionState__Enum::MotionSwimMove:
|
||||
case app::MotionState__Enum::MotionSwimJump:
|
||||
case app::MotionState__Enum::MotionFly:
|
||||
case app::MotionState__Enum::MotionFight:
|
||||
case app::MotionState__Enum::MotionDashBeforeShake:
|
||||
case app::MotionState__Enum::MotionDangerDash:
|
||||
syncInfo->fields.motionState = app::MotionState__Enum::MotionRun;
|
||||
break;
|
||||
break;
|
||||
case app::MotionState__Enum::MotionJump:
|
||||
if (afterDash)
|
||||
syncInfo->fields.motionState = app::MotionState__Enum::MotionRun;
|
||||
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)
|
||||
afterDash = state == app::MotionState__Enum::MotionDash;
|
||||
}
|
||||
if (state != app::MotionState__Enum::MotionJump && state != app::MotionState__Enum::MotionFallOnGround)
|
||||
afterDash = state == app::MotionState__Enum::MotionDash;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,42 +6,46 @@
|
||||
#include <cheat/game/util.h>
|
||||
#include <cheat/game/filters.h>
|
||||
|
||||
namespace cheat::feature
|
||||
namespace cheat::feature
|
||||
{
|
||||
static void LCBaseCombat_DoHitEntity_Hook(app::LCBaseCombat* __this, uint32_t targetID, app::AttackResult* attackResult,
|
||||
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(),
|
||||
NF(f_Enabled, "Attack Multiplier", "RapidFire", false),
|
||||
NF(f_MultiHit, "Multi-hit", "RapidFire", false),
|
||||
NF(f_Multiplier, "Hit Multiplier", "RapidFire", 2),
|
||||
NF(f_OnePunch, "One Punch Mode", "RapidFire", false),
|
||||
NF(f_Randomize, "Randomize", "RapidFire", false),
|
||||
NF(f_minMultiplier, "Min Multiplier", "RapidFire", 1),
|
||||
NF(f_maxMultiplier, "Max Multiplier", "RapidFire", 3),
|
||||
NF(f_MultiTarget, "Multi-target", "RapidFire", false),
|
||||
NF(f_MultiTargetRadius, "Multi-target Radius", "RapidFire", 20.0f)
|
||||
{
|
||||
RapidFire::RapidFire() : Feature(),
|
||||
NF(f_Enabled, "Attack Multiplier", "RapidFire", false),
|
||||
NF(f_MultiHit, "Multi-hit", "RapidFire", false),
|
||||
NF(f_Multiplier, "Hit Multiplier", "RapidFire", 2),
|
||||
NF(f_OnePunch, "One Punch Mode", "RapidFire", false),
|
||||
NF(f_Randomize, "Randomize", "RapidFire", false),
|
||||
NF(f_minMultiplier, "Min Multiplier", "RapidFire", 1),
|
||||
NF(f_maxMultiplier, "Max Multiplier", "RapidFire", 3),
|
||||
NF(f_MultiTarget, "Multi-target", "RapidFire", false),
|
||||
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_VCAnimatorEvent_HandleProcessItem, VCAnimatorEvent_HandleProcessItem_Hook);
|
||||
}
|
||||
|
||||
const FeatureGUIInfo& RapidFire::GetGUIInfo() const
|
||||
{
|
||||
static const FeatureGUIInfo info{ "Attack Effects", "Player", true };
|
||||
return info;
|
||||
}
|
||||
const FeatureGUIInfo& RapidFire::GetGUIInfo() const
|
||||
{
|
||||
static const FeatureGUIInfo info{ "Attack Effects", "Player", true };
|
||||
return info;
|
||||
}
|
||||
|
||||
void RapidFire::DrawMain()
|
||||
{
|
||||
void RapidFire::DrawMain()
|
||||
{
|
||||
ConfigWidget("Enabled", f_Enabled, "Enables attack multipliers. Need to choose a mode to work.");
|
||||
ImGui::SameLine();
|
||||
ImGui::TextColored(ImColor(255, 165, 0, 255), "Choose any or both modes below.");
|
||||
|
||||
ConfigWidget("Multi-hit Mode", f_MultiHit, "Enables multi-hit.\n" \
|
||||
"Multiplies your attack count.\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" \
|
||||
"Known issues with certain multi-hit attacks, e.g. Xiao E, Ayaka CA, etc.");
|
||||
"Multiplies your attack count.\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");
|
||||
|
||||
ImGui::Indent();
|
||||
|
||||
@ -73,20 +77,23 @@ namespace cheat::feature
|
||||
"If multi-hit is off and there are still multiple numbers on a single target, check the Entity Manager in the Debug section to see if there are invisible entities.\n" \
|
||||
"This can cause EXTREME lag and quick bans if used with multi-hit. You are warned."
|
||||
);
|
||||
|
||||
|
||||
ImGui::Indent();
|
||||
ConfigWidget("Radius (m)", f_MultiTargetRadius, 0.1f, 5.0f, 50.0f, "Radius to check for valid targets.");
|
||||
ImGui::Unindent();
|
||||
}
|
||||
|
||||
bool RapidFire::NeedStatusDraw() const
|
||||
{
|
||||
return f_Enabled && (f_MultiHit || f_MultiTarget);
|
||||
}
|
||||
ConfigWidget("Multi-animation", f_MultiAnimation, "Enables multi-animation attacks.\n" \
|
||||
"Do keep in mind that the character's audio will also be spammed.");
|
||||
}
|
||||
|
||||
void RapidFire::DrawStatus()
|
||||
{
|
||||
if (f_MultiHit)
|
||||
bool RapidFire::NeedStatusDraw() const
|
||||
{
|
||||
return f_Enabled && (f_MultiHit || f_MultiTarget || f_MultiAnimation);
|
||||
}
|
||||
|
||||
void RapidFire::DrawStatus()
|
||||
{
|
||||
if (f_MultiHit)
|
||||
{
|
||||
if (f_Randomize)
|
||||
ImGui::Text("Multi-Hit Random[%d|%d]", f_minMultiplier.value(), f_maxMultiplier.value());
|
||||
@ -97,20 +104,23 @@ namespace cheat::feature
|
||||
}
|
||||
if (f_MultiTarget)
|
||||
ImGui::Text("Multi-Target [%.01fm]", f_MultiTargetRadius.value());
|
||||
}
|
||||
|
||||
RapidFire& RapidFire::GetInstance()
|
||||
{
|
||||
static RapidFire instance;
|
||||
return instance;
|
||||
}
|
||||
if (f_MultiAnimation)
|
||||
ImGui::Text("Multi-Animation");
|
||||
}
|
||||
|
||||
RapidFire& RapidFire::GetInstance()
|
||||
{
|
||||
static RapidFire instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
||||
int RapidFire::CalcCountToKill(float attackDamage, uint32_t targetID)
|
||||
{
|
||||
if (attackDamage == 0)
|
||||
return f_Multiplier;
|
||||
|
||||
|
||||
auto& manager = game::EntityManager::instance();
|
||||
auto targetEntity = manager.entity(targetID);
|
||||
if (targetEntity == nullptr)
|
||||
@ -165,10 +175,10 @@ namespace cheat::feature
|
||||
entity = game::Entity(app::MoleMole_GadgetEntity_GetOwnerEntity(reinterpret_cast<app::GadgetEntity*>(entity.raw()), nullptr));
|
||||
if (entity.runtimeID() == avatarID)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool IsAttackByAvatar(game::Entity& attacker)
|
||||
@ -183,6 +193,20 @@ namespace cheat::feature
|
||||
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)
|
||||
{
|
||||
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
|
||||
@ -192,7 +216,7 @@ namespace cheat::feature
|
||||
game::filters::puzzle::LargeRockPile.IsValid(entity) ||
|
||||
game::filters::puzzle::SmallRockPile.IsValid(entity))
|
||||
return true;
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Raises when any entity do hit event.
|
||||
@ -203,7 +227,7 @@ namespace cheat::feature
|
||||
{
|
||||
auto attacker = game::Entity(__this->fields._._._entity);
|
||||
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);
|
||||
|
||||
auto& manager = game::EntityManager::instance();
|
||||
@ -242,9 +266,24 @@ namespace cheat::feature
|
||||
if (rapidFire.f_MultiHit) {
|
||||
int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult);
|
||||
for (int i = 0; i < attackCount; i++)
|
||||
CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, entity->runtimeID(), attackResult, ignoreCheckCanBeHitInMP, method);
|
||||
} else CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, entity->runtimeID(), attackResult, ignoreCheckCanBeHitInMP, method);
|
||||
app::MoleMole_LCBaseCombat_FireBeingHitEvent(__this, entity->runtimeID(), attackResult, 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@ namespace cheat::feature
|
||||
config::Field<int> f_maxMultiplier;
|
||||
config::Field<config::Toggle<Hotkey>> f_MultiTarget;
|
||||
config::Field<float> f_MultiTargetRadius;
|
||||
config::Field<config::Toggle<Hotkey>> f_MultiAnimation;
|
||||
|
||||
static RapidFire& GetInstance();
|
||||
|
||||
|
@ -17,15 +17,19 @@
|
||||
namespace cheat::feature
|
||||
{
|
||||
CustomTeleports::CustomTeleports() : Feature(),
|
||||
NF(f_Enabled, "Custom Teleport", "CustomTeleports", false),
|
||||
NF(f_Next, "Teleport Next", "CustomTeleports", Hotkey(VK_OEM_6)),
|
||||
NF(f_Previous, "Teleport Previous", "CustomTeleports", Hotkey(VK_OEM_4)),
|
||||
NF(f_Interpolate, "Custom Teleport", "CustomTeleports", false),
|
||||
NF(f_Speed, "Interpolation Speed", "CustomTeleports", 10.0f),
|
||||
dir(util::GetCurrentPath() / "teleports")
|
||||
NF(f_Enabled, "Custom Teleport", "CustomTeleports", false),
|
||||
NF(f_Next, "Teleport Next", "CustomTeleports", Hotkey(VK_OEM_6)),
|
||||
NF(f_Previous, "Teleport Previous", "CustomTeleports", Hotkey(VK_OEM_4)),
|
||||
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),
|
||||
dir(util::GetCurrentPath() /= "teleports"),
|
||||
nextTime(0)
|
||||
{
|
||||
f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext);
|
||||
f_Previous.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnPrevious);
|
||||
events::GameUpdateEvent += MY_METHOD_HANDLER(CustomTeleports::OnGameUpdate);
|
||||
}
|
||||
|
||||
const FeatureGUIInfo& CustomTeleports::GetGUIInfo() const
|
||||
@ -79,16 +83,19 @@ namespace cheat::feature
|
||||
}
|
||||
}
|
||||
|
||||
Teleport CustomTeleports::SerializeFromJson(std::string json, bool fromfile)
|
||||
std::optional<Teleport> CustomTeleports::SerializeFromJson(std::string json, bool fromfile)
|
||||
{
|
||||
nlohmann::json j;
|
||||
try { j = nlohmann::json::parse(json);}
|
||||
catch (nlohmann::json::parse_error &e)
|
||||
try { j = nlohmann::json::parse(json); }
|
||||
catch (nlohmann::json::parse_error& e)
|
||||
{
|
||||
LOG_ERROR("Invalid JSON Format");
|
||||
LOG_ERROR("Failed to parse JSON: %s", e.what());
|
||||
return std::nullopt;
|
||||
}
|
||||
std::string teleportName;
|
||||
|
||||
std::string teleportName;
|
||||
|
||||
teleportName = j["name"];
|
||||
if (j["name"].is_null() && fromfile)
|
||||
{
|
||||
@ -98,7 +105,8 @@ namespace cheat::feature
|
||||
std::string description;
|
||||
if (j["description"].is_null()) 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()
|
||||
@ -113,7 +121,8 @@ namespace cheat::feature
|
||||
std::ifstream ifs(file.path());
|
||||
std::string json;
|
||||
std::getline(ifs, json);
|
||||
SerializeTeleport(SerializeFromJson(json, true));
|
||||
auto t = SerializeFromJson(json, true);
|
||||
if(t.has_value()) SerializeTeleport(t.value());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -188,13 +197,38 @@ namespace cheat::feature
|
||||
|
||||
void CustomTeleports::OnPrevious()
|
||||
{
|
||||
if (f_Auto) return;
|
||||
OnTeleportKeyPressed(false);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
void itr(std::regex exp, std::string name, std::string s)
|
||||
{
|
||||
std::sregex_iterator itr(name.begin(), name.end(), exp);
|
||||
@ -260,26 +294,35 @@ namespace cheat::feature
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Load from JSON"))
|
||||
{
|
||||
selectedIndex = -1;
|
||||
UpdateIndexName();
|
||||
SerializeTeleport(SerializeFromJson(JSONBuffer_, false));
|
||||
JSONBuffer_ = "";
|
||||
if (!JSONBuffer_.empty()) {
|
||||
auto t = SerializeFromJson(JSONBuffer_, false);
|
||||
if (t.has_value()) {
|
||||
selectedIndex = -1;
|
||||
UpdateIndexName();
|
||||
SerializeTeleport(t.value());
|
||||
}
|
||||
JSONBuffer_.clear();
|
||||
}
|
||||
|
||||
}
|
||||
ImGui::InputTextMultiline("JSON input", &JSONBuffer_, ImVec2(0, 50), ImGuiInputTextFlags_AllowTabInput);
|
||||
|
||||
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 Next", f_Next, true, "Press to teleport next of selected.");
|
||||
ConfigWidget("Teleport Previous", f_Previous, true, "Press to teleport previous of selected.");
|
||||
ConfigWidget("Enable", f_Enabled,
|
||||
"Enable teleport-through-list functionality\n"
|
||||
"Enable teleport-through-list functionality.\n"
|
||||
"Usage:\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"
|
||||
"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"
|
||||
"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,
|
||||
"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"))
|
||||
{
|
||||
@ -396,9 +439,12 @@ namespace cheat::feature
|
||||
|
||||
if (ImGui::Button(("Select##Button" + stringIndex).c_str()))
|
||||
{
|
||||
selectedIndex = index;
|
||||
selectedByClick = true;
|
||||
UpdateIndexName();
|
||||
auto isChecked = checkedIndices.find(index) != checkedIndices.end();
|
||||
if (isChecked) {
|
||||
selectedIndex = index;
|
||||
selectedByClick = true;
|
||||
UpdateIndexName();
|
||||
}
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
@ -432,7 +478,7 @@ namespace cheat::feature
|
||||
|
||||
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()
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include <cheat-base/cheat/Feature.h>
|
||||
#include <cheat-base/config/Config.h>
|
||||
#include <cheat-base/thread-safe.h>
|
||||
#include <set>
|
||||
|
||||
namespace cheat::feature
|
||||
@ -27,9 +28,11 @@ namespace cheat::feature
|
||||
public:
|
||||
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
||||
config::Field<config::Toggle<Hotkey>> f_Interpolate;
|
||||
config::Field<config::Toggle<Hotkey>> f_Auto;
|
||||
config::Field<float> f_Speed;
|
||||
config::Field<Hotkey> f_Next;
|
||||
config::Field<Hotkey> f_Previous;
|
||||
config::Field<int> f_DelayTime;
|
||||
static CustomTeleports& GetInstance();
|
||||
const FeatureGUIInfo& GetGUIInfo() const override;
|
||||
|
||||
@ -38,12 +41,13 @@ namespace cheat::feature
|
||||
Teleport Teleport_(std::string name, app::Vector3 position, std::string description);
|
||||
void SerializeTeleport(Teleport t);
|
||||
void ReloadTeleports();
|
||||
Teleport SerializeFromJson(std::string json, bool fromfile);
|
||||
std::optional<Teleport> SerializeFromJson(std::string json, bool fromfile);
|
||||
|
||||
|
||||
void DrawMain() override;
|
||||
virtual bool NeedStatusDraw() const override;
|
||||
void DrawStatus() override;
|
||||
void OnGameUpdate();
|
||||
|
||||
std::vector<Teleport> Teleports;
|
||||
std::filesystem::path dir;
|
||||
@ -55,6 +59,7 @@ namespace cheat::feature
|
||||
int selectedIndex = -1;
|
||||
std::string selectedName;
|
||||
std::string selectedIndexName;
|
||||
SafeValue<int64_t> nextTime;
|
||||
CustomTeleports();
|
||||
void TeleportTo(app::Vector3 position, bool interpolate);
|
||||
void OnTeleportKeyPressed(bool next);
|
||||
|
@ -11,6 +11,8 @@ namespace cheat::feature
|
||||
app::GameObject* mainCam = nullptr;
|
||||
app::Object_1* freeCamObj = nullptr;
|
||||
app::Object_1* mainCamObj = nullptr;
|
||||
app::GameObject* damageOverlay = nullptr;
|
||||
app::GameObject* hpOverlay = nullptr;
|
||||
app::Transform* freeCam_Transform;
|
||||
app::Component_1* freeCam_Camera;
|
||||
app::Component_1* mainCam_Camera;
|
||||
@ -22,6 +24,8 @@ namespace cheat::feature
|
||||
FreeCamera::FreeCamera() : Feature(),
|
||||
NF(f_Enabled, "Free Camera", "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_LookSens, "Look Sensitivity", "Visuals::FreeCamera", 1.0f),
|
||||
NF(f_RollSpeed, "Roll Speed", "Visuals::FreeCamera", 1.0f),
|
||||
@ -52,7 +56,13 @@ namespace cheat::feature
|
||||
void FreeCamera::DrawMain()
|
||||
{
|
||||
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))
|
||||
{
|
||||
ImGui::TableNextRow();
|
||||
@ -245,9 +255,23 @@ namespace cheat::feature
|
||||
}
|
||||
if (freeCamObj)
|
||||
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
|
||||
{
|
||||
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.
|
||||
auto& manager = game::EntityManager::instance();
|
||||
@ -256,17 +280,24 @@ namespace cheat::feature
|
||||
if (animator == nullptr && rigidBody == nullptr)
|
||||
return;
|
||||
|
||||
static bool changed = false;
|
||||
|
||||
if (f_FreezeAnimation)
|
||||
{
|
||||
//auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr);
|
||||
//LOG_DEBUG("%s", magic_enum::enum_name(constraints).data());
|
||||
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezePosition, nullptr);
|
||||
app::Animator_set_speed(animator, 0.f, nullptr);
|
||||
changed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
|
||||
app::Animator_set_speed(animator, 1.f, nullptr);
|
||||
if (!changed)
|
||||
{
|
||||
app::Animator_set_speed(animator, 1.f, nullptr);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -9,6 +9,8 @@ namespace cheat::feature
|
||||
public:
|
||||
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
||||
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_LookSens;
|
||||
config::Field<float> f_RollSpeed;
|
||||
|
85
cheat-library/src/user/cheat/world/AutoChallenge.cpp
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
30
cheat-library/src/user/cheat/world/AutoChallenge.h
Normal 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();
|
||||
};
|
||||
}
|
||||
|
@ -14,7 +14,9 @@ namespace cheat::feature
|
||||
app::Component_1* Profirency = nullptr;
|
||||
}
|
||||
|
||||
static void PlayerModule_RequestPlayerCook(app::MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method);
|
||||
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_OnPlayerCookRsp(app::MoleMole_PlayerModule* __this, app::PlayerCookRsp* rsp, 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_FastProficiency, "Fast Proficiency", "AutoCook", false),
|
||||
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_OnPlayerCookRsp, PlayerModule_OnPlayerCookRsp);
|
||||
@ -38,12 +40,24 @@ namespace cheat::feature
|
||||
void AutoCook::DrawMain()
|
||||
{
|
||||
ConfigWidget(f_Enabled, "Fast Cooking if the recipe has fast cooking open. \n" \
|
||||
"If fast cooking is closed, you in addition need to turn on Fast Proficiency.");
|
||||
"If fast cooking is closed, you in addition need to turn on Fast Proficiency.");
|
||||
ConfigWidget(f_FastProficiency, "Quickly prepare an unstudied recipe to the maximum possible.");
|
||||
ConfigWidget("Count Item", f_CountField, 1, 1, 100,
|
||||
"How much to cook at a time.\n" \
|
||||
"(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
|
||||
@ -53,7 +67,10 @@ namespace cheat::feature
|
||||
|
||||
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()
|
||||
@ -82,9 +99,14 @@ namespace cheat::feature
|
||||
if (autoCook.f_Enabled || autoCook.f_FastProficiency)
|
||||
{
|
||||
autoCook.CookFoodMaxNum = app::MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum(recipeId, nullptr);
|
||||
qteQuality = autoCook.f_QualityField;
|
||||
|
||||
if (!autoCook.f_FastProficiency && autoCook.f_Enabled){
|
||||
// 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) {
|
||||
count = autoCook.f_CountField;
|
||||
if (autoCook.f_CountField > autoCook.CookFoodMaxNum)
|
||||
count = autoCook.CookFoodMaxNum;
|
||||
@ -99,7 +121,7 @@ namespace cheat::feature
|
||||
auto RectTransform = app::GameObject_GetComponentByName(GameObject::Profirency, string_to_il2cppi("RectTransform"), nullptr);
|
||||
auto TransformChild = app::Transform_GetChild(reinterpret_cast<app::Transform*>(RectTransform), 0, nullptr);
|
||||
auto TextComponent = app::Component_1_GetComponent_1(reinterpret_cast<app::Component_1*>(TransformChild), string_to_il2cppi("Text"), nullptr);
|
||||
|
||||
|
||||
if (TextComponent != nullptr) {
|
||||
auto Text_str = app::Text_get_text(reinterpret_cast<app::Text*>(TextComponent), nullptr);
|
||||
auto ProficiencyStr = il2cppi_to_string(Text_str).erase(0, il2cppi_to_string(Text_str).find_first_of(" ."));
|
||||
@ -127,7 +149,11 @@ namespace cheat::feature
|
||||
AutoCook& autoCook = AutoCook::GetInstance();
|
||||
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;
|
||||
if (autoCook.f_FastProficiency)
|
||||
rsp->fields.cookCount_ = 1;
|
||||
@ -137,14 +163,14 @@ namespace cheat::feature
|
||||
|
||||
return CALL_ORIGIN(PlayerModule_OnPlayerCookRsp, __this, rsp, method);
|
||||
}
|
||||
|
||||
|
||||
static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method) {
|
||||
AutoCook& autoCook = AutoCook::GetInstance();
|
||||
if (autoCook.f_Enabled || autoCook.f_FastProficiency)
|
||||
{
|
||||
__this->fields._pageMono->fields._qteTime = 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);
|
||||
}
|
||||
|
@ -12,10 +12,10 @@ namespace cheat::feature
|
||||
config::Field<config::Toggle<Hotkey>> f_FastProficiency;
|
||||
|
||||
config::Field<int> f_CountField;
|
||||
config::Field<int> f_QualityField;
|
||||
config::Field<std::string> f_QualityField;
|
||||
|
||||
int CookFoodMaxNum; // Maximum quantity at a time
|
||||
int CookCount;
|
||||
int CookCount;
|
||||
|
||||
static AutoCook& GetInstance();
|
||||
|
||||
@ -26,7 +26,7 @@ namespace cheat::feature
|
||||
void DrawStatus() override;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
AutoCook();
|
||||
};
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <cheat/events.h>
|
||||
#include <cheat/game/SimpleFilter.h>
|
||||
#include <cheat/game/EntityManager.h>
|
||||
#include <cheat/world/AutoChallenge.h>
|
||||
#include <cheat/game/filters.h>
|
||||
|
||||
namespace cheat::feature
|
||||
@ -81,7 +82,17 @@ namespace cheat::feature
|
||||
{
|
||||
auto& manager = game::EntityManager::instance();
|
||||
auto& autoDestroy = AutoDestroy::GetInstance();
|
||||
auto& autoChallenge = AutoChallenge::GetInstance();
|
||||
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 &&
|
||||
autoDestroy.f_Range > manager.avatar()->distance(entity) &&
|
||||
(
|
||||
|
@ -91,7 +91,7 @@ namespace cheat::feature
|
||||
}
|
||||
|
||||
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)
|
||||
@ -115,7 +115,7 @@ namespace cheat::feature
|
||||
{
|
||||
LOG_WARNING("Failed to catch fish, retrying in %u ms", autoFish.f_DelayBeforeCatch);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -123,7 +123,7 @@ namespace cheat::feature
|
||||
return;
|
||||
|
||||
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)
|
||||
@ -154,7 +154,7 @@ namespace cheat::feature
|
||||
|
||||
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> _lock2(m_RecastTimestampMutex);
|
||||
|
@ -13,6 +13,8 @@ namespace cheat::feature
|
||||
static bool LCSelectPickup_IsInPosition_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(),
|
||||
NF(f_AutoPickup, "Auto-pickup drops", "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_QuestInteract, "Quest interacts", "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),
|
||||
toBeLootedItems(), nextLootTime(0)
|
||||
{
|
||||
@ -81,6 +85,17 @@ namespace cheat::feature
|
||||
"Values under 200ms are unsafe.\nNot used if no auto-functions are on.");
|
||||
}
|
||||
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::BeginGroupPanel("Auto-Treasure");
|
||||
@ -120,12 +135,13 @@ namespace cheat::feature
|
||||
|
||||
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_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_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();
|
||||
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)
|
||||
continue;
|
||||
|
||||
@ -220,13 +236,20 @@ namespace cheat::feature
|
||||
return;
|
||||
|
||||
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)
|
||||
{
|
||||
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_Animals && entity->fields.entityType == app::EntityType__Enum_1::EnvAnimal ||
|
||||
|
@ -12,9 +12,11 @@ namespace cheat::feature
|
||||
config::Field<config::Toggle<Hotkey>> f_AutoPickup;
|
||||
config::Field<config::Toggle<Hotkey>> f_AutoTreasure;
|
||||
config::Field<config::Toggle<Hotkey>> f_UseCustomRange;
|
||||
config::Field<config::Toggle<Hotkey>> f_UseDelayTimeFluctuation;
|
||||
config::Field<config::Toggle<Hotkey>> f_PickupFilter;
|
||||
|
||||
config::Field<int> f_DelayTime;
|
||||
config::Field<int> f_DelayTimeFluctuation;
|
||||
config::Field<float> f_CustomRange;
|
||||
|
||||
config::Field<bool> f_Chest;
|
||||
|
@ -162,7 +162,7 @@ namespace cheat::feature
|
||||
static std::unordered_set<app::SceneTreeObject*> s_AttackQueueSet;
|
||||
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)
|
||||
return;
|
||||
|
||||
|
@ -20,7 +20,8 @@ namespace cheat::feature
|
||||
NF(f_OnlyTargeted, "Only targeted", "KillAura", true),
|
||||
NF(f_Range, "Range", "KillAura", 15.0f),
|
||||
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);
|
||||
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.");
|
||||
|
||||
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.");
|
||||
ImGui::SameLine();
|
||||
ImGui::TextColored(ImColor(255, 165, 0, 255), "Can get buggy with bosses like PMA and Hydro Hypo.");
|
||||
@ -94,7 +98,7 @@ namespace cheat::feature
|
||||
|
||||
auto& manager = game::EntityManager::instance();
|
||||
|
||||
for (const auto& monster : manager.entities(game::filters::combined::Monsters))
|
||||
for (const auto& monster : manager.entities(game::filters::combined::Monsters))
|
||||
{
|
||||
auto monsterID = monster->runtimeID();
|
||||
|
||||
@ -149,14 +153,27 @@ namespace cheat::feature
|
||||
}
|
||||
|
||||
attackSet.erase(monster->runtimeID());
|
||||
|
||||
|
||||
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);
|
||||
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();
|
||||
|
||||
app::MoleMole_EventManager_FireEvent(eventManager, reinterpret_cast<app::BaseEvent*>(crashEvt), false, nullptr);
|
||||
|
@ -15,6 +15,8 @@ namespace cheat::feature
|
||||
config::Field<float> f_Range;
|
||||
config::Field<int> f_AttackDelay;
|
||||
config::Field<int> f_RepeatDelay;
|
||||
config::Field<float> f_DamageValue;
|
||||
|
||||
|
||||
static KillAura& GetInstance();
|
||||
|
||||
|
@ -127,7 +127,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include/;$(SolutionDir)cheat-base/src;$(SolutionDir)cheat-base/vendor/simpleIni/</AdditionalIncludeDirectories>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
</ClCompile>
|
||||
|