Merge branch 'master' into fall_control
19
README.md
@ -56,19 +56,18 @@ As well as setting up **`cheat-library`** as startup project.
|
|||||||
- Notifications
|
- Notifications
|
||||||
|
|
||||||
#### Player
|
#### Player
|
||||||
- Invincible
|
- God Mode(Invincible)
|
||||||
- Attack Modifier
|
- Attack Modifier: Multi-Hit/Target/Animation
|
||||||
- No Cooldown Skill/Ultimate/Sprint/Bow
|
- No Cooldown: Skill/Ultimate/Sprint/Bow
|
||||||
- Unlimited Stamina
|
- Unlimited Stamina
|
||||||
- No Clip
|
- No Clip
|
||||||
|
|
||||||
#### World
|
#### World
|
||||||
- Auto Seelie
|
- Auto Seelie
|
||||||
- Vacuum Loot
|
|
||||||
- Dumb Enemies
|
- Dumb Enemies
|
||||||
- Freeze Enemies
|
- Freeze Enemies
|
||||||
- Auto Destroy Objects
|
- Auto Destroy: Ores/Shields/Doodas/Plants
|
||||||
- Auto Loot
|
- Auto Loot/Open Chests
|
||||||
- Pickup Range
|
- Pickup Range
|
||||||
- Auto Talk
|
- Auto Talk
|
||||||
- Auto Tree Farm
|
- Auto Tree Farm
|
||||||
@ -77,6 +76,7 @@ As well as setting up **`cheat-library`** as startup project.
|
|||||||
- Auto Fish
|
- Auto Fish
|
||||||
- Kill Aura
|
- Kill Aura
|
||||||
- Mob Vacuum
|
- Mob Vacuum
|
||||||
|
- Vacuum Loot
|
||||||
|
|
||||||
#### Teleport
|
#### Teleport
|
||||||
- Chest/Oculi Teleport (Teleports to nearest)
|
- Chest/Oculi Teleport (Teleports to nearest)
|
||||||
@ -94,16 +94,17 @@ As well as setting up **`cheat-library`** as startup project.
|
|||||||
- Hide UI
|
- Hide UI
|
||||||
- In-game Embedded Browser
|
- In-game Embedded Browser
|
||||||
- Enable Peeking
|
- Enable Peeking
|
||||||
- Profile Changer
|
- Profile Changer: UID/Nickname/AR/WorldLevel/Avatar/Namecard
|
||||||
|
- Custom Weather
|
||||||
- Free Camera
|
- Free Camera
|
||||||
- Texture Changer
|
|
||||||
- Paimon Follow
|
- Paimon Follow
|
||||||
|
- Texture Changer
|
||||||
|
|
||||||
#### Debugging
|
#### Debugging
|
||||||
- Entities Manager
|
- Entities Manager
|
||||||
- Position Info
|
- Position Info
|
||||||
- FPS Graph
|
- FPS Graph
|
||||||
- Packet Sniffer
|
- [Packet Sniffer](https://github.com/Akebi-Group/Akebi-PacketSniffer)
|
||||||
|
|
||||||
|
|
||||||
<h1 align="center">Demo</h1>
|
<h1 align="center">Demo</h1>
|
||||||
|
@ -431,6 +431,9 @@ namespace cheat
|
|||||||
if (settings.f_NotificationsShow)
|
if (settings.f_NotificationsShow)
|
||||||
DrawNotifications();
|
DrawNotifications();
|
||||||
|
|
||||||
|
if (settings.f_ShowStyleEditor)
|
||||||
|
ImGui::ShowStyleEditor();
|
||||||
|
|
||||||
if (settings.f_MenuKey.value().IsReleased() && !ImGui::IsAnyItemActive())
|
if (settings.f_MenuKey.value().IsReleased() && !ImGui::IsAnyItemActive())
|
||||||
ToggleMenuShow();
|
ToggleMenuShow();
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
#include <pch.h>
|
#include <pch.h>
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
|
|
||||||
#include <cheat-base/render/gui-util.h>
|
|
||||||
#include <cheat-base/render/renderer.h>
|
|
||||||
#include <cheat-base/cheat/CheatManagerBase.h>
|
#include <cheat-base/cheat/CheatManagerBase.h>
|
||||||
|
#include <cheat-base/render/renderer.h>
|
||||||
|
#include <cheat-base/render/gui-util.h>
|
||||||
|
#include <misc/cpp/imgui_stdlib.h>
|
||||||
|
#include <cheat-base/util.h>
|
||||||
|
|
||||||
|
#include "shlwapi.h"
|
||||||
|
#pragma comment(lib, "shlwapi.lib")
|
||||||
|
|
||||||
namespace cheat::feature
|
namespace cheat::feature
|
||||||
{
|
{
|
||||||
Settings::Settings() : Feature(),
|
Settings::Settings() : Feature(),
|
||||||
NF(f_MenuKey, "Show Cheat Menu Key", "General", Hotkey(VK_F1)),
|
NF(f_MenuKey, "Show Cheat Menu Key", "General", Hotkey(VK_F1)),
|
||||||
NF(f_HotkeysEnabled, "Hotkeys Enabled", "General", true),
|
NF(f_HotkeysEnabled, "Hotkeys Enabled", "General", true),
|
||||||
NF(f_FontSize, "Font size", "General", 16.0f),
|
|
||||||
|
|
||||||
NF(f_StatusMove, "Move Status Window", "General::StatusWindow", true),
|
NF(f_StatusMove, "Move Status Window", "General::StatusWindow", true),
|
||||||
NF(f_StatusShow, "Show Status Window", "General::StatusWindow", true),
|
NF(f_StatusShow, "Show Status Window", "General::StatusWindow", true),
|
||||||
@ -28,11 +32,31 @@ namespace cheat::feature
|
|||||||
NF(f_ConsoleLogging, "Console Logging", "General::Logging", true),
|
NF(f_ConsoleLogging, "Console Logging", "General::Logging", true),
|
||||||
|
|
||||||
NF(f_FastExitEnable, "Fast Exit", "General::FastExit", false),
|
NF(f_FastExitEnable, "Fast Exit", "General::FastExit", false),
|
||||||
NF(f_HotkeyExit, "Hotkeys", "General::FastExit", Hotkey(VK_F12))
|
NF(f_HotkeyExit, "Hotkeys", "General::FastExit", Hotkey(VK_F12)),
|
||||||
|
|
||||||
|
NF(f_FontSize, "Font Size", "General", 16.0f),
|
||||||
|
NF(f_ShowStyleEditor, "Show Colors Customization", "General", false),
|
||||||
|
NFS(f_DefaultTheme, "Theme", "General::Colors", "Default"),
|
||||||
|
themesDir(util::GetCurrentPath() / "themes")
|
||||||
|
|
||||||
{
|
{
|
||||||
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
|
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
|
||||||
f_HotkeyExit.value().PressedEvent += MY_METHOD_HANDLER(Settings::OnExitKeyPressed);
|
f_HotkeyExit.value().PressedEvent += MY_METHOD_HANDLER(Settings::OnExitKeyPressed);
|
||||||
|
if (!std::filesystem::exists(themesDir))
|
||||||
|
std::filesystem::create_directory(themesDir);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool inited = false;
|
||||||
|
void Settings::Init() {
|
||||||
|
if (this->f_DefaultTheme.value() != "Default" && !inited)
|
||||||
|
{
|
||||||
|
LOG_INFO("Loading theme: %s", themesDir / (f_DefaultTheme.value() + ".json").c_str());
|
||||||
|
if (!std::filesystem::exists(themesDir / (f_DefaultTheme.value() + ".json")))
|
||||||
|
f_DefaultTheme = "Default";
|
||||||
|
else Colors_Import(f_DefaultTheme.value());
|
||||||
|
inited = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const FeatureGUIInfo& Settings::GetGUIInfo() const
|
const FeatureGUIInfo& Settings::GetGUIInfo() const
|
||||||
@ -41,6 +65,35 @@ namespace cheat::feature
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::Colors_Export(std::string name)
|
||||||
|
{
|
||||||
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
|
auto colors = style.Colors;
|
||||||
|
|
||||||
|
nlohmann::json json;
|
||||||
|
for (int i = 0; i < ImGuiCol_COUNT; i++)
|
||||||
|
json[ImGui::GetStyleColorName((ImGuiCol)i)] = { colors[i].x, colors[i].y, colors[i].z, colors[i].w };
|
||||||
|
std::ofstream file(themesDir / (name + ".json"));
|
||||||
|
file << std::setw(4) << json << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::Colors_Import(std::string name)
|
||||||
|
{
|
||||||
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
|
auto colors = style.Colors;
|
||||||
|
nlohmann::json json;
|
||||||
|
std::ifstream file(themesDir / (name + ".json"));
|
||||||
|
file >> json;
|
||||||
|
for (int i = 0; i < ImGuiCol_COUNT; i++)
|
||||||
|
{
|
||||||
|
auto color = json[ImGui::GetStyleColorName((ImGuiCol)i)];
|
||||||
|
colors[i].x = color[0];
|
||||||
|
colors[i].y = color[1];
|
||||||
|
colors[i].z = color[2];
|
||||||
|
colors[i].w = color[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Settings::DrawMain()
|
void Settings::DrawMain()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -50,11 +103,6 @@ namespace cheat::feature
|
|||||||
"Key to toggle main menu visibility. Cannot be empty.\n"\
|
"Key to toggle main menu visibility. Cannot be empty.\n"\
|
||||||
"If you forget this key, you can see or set it in your config file.");
|
"If you forget this key, you can see or set it in your config file.");
|
||||||
ConfigWidget(f_HotkeysEnabled, "Enable hotkeys.");
|
ConfigWidget(f_HotkeysEnabled, "Enable hotkeys.");
|
||||||
if (ConfigWidget(f_FontSize, 1, 8, 64, "Font size for cheat interface."))
|
|
||||||
{
|
|
||||||
f_FontSize = std::clamp(f_FontSize.value(), 8, 64);
|
|
||||||
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ImGui::EndGroupPanel();
|
ImGui::EndGroupPanel();
|
||||||
|
|
||||||
@ -121,6 +169,47 @@ namespace cheat::feature
|
|||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
}
|
}
|
||||||
ImGui::EndGroupPanel();
|
ImGui::EndGroupPanel();
|
||||||
|
|
||||||
|
ImGui::BeginGroupPanel("Interface Customization");
|
||||||
|
{
|
||||||
|
if (ConfigWidget(f_FontSize, 1, 8, 64, "Adjust interface font size."))
|
||||||
|
{
|
||||||
|
f_FontSize = std::clamp(f_FontSize.value(), 8, 64);
|
||||||
|
renderer::SetGlobalFontSize(static_cast<float>(f_FontSize));
|
||||||
|
}
|
||||||
|
ImGui::Spacing();
|
||||||
|
|
||||||
|
ConfigWidget(f_ShowStyleEditor, "Show colors customization window.");
|
||||||
|
ImGui::Spacing();
|
||||||
|
|
||||||
|
ImGui::Text("Save Customized Color");
|
||||||
|
static std::string nameBuffer_;
|
||||||
|
ImGui::InputText("Color Name", &nameBuffer_);
|
||||||
|
if (ImGui::Button("Save"))
|
||||||
|
Colors_Export(nameBuffer_);
|
||||||
|
ImGui::SameLine();
|
||||||
|
|
||||||
|
if (std::filesystem::exists(themesDir / (nameBuffer_ + ".json")))
|
||||||
|
{
|
||||||
|
if (this->f_DefaultTheme.value() != nameBuffer_)
|
||||||
|
{
|
||||||
|
if (ImGui::Button("Set as default"))
|
||||||
|
{
|
||||||
|
f_DefaultTheme = nameBuffer_;
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("Load"))
|
||||||
|
{
|
||||||
|
Colors_Import(nameBuffer_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImGui::Text("Color does not exist.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndGroupPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings& Settings::GetInstance()
|
Settings& Settings::GetInstance()
|
||||||
@ -137,4 +226,3 @@ namespace cheat::feature
|
|||||||
ExitProcess(0);
|
ExitProcess(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ namespace cheat::feature
|
|||||||
public:
|
public:
|
||||||
config::Field<Hotkey> f_MenuKey;
|
config::Field<Hotkey> f_MenuKey;
|
||||||
config::Field<bool> f_HotkeysEnabled;
|
config::Field<bool> f_HotkeysEnabled;
|
||||||
config::Field<int> f_FontSize;
|
|
||||||
|
|
||||||
config::Field<bool> f_StatusMove;
|
config::Field<bool> f_StatusMove;
|
||||||
config::Field<bool> f_StatusShow;
|
config::Field<bool> f_StatusShow;
|
||||||
@ -30,10 +29,19 @@ namespace cheat::feature
|
|||||||
config::Field<bool> f_FastExitEnable;
|
config::Field<bool> f_FastExitEnable;
|
||||||
config::Field<Hotkey> f_HotkeyExit;
|
config::Field<Hotkey> f_HotkeyExit;
|
||||||
|
|
||||||
|
config::Field<int> f_FontSize;
|
||||||
|
config::Field<bool> f_ShowStyleEditor;
|
||||||
|
std::filesystem::path themesDir;
|
||||||
|
config::Field<std::string> f_DefaultTheme;
|
||||||
|
|
||||||
|
|
||||||
static Settings& GetInstance();
|
static Settings& GetInstance();
|
||||||
|
|
||||||
const FeatureGUIInfo& GetGUIInfo() const override;
|
const FeatureGUIInfo& GetGUIInfo() const override;
|
||||||
void DrawMain() override;
|
void DrawMain() override;
|
||||||
|
void Init();
|
||||||
|
void Colors_Export(std::string name);
|
||||||
|
void Colors_Import(std::string name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <cheat-base/render/backend/dx12-hook.h>
|
#include <cheat-base/render/backend/dx12-hook.h>
|
||||||
|
|
||||||
#include <cheat-base/ResourceLoader.h>
|
#include <cheat-base/ResourceLoader.h>
|
||||||
|
#include <cheat-base/cheat/misc/Settings.h>
|
||||||
|
|
||||||
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
@ -253,6 +254,9 @@ namespace renderer
|
|||||||
|
|
||||||
pContext->OMSetRenderTargets(1, &mainRenderTargetView, nullptr);
|
pContext->OMSetRenderTargets(1, &mainRenderTargetView, nullptr);
|
||||||
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
||||||
|
|
||||||
|
auto& themes = cheat::feature::Settings::GetInstance();
|
||||||
|
themes.Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
static LRESULT CALLBACK hWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK hWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
<ClInclude Include="src\user\cheat\player\FallControl.h" />
|
<ClInclude Include="src\user\cheat\player\FallControl.h" />
|
||||||
<ClInclude Include="src\user\cheat\visuals\TextureChanger.h" />
|
<ClInclude Include="src\user\cheat\visuals\TextureChanger.h" />
|
||||||
<ClInclude Include="src\user\cheat\visuals\FreeCamera.h" />
|
<ClInclude Include="src\user\cheat\visuals\FreeCamera.h" />
|
||||||
|
<ClInclude Include="src\user\cheat\world\AutoChallenge.h" />
|
||||||
<ClInclude Include="src\user\cheat\world\AutoSeelie.h" />
|
<ClInclude Include="src\user\cheat\world\AutoSeelie.h" />
|
||||||
<ClInclude Include="src\user\cheat\world\CustomWeather.h" />
|
<ClInclude Include="src\user\cheat\world\CustomWeather.h" />
|
||||||
<ClInclude Include="src\user\cheat\world\FakeTime.h" />
|
<ClInclude Include="src\user\cheat\world\FakeTime.h" />
|
||||||
@ -119,6 +120,7 @@
|
|||||||
<ClCompile Include="src\user\cheat\player\FallControl.cpp" />
|
<ClCompile Include="src\user\cheat\player\FallControl.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\visuals\TextureChanger.cpp" />
|
<ClCompile Include="src\user\cheat\visuals\TextureChanger.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\visuals\FreeCamera.cpp" />
|
<ClCompile Include="src\user\cheat\visuals\FreeCamera.cpp" />
|
||||||
|
<ClCompile Include="src\user\cheat\world\AutoChallenge.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\world\AutoSeelie.cpp" />
|
<ClCompile Include="src\user\cheat\world\AutoSeelie.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\world\CustomWeather.cpp" />
|
<ClCompile Include="src\user\cheat\world\CustomWeather.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\world\FakeTime.cpp" />
|
<ClCompile Include="src\user\cheat\world\FakeTime.cpp" />
|
||||||
@ -224,12 +226,19 @@
|
|||||||
<Image Include="res\iconsHD\Azhdaha.png" />
|
<Image Include="res\iconsHD\Azhdaha.png" />
|
||||||
<Image Include="res\iconsHD\Boar.png" />
|
<Image Include="res\iconsHD\Boar.png" />
|
||||||
<Image Include="res\iconsHD\BookPage.png" />
|
<Image Include="res\iconsHD\BookPage.png" />
|
||||||
|
<Image Include="res\iconsHD\BouncyMushroom.png" />
|
||||||
<Image Include="res\iconsHD\Cat.png" />
|
<Image Include="res\iconsHD\Cat.png" />
|
||||||
<Image Include="res\iconsHD\Cicin.png" />
|
<Image Include="res\iconsHD\Cicin.png" />
|
||||||
|
<Image Include="res\iconsHD\ClusterleafOfCultivation.png" />
|
||||||
<Image Include="res\iconsHD\Crane.png" />
|
<Image Include="res\iconsHD\Crane.png" />
|
||||||
<Image Include="res\iconsHD\CryoBathysmalVishap.png" />
|
<Image Include="res\iconsHD\CryoBathysmalVishap.png" />
|
||||||
<Image Include="res\iconsHD\Dendroculus.png" />
|
<Image Include="res\iconsHD\Dendroculus.png" />
|
||||||
|
<Image Include="res\iconsHD\DendroGranum.png" />
|
||||||
|
<Image Include="res\iconsHD\DendroPile.png" />
|
||||||
|
<Image Include="res\iconsHD\DendroProjector.png" />
|
||||||
|
<Image Include="res\iconsHD\DendroRock.png" />
|
||||||
<Image Include="res\iconsHD\Dog.png" />
|
<Image Include="res\iconsHD\Dog.png" />
|
||||||
|
<Image Include="res\iconsHD\DreadfulWithering.png" />
|
||||||
<Image Include="res\iconsHD\DunlinsTooth.png" />
|
<Image Include="res\iconsHD\DunlinsTooth.png" />
|
||||||
<Image Include="res\iconsHD\Dvalin.png" />
|
<Image Include="res\iconsHD\Dvalin.png" />
|
||||||
<Image Include="res\iconsHD\Eel.png" />
|
<Image Include="res\iconsHD\Eel.png" />
|
||||||
@ -418,6 +427,7 @@
|
|||||||
<Image Include="res\iconsHD\NilotpalaLotus.png" />
|
<Image Include="res\iconsHD\NilotpalaLotus.png" />
|
||||||
<Image Include="res\iconsHD\Nobushi.png" />
|
<Image Include="res\iconsHD\Nobushi.png" />
|
||||||
<Image Include="res\iconsHD\NoctilucousJade.png" />
|
<Image Include="res\iconsHD\NoctilucousJade.png" />
|
||||||
|
<Image Include="res\iconsHD\NurseriesInTheWilds.png" />
|
||||||
<Image Include="res\iconsHD\OceanCrab.png" />
|
<Image Include="res\iconsHD\OceanCrab.png" />
|
||||||
<Image Include="res\iconsHD\Oceanid.png" />
|
<Image Include="res\iconsHD\Oceanid.png" />
|
||||||
<Image Include="res\iconsHD\OceanidSummons.png" />
|
<Image Include="res\iconsHD\OceanidSummons.png" />
|
||||||
@ -427,6 +437,7 @@
|
|||||||
<Image Include="res\iconsHD\Padisarah.png" />
|
<Image Include="res\iconsHD\Padisarah.png" />
|
||||||
<Image Include="res\iconsHD\PaleRedCrab.png" />
|
<Image Include="res\iconsHD\PaleRedCrab.png" />
|
||||||
<Image Include="res\iconsHD\PerpetualMechanicalArray.png" />
|
<Image Include="res\iconsHD\PerpetualMechanicalArray.png" />
|
||||||
|
<Image Include="res\iconsHD\PhantasmalGate.png" />
|
||||||
<Image Include="res\iconsHD\PhaseGate.png" />
|
<Image Include="res\iconsHD\PhaseGate.png" />
|
||||||
<Image Include="res\iconsHD\PhilanemoMushroom.png" />
|
<Image Include="res\iconsHD\PhilanemoMushroom.png" />
|
||||||
<Image Include="res\iconsHD\Pigeon.png" />
|
<Image Include="res\iconsHD\Pigeon.png" />
|
||||||
@ -465,6 +476,7 @@
|
|||||||
<Image Include="res\iconsHD\RukkhashavaMushrooms.png" />
|
<Image Include="res\iconsHD\RukkhashavaMushrooms.png" />
|
||||||
<Image Include="res\iconsHD\RustyKoi.png" />
|
<Image Include="res\iconsHD\RustyKoi.png" />
|
||||||
<Image Include="res\iconsHD\SacredSakura.png" />
|
<Image Include="res\iconsHD\SacredSakura.png" />
|
||||||
|
<Image Include="res\iconsHD\SaghiraMachine.png" />
|
||||||
<Image Include="res\iconsHD\SakuraBloom.png" />
|
<Image Include="res\iconsHD\SakuraBloom.png" />
|
||||||
<Image Include="res\iconsHD\Salamander.png" />
|
<Image Include="res\iconsHD\Salamander.png" />
|
||||||
<Image Include="res\iconsHD\Samachurl.png" />
|
<Image Include="res\iconsHD\Samachurl.png" />
|
||||||
@ -507,6 +519,7 @@
|
|||||||
<Image Include="res\iconsHD\Starshroom.png" />
|
<Image Include="res\iconsHD\Starshroom.png" />
|
||||||
<Image Include="res\iconsHD\Starsilver.png" />
|
<Image Include="res\iconsHD\Starsilver.png" />
|
||||||
<Image Include="res\iconsHD\StatueofTheSeven.png" />
|
<Image Include="res\iconsHD\StatueofTheSeven.png" />
|
||||||
|
<Image Include="res\iconsHD\StonePillarSeal.png" />
|
||||||
<Image Include="res\iconsHD\StormBarrier.png" />
|
<Image Include="res\iconsHD\StormBarrier.png" />
|
||||||
<Image Include="res\iconsHD\Stormstone.png" />
|
<Image Include="res\iconsHD\Stormstone.png" />
|
||||||
<Image Include="res\iconsHD\StrangeTooth.png" />
|
<Image Include="res\iconsHD\StrangeTooth.png" />
|
||||||
@ -530,7 +543,8 @@
|
|||||||
<Image Include="res\iconsHD\TorchPuzzle.png" />
|
<Image Include="res\iconsHD\TorchPuzzle.png" />
|
||||||
<Image Include="res\iconsHD\TreasureHoarder.png" />
|
<Image Include="res\iconsHD\TreasureHoarder.png" />
|
||||||
<Image Include="res\iconsHD\TriangularMechanism.png" />
|
<Image Include="res\iconsHD\TriangularMechanism.png" />
|
||||||
<Image Include="res\iconsHD\Tukan.png" />
|
<Image Include="res\iconsHD\DuskBird.png" />
|
||||||
|
<Image Include="res\iconsHD\TriYanaSeeds.png" />
|
||||||
<Image Include="res\iconsHD\UnagiMeat.png" />
|
<Image Include="res\iconsHD\UnagiMeat.png" />
|
||||||
<Image Include="res\iconsHD\UniqueRocks.png" />
|
<Image Include="res\iconsHD\UniqueRocks.png" />
|
||||||
<Image Include="res\iconsHD\UnusualHilichurl.png" />
|
<Image Include="res\iconsHD\UnusualHilichurl.png" />
|
||||||
@ -563,12 +577,19 @@
|
|||||||
<Image Include="res\icons\Azhdaha.png" />
|
<Image Include="res\icons\Azhdaha.png" />
|
||||||
<Image Include="res\icons\Boar.png" />
|
<Image Include="res\icons\Boar.png" />
|
||||||
<Image Include="res\icons\BookPage.png" />
|
<Image Include="res\icons\BookPage.png" />
|
||||||
|
<Image Include="res\icons\BouncyMushroom.png" />
|
||||||
<Image Include="res\icons\Cat.png" />
|
<Image Include="res\icons\Cat.png" />
|
||||||
<Image Include="res\icons\Cicin.png" />
|
<Image Include="res\icons\Cicin.png" />
|
||||||
|
<Image Include="res\icons\ClusterleafOfCultivation.png" />
|
||||||
<Image Include="res\icons\Crane.png" />
|
<Image Include="res\icons\Crane.png" />
|
||||||
<Image Include="res\icons\CryoBathysmalVishap.png" />
|
<Image Include="res\icons\CryoBathysmalVishap.png" />
|
||||||
<Image Include="res\icons\Dendroculus.png" />
|
<Image Include="res\icons\Dendroculus.png" />
|
||||||
|
<Image Include="res\icons\DendroGranum.png" />
|
||||||
|
<Image Include="res\icons\DendroPile.png" />
|
||||||
|
<Image Include="res\icons\DendroProjector.png" />
|
||||||
|
<Image Include="res\icons\DendroRock.png" />
|
||||||
<Image Include="res\icons\Dog.png" />
|
<Image Include="res\icons\Dog.png" />
|
||||||
|
<Image Include="res\icons\DreadfulWithering.png" />
|
||||||
<Image Include="res\icons\DunlinsTooth.png" />
|
<Image Include="res\icons\DunlinsTooth.png" />
|
||||||
<Image Include="res\icons\Dvalin.png" />
|
<Image Include="res\icons\Dvalin.png" />
|
||||||
<Image Include="res\icons\Eel.png" />
|
<Image Include="res\icons\Eel.png" />
|
||||||
@ -757,6 +778,7 @@
|
|||||||
<Image Include="res\icons\NilotpalaLotus.png" />
|
<Image Include="res\icons\NilotpalaLotus.png" />
|
||||||
<Image Include="res\icons\Nobushi.png" />
|
<Image Include="res\icons\Nobushi.png" />
|
||||||
<Image Include="res\icons\NoctilucousJade.png" />
|
<Image Include="res\icons\NoctilucousJade.png" />
|
||||||
|
<Image Include="res\icons\NurseriesInTheWilds.png" />
|
||||||
<Image Include="res\icons\OceanCrab.png" />
|
<Image Include="res\icons\OceanCrab.png" />
|
||||||
<Image Include="res\icons\Oceanid.png" />
|
<Image Include="res\icons\Oceanid.png" />
|
||||||
<Image Include="res\icons\OceanidSummons.png" />
|
<Image Include="res\icons\OceanidSummons.png" />
|
||||||
@ -766,6 +788,7 @@
|
|||||||
<Image Include="res\icons\Padisarah.png" />
|
<Image Include="res\icons\Padisarah.png" />
|
||||||
<Image Include="res\icons\PaleRedCrab.png" />
|
<Image Include="res\icons\PaleRedCrab.png" />
|
||||||
<Image Include="res\icons\PerpetualMechanicalArray.png" />
|
<Image Include="res\icons\PerpetualMechanicalArray.png" />
|
||||||
|
<Image Include="res\icons\PhantasmalGate.png" />
|
||||||
<Image Include="res\icons\PhaseGate.png" />
|
<Image Include="res\icons\PhaseGate.png" />
|
||||||
<Image Include="res\icons\PhilanemoMushroom.png" />
|
<Image Include="res\icons\PhilanemoMushroom.png" />
|
||||||
<Image Include="res\icons\Pigeon.png" />
|
<Image Include="res\icons\Pigeon.png" />
|
||||||
@ -804,6 +827,7 @@
|
|||||||
<Image Include="res\icons\RukkhashavaMushrooms.png" />
|
<Image Include="res\icons\RukkhashavaMushrooms.png" />
|
||||||
<Image Include="res\icons\RustyKoi.png" />
|
<Image Include="res\icons\RustyKoi.png" />
|
||||||
<Image Include="res\icons\SacredSakura.png" />
|
<Image Include="res\icons\SacredSakura.png" />
|
||||||
|
<Image Include="res\icons\SaghiraMachine.png" />
|
||||||
<Image Include="res\icons\SakuraBloom.png" />
|
<Image Include="res\icons\SakuraBloom.png" />
|
||||||
<Image Include="res\icons\Salamander.png" />
|
<Image Include="res\icons\Salamander.png" />
|
||||||
<Image Include="res\icons\Samachurl.png" />
|
<Image Include="res\icons\Samachurl.png" />
|
||||||
@ -846,6 +870,7 @@
|
|||||||
<Image Include="res\icons\Starshroom.png" />
|
<Image Include="res\icons\Starshroom.png" />
|
||||||
<Image Include="res\icons\Starsilver.png" />
|
<Image Include="res\icons\Starsilver.png" />
|
||||||
<Image Include="res\icons\StatueofTheSeven.png" />
|
<Image Include="res\icons\StatueofTheSeven.png" />
|
||||||
|
<Image Include="res\icons\StonePillarSeal.png" />
|
||||||
<Image Include="res\icons\StormBarrier.png" />
|
<Image Include="res\icons\StormBarrier.png" />
|
||||||
<Image Include="res\icons\Stormstone.png" />
|
<Image Include="res\icons\Stormstone.png" />
|
||||||
<Image Include="res\icons\StrangeTooth.png" />
|
<Image Include="res\icons\StrangeTooth.png" />
|
||||||
@ -869,7 +894,8 @@
|
|||||||
<Image Include="res\icons\TorchPuzzle.png" />
|
<Image Include="res\icons\TorchPuzzle.png" />
|
||||||
<Image Include="res\icons\TreasureHoarder.png" />
|
<Image Include="res\icons\TreasureHoarder.png" />
|
||||||
<Image Include="res\icons\TriangularMechanism.png" />
|
<Image Include="res\icons\TriangularMechanism.png" />
|
||||||
<Image Include="res\icons\Tukan.png" />
|
<Image Include="res\icons\DuskBird.png" />
|
||||||
|
<Image Include="res\icons\TriYanaSeeds.png" />
|
||||||
<Image Include="res\icons\UnagiMeat.png" />
|
<Image Include="res\icons\UnagiMeat.png" />
|
||||||
<Image Include="res\icons\UniqueRocks.png" />
|
<Image Include="res\icons\UniqueRocks.png" />
|
||||||
<Image Include="res\icons\UnusualHilichurl.png" />
|
<Image Include="res\icons\UnusualHilichurl.png" />
|
||||||
@ -1016,7 +1042,7 @@
|
|||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch-il2cpp.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch-il2cpp.h</PrecompiledHeaderFile>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
<AdditionalIncludeDirectories>$(ProjectDir)src/appdata;$(ProjectDir)src/framework;$(ProjectDir)res/;$(ProjectDir)src/user;$(SolutionDir)cheat-base/src/;$(SolutionDir)cheat-base/vendor/imgui/;$(SolutionDir)cheat-base/vendor/json/single_include/;$(SolutionDir)cheat-base/vendor/magic_enum/include/;$(SolutionDir)cheat-base/vendor/fmt/include/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/simpleIni/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/detours/</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ProjectDir)src/appdata;$(ProjectDir)src/framework;$(ProjectDir)res/;$(ProjectDir)src/user;$(SolutionDir)cheat-base/src/;$(SolutionDir)cheat-base/vendor/imgui/;$(SolutionDir)cheat-base/vendor/json/single_include/;$(SolutionDir)cheat-base/vendor/magic_enum/include/;$(SolutionDir)cheat-base/vendor/fmt/include/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/simpleIni/;$(SolutionDir)cheat-base/vendor/imgui-notify-v2/;$(SolutionDir)cheat-base/vendor/detours/</AdditionalIncludeDirectories>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
@ -258,6 +258,9 @@
|
|||||||
<ClInclude Include="src\user\cheat\player\FallControl.h">
|
<ClInclude Include="src\user\cheat\player\FallControl.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\user\cheat\world\AutoChallenge.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Font Include="res\Ruda-Bold.ttf" />
|
<Font Include="res\Ruda-Bold.ttf" />
|
||||||
@ -474,6 +477,9 @@
|
|||||||
<ClCompile Include="src\user\cheat\player\FallControl.cpp">
|
<ClCompile Include="src\user\cheat\player\FallControl.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\user\cheat\world\AutoChallenge.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="res\res.rc">
|
<ResourceCompile Include="res\res.rc">
|
||||||
@ -2409,9 +2415,6 @@
|
|||||||
<Image Include="res\iconsHD\SumeruRose.png">
|
<Image Include="res\iconsHD\SumeruRose.png">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
<Image Include="res\iconsHD\Tukan.png">
|
|
||||||
<Filter>Resource Files</Filter>
|
|
||||||
</Image>
|
|
||||||
<Image Include="res\iconsHD\Viparyas.png">
|
<Image Include="res\iconsHD\Viparyas.png">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
@ -2439,9 +2442,6 @@
|
|||||||
<Image Include="res\iconsHD\RukkhashavaMushrooms.png">
|
<Image Include="res\iconsHD\RukkhashavaMushrooms.png">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
<Image Include="res\icons\Tukan.png">
|
|
||||||
<Filter>Resource Files</Filter>
|
|
||||||
</Image>
|
|
||||||
<Image Include="res\icons\Viparyas.png">
|
<Image Include="res\icons\Viparyas.png">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
@ -2526,5 +2526,83 @@
|
|||||||
<Image Include="res\icons\BookPage.png">
|
<Image Include="res\icons\BookPage.png">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
|
<Image Include="res\icons\DuskBird.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\DuskBird.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\TriYanaSeeds.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\BouncyMushroom.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\ClusterleafOfCultivation.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\DendroGranum.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\DendroPile.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\DendroProjector.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\DendroRock.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\DreadfulWithering.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\NurseriesInTheWilds.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\PhantasmalGate.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\SaghiraMachine.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\StonePillarSeal.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\StonePillarSeal.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\TriYanaSeeds.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\BouncyMushroom.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\ClusterleafOfCultivation.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\DendroGranum.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\DendroPile.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\DendroProjector.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\DendroRock.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\DreadfulWithering.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\NurseriesInTheWilds.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\PhantasmalGate.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\SaghiraMachine.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"game_version": "2.8",
|
"game_version": "3.0",
|
||||||
"modules": {
|
"modules": {
|
||||||
"UnityPlayer.dll": {
|
"UnityPlayer.dll": {
|
||||||
"checksum": 4999961552328781053,
|
"checksum": 18225598526199471527,
|
||||||
"timestamp": 0
|
"timestamp": 0
|
||||||
},
|
},
|
||||||
"UserAssembly.dll": {
|
"UserAssembly.dll": {
|
||||||
"checksum": 807890720029543258,
|
"checksum": 10799527772725786707,
|
||||||
"timestamp": 0
|
"timestamp": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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
|
// PNG
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#pragma region iconsHD
|
||||||
|
|
||||||
HDABIDINGANGELFISH PNG "iconsHD\\AbidingAngelfish.png"
|
HDABIDINGANGELFISH PNG "iconsHD\\AbidingAngelfish.png"
|
||||||
|
|
||||||
HDABYSSMAGE PNG "iconsHD\\AbyssMage.png"
|
HDABYSSMAGE PNG "iconsHD\\AbyssMage.png"
|
||||||
@ -144,6 +146,8 @@ HDBOOKPAGE PNG "iconsHD\\BookPage.png"
|
|||||||
|
|
||||||
HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png"
|
HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png"
|
||||||
|
|
||||||
|
HDBOUNCYMUSHROOM PNG "iconsHD\\BouncyMushroom.png"
|
||||||
|
|
||||||
HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png"
|
HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png"
|
||||||
|
|
||||||
HDBROWNSHIRAKODAI PNG "iconsHD\\BrownShirakodai.png"
|
HDBROWNSHIRAKODAI PNG "iconsHD\\BrownShirakodai.png"
|
||||||
@ -166,6 +170,10 @@ HDCHILLEDMEAT PNG "iconsHD\\ChilledMeat.png"
|
|||||||
|
|
||||||
HDCICIN PNG "iconsHD\\Cicin.png"
|
HDCICIN PNG "iconsHD\\Cicin.png"
|
||||||
|
|
||||||
|
HDCLOUDLEISURESTEPS PNG "iconsHD\\CloudleisureSteps.png"
|
||||||
|
|
||||||
|
HDCLUSTERLEAFOFCULTIVATION PNG "iconsHD\\ClusterleafOfCultivation.png"
|
||||||
|
|
||||||
HDCOMMONCHEST PNG "iconsHD\\CommonChest.png"
|
HDCOMMONCHEST PNG "iconsHD\\CommonChest.png"
|
||||||
|
|
||||||
HDCOOKINGINGREDIENT PNG "iconsHD\\CookingIngredient.png"
|
HDCOOKINGINGREDIENT PNG "iconsHD\\CookingIngredient.png"
|
||||||
@ -220,14 +228,28 @@ HDDENDROBIUM PNG "iconsHD\\Dendrobium.png"
|
|||||||
|
|
||||||
HDDENDROCULUS PNG "iconsHD\\Dendroculus.png"
|
HDDENDROCULUS PNG "iconsHD\\Dendroculus.png"
|
||||||
|
|
||||||
|
HDDENDROGRANUM PNG "iconsHD\\DendroGranum.png"
|
||||||
|
|
||||||
|
HDDENDROPILE PNG "iconsHD\\DendroPile.png"
|
||||||
|
|
||||||
|
HDDENDROPROJECTOR PNG "iconsHD\\DendroProjector.png"
|
||||||
|
|
||||||
|
HDDENDROROCK PNG "iconsHD\\DendroRock.png"
|
||||||
|
|
||||||
HDDIVDARAY PNG "iconsHD\\DivdaRay.png"
|
HDDIVDARAY PNG "iconsHD\\DivdaRay.png"
|
||||||
|
|
||||||
HDDOG PNG "iconsHD\\Dog.png"
|
HDDOG PNG "iconsHD\\Dog.png"
|
||||||
|
|
||||||
HDDOMAIN PNG "iconsHD\\Domain.png"
|
HDDOMAIN PNG "iconsHD\\Domain.png"
|
||||||
|
|
||||||
|
HDDREADFULWITHERING PNG "iconsHD\\DreadfulWithering.png"
|
||||||
|
|
||||||
|
HDDREAMFORM PNG "iconsHD\\DreamForm.png"
|
||||||
|
|
||||||
HDDUNLINSTOOTH PNG "iconsHD\\DunlinsTooth.png"
|
HDDUNLINSTOOTH PNG "iconsHD\\DunlinsTooth.png"
|
||||||
|
|
||||||
|
HDDUSKBIRD PNG "iconsHD\\DuskBird.png"
|
||||||
|
|
||||||
HDDVALIN PNG "iconsHD\\Dvalin.png"
|
HDDVALIN PNG "iconsHD\\Dvalin.png"
|
||||||
|
|
||||||
HDECHOINGCONCH PNG "iconsHD\\EchoingConch.png"
|
HDECHOINGCONCH PNG "iconsHD\\EchoingConch.png"
|
||||||
@ -362,6 +384,8 @@ HDHORSETAIL PNG "iconsHD\\Horsetail.png"
|
|||||||
|
|
||||||
HDHYDROABYSSHERALD PNG "iconsHD\\HydroAbyssHerald.png"
|
HDHYDROABYSSHERALD PNG "iconsHD\\HydroAbyssHerald.png"
|
||||||
|
|
||||||
|
HDHYDROBATHYSMALVISHAP PNG "iconsHD\\HydroBathysmalVishap.png"
|
||||||
|
|
||||||
HDHYDROHYPOSTASIS PNG "iconsHD\\HydroHypostasis.png"
|
HDHYDROHYPOSTASIS PNG "iconsHD\\HydroHypostasis.png"
|
||||||
|
|
||||||
HDILLUSION PNG "iconsHD\\Illusion.png"
|
HDILLUSION PNG "iconsHD\\Illusion.png"
|
||||||
@ -442,6 +466,8 @@ HDMATSUTAKE PNG "iconsHD\\Matsutake.png"
|
|||||||
|
|
||||||
HDMEDAKA PNG "iconsHD\\Medaka.png"
|
HDMEDAKA PNG "iconsHD\\Medaka.png"
|
||||||
|
|
||||||
|
HDMELODICBLOOM PNG "iconsHD\\MelodicBloom.png"
|
||||||
|
|
||||||
HDMERCHANT PNG "iconsHD\\Merchant.png"
|
HDMERCHANT PNG "iconsHD\\Merchant.png"
|
||||||
|
|
||||||
HDMILLELITH PNG "iconsHD\\Millelith.png"
|
HDMILLELITH PNG "iconsHD\\Millelith.png"
|
||||||
@ -474,6 +500,8 @@ HDNOBUSHI PNG "iconsHD\\Nobushi.png"
|
|||||||
|
|
||||||
HDNOCTILUCOUSJADE PNG "iconsHD\\NoctilucousJade.png"
|
HDNOCTILUCOUSJADE PNG "iconsHD\\NoctilucousJade.png"
|
||||||
|
|
||||||
|
HDNURSERIESINTHEWILDS PNG "iconsHD\\NurseriesInTheWilds.png"
|
||||||
|
|
||||||
HDOCEANCRAB PNG "iconsHD\\OceanCrab.png"
|
HDOCEANCRAB PNG "iconsHD\\OceanCrab.png"
|
||||||
|
|
||||||
HDOCEANID PNG "iconsHD\\Oceanid.png"
|
HDOCEANID PNG "iconsHD\\Oceanid.png"
|
||||||
@ -506,6 +534,8 @@ HDPALEREDCRAB PNG "iconsHD\\PaleRedCrab.png"
|
|||||||
|
|
||||||
HDPERPETUALMECHANICALARRAY PNG "iconsHD\\PerpetualMechanicalArray.png"
|
HDPERPETUALMECHANICALARRAY PNG "iconsHD\\PerpetualMechanicalArray.png"
|
||||||
|
|
||||||
|
HDPHANTASMALGATE PNG "iconsHD\\PhantasmalGate.png"
|
||||||
|
|
||||||
HDPHASEGATE PNG "iconsHD\\PhaseGate.png"
|
HDPHASEGATE PNG "iconsHD\\PhaseGate.png"
|
||||||
|
|
||||||
HDPHILANEMOMUSHROOM PNG "iconsHD\\PhilanemoMushroom.png"
|
HDPHILANEMOMUSHROOM PNG "iconsHD\\PhilanemoMushroom.png"
|
||||||
@ -584,6 +614,8 @@ HDRUSTYKOI PNG "iconsHD\\RustyKoi.png"
|
|||||||
|
|
||||||
HDSACREDSAKURA PNG "iconsHD\\SacredSakura.png"
|
HDSACREDSAKURA PNG "iconsHD\\SacredSakura.png"
|
||||||
|
|
||||||
|
HDSAGHIRAMACHINE PNG "iconsHD\\SaghiraMachine.png"
|
||||||
|
|
||||||
HDSAKURABLOOM PNG "iconsHD\\SakuraBloom.png"
|
HDSAKURABLOOM PNG "iconsHD\\SakuraBloom.png"
|
||||||
|
|
||||||
HDSALAMANDER PNG "iconsHD\\Salamander.png"
|
HDSALAMANDER PNG "iconsHD\\Salamander.png"
|
||||||
@ -606,8 +638,6 @@ HDSEAGRASS PNG "iconsHD\\Seagrass.png"
|
|||||||
|
|
||||||
HDSEALEDCHEST PNG "iconsHD\\SealedChest.png"
|
HDSEALEDCHEST PNG "iconsHD\\SealedChest.png"
|
||||||
|
|
||||||
HDSEALLOCATIONS PNG "iconsHD\\SealLocationI.png"
|
|
||||||
|
|
||||||
HDSEALLOCATIONI PNG "iconsHD\\SealLocationI.png"
|
HDSEALLOCATIONI PNG "iconsHD\\SealLocationI.png"
|
||||||
|
|
||||||
HDSEALLOCATIONII PNG "iconsHD\\SealLocationII.png"
|
HDSEALLOCATIONII PNG "iconsHD\\SealLocationII.png"
|
||||||
@ -616,6 +646,8 @@ HDSEALLOCATIONIII PNG "iconsHD\\SealLocationIII.png"
|
|||||||
|
|
||||||
HDSEALLOCATIONIV PNG "iconsHD\\SealLocationIV.png"
|
HDSEALLOCATIONIV PNG "iconsHD\\SealLocationIV.png"
|
||||||
|
|
||||||
|
HDSEALLOCATIONS PNG "iconsHD\\SealLocationI.png"
|
||||||
|
|
||||||
HDSEALLOCATIONV PNG "iconsHD\\SealLocationV.png"
|
HDSEALLOCATIONV PNG "iconsHD\\SealLocationV.png"
|
||||||
|
|
||||||
HDSEELIE PNG "iconsHD\\Seelie.png"
|
HDSEELIE PNG "iconsHD\\Seelie.png"
|
||||||
@ -664,12 +696,16 @@ HDSQUIRREL PNG "iconsHD\\Squirrel.png"
|
|||||||
|
|
||||||
HDSTARCONCH PNG "iconsHD\\Starconch.png"
|
HDSTARCONCH PNG "iconsHD\\Starconch.png"
|
||||||
|
|
||||||
|
HDSTARLIGHTCOALESCENCE PNG "iconsHD\\StarlightCoalescence.png"
|
||||||
|
|
||||||
HDSTARSHROOM PNG "iconsHD\\Starshroom.png"
|
HDSTARSHROOM PNG "iconsHD\\Starshroom.png"
|
||||||
|
|
||||||
HDSTARSILVER PNG "iconsHD\\Starsilver.png"
|
HDSTARSILVER PNG "iconsHD\\Starsilver.png"
|
||||||
|
|
||||||
HDSTATUEOFTHESEVEN PNG "iconsHD\\StatueofTheSeven.png"
|
HDSTATUEOFTHESEVEN PNG "iconsHD\\StatueofTheSeven.png"
|
||||||
|
|
||||||
|
HDSTONEPILLARSEAL PNG "iconsHD\\StonePillarSeal.png"
|
||||||
|
|
||||||
HDSTORMBARRIER PNG "iconsHD\\StormBarrier.png"
|
HDSTORMBARRIER PNG "iconsHD\\StormBarrier.png"
|
||||||
|
|
||||||
HDSTORMSTONE PNG "iconsHD\\Stormstone.png"
|
HDSTORMSTONE PNG "iconsHD\\Stormstone.png"
|
||||||
@ -704,6 +740,8 @@ HDTHECRUXTHEALCOR PNG "iconsHD\\TheCruxTheAlcor.png"
|
|||||||
|
|
||||||
HDTHEGREATSNOWBOARKING PNG "iconsHD\\TheGreatSnowboarKing.png"
|
HDTHEGREATSNOWBOARKING PNG "iconsHD\\TheGreatSnowboarKing.png"
|
||||||
|
|
||||||
|
HDTHERAVENFORUM PNG "iconsHD\\TheRavenForum.png"
|
||||||
|
|
||||||
HDTHREEBOXES PNG "iconsHD\\ThreeBoxes.png"
|
HDTHREEBOXES PNG "iconsHD\\ThreeBoxes.png"
|
||||||
|
|
||||||
HDTHUNDERMANIFESTATION PNG "iconsHD\\ThunderManifestation.png"
|
HDTHUNDERMANIFESTATION PNG "iconsHD\\ThunderManifestation.png"
|
||||||
@ -716,7 +754,7 @@ HDTREASUREHOARDER PNG "iconsHD\\TreasureHoarder.png"
|
|||||||
|
|
||||||
HDTRIANGULARMECHANISM PNG "iconsHD\\TriangularMechanism.png"
|
HDTRIANGULARMECHANISM PNG "iconsHD\\TriangularMechanism.png"
|
||||||
|
|
||||||
HDTUKAN PNG "iconsHD\\Tukan.png"
|
HDTRIYANASEEDS PNG "iconsHD\\TriYanaSeeds.png"
|
||||||
|
|
||||||
HDUNAGIMEAT PNG "iconsHD\\UnagiMeat.png"
|
HDUNAGIMEAT PNG "iconsHD\\UnagiMeat.png"
|
||||||
|
|
||||||
@ -771,17 +809,11 @@ HDWORLDQUESTS PNG "iconsHD\\WorldQuests.png"
|
|||||||
HDYUMEMIRUWOOD PNG "iconsHD\\YumemiruWood.png"
|
HDYUMEMIRUWOOD PNG "iconsHD\\YumemiruWood.png"
|
||||||
|
|
||||||
HDZAYTUNPEACH PNG "iconsHD\\ZaytunPeach.png"
|
HDZAYTUNPEACH PNG "iconsHD\\ZaytunPeach.png"
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
HDMELODICBLOOM PNG "iconsHD\\MelodicBloom.png"
|
|
||||||
|
|
||||||
HDCLOUDLEISURESTEPS PNG "iconsHD\\CloudleisureSteps.png"
|
|
||||||
|
|
||||||
HDDREAMFORM PNG "iconsHD\\DreamForm.png"
|
|
||||||
|
|
||||||
HDSTARLIGHTCOALESCENCE PNG "iconsHD\\StarlightCoalescence.png"
|
|
||||||
|
|
||||||
HDTHERAVENFORUM PNG "iconsHD\\TheRavenForum.png"
|
|
||||||
|
|
||||||
|
#pragma region icons
|
||||||
ABIDINGANGELFISH PNG "icons\\AbidingAngelfish.png"
|
ABIDINGANGELFISH PNG "icons\\AbidingAngelfish.png"
|
||||||
|
|
||||||
ABYSSMAGE PNG "icons\\AbyssMage.png"
|
ABYSSMAGE PNG "icons\\AbyssMage.png"
|
||||||
@ -858,6 +890,8 @@ BOOKPAGE PNG "icons\\BookPage.png"
|
|||||||
|
|
||||||
BOOTWEASEL PNG "icons\\BootWeasel.png"
|
BOOTWEASEL PNG "icons\\BootWeasel.png"
|
||||||
|
|
||||||
|
BOUNCYMUSHROOM PNG "icons\\BouncyMushroom.png"
|
||||||
|
|
||||||
BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png"
|
BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png"
|
||||||
|
|
||||||
BROWNSHIRAKODAI PNG "icons\\BrownShirakodai.png"
|
BROWNSHIRAKODAI PNG "icons\\BrownShirakodai.png"
|
||||||
@ -880,6 +914,10 @@ CHILLEDMEAT PNG "icons\\ChilledMeat.png"
|
|||||||
|
|
||||||
CICIN PNG "icons\\Cicin.png"
|
CICIN PNG "icons\\Cicin.png"
|
||||||
|
|
||||||
|
CLOUDLEISURESTEPS PNG "icons\\CloudleisureSteps.png"
|
||||||
|
|
||||||
|
CLUSTERLEAFOFCULTIVATION PNG "icons\\ClusterleafOfCultivation.png"
|
||||||
|
|
||||||
COMMONCHEST PNG "icons\\CommonChest.png"
|
COMMONCHEST PNG "icons\\CommonChest.png"
|
||||||
|
|
||||||
COOKINGINGREDIENT PNG "icons\\CookingIngredient.png"
|
COOKINGINGREDIENT PNG "icons\\CookingIngredient.png"
|
||||||
@ -934,14 +972,28 @@ DENDROBIUM PNG "icons\\Dendrobium.png"
|
|||||||
|
|
||||||
DENDROCULUS PNG "icons\\Dendroculus.png"
|
DENDROCULUS PNG "icons\\Dendroculus.png"
|
||||||
|
|
||||||
|
DENDROGRANUM PNG "icons\\DendroGranum.png"
|
||||||
|
|
||||||
|
DENDROPILE PNG "icons\\DendroPile.png"
|
||||||
|
|
||||||
|
DENDROPROJECTOR PNG "icons\\DendroProjector.png"
|
||||||
|
|
||||||
|
DENDROROCK PNG "icons\\DendroRock.png"
|
||||||
|
|
||||||
DIVDARAY PNG "icons\\DivdaRay.png"
|
DIVDARAY PNG "icons\\DivdaRay.png"
|
||||||
|
|
||||||
DOG PNG "icons\\Dog.png"
|
DOG PNG "icons\\Dog.png"
|
||||||
|
|
||||||
DOMAIN PNG "icons\\Domain.png"
|
DOMAIN PNG "icons\\Domain.png"
|
||||||
|
|
||||||
|
DREADFULWITHERING PNG "icons\\DreadfulWithering.png"
|
||||||
|
|
||||||
|
DREAMFORM PNG "icons\\DreamForm.png"
|
||||||
|
|
||||||
DUNLINSTOOTH PNG "icons\\DunlinsTooth.png"
|
DUNLINSTOOTH PNG "icons\\DunlinsTooth.png"
|
||||||
|
|
||||||
|
DUSKBIRD PNG "icons\\DuskBird.png"
|
||||||
|
|
||||||
DVALIN PNG "icons\\Dvalin.png"
|
DVALIN PNG "icons\\Dvalin.png"
|
||||||
|
|
||||||
ECHOINGCONCH PNG "icons\\EchoingConch.png"
|
ECHOINGCONCH PNG "icons\\EchoingConch.png"
|
||||||
@ -1076,6 +1128,8 @@ HORSETAIL PNG "icons\\Horsetail.png"
|
|||||||
|
|
||||||
HYDROABYSSHERALD PNG "icons\\HydroAbyssHerald.png"
|
HYDROABYSSHERALD PNG "icons\\HydroAbyssHerald.png"
|
||||||
|
|
||||||
|
HYDROBATHYSMALVISHAP PNG "icons\\HydroBathysmalVishap.png"
|
||||||
|
|
||||||
HYDROHYPOSTASIS PNG "icons\\HydroHypostasis.png"
|
HYDROHYPOSTASIS PNG "icons\\HydroHypostasis.png"
|
||||||
|
|
||||||
ILLUSION PNG "icons\\Illusion.png"
|
ILLUSION PNG "icons\\Illusion.png"
|
||||||
@ -1156,6 +1210,8 @@ MATSUTAKE PNG "icons\\Matsutake.png"
|
|||||||
|
|
||||||
MEDAKA PNG "icons\\Medaka.png"
|
MEDAKA PNG "icons\\Medaka.png"
|
||||||
|
|
||||||
|
MELODICBLOOM PNG "icons\\MelodicBloom.png"
|
||||||
|
|
||||||
MERCHANT PNG "icons\\Merchant.png"
|
MERCHANT PNG "icons\\Merchant.png"
|
||||||
|
|
||||||
MILLELITH PNG "icons\\Millelith.png"
|
MILLELITH PNG "icons\\Millelith.png"
|
||||||
@ -1190,6 +1246,8 @@ NOCTILUCOUSJADE PNG "icons\\NoctilucousJade.png"
|
|||||||
|
|
||||||
NPC PNG "icons\\Npc.png"
|
NPC PNG "icons\\Npc.png"
|
||||||
|
|
||||||
|
NURSERIESINTHEWILDS PNG "icons\\NurseriesInTheWilds.png"
|
||||||
|
|
||||||
OCEANCRAB PNG "icons\\OceanCrab.png"
|
OCEANCRAB PNG "icons\\OceanCrab.png"
|
||||||
|
|
||||||
OCEANID PNG "icons\\Oceanid.png"
|
OCEANID PNG "icons\\Oceanid.png"
|
||||||
@ -1222,6 +1280,8 @@ PALEREDCRAB PNG "icons\\PaleRedCrab.png"
|
|||||||
|
|
||||||
PERPETUALMECHANICALARRAY PNG "icons\\PerpetualMechanicalArray.png"
|
PERPETUALMECHANICALARRAY PNG "icons\\PerpetualMechanicalArray.png"
|
||||||
|
|
||||||
|
PHANTASMALGATE PNG "icons\\PhantasmalGate.png"
|
||||||
|
|
||||||
PHASEGATE PNG "icons\\PhaseGate.png"
|
PHASEGATE PNG "icons\\PhaseGate.png"
|
||||||
|
|
||||||
PHILANEMOMUSHROOM PNG "icons\\PhilanemoMushroom.png"
|
PHILANEMOMUSHROOM PNG "icons\\PhilanemoMushroom.png"
|
||||||
@ -1300,6 +1360,8 @@ RUSTYKOI PNG "icons\\RustyKoi.png"
|
|||||||
|
|
||||||
SACREDSAKURA PNG "icons\\SacredSakura.png"
|
SACREDSAKURA PNG "icons\\SacredSakura.png"
|
||||||
|
|
||||||
|
SAGHIRAMACHINE PNG "icons\\SaghiraMachine.png"
|
||||||
|
|
||||||
SAKURABLOOM PNG "icons\\SakuraBloom.png"
|
SAKURABLOOM PNG "icons\\SakuraBloom.png"
|
||||||
|
|
||||||
SALAMANDER PNG "icons\\Salamander.png"
|
SALAMANDER PNG "icons\\Salamander.png"
|
||||||
@ -1322,8 +1384,6 @@ SEAGRASS PNG "icons\\Seagrass.png"
|
|||||||
|
|
||||||
SEALEDCHEST PNG "icons\\SealedChest.png"
|
SEALEDCHEST PNG "icons\\SealedChest.png"
|
||||||
|
|
||||||
SEALLOCATIONS PNG "icons\\SealLocationI.png"
|
|
||||||
|
|
||||||
SEALLOCATIONI PNG "icons\\SealLocationI.png"
|
SEALLOCATIONI PNG "icons\\SealLocationI.png"
|
||||||
|
|
||||||
SEALLOCATIONII PNG "icons\\SealLocationII.png"
|
SEALLOCATIONII PNG "icons\\SealLocationII.png"
|
||||||
@ -1332,6 +1392,8 @@ SEALLOCATIONIII PNG "icons\\SealLocationIII.png"
|
|||||||
|
|
||||||
SEALLOCATIONIV PNG "icons\\SealLocationIV.png"
|
SEALLOCATIONIV PNG "icons\\SealLocationIV.png"
|
||||||
|
|
||||||
|
SEALLOCATIONS PNG "icons\\SealLocationI.png"
|
||||||
|
|
||||||
SEALLOCATIONV PNG "icons\\SealLocationV.png"
|
SEALLOCATIONV PNG "icons\\SealLocationV.png"
|
||||||
|
|
||||||
SEELIE PNG "icons\\Seelie.png"
|
SEELIE PNG "icons\\Seelie.png"
|
||||||
@ -1380,12 +1442,16 @@ SQUIRREL PNG "icons\\Squirrel.png"
|
|||||||
|
|
||||||
STARCONCH PNG "icons\\Starconch.png"
|
STARCONCH PNG "icons\\Starconch.png"
|
||||||
|
|
||||||
|
STARLIGHTCOALESCENCE PNG "icons\\StarlightCoalescence.png"
|
||||||
|
|
||||||
STARSHROOM PNG "icons\\Starshroom.png"
|
STARSHROOM PNG "icons\\Starshroom.png"
|
||||||
|
|
||||||
STARSILVER PNG "icons\\Starsilver.png"
|
STARSILVER PNG "icons\\Starsilver.png"
|
||||||
|
|
||||||
STATUEOFTHESEVEN PNG "icons\\StatueofTheSeven.png"
|
STATUEOFTHESEVEN PNG "icons\\StatueofTheSeven.png"
|
||||||
|
|
||||||
|
STONEPILLARSEAL PNG "icons\\StonePillarSeal.png"
|
||||||
|
|
||||||
STORMBARRIER PNG "icons\\StormBarrier.png"
|
STORMBARRIER PNG "icons\\StormBarrier.png"
|
||||||
|
|
||||||
STORMSTONE PNG "icons\\Stormstone.png"
|
STORMSTONE PNG "icons\\Stormstone.png"
|
||||||
@ -1420,6 +1486,8 @@ THECRUXTHEALCOR PNG "icons\\TheCruxTheAlcor.png"
|
|||||||
|
|
||||||
THEGREATSNOWBOARKING PNG "icons\\TheGreatSnowboarKing.png"
|
THEGREATSNOWBOARKING PNG "icons\\TheGreatSnowboarKing.png"
|
||||||
|
|
||||||
|
THERAVENFORUM PNG "icons\\TheRavenForum.png"
|
||||||
|
|
||||||
THREEBOXES PNG "icons\\ThreeBoxes.png"
|
THREEBOXES PNG "icons\\ThreeBoxes.png"
|
||||||
|
|
||||||
THUNDERMANIFESTATION PNG "icons\\ThunderManifestation.png"
|
THUNDERMANIFESTATION PNG "icons\\ThunderManifestation.png"
|
||||||
@ -1432,7 +1500,7 @@ TREASUREHOARDER PNG "icons\\TreasureHoarder.png"
|
|||||||
|
|
||||||
TRIANGULARMECHANISM PNG "icons\\TriangularMechanism.png"
|
TRIANGULARMECHANISM PNG "icons\\TriangularMechanism.png"
|
||||||
|
|
||||||
TUKAN PNG "icons\\Tukan.png"
|
TRIYANASEEDS PNG "icons\\TriYanaSeeds.png"
|
||||||
|
|
||||||
UNAGIMEAT PNG "icons\\UnagiMeat.png"
|
UNAGIMEAT PNG "icons\\UnagiMeat.png"
|
||||||
|
|
||||||
@ -1487,16 +1555,7 @@ WORLDQUESTS PNG "icons\\WorldQuests.png"
|
|||||||
YUMEMIRUWOOD PNG "icons\\YumemiruWood.png"
|
YUMEMIRUWOOD PNG "icons\\YumemiruWood.png"
|
||||||
|
|
||||||
ZAYTUNPEACH PNG "icons\\ZaytunPeach.png"
|
ZAYTUNPEACH PNG "icons\\ZaytunPeach.png"
|
||||||
|
#pragma endregion
|
||||||
MELODICBLOOM PNG "icons\\MelodicBloom.png"
|
|
||||||
|
|
||||||
CLOUDLEISURESTEPS PNG "icons\\CloudleisureSteps.png"
|
|
||||||
|
|
||||||
DREAMFORM PNG "icons\\DreamForm.png"
|
|
||||||
|
|
||||||
STARLIGHTCOALESCENCE PNG "icons\\StarlightCoalescence.png"
|
|
||||||
|
|
||||||
THERAVENFORUM PNG "icons\\TheRavenForum.png"
|
|
||||||
|
|
||||||
#endif // English (United States) resources
|
#endif // English (United States) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#include <cheat/world/AutoFish.h>
|
#include <cheat/world/AutoFish.h>
|
||||||
#include <cheat/world/AutoCook.h>
|
#include <cheat/world/AutoCook.h>
|
||||||
|
#include <cheat/world/AutoChallenge.h>
|
||||||
#include <cheat/world/CustomWeather.h>
|
#include <cheat/world/CustomWeather.h>
|
||||||
|
|
||||||
#include <cheat/visuals/NoFog.h>
|
#include <cheat/visuals/NoFog.h>
|
||||||
@ -99,6 +100,7 @@ namespace cheat
|
|||||||
FEAT_INST(FreezeEnemies),
|
FEAT_INST(FreezeEnemies),
|
||||||
FEAT_INST(ElementalSight),
|
FEAT_INST(ElementalSight),
|
||||||
FEAT_INST(KillAura),
|
FEAT_INST(KillAura),
|
||||||
|
FEAT_INST(AutoChallenge),
|
||||||
FEAT_INST(MobVacuum),
|
FEAT_INST(MobVacuum),
|
||||||
FEAT_INST(FakeTime),
|
FEAT_INST(FakeTime),
|
||||||
|
|
||||||
|
@ -581,27 +581,30 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(chest, LuxuriousChest);
|
ADD_FILTER_FIELD(chest, LuxuriousChest);
|
||||||
ADD_FILTER_FIELD(chest, RemarkableChest);
|
ADD_FILTER_FIELD(chest, RemarkableChest);
|
||||||
// Other Chests
|
// Other Chests
|
||||||
ADD_FILTER_FIELD(chest, BuriedChest);
|
//ADD_FILTER_FIELD(chest, BuriedChest); // Shared name, commented for now
|
||||||
ADD_FILTER_FIELD(chest, SearchPoint);
|
ADD_FILTER_FIELD(chest, SearchPoint);
|
||||||
|
|
||||||
|
|
||||||
ADD_FILTER_FIELD(featured, Anemoculus);
|
ADD_FILTER_FIELD(featured, Anemoculus);
|
||||||
ADD_FILTER_FIELD(featured, CrimsonAgate);
|
ADD_FILTER_FIELD(featured, CrimsonAgate);
|
||||||
ADD_FILTER_FIELD(featured, Electroculus);
|
|
||||||
ADD_FILTER_FIELD(featured, Dendroculus);
|
ADD_FILTER_FIELD(featured, Dendroculus);
|
||||||
ADD_FILTER_FIELD(featured, EchoingConch);
|
ADD_FILTER_FIELD(featured, Electroculus);
|
||||||
ADD_FILTER_FIELD(featured, Electrogranum);
|
ADD_FILTER_FIELD(featured, Electrogranum);
|
||||||
ADD_FILTER_FIELD(featured, FishingPoint);
|
ADD_FILTER_FIELD(featured, FishingPoint);
|
||||||
ADD_FILTER_FIELD(featured, Geoculus);
|
ADD_FILTER_FIELD(featured, Geoculus);
|
||||||
ADD_FILTER_FIELD(featured, ImagingConch);
|
|
||||||
ADD_FILTER_FIELD(featured, ItemDrops);
|
ADD_FILTER_FIELD(featured, ItemDrops);
|
||||||
ADD_FILTER_FIELD(featured, KeySigil);
|
ADD_FILTER_FIELD(featured, KeySigil);
|
||||||
ADD_FILTER_FIELD(featured, Lumenspar);
|
ADD_FILTER_FIELD(featured, Lumenspar);
|
||||||
ADD_FILTER_FIELD(featured, ShrineOfDepth);
|
ADD_FILTER_FIELD(featured, ShrineOfDepth);
|
||||||
ADD_FILTER_FIELD(featured, TimeTrialChallenge);
|
ADD_FILTER_FIELD(featured, TimeTrialChallenge);
|
||||||
|
|
||||||
|
ADD_FILTER_FIELD(guide, BouncyMushroom);
|
||||||
ADD_FILTER_FIELD(guide, CampfireTorch);
|
ADD_FILTER_FIELD(guide, CampfireTorch);
|
||||||
|
ADD_FILTER_FIELD(guide, ClusterleafOfCultivation);
|
||||||
ADD_FILTER_FIELD(guide, DayNightSwitchingMechanism);
|
ADD_FILTER_FIELD(guide, DayNightSwitchingMechanism);
|
||||||
|
ADD_FILTER_FIELD(guide, DendroGranum);
|
||||||
|
ADD_FILTER_FIELD(guide, DendroPile);
|
||||||
|
ADD_FILTER_FIELD(guide, DendroRock);
|
||||||
ADD_FILTER_FIELD(guide, EnkanomiyaPhaseGate);
|
ADD_FILTER_FIELD(guide, EnkanomiyaPhaseGate);
|
||||||
ADD_FILTER_FIELD(guide, MysteriousCarvings);
|
ADD_FILTER_FIELD(guide, MysteriousCarvings);
|
||||||
ADD_FILTER_FIELD(guide, PhaseGate);
|
ADD_FILTER_FIELD(guide, PhaseGate);
|
||||||
@ -623,6 +626,7 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(living, Crow);
|
ADD_FILTER_FIELD(living, Crow);
|
||||||
ADD_FILTER_FIELD(living, CrystalCore);
|
ADD_FILTER_FIELD(living, CrystalCore);
|
||||||
ADD_FILTER_FIELD(living, Dog);
|
ADD_FILTER_FIELD(living, Dog);
|
||||||
|
ADD_FILTER_FIELD(living, DuskBird);
|
||||||
ADD_FILTER_FIELD(living, Eel);
|
ADD_FILTER_FIELD(living, Eel);
|
||||||
ADD_FILTER_FIELD(living, Falcon);
|
ADD_FILTER_FIELD(living, Falcon);
|
||||||
ADD_FILTER_FIELD(living, Finch);
|
ADD_FILTER_FIELD(living, Finch);
|
||||||
@ -640,7 +644,6 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(living, Salamander);
|
ADD_FILTER_FIELD(living, Salamander);
|
||||||
ADD_FILTER_FIELD(living, Squirrel);
|
ADD_FILTER_FIELD(living, Squirrel);
|
||||||
ADD_FILTER_FIELD(living, Starconch);
|
ADD_FILTER_FIELD(living, Starconch);
|
||||||
ADD_FILTER_FIELD(living, Tukan);
|
|
||||||
ADD_FILTER_FIELD(living, Weasel);
|
ADD_FILTER_FIELD(living, Weasel);
|
||||||
ADD_FILTER_FIELD(living, Wigeon);
|
ADD_FILTER_FIELD(living, Wigeon);
|
||||||
|
|
||||||
@ -710,7 +713,6 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(monster, Hilichurl);
|
ADD_FILTER_FIELD(monster, Hilichurl);
|
||||||
ADD_FILTER_FIELD(monster, HydroAbyssHerald);
|
ADD_FILTER_FIELD(monster, HydroAbyssHerald);
|
||||||
ADD_FILTER_FIELD(monster, HydroBathysmalVishap);
|
ADD_FILTER_FIELD(monster, HydroBathysmalVishap);
|
||||||
ADD_FILTER_FIELD(monster, HydroHypostasisSummon);
|
|
||||||
ADD_FILTER_FIELD(monster, Kairagi);
|
ADD_FILTER_FIELD(monster, Kairagi);
|
||||||
ADD_FILTER_FIELD(monster, Millelith);
|
ADD_FILTER_FIELD(monster, Millelith);
|
||||||
ADD_FILTER_FIELD(monster, Mitachurl);
|
ADD_FILTER_FIELD(monster, Mitachurl);
|
||||||
@ -789,7 +791,7 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(plant, SweetFlower);
|
ADD_FILTER_FIELD(plant, SweetFlower);
|
||||||
ADD_FILTER_FIELD(plant, Valberry);
|
ADD_FILTER_FIELD(plant, Valberry);
|
||||||
ADD_FILTER_FIELD(plant, Violetgrass);
|
ADD_FILTER_FIELD(plant, Violetgrass);
|
||||||
//ADD_FILTER_FIELD(plant, Viparyas);
|
ADD_FILTER_FIELD(plant, Viparyas);
|
||||||
ADD_FILTER_FIELD(plant, WindwheelAster);
|
ADD_FILTER_FIELD(plant, WindwheelAster);
|
||||||
ADD_FILTER_FIELD(plant, Wolfhook);
|
ADD_FILTER_FIELD(plant, Wolfhook);
|
||||||
ADD_FILTER_FIELD(plant, ZaytunPeach);
|
ADD_FILTER_FIELD(plant, ZaytunPeach);
|
||||||
@ -798,39 +800,41 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(puzzle, BakeDanuki);
|
ADD_FILTER_FIELD(puzzle, BakeDanuki);
|
||||||
ADD_FILTER_FIELD(puzzle, BloattyFloatty);
|
ADD_FILTER_FIELD(puzzle, BloattyFloatty);
|
||||||
ADD_FILTER_FIELD(puzzle, CubeDevices);
|
ADD_FILTER_FIELD(puzzle, CubeDevices);
|
||||||
|
ADD_FILTER_FIELD(puzzle, DendroProjector);
|
||||||
|
ADD_FILTER_FIELD(puzzle, DreadfulWithering);
|
||||||
ADD_FILTER_FIELD(puzzle, EightStoneTablets);
|
ADD_FILTER_FIELD(puzzle, EightStoneTablets);
|
||||||
ADD_FILTER_FIELD(puzzle, ElectricConduction);
|
ADD_FILTER_FIELD(puzzle, ElectricConduction);
|
||||||
ADD_FILTER_FIELD(puzzle, RelayStone);
|
|
||||||
ADD_FILTER_FIELD(puzzle, ElectroSeelie);
|
ADD_FILTER_FIELD(puzzle, ElectroSeelie);
|
||||||
ADD_FILTER_FIELD(puzzle, ElementalMonument);
|
ADD_FILTER_FIELD(puzzle, ElementalMonument);
|
||||||
ADD_FILTER_FIELD(puzzle, FloatingAnemoSlime);
|
ADD_FILTER_FIELD(puzzle, FloatingAnemoSlime);
|
||||||
ADD_FILTER_FIELD(puzzle, Geogranum);
|
ADD_FILTER_FIELD(puzzle, Geogranum);
|
||||||
ADD_FILTER_FIELD(puzzle, GeoPuzzle);
|
ADD_FILTER_FIELD(puzzle, GeoPuzzle);
|
||||||
ADD_FILTER_FIELD(puzzle, LargeRockPile);
|
ADD_FILTER_FIELD(puzzle, LargeRockPile);
|
||||||
ADD_FILTER_FIELD(puzzle, LightUpTilePuzzle);
|
|
||||||
ADD_FILTER_FIELD(puzzle, LightningStrikeProbe);
|
ADD_FILTER_FIELD(puzzle, LightningStrikeProbe);
|
||||||
|
ADD_FILTER_FIELD(puzzle, LightUpTilePuzzle);
|
||||||
ADD_FILTER_FIELD(puzzle, LumenCage);
|
ADD_FILTER_FIELD(puzzle, LumenCage);
|
||||||
ADD_FILTER_FIELD(puzzle, LuminousSeelie);
|
ADD_FILTER_FIELD(puzzle, LuminousSeelie);
|
||||||
ADD_FILTER_FIELD(puzzle, MistBubble);
|
ADD_FILTER_FIELD(puzzle, MistBubble);
|
||||||
|
ADD_FILTER_FIELD(puzzle, NurseriesInTheWilds);
|
||||||
ADD_FILTER_FIELD(puzzle, OozingConcretions);
|
ADD_FILTER_FIELD(puzzle, OozingConcretions);
|
||||||
|
ADD_FILTER_FIELD(puzzle, PhantasmalGate);
|
||||||
ADD_FILTER_FIELD(puzzle, PirateHelm);
|
ADD_FILTER_FIELD(puzzle, PirateHelm);
|
||||||
ADD_FILTER_FIELD(puzzle, PressurePlate);
|
ADD_FILTER_FIELD(puzzle, PressurePlate);
|
||||||
|
ADD_FILTER_FIELD(puzzle, RelayStone);
|
||||||
|
ADD_FILTER_FIELD(puzzle, SaghiraMachine);
|
||||||
ADD_FILTER_FIELD(puzzle, SealLocations);
|
ADD_FILTER_FIELD(puzzle, SealLocations);
|
||||||
ADD_FILTER_FIELD(puzzle, Seelie);
|
ADD_FILTER_FIELD(puzzle, Seelie);
|
||||||
ADD_FILTER_FIELD(puzzle, SeelieLamp);
|
ADD_FILTER_FIELD(puzzle, SeelieLamp);
|
||||||
ADD_FILTER_FIELD(puzzle, SmallRockPile);
|
ADD_FILTER_FIELD(puzzle, SmallRockPile);
|
||||||
|
ADD_FILTER_FIELD(puzzle, StonePillarSeal);
|
||||||
ADD_FILTER_FIELD(puzzle, StormBarrier);
|
ADD_FILTER_FIELD(puzzle, StormBarrier);
|
||||||
ADD_FILTER_FIELD(puzzle, SwordHilt);
|
ADD_FILTER_FIELD(puzzle, SwordHilt);
|
||||||
ADD_FILTER_FIELD(puzzle, Temari);
|
ADD_FILTER_FIELD(puzzle, Temari);
|
||||||
ADD_FILTER_FIELD(puzzle, TorchPuzzle);
|
ADD_FILTER_FIELD(puzzle, TorchPuzzle);
|
||||||
|
ADD_FILTER_FIELD(puzzle, TriYanaSeeds);
|
||||||
ADD_FILTER_FIELD(puzzle, UniqueRocks);
|
ADD_FILTER_FIELD(puzzle, UniqueRocks);
|
||||||
ADD_FILTER_FIELD(puzzle, WarmingSeelie);
|
ADD_FILTER_FIELD(puzzle, WarmingSeelie);
|
||||||
ADD_FILTER_FIELD(puzzle, WindmillMechanism);
|
ADD_FILTER_FIELD(puzzle, WindmillMechanism);
|
||||||
ADD_FILTER_FIELD(puzzle, MelodicBloom);
|
|
||||||
ADD_FILTER_FIELD(puzzle, CloudleisureSteps);
|
|
||||||
ADD_FILTER_FIELD(puzzle, DreamForm);
|
|
||||||
ADD_FILTER_FIELD(puzzle, StarlightCoalescence);
|
|
||||||
ADD_FILTER_FIELD(puzzle, TheRavenForum);
|
|
||||||
}
|
}
|
||||||
#undef ADD_FILTER_FIELD
|
#undef ADD_FILTER_FIELD
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace cheat::game
|
|||||||
entityFilters[filter] = { false, 0 };
|
entityFilters[filter] = { false, 0 };
|
||||||
|
|
||||||
auto& entry = entityFilters[filter];
|
auto& entry = entityFilters[filter];
|
||||||
auto timestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr);
|
auto timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
|
||||||
if (entry.second + m_LifeTime > timestamp)
|
if (entry.second + m_LifeTime > timestamp)
|
||||||
return entry.first;
|
return entry.first;
|
||||||
|
|
||||||
|
@ -75,6 +75,11 @@ namespace cheat::game::filters
|
|||||||
SimpleFilter RuinBrazier = { EntityType__Enum_1::Gadget, "_AncientHeatSource" };
|
SimpleFilter RuinBrazier = { EntityType__Enum_1::Gadget, "_AncientHeatSource" };
|
||||||
SimpleFilter Stormstone = { EntityType__Enum_1::Gadget, "_ReginLamp" };
|
SimpleFilter Stormstone = { EntityType__Enum_1::Gadget, "_ReginLamp" };
|
||||||
SimpleFilter TriangularMechanism = { EntityType__Enum_1::Field, "_TuningFork" };
|
SimpleFilter TriangularMechanism = { EntityType__Enum_1::Field, "_TuningFork" };
|
||||||
|
SimpleFilter DendroGranum = { EntityType__Enum_1::Gadget, "GrassSeedCreate" };
|
||||||
|
SimpleFilter BouncyMushroom = { EntityType__Enum_1::Gadget, "JumpMushroom" };
|
||||||
|
SimpleFilter ClusterleafOfCultivation = { EntityType__Enum_1::Field, "RaioFlower" };
|
||||||
|
SimpleFilter DendroRock = { EntityType__Enum_1::Field, "GrassSealStone" };
|
||||||
|
SimpleFilter DendroPile = { EntityType__Enum_1::Field, "XuMiPlantinshitou" };
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace living
|
namespace living
|
||||||
@ -101,7 +106,7 @@ namespace cheat::game::filters
|
|||||||
SimpleFilter Falcon = { EntityType__Enum_1::Monster, "Falcon" };
|
SimpleFilter Falcon = { EntityType__Enum_1::Monster, "Falcon" };
|
||||||
SimpleFilter LucklightFly = { EntityType__Enum_1::EnvAnimal, "Boltbug_" };
|
SimpleFilter LucklightFly = { EntityType__Enum_1::EnvAnimal, "Boltbug_" };
|
||||||
SimpleFilter Salamander = { EntityType__Enum_1::EnvAnimal, "Salamander" };
|
SimpleFilter Salamander = { EntityType__Enum_1::EnvAnimal, "Salamander" };
|
||||||
SimpleFilter Tukan = { EntityType__Enum_1::Monster, "Pigeon_Beak" };
|
SimpleFilter DuskBird = { EntityType__Enum_1::Monster, "Pigeon_Beak" };
|
||||||
SimpleFilter Pigeon = { EntityType__Enum_1::Monster, "Pigeon_0" };
|
SimpleFilter Pigeon = { EntityType__Enum_1::Monster, "Pigeon_0" };
|
||||||
SimpleFilter Crow = { EntityType__Enum_1::Monster, "Crow" };
|
SimpleFilter Crow = { EntityType__Enum_1::Monster, "Crow" };
|
||||||
SimpleFilter Finch = { EntityType__Enum_1::Monster, "Tit" };
|
SimpleFilter Finch = { EntityType__Enum_1::Monster, "Tit" };
|
||||||
@ -277,7 +282,7 @@ namespace cheat::game::filters
|
|||||||
SimpleFilter Padisarah = { EntityType__Enum_1::GatherObject, "_Pasusalan" };
|
SimpleFilter Padisarah = { EntityType__Enum_1::GatherObject, "_Pasusalan" };
|
||||||
SimpleFilter RukkhashavaMushrooms = { EntityType__Enum_1::GatherObject, "_HolyMushroom" };
|
SimpleFilter RukkhashavaMushrooms = { EntityType__Enum_1::GatherObject, "_HolyMushroom" };
|
||||||
SimpleFilter SumeruRose = { EntityType__Enum_1::GatherObject, "_XumiRose" };
|
SimpleFilter SumeruRose = { EntityType__Enum_1::GatherObject, "_XumiRose" };
|
||||||
//SimpleFilter Viparyas = { EntityType__Enum_1::GatherObject, "_" };
|
SimpleFilter Viparyas = { EntityType__Enum_1::GatherObject, "_DreamerPlant" };
|
||||||
SimpleFilter ZaytunPeach = { EntityType__Enum_1::GatherObject, "_Olea" };
|
SimpleFilter ZaytunPeach = { EntityType__Enum_1::GatherObject, "_Olea" };
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,7 +325,15 @@ namespace cheat::game::filters
|
|||||||
WhitelistFilter DreamForm = { {EntityType__Enum_1::Field, EntityType__Enum_1::Platform }, "_AnimalSeelie" };
|
WhitelistFilter DreamForm = { {EntityType__Enum_1::Field, EntityType__Enum_1::Platform }, "_AnimalSeelie" };
|
||||||
SimpleFilter StarlightCoalescence = { EntityType__Enum_1::Field, "_PaperStar" };
|
SimpleFilter StarlightCoalescence = { EntityType__Enum_1::Field, "_PaperStar" };
|
||||||
SimpleFilter TheRavenForum = { EntityType__Enum_1::Gadget, "_NightCrowStatue" };
|
SimpleFilter TheRavenForum = { EntityType__Enum_1::Gadget, "_NightCrowStatue" };
|
||||||
|
WhitelistFilter TimeTrialChallengeCollection = { { EntityType__Enum_1::Field, EntityType__Enum_1::Gadget }, { "SkillObj_EmptyGadget", "_GlideChampOrb" } };
|
||||||
|
SimpleFilter Bombbarrel = { EntityType__Enum_1::Gadget, "_Bombbarrel" };
|
||||||
|
SimpleFilter NurseriesInTheWilds = { EntityType__Enum_1::Field, "PlantDrawStart" };
|
||||||
|
SimpleFilter SaghiraMachine = { EntityType__Enum_1::Gadget, "FatuiMaranaWell" };
|
||||||
|
SimpleFilter StonePillarSeal = { EntityType__Enum_1::Gadget, "GrassSealRing_" };
|
||||||
|
SimpleFilter TriYanaSeeds = { EntityType__Enum_1::Gadget, "XuMiVisualizationplant" };
|
||||||
|
SimpleFilter DendroProjector = { EntityType__Enum_1::Gadget, "AyusProjector" };
|
||||||
|
SimpleFilter DreadfulWithering = { EntityType__Enum_1::Gadget, "DeathZonePoint" };
|
||||||
|
SimpleFilter PhantasmalGate = { EntityType__Enum_1::Field, "DreamlandDoor" };
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace combined
|
namespace combined
|
||||||
@ -394,7 +407,7 @@ namespace cheat::game::filters
|
|||||||
living::Squirrel,
|
living::Squirrel,
|
||||||
living::Boar,
|
living::Boar,
|
||||||
living::Weasel,
|
living::Weasel,
|
||||||
living::Tukan
|
living::DuskBird
|
||||||
};
|
};
|
||||||
SimpleFilter AnimalPickUp = {
|
SimpleFilter AnimalPickUp = {
|
||||||
living::CrystalCore,
|
living::CrystalCore,
|
||||||
|
@ -76,6 +76,11 @@ namespace cheat::game::filters
|
|||||||
extern SimpleFilter RuinBrazier;
|
extern SimpleFilter RuinBrazier;
|
||||||
extern SimpleFilter Stormstone;
|
extern SimpleFilter Stormstone;
|
||||||
extern SimpleFilter TriangularMechanism;
|
extern SimpleFilter TriangularMechanism;
|
||||||
|
extern SimpleFilter DendroGranum;
|
||||||
|
extern SimpleFilter BouncyMushroom;
|
||||||
|
extern SimpleFilter ClusterleafOfCultivation;
|
||||||
|
extern SimpleFilter DendroRock;
|
||||||
|
extern SimpleFilter DendroPile;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace living
|
namespace living
|
||||||
@ -102,7 +107,7 @@ namespace cheat::game::filters
|
|||||||
extern SimpleFilter LucklightFly;
|
extern SimpleFilter LucklightFly;
|
||||||
extern SimpleFilter Npc;
|
extern SimpleFilter Npc;
|
||||||
extern SimpleFilter Salamander;
|
extern SimpleFilter Salamander;
|
||||||
extern SimpleFilter Tukan;
|
extern SimpleFilter DuskBird;
|
||||||
extern SimpleFilter Pigeon;
|
extern SimpleFilter Pigeon;
|
||||||
extern SimpleFilter Crow;
|
extern SimpleFilter Crow;
|
||||||
extern SimpleFilter Finch;
|
extern SimpleFilter Finch;
|
||||||
@ -277,7 +282,7 @@ namespace cheat::game::filters
|
|||||||
extern SimpleFilter Padisarah;
|
extern SimpleFilter Padisarah;
|
||||||
extern SimpleFilter RukkhashavaMushrooms;
|
extern SimpleFilter RukkhashavaMushrooms;
|
||||||
extern SimpleFilter SumeruRose;
|
extern SimpleFilter SumeruRose;
|
||||||
//extern SimpleFilter Viparyas;
|
extern SimpleFilter Viparyas;
|
||||||
extern SimpleFilter ZaytunPeach;
|
extern SimpleFilter ZaytunPeach;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,6 +325,15 @@ namespace cheat::game::filters
|
|||||||
extern WhitelistFilter DreamForm;
|
extern WhitelistFilter DreamForm;
|
||||||
extern SimpleFilter StarlightCoalescence;
|
extern SimpleFilter StarlightCoalescence;
|
||||||
extern SimpleFilter TheRavenForum;
|
extern SimpleFilter TheRavenForum;
|
||||||
|
extern WhitelistFilter TimeTrialChallengeCollection;
|
||||||
|
extern SimpleFilter Bombbarrel;
|
||||||
|
extern SimpleFilter NurseriesInTheWilds;
|
||||||
|
extern SimpleFilter SaghiraMachine;
|
||||||
|
extern SimpleFilter StonePillarSeal;
|
||||||
|
extern SimpleFilter TriYanaSeeds;
|
||||||
|
extern SimpleFilter DendroProjector;
|
||||||
|
extern SimpleFilter DreadfulWithering;
|
||||||
|
extern SimpleFilter PhantasmalGate;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace combined
|
namespace combined
|
||||||
|
@ -563,13 +563,13 @@ namespace cheat::feature
|
|||||||
std::lock_guard _userDataLock(m_UserDataMutex);
|
std::lock_guard _userDataLock(m_UserDataMutex);
|
||||||
LOG_WARNING("Complete point at %.0f.", game::EntityManager::instance().avatar()->distance(pointData->levelPosition));
|
LOG_WARNING("Complete point at %.0f.", game::EntityManager::instance().avatar()->distance(pointData->levelPosition));
|
||||||
|
|
||||||
if (m_CompletedPoints.count(pointData) > 0)
|
if (std::find_if(m_CompletedPoints.begin(), m_CompletedPoints.end(), [=](PointData* data) { return pointData->id == data->id; }) != std::end(m_CompletedPoints))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pointData->completed = true;
|
pointData->completed = true;
|
||||||
pointData->completeTimestamp = util::GetCurrentTimeMillisec();
|
pointData->completeTimestamp = util::GetCurrentTimeMillisec();
|
||||||
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount++;
|
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount++;
|
||||||
m_CompletedPoints.insert(pointData);
|
m_CompletedPoints.push_back(pointData);
|
||||||
|
|
||||||
SaveCompletedPoints();
|
SaveCompletedPoints();
|
||||||
}
|
}
|
||||||
@ -578,13 +578,14 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
std::lock_guard _userDataLock(m_UserDataMutex);
|
std::lock_guard _userDataLock(m_UserDataMutex);
|
||||||
|
|
||||||
if (m_CompletedPoints.count(pointData) == 0)
|
auto pointDataIterator = std::find_if(m_CompletedPoints.begin(), m_CompletedPoints.end(), [=](PointData* data) { return pointData->id == data->id; });
|
||||||
|
if (pointDataIterator == m_CompletedPoints.end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pointData->completed = false;
|
pointData->completed = false;
|
||||||
pointData->completeTimestamp = 0;
|
pointData->completeTimestamp = 0;
|
||||||
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
|
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
|
||||||
m_CompletedPoints.erase(pointData);
|
m_CompletedPoints.erase(pointDataIterator);
|
||||||
|
|
||||||
SaveCompletedPoints();
|
SaveCompletedPoints();
|
||||||
}
|
}
|
||||||
@ -595,11 +596,12 @@ namespace cheat::feature
|
|||||||
if (m_CompletedPoints.empty())
|
if (m_CompletedPoints.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PointData* pointData = *m_CompletedPoints.begin();
|
auto pointDataIterator = --m_CompletedPoints.end();
|
||||||
|
PointData* pointData = *pointDataIterator;
|
||||||
pointData->completed = false;
|
pointData->completed = false;
|
||||||
pointData->completeTimestamp = 0;
|
pointData->completeTimestamp = 0;
|
||||||
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
|
m_ScenesData[pointData->sceneID].labels[pointData->labelID].completedCount--;
|
||||||
m_CompletedPoints.erase(pointData);
|
m_CompletedPoints.erase(pointDataIterator);
|
||||||
|
|
||||||
SaveCompletedPoints();
|
SaveCompletedPoints();
|
||||||
}
|
}
|
||||||
@ -916,7 +918,7 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto& point = points[pointID];
|
auto& point = points[pointID];
|
||||||
if (m_CompletedPoints.count(&point) > 0)
|
if (std::find_if(m_CompletedPoints.begin(), m_CompletedPoints.end(), [=](PointData* data) { return point.id == data->id; }) != std::end(m_CompletedPoints))
|
||||||
{
|
{
|
||||||
LOG_WARNING("Completed point %u duplicate.", pointID);
|
LOG_WARNING("Completed point %u duplicate.", pointID);
|
||||||
return;
|
return;
|
||||||
@ -926,7 +928,7 @@ namespace cheat::feature
|
|||||||
point.completeTimestamp = data["complete_timestamp"];
|
point.completeTimestamp = data["complete_timestamp"];
|
||||||
labelData->completedCount++;
|
labelData->completedCount++;
|
||||||
|
|
||||||
m_CompletedPoints.insert(&point);
|
m_CompletedPoints.push_back(&point);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InteractiveMap::LoadFixedPointData(LabelData* labelData, const nlohmann::json& data)
|
void InteractiveMap::LoadFixedPointData(LabelData* labelData, const nlohmann::json& data)
|
||||||
@ -1026,6 +1028,7 @@ namespace cheat::feature
|
|||||||
void InteractiveMap::LoadCompletedPoints()
|
void InteractiveMap::LoadCompletedPoints()
|
||||||
{
|
{
|
||||||
LoadUserData(f_CompletedPointsJson, &InteractiveMap::LoadCompletedPointData);
|
LoadUserData(f_CompletedPointsJson, &InteractiveMap::LoadCompletedPointData);
|
||||||
|
ReorderCompletedPointDataByTimestamp();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InteractiveMap::SaveCompletedPoints()
|
void InteractiveMap::SaveCompletedPoints()
|
||||||
@ -1040,6 +1043,11 @@ namespace cheat::feature
|
|||||||
m_CompletedPoints.clear();
|
m_CompletedPoints.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InteractiveMap::ReorderCompletedPointDataByTimestamp()
|
||||||
|
{
|
||||||
|
m_CompletedPoints.sort([](PointData* a, PointData* b) { return a->completeTimestamp < b->completeTimestamp; });
|
||||||
|
}
|
||||||
|
|
||||||
void InteractiveMap::LoadCustomPoints()
|
void InteractiveMap::LoadCustomPoints()
|
||||||
{
|
{
|
||||||
LoadUserData(f_CustomPointsJson, &InteractiveMap::LoadCustomPointData);
|
LoadUserData(f_CustomPointsJson, &InteractiveMap::LoadCustomPointData);
|
||||||
@ -1779,9 +1787,11 @@ namespace cheat::feature
|
|||||||
INIT_FILTER(chest, RemarkableChest);
|
INIT_FILTER(chest, RemarkableChest);
|
||||||
INIT_FILTER(featured, Anemoculus);
|
INIT_FILTER(featured, Anemoculus);
|
||||||
INIT_FILTER(featured, CrimsonAgate);
|
INIT_FILTER(featured, CrimsonAgate);
|
||||||
|
INIT_FILTER(featured, Dendroculus);
|
||||||
INIT_FILTER(featured, Electroculus);
|
INIT_FILTER(featured, Electroculus);
|
||||||
//INIT_FILTER(featured, Electrogranum);
|
//INIT_FILTER(featured, Electrogranum);
|
||||||
INIT_FILTER(featured, Geoculus);
|
INIT_FILTER(featured, Geoculus);
|
||||||
|
INIT_FILTER(featured, KeySigil);
|
||||||
INIT_FILTER(featured, Lumenspar);
|
INIT_FILTER(featured, Lumenspar);
|
||||||
//INIT_FILTER(featured, KeySigil);
|
//INIT_FILTER(featured, KeySigil);
|
||||||
//INIT_FILTER(featured, ShrineOfDepth);
|
//INIT_FILTER(featured, ShrineOfDepth);
|
||||||
@ -1917,8 +1927,10 @@ namespace cheat::feature
|
|||||||
|
|
||||||
INIT_DETECT_ITEM(Anemoculus);
|
INIT_DETECT_ITEM(Anemoculus);
|
||||||
INIT_DETECT_ITEM(CrimsonAgate);
|
INIT_DETECT_ITEM(CrimsonAgate);
|
||||||
|
INIT_DETECT_ITEM(Dendroculus);
|
||||||
INIT_DETECT_ITEM(Electroculus);
|
INIT_DETECT_ITEM(Electroculus);
|
||||||
INIT_DETECT_ITEM(Geoculus);
|
INIT_DETECT_ITEM(Geoculus);
|
||||||
|
INIT_DETECT_ITEM(KeySigil);
|
||||||
INIT_DETECT_ITEM(Lumenspar);
|
INIT_DETECT_ITEM(Lumenspar);
|
||||||
|
|
||||||
#undef INIT_DETECT_ITEM
|
#undef INIT_DETECT_ITEM
|
||||||
|
@ -146,7 +146,7 @@ namespace cheat::feature
|
|||||||
|
|
||||||
std::unordered_set<PointData*> m_CustomPoints;
|
std::unordered_set<PointData*> m_CustomPoints;
|
||||||
std::unordered_set<PointData*> m_FixedPoints;
|
std::unordered_set<PointData*> m_FixedPoints;
|
||||||
std::unordered_set<PointData*> m_CompletedPoints;
|
std::list<PointData*> m_CompletedPoints;
|
||||||
|
|
||||||
std::mutex m_PointMutex;
|
std::mutex m_PointMutex;
|
||||||
// PointData* m_SelectedPoint;
|
// PointData* m_SelectedPoint;
|
||||||
@ -182,6 +182,7 @@ namespace cheat::feature
|
|||||||
void LoadCompletedPointData(LabelData* labelData, const nlohmann::json& data);
|
void LoadCompletedPointData(LabelData* labelData, const nlohmann::json& data);
|
||||||
void SaveCompletedPointData(nlohmann::json& jObject, PointData* point);
|
void SaveCompletedPointData(nlohmann::json& jObject, PointData* point);
|
||||||
bool ResetCompletedPointData(LabelData* label, PointData* point);
|
bool ResetCompletedPointData(LabelData* label, PointData* point);
|
||||||
|
void ReorderCompletedPointDataByTimestamp();
|
||||||
|
|
||||||
void LoadCustomPointData(LabelData* labelData, const nlohmann::json& data);
|
void LoadCustomPointData(LabelData* labelData, const nlohmann::json& data);
|
||||||
void SaveCustomPointData(nlohmann::json& jObject, PointData* point);
|
void SaveCustomPointData(nlohmann::json& jObject, PointData* point);
|
||||||
|
@ -203,7 +203,8 @@ namespace cheat::feature
|
|||||||
for (auto entity : entities) {
|
for (auto entity : entities) {
|
||||||
auto entityPos = entity->absolutePosition();
|
auto entityPos = entity->absolutePosition();
|
||||||
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
|
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
|
||||||
auto entityDetails = fmt::format(baseString,
|
auto entityDetails = fmt::format(
|
||||||
|
fmt::runtime(baseString),
|
||||||
fmt::ptr(entity),
|
fmt::ptr(entity),
|
||||||
entity->runtimeID(),
|
entity->runtimeID(),
|
||||||
entity->name().c_str(),
|
entity->name().c_str(),
|
||||||
@ -222,7 +223,8 @@ namespace cheat::feature
|
|||||||
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
|
std::string baseString = csvFriendly ? "{},{},{},{},{},{}" : "{} {} {} x={} y={} z={}";
|
||||||
if (csvFriendly && includeHeaders)
|
if (csvFriendly && includeHeaders)
|
||||||
baseString = headerString.append(baseString);
|
baseString = headerString.append(baseString);
|
||||||
auto entityDetails = fmt::format(baseString,
|
auto entityDetails = fmt::format(
|
||||||
|
fmt::runtime(baseString),
|
||||||
fmt::ptr(entity),
|
fmt::ptr(entity),
|
||||||
entity->runtimeID(),
|
entity->runtimeID(),
|
||||||
entity->name().c_str(),
|
entity->name().c_str(),
|
||||||
|
@ -13,11 +13,17 @@ namespace cheat::feature
|
|||||||
return inst.OnRecordUserData(nType);
|
return inst.OnRecordUserData(nType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int CrashReporter_Hook(__int64 a1, __int64 a2, const char* a3)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ProtectionBypass::ProtectionBypass() : Feature(),
|
ProtectionBypass::ProtectionBypass() : Feature(),
|
||||||
NFEX(f_Enabled, "Disable Protection", "m_DisableMhyProt", "General", true, false),
|
NFEX(f_Enabled, "Disable Protection", "m_DisableMhyProt", "General", true, false),
|
||||||
m_CorrectSignatures({})
|
m_CorrectSignatures({})
|
||||||
{
|
{
|
||||||
HookManager::install(app::Unity_RecordUserData, RecordUserData_Hook);
|
HookManager::install(app::Unity_RecordUserData, RecordUserData_Hook);
|
||||||
|
HookManager::install(app::CrashReporter, CrashReporter_Hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtectionBypass::Init()
|
void ProtectionBypass::Init()
|
||||||
|
@ -79,9 +79,9 @@ namespace cheat::feature
|
|||||||
static bool afterDash = false;
|
static bool afterDash = false;
|
||||||
|
|
||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
if (manager.avatar()->runtimeID() != entityId)
|
auto entity = manager.entity(entityId);
|
||||||
return;
|
if (entity->type() == app::EntityType__Enum_1::Vehicle || entity->isAvatar())
|
||||||
|
{
|
||||||
// LOG_DEBUG("Movement packet: %s", magic_enum::enum_name(syncInfo->fields.motionState).data());
|
// LOG_DEBUG("Movement packet: %s", magic_enum::enum_name(syncInfo->fields.motionState).data());
|
||||||
if (f_Enabled && f_PacketReplacement)
|
if (f_Enabled && f_PacketReplacement)
|
||||||
{
|
{
|
||||||
@ -106,11 +106,16 @@ namespace cheat::feature
|
|||||||
if (afterDash)
|
if (afterDash)
|
||||||
syncInfo->fields.motionState = app::MotionState__Enum::MotionRun;
|
syncInfo->fields.motionState = app::MotionState__Enum::MotionRun;
|
||||||
break;
|
break;
|
||||||
|
case app::MotionState__Enum::MotionSkiffDash:
|
||||||
|
case app::MotionState__Enum::MotionSkiffPoweredDash:
|
||||||
|
syncInfo->fields.motionState = app::MotionState__Enum::MotionSkiffNormal;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (state != app::MotionState__Enum::MotionJump && state != app::MotionState__Enum::MotionFallOnGround)
|
if (state != app::MotionState__Enum::MotionJump && state != app::MotionState__Enum::MotionFallOnGround)
|
||||||
afterDash = state == app::MotionState__Enum::MotionDash;
|
afterDash = state == app::MotionState__Enum::MotionDash;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void InfiniteStamina::DataItem_HandleNormalProp_Hook(app::DataItem* __this, uint32_t type, int64_t value, app::DataPropOp__Enum state, MethodInfo* method)
|
void InfiniteStamina::DataItem_HandleNormalProp_Hook(app::DataItem* __this, uint32_t type, int64_t value, app::DataPropOp__Enum state, MethodInfo* method)
|
||||||
{
|
{
|
||||||
|
@ -10,6 +10,9 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
static void LCBaseCombat_DoHitEntity_Hook(app::LCBaseCombat* __this, uint32_t targetID, app::AttackResult* attackResult,
|
static void LCBaseCombat_DoHitEntity_Hook(app::LCBaseCombat* __this, uint32_t targetID, app::AttackResult* attackResult,
|
||||||
bool ignoreCheckCanBeHitInMP, MethodInfo* method);
|
bool ignoreCheckCanBeHitInMP, MethodInfo* method);
|
||||||
|
static void VCAnimatorEvent_HandleProcessItem_Hook(app::MoleMole_VCAnimatorEvent* __this,
|
||||||
|
app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem* processItem,
|
||||||
|
app::AnimatorStateInfo processStateInfo, app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_TriggerMode__Enum mode, MethodInfo* method);
|
||||||
|
|
||||||
RapidFire::RapidFire() : Feature(),
|
RapidFire::RapidFire() : Feature(),
|
||||||
NF(f_Enabled, "Attack Multiplier", "RapidFire", false),
|
NF(f_Enabled, "Attack Multiplier", "RapidFire", false),
|
||||||
@ -20,9 +23,11 @@ namespace cheat::feature
|
|||||||
NF(f_minMultiplier, "Min Multiplier", "RapidFire", 1),
|
NF(f_minMultiplier, "Min Multiplier", "RapidFire", 1),
|
||||||
NF(f_maxMultiplier, "Max Multiplier", "RapidFire", 3),
|
NF(f_maxMultiplier, "Max Multiplier", "RapidFire", 3),
|
||||||
NF(f_MultiTarget, "Multi-target", "RapidFire", false),
|
NF(f_MultiTarget, "Multi-target", "RapidFire", false),
|
||||||
NF(f_MultiTargetRadius, "Multi-target Radius", "RapidFire", 20.0f)
|
NF(f_MultiTargetRadius, "Multi-target Radius", "RapidFire", 20.0f),
|
||||||
|
NF(f_MultiAnimation, "Multi-animation", "RapidFire", false)
|
||||||
{
|
{
|
||||||
HookManager::install(app::MoleMole_LCBaseCombat_DoHitEntity, LCBaseCombat_DoHitEntity_Hook);
|
HookManager::install(app::MoleMole_LCBaseCombat_DoHitEntity, LCBaseCombat_DoHitEntity_Hook);
|
||||||
|
HookManager::install(app::MoleMole_VCAnimatorEvent_HandleProcessItem, VCAnimatorEvent_HandleProcessItem_Hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
const FeatureGUIInfo& RapidFire::GetGUIInfo() const
|
const FeatureGUIInfo& RapidFire::GetGUIInfo() const
|
||||||
@ -40,8 +45,7 @@ namespace cheat::feature
|
|||||||
ConfigWidget("Multi-hit Mode", f_MultiHit, "Enables multi-hit.\n" \
|
ConfigWidget("Multi-hit Mode", f_MultiHit, "Enables multi-hit.\n" \
|
||||||
"Multiplies your attack count.\n" \
|
"Multiplies your attack count.\n" \
|
||||||
"This is not well tested, and can be detected by anticheat.\n" \
|
"This is not well tested, and can be detected by anticheat.\n" \
|
||||||
"Not recommended to be used with main accounts or used with high values.\n" \
|
"Not recommended to be used with main accounts or used with high values.\n");
|
||||||
"Known issues with certain multi-hit attacks, e.g. Xiao E, Ayaka CA, etc.");
|
|
||||||
|
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
|
|
||||||
@ -77,11 +81,14 @@ namespace cheat::feature
|
|||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
ConfigWidget("Radius (m)", f_MultiTargetRadius, 0.1f, 5.0f, 50.0f, "Radius to check for valid targets.");
|
ConfigWidget("Radius (m)", f_MultiTargetRadius, 0.1f, 5.0f, 50.0f, "Radius to check for valid targets.");
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
|
|
||||||
|
ConfigWidget("Multi-animation", f_MultiAnimation, "Enables multi-animation attacks.\n" \
|
||||||
|
"Do keep in mind that the character's audio will also be spammed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RapidFire::NeedStatusDraw() const
|
bool RapidFire::NeedStatusDraw() const
|
||||||
{
|
{
|
||||||
return f_Enabled && (f_MultiHit || f_MultiTarget);
|
return f_Enabled && (f_MultiHit || f_MultiTarget || f_MultiAnimation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RapidFire::DrawStatus()
|
void RapidFire::DrawStatus()
|
||||||
@ -97,6 +104,9 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
if (f_MultiTarget)
|
if (f_MultiTarget)
|
||||||
ImGui::Text("Multi-Target [%.01fm]", f_MultiTargetRadius.value());
|
ImGui::Text("Multi-Target [%.01fm]", f_MultiTargetRadius.value());
|
||||||
|
|
||||||
|
if (f_MultiAnimation)
|
||||||
|
ImGui::Text("Multi-Animation");
|
||||||
}
|
}
|
||||||
|
|
||||||
RapidFire& RapidFire::GetInstance()
|
RapidFire& RapidFire::GetInstance()
|
||||||
@ -183,6 +193,20 @@ namespace cheat::feature
|
|||||||
return attackerID == avatarID || IsAvatarOwner(attacker);
|
return attackerID == avatarID || IsAvatarOwner(attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsConfigByAvatar(game::Entity& attacker)
|
||||||
|
{
|
||||||
|
if (attacker.raw() == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto& manager = game::EntityManager::instance();
|
||||||
|
auto avatarID = manager.avatar()->raw()->fields._configID_k__BackingField;
|
||||||
|
auto attackerID = attacker.raw()->fields._configID_k__BackingField;
|
||||||
|
// Taiga#5555: IDs can be found in ConfigAbility_Avatar_*.json or GadgetExcelConfigData.json
|
||||||
|
bool bulletID = attackerID >= 40000160 && attackerID <= 41069999;
|
||||||
|
|
||||||
|
return avatarID == attackerID || bulletID || attacker.type() == app::EntityType__Enum_1::Bullet;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsValidByFilter(game::Entity* entity)
|
bool IsValidByFilter(game::Entity* entity)
|
||||||
{
|
{
|
||||||
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
|
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
|
||||||
@ -203,7 +227,7 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
auto attacker = game::Entity(__this->fields._._._entity);
|
auto attacker = game::Entity(__this->fields._._._entity);
|
||||||
RapidFire& rapidFire = RapidFire::GetInstance();
|
RapidFire& rapidFire = RapidFire::GetInstance();
|
||||||
if (!IsAttackByAvatar(attacker) || !rapidFire.f_Enabled)
|
if (!IsConfigByAvatar(attacker) || !IsAttackByAvatar(attacker) || !rapidFire.f_Enabled)
|
||||||
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
|
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
|
||||||
|
|
||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
@ -242,9 +266,24 @@ namespace cheat::feature
|
|||||||
if (rapidFire.f_MultiHit) {
|
if (rapidFire.f_MultiHit) {
|
||||||
int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult);
|
int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult);
|
||||||
for (int i = 0; i < attackCount; i++)
|
for (int i = 0; i < attackCount; i++)
|
||||||
CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, entity->runtimeID(), attackResult, ignoreCheckCanBeHitInMP, method);
|
app::MoleMole_LCBaseCombat_FireBeingHitEvent(__this, entity->runtimeID(), attackResult, method);
|
||||||
} else CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, entity->runtimeID(), attackResult, ignoreCheckCanBeHitInMP, method);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VCAnimatorEvent_HandleProcessItem_Hook(app::MoleMole_VCAnimatorEvent* __this,
|
||||||
|
app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem* processItem,
|
||||||
|
app::AnimatorStateInfo processStateInfo, app::MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_TriggerMode__Enum mode, MethodInfo* method)
|
||||||
|
{
|
||||||
|
auto attacker = game::Entity(__this->fields._._._entity);
|
||||||
|
RapidFire& rapidFire = RapidFire::GetInstance();
|
||||||
|
|
||||||
|
if (rapidFire.f_MultiAnimation && IsAttackByAvatar(attacker))
|
||||||
|
processItem->fields.lastTime = 0;
|
||||||
|
|
||||||
|
CALL_ORIGIN(VCAnimatorEvent_HandleProcessItem_Hook, __this, processItem, processStateInfo, mode, method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ namespace cheat::feature
|
|||||||
config::Field<int> f_maxMultiplier;
|
config::Field<int> f_maxMultiplier;
|
||||||
config::Field<config::Toggle<Hotkey>> f_MultiTarget;
|
config::Field<config::Toggle<Hotkey>> f_MultiTarget;
|
||||||
config::Field<float> f_MultiTargetRadius;
|
config::Field<float> f_MultiTargetRadius;
|
||||||
|
config::Field<config::Toggle<Hotkey>> f_MultiAnimation;
|
||||||
|
|
||||||
static RapidFire& GetInstance();
|
static RapidFire& GetInstance();
|
||||||
|
|
||||||
|
@ -20,12 +20,16 @@ namespace cheat::feature
|
|||||||
NF(f_Enabled, "Custom Teleport", "CustomTeleports", false),
|
NF(f_Enabled, "Custom Teleport", "CustomTeleports", false),
|
||||||
NF(f_Next, "Teleport Next", "CustomTeleports", Hotkey(VK_OEM_6)),
|
NF(f_Next, "Teleport Next", "CustomTeleports", Hotkey(VK_OEM_6)),
|
||||||
NF(f_Previous, "Teleport Previous", "CustomTeleports", Hotkey(VK_OEM_4)),
|
NF(f_Previous, "Teleport Previous", "CustomTeleports", Hotkey(VK_OEM_4)),
|
||||||
NF(f_Interpolate, "Custom Teleport", "CustomTeleports", false),
|
NF(f_Auto, "Auto Teleport", "CustomTeleports", false),
|
||||||
|
NF(f_DelayTime, "Delay time (in s)", "CustomTeleports", 20),
|
||||||
|
NF(f_Interpolate, "Interpolate Teleport", "CustomTeleports", false),
|
||||||
NF(f_Speed, "Interpolation Speed", "CustomTeleports", 10.0f),
|
NF(f_Speed, "Interpolation Speed", "CustomTeleports", 10.0f),
|
||||||
dir(util::GetCurrentPath() / "teleports")
|
dir(util::GetCurrentPath() /= "teleports"),
|
||||||
|
nextTime(0)
|
||||||
{
|
{
|
||||||
f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext);
|
f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext);
|
||||||
f_Previous.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnPrevious);
|
f_Previous.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnPrevious);
|
||||||
|
events::GameUpdateEvent += MY_METHOD_HANDLER(CustomTeleports::OnGameUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
const FeatureGUIInfo& CustomTeleports::GetGUIInfo() const
|
const FeatureGUIInfo& CustomTeleports::GetGUIInfo() const
|
||||||
@ -79,7 +83,7 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Teleport CustomTeleports::SerializeFromJson(std::string json, bool fromfile)
|
std::optional<Teleport> CustomTeleports::SerializeFromJson(std::string json, bool fromfile)
|
||||||
{
|
{
|
||||||
nlohmann::json j;
|
nlohmann::json j;
|
||||||
try { j = nlohmann::json::parse(json); }
|
try { j = nlohmann::json::parse(json); }
|
||||||
@ -87,8 +91,11 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
LOG_ERROR("Invalid JSON Format");
|
LOG_ERROR("Invalid JSON Format");
|
||||||
LOG_ERROR("Failed to parse JSON: %s", e.what());
|
LOG_ERROR("Failed to parse JSON: %s", e.what());
|
||||||
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string teleportName;
|
std::string teleportName;
|
||||||
|
|
||||||
teleportName = j["name"];
|
teleportName = j["name"];
|
||||||
if (j["name"].is_null() && fromfile)
|
if (j["name"].is_null() && fromfile)
|
||||||
{
|
{
|
||||||
@ -99,6 +106,7 @@ namespace cheat::feature
|
|||||||
if (j["description"].is_null()) description = "";
|
if (j["description"].is_null()) description = "";
|
||||||
else description = j["description"];
|
else description = j["description"];
|
||||||
return Teleport_(teleportName, { j["position"][0], j["position"][1], j["position"][2] }, description);
|
return Teleport_(teleportName, { j["position"][0], j["position"][1], j["position"][2] }, description);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CustomTeleports::ReloadTeleports()
|
void CustomTeleports::ReloadTeleports()
|
||||||
@ -113,7 +121,8 @@ namespace cheat::feature
|
|||||||
std::ifstream ifs(file.path());
|
std::ifstream ifs(file.path());
|
||||||
std::string json;
|
std::string json;
|
||||||
std::getline(ifs, json);
|
std::getline(ifs, json);
|
||||||
SerializeTeleport(SerializeFromJson(json, true));
|
auto t = SerializeFromJson(json, true);
|
||||||
|
if(t.has_value()) SerializeTeleport(t.value());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,10 +197,35 @@ namespace cheat::feature
|
|||||||
|
|
||||||
void CustomTeleports::OnPrevious()
|
void CustomTeleports::OnPrevious()
|
||||||
{
|
{
|
||||||
|
if (f_Auto) return;
|
||||||
OnTeleportKeyPressed(false);
|
OnTeleportKeyPressed(false);
|
||||||
}
|
}
|
||||||
void CustomTeleports::OnNext()
|
void CustomTeleports::OnNext()
|
||||||
{
|
{
|
||||||
|
if (f_Auto) return;
|
||||||
|
OnTeleportKeyPressed(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CustomTeleports::OnGameUpdate()
|
||||||
|
{
|
||||||
|
if (!f_Enabled || !f_Auto)
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto currentTime = util::GetCurrentTimeMillisec();
|
||||||
|
if (currentTime < nextTime)
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto loadingManager = GET_SINGLETON(MoleMole_LoadingManager);
|
||||||
|
if (loadingManager == nullptr || !app::MoleMole_LoadingManager_IsLoaded(loadingManager, nullptr))
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto camera = app::Camera_get_main(nullptr);
|
||||||
|
if (camera == nullptr) return;
|
||||||
|
|
||||||
|
if (!app::Behaviour_get_isActiveAndEnabled(reinterpret_cast<app::Behaviour*>(camera), nullptr))
|
||||||
|
return;
|
||||||
|
|
||||||
|
nextTime = currentTime + (int64_t)f_DelayTime * 1000;
|
||||||
OnTeleportKeyPressed(true);
|
OnTeleportKeyPressed(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,26 +294,35 @@ namespace cheat::feature
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Load from JSON"))
|
if (ImGui::Button("Load from JSON"))
|
||||||
{
|
{
|
||||||
|
if (!JSONBuffer_.empty()) {
|
||||||
|
auto t = SerializeFromJson(JSONBuffer_, false);
|
||||||
|
if (t.has_value()) {
|
||||||
selectedIndex = -1;
|
selectedIndex = -1;
|
||||||
UpdateIndexName();
|
UpdateIndexName();
|
||||||
SerializeTeleport(SerializeFromJson(JSONBuffer_, false));
|
SerializeTeleport(t.value());
|
||||||
JSONBuffer_ = "";
|
}
|
||||||
|
JSONBuffer_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
ImGui::InputTextMultiline("JSON input", &JSONBuffer_, ImVec2(0, 50), ImGuiInputTextFlags_AllowTabInput);
|
ImGui::InputTextMultiline("JSON input", &JSONBuffer_, ImVec2(0, 50), ImGuiInputTextFlags_AllowTabInput);
|
||||||
|
|
||||||
ConfigWidget("Teleport Next", f_Next, true, "Press to teleport next of selected");
|
ConfigWidget("Teleport Next", f_Next, true, "Press to teleport next of selected.");
|
||||||
ConfigWidget("Teleport Previous", f_Previous, true, "Press to teleport previous of selected");
|
ConfigWidget("Teleport Previous", f_Previous, true, "Press to teleport previous of selected.");
|
||||||
ConfigWidget("Enable", f_Enabled,
|
ConfigWidget("Enable", f_Enabled,
|
||||||
"Enable teleport-through-list functionality\n"
|
"Enable teleport-through-list functionality.\n"
|
||||||
"Usage:\n"
|
"Usage:\n"
|
||||||
"1. Put Checkmark to the teleports you want to teleport using hotkey\n"
|
"1. Put Checkmark to the teleports you want to teleport using hotkey\n"
|
||||||
"2. Single click the teleport (with checkmark) to select where you want to start\n"
|
"2. Single click the teleport (with checkmark) to select where you want to start\n"
|
||||||
"3. You can now press Next or Previous Hotkey to Teleport through the Checklist\n"
|
"3. You can now press Next or Previous Hotkey to Teleport through the Checklist\n"
|
||||||
"Initially it will teleport the player to the selection made\n"
|
"Initially it will teleport the player to the selection made\n"
|
||||||
"Note: Double click or click the arrow to open teleport details");
|
"Note: Double click or click the arrow to open teleport details");
|
||||||
ConfigWidget("Enable Interpolation", f_Interpolate, "Enable interpolation between teleports when using keybinds");
|
ConfigWidget("Enable Interpolation", f_Interpolate, "Enable interpolation between teleports when using keybinds."); ImGui::SameLine(); ImGui::SetNextItemWidth(300.0f);
|
||||||
ConfigWidget("Interpolation Speed", f_Speed, 0.1f, 0.1f, 99.0f,
|
ConfigWidget("Interpolation Speed", f_Speed, 0.1f, 0.1f, 99.0f,
|
||||||
"Interpolation speed.\n recommended setting below or equal to 0.1.");
|
"Interpolation speed.\n recommended setting below or equal to 0.1.");
|
||||||
|
ConfigWidget("Auto Teleport", f_Auto, "Enable automatic forward teleporation between teleports"); ImGui::SameLine(); ImGui::SetNextItemWidth(300.0f);
|
||||||
|
ConfigWidget("Delay Time (s)", f_DelayTime, 1, 0, 60, "Delay (in s) between teleport.\n"
|
||||||
|
"Note: This is not fully tested detection-wise.\nNot recommended with low values.");
|
||||||
|
|
||||||
if (ImGui::Button("Delete Checked"))
|
if (ImGui::Button("Delete Checked"))
|
||||||
{
|
{
|
||||||
@ -396,10 +439,13 @@ namespace cheat::feature
|
|||||||
|
|
||||||
if (ImGui::Button(("Select##Button" + stringIndex).c_str()))
|
if (ImGui::Button(("Select##Button" + stringIndex).c_str()))
|
||||||
{
|
{
|
||||||
|
auto isChecked = checkedIndices.find(index) != checkedIndices.end();
|
||||||
|
if (isChecked) {
|
||||||
selectedIndex = index;
|
selectedIndex = index;
|
||||||
selectedByClick = true;
|
selectedByClick = true;
|
||||||
UpdateIndexName();
|
UpdateIndexName();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, selected ? IM_COL32(40, 90, 175, 255) : ImGui::ColorConvertFloat4ToU32(ImGui::GetStyle().Colors[ImGuiCol_Text]));
|
ImGui::PushStyleColor(ImGuiCol_Text, selected ? IM_COL32(40, 90, 175, 255) : ImGui::ColorConvertFloat4ToU32(ImGui::GetStyle().Colors[ImGuiCol_Text]));
|
||||||
@ -432,7 +478,7 @@ namespace cheat::feature
|
|||||||
|
|
||||||
void CustomTeleports::DrawStatus()
|
void CustomTeleports::DrawStatus()
|
||||||
{
|
{
|
||||||
ImGui::Text("Custom Teleport\n[%s]", selectedIndexName);
|
ImGui::Text("Custom Teleport\n[%s|%s]", f_Auto ? "Auto" : "Manual", selectedIndexName);
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomTeleports &CustomTeleports::GetInstance()
|
CustomTeleports &CustomTeleports::GetInstance()
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include <cheat-base/cheat/Feature.h>
|
#include <cheat-base/cheat/Feature.h>
|
||||||
#include <cheat-base/config/Config.h>
|
#include <cheat-base/config/Config.h>
|
||||||
|
#include <cheat-base/thread-safe.h>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
namespace cheat::feature
|
namespace cheat::feature
|
||||||
@ -27,9 +28,11 @@ namespace cheat::feature
|
|||||||
public:
|
public:
|
||||||
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
||||||
config::Field<config::Toggle<Hotkey>> f_Interpolate;
|
config::Field<config::Toggle<Hotkey>> f_Interpolate;
|
||||||
|
config::Field<config::Toggle<Hotkey>> f_Auto;
|
||||||
config::Field<float> f_Speed;
|
config::Field<float> f_Speed;
|
||||||
config::Field<Hotkey> f_Next;
|
config::Field<Hotkey> f_Next;
|
||||||
config::Field<Hotkey> f_Previous;
|
config::Field<Hotkey> f_Previous;
|
||||||
|
config::Field<int> f_DelayTime;
|
||||||
static CustomTeleports& GetInstance();
|
static CustomTeleports& GetInstance();
|
||||||
const FeatureGUIInfo& GetGUIInfo() const override;
|
const FeatureGUIInfo& GetGUIInfo() const override;
|
||||||
|
|
||||||
@ -38,12 +41,13 @@ namespace cheat::feature
|
|||||||
Teleport Teleport_(std::string name, app::Vector3 position, std::string description);
|
Teleport Teleport_(std::string name, app::Vector3 position, std::string description);
|
||||||
void SerializeTeleport(Teleport t);
|
void SerializeTeleport(Teleport t);
|
||||||
void ReloadTeleports();
|
void ReloadTeleports();
|
||||||
Teleport SerializeFromJson(std::string json, bool fromfile);
|
std::optional<Teleport> SerializeFromJson(std::string json, bool fromfile);
|
||||||
|
|
||||||
|
|
||||||
void DrawMain() override;
|
void DrawMain() override;
|
||||||
virtual bool NeedStatusDraw() const override;
|
virtual bool NeedStatusDraw() const override;
|
||||||
void DrawStatus() override;
|
void DrawStatus() override;
|
||||||
|
void OnGameUpdate();
|
||||||
|
|
||||||
std::vector<Teleport> Teleports;
|
std::vector<Teleport> Teleports;
|
||||||
std::filesystem::path dir;
|
std::filesystem::path dir;
|
||||||
@ -55,6 +59,7 @@ namespace cheat::feature
|
|||||||
int selectedIndex = -1;
|
int selectedIndex = -1;
|
||||||
std::string selectedName;
|
std::string selectedName;
|
||||||
std::string selectedIndexName;
|
std::string selectedIndexName;
|
||||||
|
SafeValue<int64_t> nextTime;
|
||||||
CustomTeleports();
|
CustomTeleports();
|
||||||
void TeleportTo(app::Vector3 position, bool interpolate);
|
void TeleportTo(app::Vector3 position, bool interpolate);
|
||||||
void OnTeleportKeyPressed(bool next);
|
void OnTeleportKeyPressed(bool next);
|
||||||
|
@ -11,6 +11,8 @@ namespace cheat::feature
|
|||||||
app::GameObject* mainCam = nullptr;
|
app::GameObject* mainCam = nullptr;
|
||||||
app::Object_1* freeCamObj = nullptr;
|
app::Object_1* freeCamObj = nullptr;
|
||||||
app::Object_1* mainCamObj = nullptr;
|
app::Object_1* mainCamObj = nullptr;
|
||||||
|
app::GameObject* damageOverlay = nullptr;
|
||||||
|
app::GameObject* hpOverlay = nullptr;
|
||||||
app::Transform* freeCam_Transform;
|
app::Transform* freeCam_Transform;
|
||||||
app::Component_1* freeCam_Camera;
|
app::Component_1* freeCam_Camera;
|
||||||
app::Component_1* mainCam_Camera;
|
app::Component_1* mainCam_Camera;
|
||||||
@ -22,6 +24,8 @@ namespace cheat::feature
|
|||||||
FreeCamera::FreeCamera() : Feature(),
|
FreeCamera::FreeCamera() : Feature(),
|
||||||
NF(f_Enabled, "Free Camera", "Visuals::FreeCamera", false),
|
NF(f_Enabled, "Free Camera", "Visuals::FreeCamera", false),
|
||||||
NF(f_FreezeAnimation, "Freeze Character Animation", "Visuals::FreeCamera", false),
|
NF(f_FreezeAnimation, "Freeze Character Animation", "Visuals::FreeCamera", false),
|
||||||
|
NF(f_DamageOverlay, "Damage Overlay", "Visuals::FreeCamera", false),
|
||||||
|
NF(f_HpOverlay, "Enemy HP Overlay", "Visuals::FreeCamera", false),
|
||||||
NF(f_Speed, "Speed", "Visuals::FreeCamera", 1.0f),
|
NF(f_Speed, "Speed", "Visuals::FreeCamera", 1.0f),
|
||||||
NF(f_LookSens, "Look Sensitivity", "Visuals::FreeCamera", 1.0f),
|
NF(f_LookSens, "Look Sensitivity", "Visuals::FreeCamera", 1.0f),
|
||||||
NF(f_RollSpeed, "Roll Speed", "Visuals::FreeCamera", 1.0f),
|
NF(f_RollSpeed, "Roll Speed", "Visuals::FreeCamera", 1.0f),
|
||||||
@ -52,7 +56,13 @@ namespace cheat::feature
|
|||||||
void FreeCamera::DrawMain()
|
void FreeCamera::DrawMain()
|
||||||
{
|
{
|
||||||
ConfigWidget("Enable", f_Enabled);
|
ConfigWidget("Enable", f_Enabled);
|
||||||
ConfigWidget("Freeze Character Animation", f_FreezeAnimation, "Freezes the active character's animation.\nAfter disabling, jump to un-freeze your character.");
|
ConfigWidget("Freeze Character Animation", f_FreezeAnimation, "Freezes the active character's animation.");
|
||||||
|
if (f_Enabled)
|
||||||
|
{
|
||||||
|
ConfigWidget("Toggle Damage Overlay", f_DamageOverlay, "Remove damage output overlay");
|
||||||
|
ConfigWidget("Toggle Enemy HP Overlay", f_HpOverlay, "Remove enemy HP overlay");
|
||||||
|
}
|
||||||
|
|
||||||
if (ImGui::BeginTable("FreeCameraDrawTable", 1, ImGuiTableFlags_NoBordersInBody))
|
if (ImGui::BeginTable("FreeCameraDrawTable", 1, ImGuiTableFlags_NoBordersInBody))
|
||||||
{
|
{
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
@ -245,9 +255,23 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
if (freeCamObj)
|
if (freeCamObj)
|
||||||
EnableFreeCam();
|
EnableFreeCam();
|
||||||
|
|
||||||
|
if (damageOverlay == nullptr)
|
||||||
|
damageOverlay = app::GameObject_Find(string_to_il2cppi("/Canvas/Pages/InLevelMainPage/GrpMainPage/ParticleDamageTextContainer"), nullptr);
|
||||||
|
else
|
||||||
|
app::GameObject_SetActive(damageOverlay, !f_DamageOverlay, nullptr);
|
||||||
|
|
||||||
|
if (hpOverlay == nullptr)
|
||||||
|
hpOverlay = app::GameObject_Find(string_to_il2cppi("AvatarBoardCanvasV2(Clone)"), nullptr);
|
||||||
|
else
|
||||||
|
app::GameObject_SetActive(hpOverlay, !f_DamageOverlay, nullptr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
DisableFreeCam();
|
DisableFreeCam();
|
||||||
|
damageOverlay = nullptr;
|
||||||
|
hpOverlay = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Taiga#5555: There's probably be a better way of implementing this. But for now, this is just what I came up with.
|
// Taiga#5555: There's probably be a better way of implementing this. But for now, this is just what I came up with.
|
||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
@ -256,17 +280,24 @@ namespace cheat::feature
|
|||||||
if (animator == nullptr && rigidBody == nullptr)
|
if (animator == nullptr && rigidBody == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
static bool changed = false;
|
||||||
|
|
||||||
if (f_FreezeAnimation)
|
if (f_FreezeAnimation)
|
||||||
{
|
{
|
||||||
//auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr);
|
//auto constraints = app::Rigidbody_get_constraints(rigidBody, nullptr);
|
||||||
//LOG_DEBUG("%s", magic_enum::enum_name(constraints).data());
|
//LOG_DEBUG("%s", magic_enum::enum_name(constraints).data());
|
||||||
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezePosition, nullptr);
|
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezePosition, nullptr);
|
||||||
app::Animator_set_speed(animator, 0.f, nullptr);
|
app::Animator_set_speed(animator, 0.f, nullptr);
|
||||||
|
changed = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
|
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
|
||||||
|
if (!changed)
|
||||||
|
{
|
||||||
app::Animator_set_speed(animator, 1.f, nullptr);
|
app::Animator_set_speed(animator, 1.f, nullptr);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,6 +9,8 @@ namespace cheat::feature
|
|||||||
public:
|
public:
|
||||||
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
||||||
config::Field<config::Toggle<Hotkey>> f_FreezeAnimation;
|
config::Field<config::Toggle<Hotkey>> f_FreezeAnimation;
|
||||||
|
config::Field<bool> f_DamageOverlay;
|
||||||
|
config::Field<bool> f_HpOverlay;
|
||||||
config::Field<float> f_Speed;
|
config::Field<float> f_Speed;
|
||||||
config::Field<float> f_LookSens;
|
config::Field<float> f_LookSens;
|
||||||
config::Field<float> f_RollSpeed;
|
config::Field<float> f_RollSpeed;
|
||||||
|
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,6 +14,8 @@ namespace cheat::feature
|
|||||||
app::Component_1* Profirency = nullptr;
|
app::Component_1* Profirency = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::map<std::string, int> qualities{ {"Suspicious", 1}, {"Normal", 2}, {"Delicious", 3} };
|
||||||
|
|
||||||
static void PlayerModule_RequestPlayerCook(app::MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method);
|
static void PlayerModule_RequestPlayerCook(app::MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method);
|
||||||
static void PlayerModule_OnPlayerCookRsp(app::MoleMole_PlayerModule* __this, app::PlayerCookRsp* rsp, MethodInfo* method);
|
static void PlayerModule_OnPlayerCookRsp(app::MoleMole_PlayerModule* __this, app::PlayerCookRsp* rsp, MethodInfo* method);
|
||||||
static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method);
|
static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method);
|
||||||
@ -22,7 +24,7 @@ namespace cheat::feature
|
|||||||
NF(f_Enabled, "Standart Cooking", "AutoCook", false),
|
NF(f_Enabled, "Standart Cooking", "AutoCook", false),
|
||||||
NF(f_FastProficiency, "Fast Proficiency", "AutoCook", false),
|
NF(f_FastProficiency, "Fast Proficiency", "AutoCook", false),
|
||||||
NF(f_CountField, "Count Item", "AutoCook", 1),
|
NF(f_CountField, "Count Item", "AutoCook", 1),
|
||||||
NF(f_QualityField, "Quality", "AutoCook", 1)
|
NF(f_QualityField, "Quality", "AutoCook", "Normal")
|
||||||
{
|
{
|
||||||
HookManager::install(app::MoleMole_PlayerModule_RequestPlayerCook, PlayerModule_RequestPlayerCook);
|
HookManager::install(app::MoleMole_PlayerModule_RequestPlayerCook, PlayerModule_RequestPlayerCook);
|
||||||
HookManager::install(app::MoleMole_PlayerModule_OnPlayerCookRsp, PlayerModule_OnPlayerCookRsp);
|
HookManager::install(app::MoleMole_PlayerModule_OnPlayerCookRsp, PlayerModule_OnPlayerCookRsp);
|
||||||
@ -43,7 +45,19 @@ namespace cheat::feature
|
|||||||
ConfigWidget("Count Item", f_CountField, 1, 1, 100,
|
ConfigWidget("Count Item", f_CountField, 1, 1, 100,
|
||||||
"How much to cook at a time.\n" \
|
"How much to cook at a time.\n" \
|
||||||
"(For standard mode only.)");
|
"(For standard mode only.)");
|
||||||
ConfigWidget("Quality Cooking", f_QualityField, 1, 1, 3, "Quality of the cook.");
|
if (ImGui::BeginCombo("Cooking Quality", f_QualityField.value().c_str()))
|
||||||
|
{
|
||||||
|
for (auto& [qualityName, quality] : qualities)
|
||||||
|
{
|
||||||
|
bool is_selected = (f_QualityField.value().c_str() == qualityName);
|
||||||
|
if (ImGui::Selectable(qualityName.c_str(), is_selected))
|
||||||
|
f_QualityField.value() = qualityName;
|
||||||
|
|
||||||
|
if (is_selected)
|
||||||
|
ImGui::SetItemDefaultFocus();
|
||||||
|
}
|
||||||
|
ImGui::EndCombo();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AutoCook::NeedStatusDraw() const
|
bool AutoCook::NeedStatusDraw() const
|
||||||
@ -53,7 +67,10 @@ namespace cheat::feature
|
|||||||
|
|
||||||
void AutoCook::DrawStatus()
|
void AutoCook::DrawStatus()
|
||||||
{
|
{
|
||||||
ImGui::Text("Auto Cooking [%s]", f_FastProficiency ? "Proficiency" : "Standart");
|
if (f_FastProficiency)
|
||||||
|
ImGui::Text("Auto Cooking [Proficiency]");
|
||||||
|
else
|
||||||
|
ImGui::Text("Auto Cooking [Standart, %s]", f_QualityField.value().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoCook& AutoCook::GetInstance()
|
AutoCook& AutoCook::GetInstance()
|
||||||
@ -82,7 +99,12 @@ namespace cheat::feature
|
|||||||
if (autoCook.f_Enabled || autoCook.f_FastProficiency)
|
if (autoCook.f_Enabled || autoCook.f_FastProficiency)
|
||||||
{
|
{
|
||||||
autoCook.CookFoodMaxNum = app::MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum(recipeId, nullptr);
|
autoCook.CookFoodMaxNum = app::MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum(recipeId, nullptr);
|
||||||
qteQuality = autoCook.f_QualityField;
|
|
||||||
|
// To prevent possible crashes
|
||||||
|
if (!qualities.count(autoCook.f_QualityField.value()))
|
||||||
|
autoCook.f_QualityField.value() = "Normal";
|
||||||
|
|
||||||
|
qteQuality = qualities.find(autoCook.f_QualityField.value())->second;
|
||||||
|
|
||||||
if (!autoCook.f_FastProficiency && autoCook.f_Enabled) {
|
if (!autoCook.f_FastProficiency && autoCook.f_Enabled) {
|
||||||
count = autoCook.f_CountField;
|
count = autoCook.f_CountField;
|
||||||
@ -127,7 +149,11 @@ namespace cheat::feature
|
|||||||
AutoCook& autoCook = AutoCook::GetInstance();
|
AutoCook& autoCook = AutoCook::GetInstance();
|
||||||
if (autoCook.f_Enabled || autoCook.f_FastProficiency)
|
if (autoCook.f_Enabled || autoCook.f_FastProficiency)
|
||||||
{
|
{
|
||||||
rsp->fields.qteQuality_ = autoCook.f_QualityField;
|
// To prevent possible crashes
|
||||||
|
if (!qualities.count(autoCook.f_QualityField.value()))
|
||||||
|
autoCook.f_QualityField.value() = "Normal";
|
||||||
|
|
||||||
|
rsp->fields.qteQuality_ = qualities.find(autoCook.f_QualityField.value())->second;
|
||||||
rsp->fields.cookCount_ = autoCook.f_CountField;
|
rsp->fields.cookCount_ = autoCook.f_CountField;
|
||||||
if (autoCook.f_FastProficiency)
|
if (autoCook.f_FastProficiency)
|
||||||
rsp->fields.cookCount_ = 1;
|
rsp->fields.cookCount_ = 1;
|
||||||
@ -144,7 +170,7 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
__this->fields._pageMono->fields._qteTime = 0;
|
__this->fields._pageMono->fields._qteTime = 0;
|
||||||
__this->fields._pageMono->fields._autoQteTime = 0;
|
__this->fields._pageMono->fields._autoQteTime = 0;
|
||||||
app::CookingQtePageContext_CloseItemGotPanel(__this, nullptr); // Auto Close Panel
|
app::MoleMole_CookingQtePageContext_CloseItemGotPanel(__this, nullptr); // Auto Close Panel
|
||||||
}
|
}
|
||||||
return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method);
|
return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method);
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ namespace cheat::feature
|
|||||||
config::Field<config::Toggle<Hotkey>> f_FastProficiency;
|
config::Field<config::Toggle<Hotkey>> f_FastProficiency;
|
||||||
|
|
||||||
config::Field<int> f_CountField;
|
config::Field<int> f_CountField;
|
||||||
config::Field<int> f_QualityField;
|
config::Field<std::string> f_QualityField;
|
||||||
|
|
||||||
int CookFoodMaxNum; // Maximum quantity at a time
|
int CookFoodMaxNum; // Maximum quantity at a time
|
||||||
int CookCount;
|
int CookCount;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <cheat/events.h>
|
#include <cheat/events.h>
|
||||||
#include <cheat/game/SimpleFilter.h>
|
#include <cheat/game/SimpleFilter.h>
|
||||||
#include <cheat/game/EntityManager.h>
|
#include <cheat/game/EntityManager.h>
|
||||||
|
#include <cheat/world/AutoChallenge.h>
|
||||||
#include <cheat/game/filters.h>
|
#include <cheat/game/filters.h>
|
||||||
|
|
||||||
namespace cheat::feature
|
namespace cheat::feature
|
||||||
@ -81,7 +82,17 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
auto& autoDestroy = AutoDestroy::GetInstance();
|
auto& autoDestroy = AutoDestroy::GetInstance();
|
||||||
|
auto& autoChallenge = AutoChallenge::GetInstance();
|
||||||
auto entity = __this->fields._._._entity;
|
auto entity = __this->fields._._._entity;
|
||||||
|
// call origin ReduceModifierDurability without correct modifierDurabilityIndex will coz game crash.
|
||||||
|
// so use this hook function to destroy challenge's bombbarrel
|
||||||
|
if (autoChallenge.f_Enabled && autoChallenge.f_BombDestroy &&
|
||||||
|
autoChallenge.f_Range > manager.avatar()->distance(entity) &&
|
||||||
|
game::filters::puzzle::Bombbarrel.IsValid(manager.entity(entity))
|
||||||
|
)
|
||||||
|
{
|
||||||
|
reduceDurability = 1000.f;
|
||||||
|
}
|
||||||
if (autoDestroy.f_Enabled &&
|
if (autoDestroy.f_Enabled &&
|
||||||
autoDestroy.f_Range > manager.avatar()->distance(entity) &&
|
autoDestroy.f_Range > manager.avatar()->distance(entity) &&
|
||||||
(
|
(
|
||||||
|
@ -91,7 +91,7 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex);
|
std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex);
|
||||||
autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch;
|
autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoFish::FishingModule_OnFishBattleEndRsp_Hook(void* __this, app::FishBattleEndRsp* rsp, MethodInfo* method)
|
void AutoFish::FishingModule_OnFishBattleEndRsp_Hook(void* __this, app::FishBattleEndRsp* rsp, MethodInfo* method)
|
||||||
@ -115,7 +115,7 @@ namespace cheat::feature
|
|||||||
{
|
{
|
||||||
LOG_WARNING("Failed to catch fish, retrying in %u ms", autoFish.f_DelayBeforeCatch);
|
LOG_WARNING("Failed to catch fish, retrying in %u ms", autoFish.f_DelayBeforeCatch);
|
||||||
std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex);
|
std::lock_guard<std::mutex> catchLock(autoFish.m_BattleFinishTimestampMutex);
|
||||||
autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch;
|
autoFish.m_BattleFinishTimestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr) + autoFish.f_DelayBeforeCatch;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ namespace cheat::feature
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
std::lock_guard<std::mutex> _lock(autoFish.m_RecastTimestampMutex);
|
std::lock_guard<std::mutex> _lock(autoFish.m_RecastTimestampMutex);
|
||||||
autoFish.m_RecastTimestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr) + autoFish.f_DelayBeforeRecast;
|
autoFish.m_RecastTimestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr) + autoFish.f_DelayBeforeRecast;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoFish::FishingModule_OnExitFishingRsp_Hook(void* __this, void* rsp, MethodInfo* method)
|
void AutoFish::FishingModule_OnExitFishingRsp_Hook(void* __this, void* rsp, MethodInfo* method)
|
||||||
@ -154,7 +154,7 @@ namespace cheat::feature
|
|||||||
|
|
||||||
void AutoFish::OnGameUpdate()
|
void AutoFish::OnGameUpdate()
|
||||||
{
|
{
|
||||||
auto timestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr);
|
auto timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
|
||||||
|
|
||||||
std::lock_guard<std::mutex> _lock(m_BattleFinishTimestampMutex);
|
std::lock_guard<std::mutex> _lock(m_BattleFinishTimestampMutex);
|
||||||
std::lock_guard<std::mutex> _lock2(m_RecastTimestampMutex);
|
std::lock_guard<std::mutex> _lock2(m_RecastTimestampMutex);
|
||||||
|
@ -13,6 +13,8 @@ namespace cheat::feature
|
|||||||
static bool LCSelectPickup_IsInPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method);
|
static bool LCSelectPickup_IsInPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method);
|
||||||
static bool LCSelectPickup_IsOutPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method);
|
static bool LCSelectPickup_IsOutPosition_Hook(void* __this, app::BaseEntity* entity, MethodInfo* method);
|
||||||
|
|
||||||
|
float g_default_range = 3.0f;
|
||||||
|
|
||||||
AutoLoot::AutoLoot() : Feature(),
|
AutoLoot::AutoLoot() : Feature(),
|
||||||
NF(f_AutoPickup, "Auto-pickup drops", "AutoLoot", false),
|
NF(f_AutoPickup, "Auto-pickup drops", "AutoLoot", false),
|
||||||
NF(f_AutoTreasure, "Auto-open treasures", "AutoLoot", false),
|
NF(f_AutoTreasure, "Auto-open treasures", "AutoLoot", false),
|
||||||
@ -26,7 +28,9 @@ namespace cheat::feature
|
|||||||
NF(f_Investigate, "Search points", "AutoLoot", false),
|
NF(f_Investigate, "Search points", "AutoLoot", false),
|
||||||
NF(f_QuestInteract, "Quest interacts", "AutoLoot", false),
|
NF(f_QuestInteract, "Quest interacts", "AutoLoot", false),
|
||||||
NF(f_Others, "Other treasures", "AutoLoot", false),
|
NF(f_Others, "Other treasures", "AutoLoot", false),
|
||||||
NF(f_DelayTime, "Delay time (in ms)", "AutoLoot", 150),
|
NF(f_DelayTime, "Delay time (in ms)", "AutoLoot", 200),
|
||||||
|
NF(f_UseDelayTimeFluctuation, "Use delay fluctuation", "AutoLoot", false),
|
||||||
|
NF(f_DelayTimeFluctuation, "Delay fluctuation +(in ms)", "AutoLoot", 200),
|
||||||
NF(f_CustomRange, "Pickup Range", "AutoLoot", 5.0f),
|
NF(f_CustomRange, "Pickup Range", "AutoLoot", 5.0f),
|
||||||
toBeLootedItems(), nextLootTime(0)
|
toBeLootedItems(), nextLootTime(0)
|
||||||
{
|
{
|
||||||
@ -82,6 +86,17 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
ImGui::EndGroupPanel();
|
ImGui::EndGroupPanel();
|
||||||
|
|
||||||
|
ImGui::BeginGroupPanel("Looting delay fluctuation");
|
||||||
|
{
|
||||||
|
ConfigWidget("Enabled", f_UseDelayTimeFluctuation, "Enable delay fluctuation.\n" \
|
||||||
|
"Simulates human clicking delay as manual clickling never consistent.");
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::TextColored(ImColor(255, 165, 0, 255), "Read the note!");
|
||||||
|
ImGui::SetNextItemWidth(100.0f);
|
||||||
|
ConfigWidget("Delay range +(ms)", f_DelayTimeFluctuation, 1, 0, 1000, "Delay randomly fluctuates between 'Delay Time'+'Delay Time+range'");
|
||||||
|
}
|
||||||
|
ImGui::EndGroupPanel();
|
||||||
|
|
||||||
ImGui::TableSetColumnIndex(1);
|
ImGui::TableSetColumnIndex(1);
|
||||||
ImGui::BeginGroupPanel("Auto-Treasure");
|
ImGui::BeginGroupPanel("Auto-Treasure");
|
||||||
{
|
{
|
||||||
@ -120,12 +135,13 @@ namespace cheat::feature
|
|||||||
|
|
||||||
void AutoLoot::DrawStatus()
|
void AutoLoot::DrawStatus()
|
||||||
{
|
{
|
||||||
ImGui::Text("Auto Loot\n[%s%s%s%s%s]",
|
ImGui::Text("Auto Loot\n[%s%s%s%s%s%s]",
|
||||||
f_AutoPickup ? "AP" : "",
|
f_AutoPickup ? "AP" : "",
|
||||||
f_AutoTreasure ? fmt::format("{}AT", f_AutoPickup ? "|" : "").c_str() : "",
|
f_AutoTreasure ? fmt::format("{}AT", f_AutoPickup ? "|" : "").c_str() : "",
|
||||||
f_UseCustomRange ? fmt::format("{}CR{:.1f}m", f_AutoPickup || f_AutoTreasure ? "|" : "", f_CustomRange.value()).c_str() : "",
|
f_UseCustomRange ? fmt::format("{}CR{:.1f}m", f_AutoPickup || f_AutoTreasure ? "|" : "", f_CustomRange.value()).c_str() : "",
|
||||||
f_PickupFilter ? fmt::format("{}PF", f_AutoPickup || f_AutoTreasure || f_UseCustomRange ? "|" : "").c_str() : "",
|
f_PickupFilter ? fmt::format("{}PF", f_AutoPickup || f_AutoTreasure || f_UseCustomRange ? "|" : "").c_str() : "",
|
||||||
f_AutoPickup || f_AutoTreasure ? fmt::format("|{}ms", f_DelayTime.value()).c_str() : ""
|
f_AutoPickup || f_AutoTreasure ? fmt::format("|{}ms", f_DelayTime.value()).c_str() : "",
|
||||||
|
f_UseDelayTimeFluctuation ? fmt::format("|FL+{}ms", f_DelayTimeFluctuation.value()).c_str() : ""
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +187,7 @@ namespace cheat::feature
|
|||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
for (auto& entity : manager.entities(game::filters::combined::Chests))
|
for (auto& entity : manager.entities(game::filters::combined::Chests))
|
||||||
{
|
{
|
||||||
float range = f_UseCustomRange ? f_CustomRange : 3.5f;
|
float range = f_UseCustomRange ? f_CustomRange : g_default_range;
|
||||||
if (manager.avatar()->distance(entity) >= range)
|
if (manager.avatar()->distance(entity) >= range)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -220,13 +236,20 @@ namespace cheat::feature
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
app::MoleMole_ItemModule_PickItem(itemModule, *entityId, nullptr);
|
app::MoleMole_ItemModule_PickItem(itemModule, *entityId, nullptr);
|
||||||
nextLootTime = currentTime + (int)f_DelayTime;
|
|
||||||
|
int fluctuation = 0;
|
||||||
|
if (f_UseDelayTimeFluctuation)
|
||||||
|
{
|
||||||
|
fluctuation = std::rand() % (f_DelayTimeFluctuation + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
nextLootTime = currentTime + (int)f_DelayTime + fluctuation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoLoot::OnCheckIsInPosition(bool& result, app::BaseEntity* entity)
|
void AutoLoot::OnCheckIsInPosition(bool& result, app::BaseEntity* entity)
|
||||||
{
|
{
|
||||||
if (f_AutoPickup || f_UseCustomRange) {
|
if (f_AutoPickup || f_UseCustomRange) {
|
||||||
float pickupRange = f_UseCustomRange ? f_CustomRange : 3.5f;
|
float pickupRange = f_UseCustomRange ? f_CustomRange : g_default_range;
|
||||||
if (f_PickupFilter)
|
if (f_PickupFilter)
|
||||||
{
|
{
|
||||||
if (!f_PickupFilter_Animals && entity->fields.entityType == app::EntityType__Enum_1::EnvAnimal ||
|
if (!f_PickupFilter_Animals && entity->fields.entityType == app::EntityType__Enum_1::EnvAnimal ||
|
||||||
|
@ -12,9 +12,11 @@ namespace cheat::feature
|
|||||||
config::Field<config::Toggle<Hotkey>> f_AutoPickup;
|
config::Field<config::Toggle<Hotkey>> f_AutoPickup;
|
||||||
config::Field<config::Toggle<Hotkey>> f_AutoTreasure;
|
config::Field<config::Toggle<Hotkey>> f_AutoTreasure;
|
||||||
config::Field<config::Toggle<Hotkey>> f_UseCustomRange;
|
config::Field<config::Toggle<Hotkey>> f_UseCustomRange;
|
||||||
|
config::Field<config::Toggle<Hotkey>> f_UseDelayTimeFluctuation;
|
||||||
config::Field<config::Toggle<Hotkey>> f_PickupFilter;
|
config::Field<config::Toggle<Hotkey>> f_PickupFilter;
|
||||||
|
|
||||||
config::Field<int> f_DelayTime;
|
config::Field<int> f_DelayTime;
|
||||||
|
config::Field<int> f_DelayTimeFluctuation;
|
||||||
config::Field<float> f_CustomRange;
|
config::Field<float> f_CustomRange;
|
||||||
|
|
||||||
config::Field<bool> f_Chest;
|
config::Field<bool> f_Chest;
|
||||||
|
@ -162,7 +162,7 @@ namespace cheat::feature
|
|||||||
static std::unordered_set<app::SceneTreeObject*> s_AttackQueueSet;
|
static std::unordered_set<app::SceneTreeObject*> s_AttackQueueSet;
|
||||||
static uint64_t s_LastAttackTimestamp = 0;
|
static uint64_t s_LastAttackTimestamp = 0;
|
||||||
|
|
||||||
uint64_t timestamp = app::MoleMole_TimeUtil_get_NowTimeStamp(nullptr);
|
uint64_t timestamp = app::MoleMole_TimeUtil_get_LocalNowMsTimeStamp(nullptr);
|
||||||
if (!m_Enabled || s_LastAttackTimestamp + m_AttackDelay > timestamp)
|
if (!m_Enabled || s_LastAttackTimestamp + m_AttackDelay > timestamp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -20,7 +20,8 @@ namespace cheat::feature
|
|||||||
NF(f_OnlyTargeted, "Only targeted", "KillAura", true),
|
NF(f_OnlyTargeted, "Only targeted", "KillAura", true),
|
||||||
NF(f_Range, "Range", "KillAura", 15.0f),
|
NF(f_Range, "Range", "KillAura", 15.0f),
|
||||||
NF(f_AttackDelay, "Attack delay time (in ms)", "KillAura", 100),
|
NF(f_AttackDelay, "Attack delay time (in ms)", "KillAura", 100),
|
||||||
NF(f_RepeatDelay, "Repeat delay time (in ms)", "KillAura", 1000)
|
NF(f_RepeatDelay, "Repeat delay time (in ms)", "KillAura", 1000),
|
||||||
|
NF(f_DamageValue, "Crash damage value", "Damage mode", 233.0f)
|
||||||
{
|
{
|
||||||
events::GameUpdateEvent += MY_METHOD_HANDLER(KillAura::OnGameUpdate);
|
events::GameUpdateEvent += MY_METHOD_HANDLER(KillAura::OnGameUpdate);
|
||||||
HookManager::install(app::MoleMole_BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo, BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo_Hook);
|
HookManager::install(app::MoleMole_BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo, BaseMoveSyncPlugin_ConvertSyncTaskToMotionInfo_Hook);
|
||||||
@ -39,6 +40,9 @@ namespace cheat::feature
|
|||||||
ImGui::TextColored(ImColor(255, 165, 0, 255), "Choose any or both modes below.");
|
ImGui::TextColored(ImColor(255, 165, 0, 255), "Choose any or both modes below.");
|
||||||
|
|
||||||
ConfigWidget("Crash Damage Mode", f_DamageMode, "Kill aura causes crash damage for monster around you.");
|
ConfigWidget("Crash Damage Mode", f_DamageMode, "Kill aura causes crash damage for monster around you.");
|
||||||
|
if (f_DamageMode) {
|
||||||
|
ConfigWidget("Damage Value", f_DamageValue, 1, 0, 10000000, "Crash damage value");
|
||||||
|
}
|
||||||
ConfigWidget("Instant Death Mode", f_InstantDeathMode, "Kill aura will attempt to instagib any valid target.");
|
ConfigWidget("Instant Death Mode", f_InstantDeathMode, "Kill aura will attempt to instagib any valid target.");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::TextColored(ImColor(255, 165, 0, 255), "Can get buggy with bosses like PMA and Hydro Hypo.");
|
ImGui::TextColored(ImColor(255, 165, 0, 255), "Can get buggy with bosses like PMA and Hydro Hypo.");
|
||||||
@ -151,12 +155,25 @@ namespace cheat::feature
|
|||||||
attackSet.erase(monster->runtimeID());
|
attackSet.erase(monster->runtimeID());
|
||||||
|
|
||||||
auto combat = monster->combat();
|
auto combat = monster->combat();
|
||||||
auto maxHP = app::MoleMole_SafeFloat_get_Value(combat->fields._combatProperty_k__BackingField->fields.maxHP, nullptr);
|
|
||||||
|
|
||||||
auto crashEvt = app::MoleMole_EventHelper_Allocate_103(*app::MoleMole_EventHelper_Allocate_103__MethodInfo);
|
auto crashEvt = app::MoleMole_EventHelper_Allocate_103(*app::MoleMole_EventHelper_Allocate_103__MethodInfo);
|
||||||
app::MoleMole_EvtCrash_Init(crashEvt, monster->runtimeID(), nullptr);
|
app::MoleMole_EvtCrash_Init(crashEvt, monster->runtimeID(), nullptr);
|
||||||
crashEvt->fields.maxHp = maxHP;
|
|
||||||
crashEvt->fields.velChange = 1000;
|
//Migita^Rin#1762: Fixed inaccurate damage caused by floating point precision(Maybe)
|
||||||
|
float FPValue;
|
||||||
|
if (f_DamageValue <= 10000000) FPValue = 27.0f;
|
||||||
|
if (f_DamageValue <= 9000000) FPValue = 22.5f;
|
||||||
|
if (f_DamageValue <= 8000000) FPValue = 20.0f;
|
||||||
|
if (f_DamageValue <= 7000000) FPValue = 17.5f;
|
||||||
|
if (f_DamageValue <= 6000000) FPValue = 15.0f;
|
||||||
|
if (f_DamageValue <= 5000000) FPValue = 12.5f;
|
||||||
|
if (f_DamageValue <= 4000000) FPValue = 10.0f;
|
||||||
|
if (f_DamageValue <= 3000000) FPValue = 7.5f;
|
||||||
|
if (f_DamageValue <= 2000000) FPValue = 5.0f;
|
||||||
|
if (f_DamageValue <= 1000000) FPValue = 2.5f;
|
||||||
|
|
||||||
|
crashEvt->fields.maxHp = f_DamageValue /0.4f + FPValue;
|
||||||
|
crashEvt->fields.velChange = 10000000;
|
||||||
crashEvt->fields.hitPos = monster->absolutePosition();
|
crashEvt->fields.hitPos = monster->absolutePosition();
|
||||||
|
|
||||||
app::MoleMole_EventManager_FireEvent(eventManager, reinterpret_cast<app::BaseEvent*>(crashEvt), false, nullptr);
|
app::MoleMole_EventManager_FireEvent(eventManager, reinterpret_cast<app::BaseEvent*>(crashEvt), false, nullptr);
|
||||||
|
@ -15,6 +15,8 @@ namespace cheat::feature
|
|||||||
config::Field<float> f_Range;
|
config::Field<float> f_Range;
|
||||||
config::Field<int> f_AttackDelay;
|
config::Field<int> f_AttackDelay;
|
||||||
config::Field<int> f_RepeatDelay;
|
config::Field<int> f_RepeatDelay;
|
||||||
|
config::Field<float> f_DamageValue;
|
||||||
|
|
||||||
|
|
||||||
static KillAura& GetInstance();
|
static KillAura& GetInstance();
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@
|
|||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
<AdditionalIncludeDirectories>$(ProjectDir)include/;$(SolutionDir)cheat-base/src;$(SolutionDir)cheat-base/vendor/simpleIni/</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ProjectDir)include/;$(SolutionDir)cheat-base/src;$(SolutionDir)cheat-base/vendor/simpleIni/</AdditionalIncludeDirectories>
|
||||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|