commit
c933f0bfd1
@ -21,6 +21,7 @@
|
|||||||
<ClInclude Include="src\user\cheat\misc\sniffer\pipe\PipeClient.h" />
|
<ClInclude Include="src\user\cheat\misc\sniffer\pipe\PipeClient.h" />
|
||||||
<ClInclude Include="src\user\cheat\misc\sniffer\pipe\PipeIO.h" />
|
<ClInclude Include="src\user\cheat\misc\sniffer\pipe\PipeIO.h" />
|
||||||
<ClInclude Include="src\user\cheat\player\AutoRun.h" />
|
<ClInclude Include="src\user\cheat\player\AutoRun.h" />
|
||||||
|
<ClInclude Include="src\user\cheat\visuals\AnimationChanger.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\AutoSeelie.h" />
|
<ClInclude Include="src\user\cheat\world\AutoSeelie.h" />
|
||||||
@ -113,6 +114,7 @@
|
|||||||
<ClCompile Include="src\user\cheat\misc\sniffer\pipe\PipeClient.cpp" />
|
<ClCompile Include="src\user\cheat\misc\sniffer\pipe\PipeClient.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\misc\sniffer\pipe\PipeIO.cpp" />
|
<ClCompile Include="src\user\cheat\misc\sniffer\pipe\PipeIO.cpp" />
|
||||||
<ClCompile Include="src\user\cheat\player\AutoRun.cpp" />
|
<ClCompile Include="src\user\cheat\player\AutoRun.cpp" />
|
||||||
|
<ClCompile Include="src\user\cheat\visuals\AnimationChanger.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\AutoSeelie.cpp" />
|
<ClCompile Include="src\user\cheat\world\AutoSeelie.cpp" />
|
||||||
@ -219,6 +221,7 @@
|
|||||||
<Image Include="res\iconsHD\Andrius.png" />
|
<Image Include="res\iconsHD\Andrius.png" />
|
||||||
<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\Cat.png" />
|
<Image Include="res\iconsHD\Cat.png" />
|
||||||
<Image Include="res\iconsHD\Cicin.png" />
|
<Image Include="res\iconsHD\Cicin.png" />
|
||||||
<Image Include="res\iconsHD\Crane.png" />
|
<Image Include="res\iconsHD\Crane.png" />
|
||||||
@ -557,6 +560,7 @@
|
|||||||
<Image Include="res\icons\Andrius.png" />
|
<Image Include="res\icons\Andrius.png" />
|
||||||
<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\Cat.png" />
|
<Image Include="res\icons\Cat.png" />
|
||||||
<Image Include="res\icons\Cicin.png" />
|
<Image Include="res\icons\Cicin.png" />
|
||||||
<Image Include="res\icons\Crane.png" />
|
<Image Include="res\icons\Crane.png" />
|
||||||
|
@ -252,6 +252,9 @@
|
|||||||
<ClInclude Include="src\user\cheat\world\CustomWeather.h">
|
<ClInclude Include="src\user\cheat\world\CustomWeather.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\user\cheat\visuals\AnimationChanger.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Font Include="res\Ruda-Bold.ttf" />
|
<Font Include="res\Ruda-Bold.ttf" />
|
||||||
@ -462,6 +465,9 @@
|
|||||||
<ClCompile Include="src\user\cheat\world\CustomWeather.cpp">
|
<ClCompile Include="src\user\cheat\world\CustomWeather.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\user\cheat\visuals\AnimationChanger.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="res\res.rc">
|
<ResourceCompile Include="res\res.rc">
|
||||||
@ -2508,5 +2514,11 @@
|
|||||||
<Image Include="res\icons\Spincrocodile.png">
|
<Image Include="res\icons\Spincrocodile.png">
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
|
<Image Include="res\iconsHD\BookPage.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\icons\BookPage.png">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
BIN
cheat-library/res/icons/BookPage.png
Normal file
BIN
cheat-library/res/icons/BookPage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
cheat-library/res/iconsHD/BookPage.png
Normal file
BIN
cheat-library/res/iconsHD/BookPage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
@ -140,6 +140,8 @@ HDBOAR PNG "iconsHD\\Boar.png"
|
|||||||
|
|
||||||
HDBOOK PNG "iconsHD\\Book.png"
|
HDBOOK PNG "iconsHD\\Book.png"
|
||||||
|
|
||||||
|
HDBOOKPAGE PNG "iconsHD\\BookPage.png"
|
||||||
|
|
||||||
HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png"
|
HDBOOTWEASEL PNG "iconsHD\\BootWeasel.png"
|
||||||
|
|
||||||
HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png"
|
HDBRIGHTCROWNPIGEON PNG "iconsHD\\BrightcrownPigeon.png"
|
||||||
@ -316,6 +318,8 @@ HDGEOGRANUM PNG "iconsHD\\Geogranum.png"
|
|||||||
|
|
||||||
HDGEOHYPOSTASIS PNG "iconsHD\\GeoHypostasis.png"
|
HDGEOHYPOSTASIS PNG "iconsHD\\GeoHypostasis.png"
|
||||||
|
|
||||||
|
HDGEOPUZZLE PNG "iconsHD\\MiniPuzzle.png"
|
||||||
|
|
||||||
HDGEOSIGIL PNG "iconsHD\\GeoSigil.png"
|
HDGEOSIGIL PNG "iconsHD\\GeoSigil.png"
|
||||||
|
|
||||||
HDGEOVISHAP PNG "iconsHD\\Geovishap.png"
|
HDGEOVISHAP PNG "iconsHD\\Geovishap.png"
|
||||||
@ -626,7 +630,7 @@ HDSHOGUN PNG "iconsHD\\Shogun.png"
|
|||||||
|
|
||||||
HDSHOGUNATEINFANTRY PNG "iconsHD\\ShogunateInfantry.png"
|
HDSHOGUNATEINFANTRY PNG "iconsHD\\ShogunateInfantry.png"
|
||||||
|
|
||||||
HDSHRINEOFDEPTH PNG "iconsHD\\ShrineOfDepth.png"
|
HDSHRINEOFDEPTH PNG "iconsHD\\Mondstadt.png"
|
||||||
|
|
||||||
HDSIGNORA PNG "iconsHD\\Signora.png"
|
HDSIGNORA PNG "iconsHD\\Signora.png"
|
||||||
|
|
||||||
@ -850,6 +854,8 @@ BOAR PNG "icons\\Boar.png"
|
|||||||
|
|
||||||
BOOK PNG "icons\\Book.png"
|
BOOK PNG "icons\\Book.png"
|
||||||
|
|
||||||
|
BOOKPAGE PNG "icons\\BookPage.png"
|
||||||
|
|
||||||
BOOTWEASEL PNG "icons\\BootWeasel.png"
|
BOOTWEASEL PNG "icons\\BootWeasel.png"
|
||||||
|
|
||||||
BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png"
|
BRIGHTCROWNPIGEON PNG "icons\\BrightcrownPigeon.png"
|
||||||
@ -1026,6 +1032,8 @@ GEOGRANUM PNG "icons\\Geogranum.png"
|
|||||||
|
|
||||||
GEOHYPOSTASIS PNG "icons\\GeoHypostasis.png"
|
GEOHYPOSTASIS PNG "icons\\GeoHypostasis.png"
|
||||||
|
|
||||||
|
GEOPUZZLE PNG "icons\\MiniPuzzle.png"
|
||||||
|
|
||||||
GEOSIGIL PNG "icons\\GeoSigil.png"
|
GEOSIGIL PNG "icons\\GeoSigil.png"
|
||||||
|
|
||||||
GEOVISHAP PNG "icons\\Geovishap.png"
|
GEOVISHAP PNG "icons\\Geovishap.png"
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
#include <cheat/visuals/EnablePeeking.h>
|
#include <cheat/visuals/EnablePeeking.h>
|
||||||
#include <cheat/visuals/TextureChanger.h>
|
#include <cheat/visuals/TextureChanger.h>
|
||||||
#include <cheat/visuals/FreeCamera.h>
|
#include <cheat/visuals/FreeCamera.h>
|
||||||
|
#include <cheat/visuals/AnimationChanger.h>
|
||||||
|
|
||||||
#include "GenshinCM.h"
|
#include "GenshinCM.h"
|
||||||
|
|
||||||
@ -122,7 +123,8 @@ namespace cheat
|
|||||||
FEAT_INST(Browser),
|
FEAT_INST(Browser),
|
||||||
FEAT_INST(EnablePeeking),
|
FEAT_INST(EnablePeeking),
|
||||||
FEAT_INST(TextureChanger),
|
FEAT_INST(TextureChanger),
|
||||||
FEAT_INST(FreeCamera)
|
FEAT_INST(FreeCamera),
|
||||||
|
FEAT_INST(AnimationChanger)
|
||||||
|
|
||||||
});
|
});
|
||||||
#undef FEAT_INST
|
#undef FEAT_INST
|
||||||
|
@ -574,13 +574,17 @@ namespace cheat::feature
|
|||||||
ADD_FILTER_FIELD(collection, WoodenCrate);
|
ADD_FILTER_FIELD(collection, WoodenCrate);
|
||||||
ADD_FILTER_FIELD(collection, GeoSigil);
|
ADD_FILTER_FIELD(collection, GeoSigil);
|
||||||
|
|
||||||
|
// Regular Chests
|
||||||
ADD_FILTER_FIELD(chest, CommonChest);
|
ADD_FILTER_FIELD(chest, CommonChest);
|
||||||
ADD_FILTER_FIELD(chest, ExquisiteChest);
|
ADD_FILTER_FIELD(chest, ExquisiteChest);
|
||||||
ADD_FILTER_FIELD(chest, PreciousChest);
|
ADD_FILTER_FIELD(chest, PreciousChest);
|
||||||
ADD_FILTER_FIELD(chest, LuxuriousChest);
|
ADD_FILTER_FIELD(chest, LuxuriousChest);
|
||||||
ADD_FILTER_FIELD(chest, RemarkableChest);
|
ADD_FILTER_FIELD(chest, RemarkableChest);
|
||||||
|
// Other Chests
|
||||||
|
ADD_FILTER_FIELD(chest, BuriedChest);
|
||||||
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, Electroculus);
|
||||||
|
@ -32,6 +32,7 @@ namespace cheat::game::filters
|
|||||||
ChestFilter SFrozen = ChestFilter(Chest::ChestState::Frozen);
|
ChestFilter SFrozen = ChestFilter(Chest::ChestState::Frozen);
|
||||||
ChestFilter SBramble = ChestFilter(Chest::ChestState::Bramble);
|
ChestFilter SBramble = ChestFilter(Chest::ChestState::Bramble);
|
||||||
ChestFilter STrap = ChestFilter(Chest::ChestState::Trap);
|
ChestFilter STrap = ChestFilter(Chest::ChestState::Trap);
|
||||||
|
SimpleFilter BuriedChest = { EntityType__Enum_1::Field, "_WorldArea_Operator" };
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace equipment
|
namespace equipment
|
||||||
@ -346,6 +347,13 @@ namespace cheat::game::filters
|
|||||||
mineral::Starsilver,
|
mineral::Starsilver,
|
||||||
mineral::WhiteIronChunk
|
mineral::WhiteIronChunk
|
||||||
};
|
};
|
||||||
|
SimpleFilter PlantDestroy = {
|
||||||
|
//plant::SakuraBloom,
|
||||||
|
plant::DandelionSeed,
|
||||||
|
plant::MistFlowerCorolla,
|
||||||
|
plant::FlamingFlowerStamen
|
||||||
|
};
|
||||||
|
|
||||||
WhitelistFilter Doodads = {
|
WhitelistFilter Doodads = {
|
||||||
EntityType__Enum_1::Gadget,
|
EntityType__Enum_1::Gadget,
|
||||||
{
|
{
|
||||||
|
@ -32,6 +32,8 @@ namespace cheat::game::filters
|
|||||||
extern ChestFilter SFrozen;
|
extern ChestFilter SFrozen;
|
||||||
extern ChestFilter SBramble;
|
extern ChestFilter SBramble;
|
||||||
extern ChestFilter STrap;
|
extern ChestFilter STrap;
|
||||||
|
|
||||||
|
extern SimpleFilter BuriedChest;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace equipment
|
namespace equipment
|
||||||
@ -325,6 +327,7 @@ namespace cheat::game::filters
|
|||||||
extern SimpleFilter Oculies;
|
extern SimpleFilter Oculies;
|
||||||
extern SimpleFilter Chests;
|
extern SimpleFilter Chests;
|
||||||
extern SimpleFilter Ores;
|
extern SimpleFilter Ores;
|
||||||
|
extern SimpleFilter PlantDestroy;
|
||||||
extern WhitelistFilter Doodads;
|
extern WhitelistFilter Doodads;
|
||||||
extern SimpleFilter Animals;
|
extern SimpleFilter Animals;
|
||||||
extern SimpleFilter AnimalDrop;
|
extern SimpleFilter AnimalDrop;
|
||||||
|
@ -17,10 +17,11 @@
|
|||||||
namespace cheat::feature
|
namespace cheat::feature
|
||||||
{
|
{
|
||||||
CustomTeleports::CustomTeleports() : Feature(),
|
CustomTeleports::CustomTeleports() : Feature(),
|
||||||
NF(f_DebugMode, "Debug Mode", "CustomTeleports", false), // Soon to be added
|
|
||||||
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_Speed, "Interpolation Speed", "CustomTeleports", 10.0f),
|
||||||
dir(util::GetCurrentPath() / "teleports")
|
dir(util::GetCurrentPath() / "teleports")
|
||||||
{
|
{
|
||||||
f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext);
|
f_Next.value().PressedEvent += MY_METHOD_HANDLER(CustomTeleports::OnNext);
|
||||||
@ -122,6 +123,42 @@ namespace cheat::feature
|
|||||||
return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2) + pow(a.z - b.z, 2));
|
return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2) + pow(a.z - b.z, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CustomTeleports::TeleportTo(app::Vector3 position, bool interpolate)
|
||||||
|
{
|
||||||
|
auto &manager = game::EntityManager::instance();
|
||||||
|
auto avatar = manager.avatar();
|
||||||
|
if (avatar->moveComponent() == nullptr)
|
||||||
|
{
|
||||||
|
LOG_ERROR("Avatar has no move component, Is scene loaded?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (interpolate)
|
||||||
|
{
|
||||||
|
float speed = this->f_Speed;
|
||||||
|
auto avatarPos = manager.avatar()->absolutePosition();
|
||||||
|
auto endPos = position;
|
||||||
|
std::thread interpolate([avatarPos, endPos, &manager, speed]()
|
||||||
|
{
|
||||||
|
float t = 0.0f;
|
||||||
|
app::Vector3 zero = {0,0,0};
|
||||||
|
auto newPos = zero;
|
||||||
|
while (t < 1.0f) {
|
||||||
|
newPos = app::Vector3_Lerp(avatarPos, endPos, t, nullptr);
|
||||||
|
manager.avatar()->setAbsolutePosition(newPos);
|
||||||
|
t += speed / 100.0f;
|
||||||
|
Sleep(10);
|
||||||
|
} });
|
||||||
|
interpolate.detach();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (PositionDistance(position, app::ActorUtils_GetAvatarPos(nullptr)) > 60.0f)
|
||||||
|
MapTeleport::GetInstance().TeleportTo(position);
|
||||||
|
else
|
||||||
|
manager.avatar()->setAbsolutePosition(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CustomTeleports::OnTeleportKeyPressed(bool next)
|
void CustomTeleports::OnTeleportKeyPressed(bool next)
|
||||||
{
|
{
|
||||||
if (!f_Enabled || selectedIndex < 0)
|
if (!f_Enabled || selectedIndex < 0)
|
||||||
@ -145,7 +182,7 @@ namespace cheat::feature
|
|||||||
selectedIndex = list.at(index + (next ? 1 : -1));
|
selectedIndex = list.at(index + (next ? 1 : -1));
|
||||||
position = Teleports.at(selectedIndex).position;
|
position = Teleports.at(selectedIndex).position;
|
||||||
}
|
}
|
||||||
mapTeleport.TeleportTo(position);
|
TeleportTo(position, this->f_Interpolate);
|
||||||
UpdateIndexName();
|
UpdateIndexName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,38 +195,28 @@ namespace cheat::feature
|
|||||||
OnTeleportKeyPressed(true);
|
OnTeleportKeyPressed(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void itr(std::regex exp, std::string name, std::string s)
|
||||||
|
{
|
||||||
|
std::sregex_iterator itr(name.begin(), name.end(), exp);
|
||||||
|
while (itr != std::sregex_iterator())
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < itr->size(); i++)
|
||||||
|
s.append((*itr)[i]);
|
||||||
|
itr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CustomTeleports::UpdateIndexName()
|
void CustomTeleports::UpdateIndexName()
|
||||||
{
|
{
|
||||||
std::string name(selectedIndex == -1 || checkedIndices.empty() ? "" : Teleports.at(selectedIndex).name);
|
|
||||||
|
|
||||||
// abbreviate teleport names that are too long
|
// abbreviate teleport names that are too long
|
||||||
|
std::string name(selectedIndex == -1 || checkedIndices.empty() ? "" : Teleports.at(selectedIndex).name);
|
||||||
if (name.length() > 15)
|
if (name.length() > 15)
|
||||||
{
|
{
|
||||||
std::string shortened;
|
std::string shortened;
|
||||||
std::regex numsExp("[\\d]+");
|
std::regex numsExp("[\\d]+");
|
||||||
std::regex firstCharsExp("\\b[A-Za-z]");
|
std::regex firstCharsExp("\\b[A-Za-z]");
|
||||||
|
itr(firstCharsExp, name, shortened);
|
||||||
std::sregex_iterator wordItr(name.begin(), name.end(), firstCharsExp);
|
itr(numsExp, name, shortened);
|
||||||
while (wordItr != std::sregex_iterator())
|
|
||||||
{
|
|
||||||
for (unsigned i = 0; i < wordItr->size(); i++)
|
|
||||||
{
|
|
||||||
shortened.append((*wordItr)[i]);
|
|
||||||
}
|
|
||||||
wordItr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::sregex_iterator numItr(name.begin(), name.end(), numsExp);
|
|
||||||
while (numItr != std::sregex_iterator())
|
|
||||||
{
|
|
||||||
for (unsigned i = 0; i < numItr->size(); i++)
|
|
||||||
{
|
|
||||||
shortened.append(" ");
|
|
||||||
shortened.append((*numItr)[i]);
|
|
||||||
}
|
|
||||||
numItr++;
|
|
||||||
}
|
|
||||||
name = shortened;
|
name = shortened;
|
||||||
}
|
}
|
||||||
selectedIndexName = name;
|
selectedIndexName = name;
|
||||||
@ -250,7 +277,9 @@ namespace cheat::feature
|
|||||||
"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");
|
||||||
ImGui::SameLine();
|
ConfigWidget("Enable Interpolation", f_Interpolate, "Enable interpolation between teleports when using keybinds");
|
||||||
|
ConfigWidget("Interpolation Speed", f_Speed, 0.1f, 0.1f, 99.0f,
|
||||||
|
"Interpolation speed.\n recommended setting below or equal to 0.1.");
|
||||||
|
|
||||||
if (ImGui::Button("Delete Checked"))
|
if (ImGui::Button("Delete Checked"))
|
||||||
{
|
{
|
||||||
@ -317,7 +346,7 @@ namespace cheat::feature
|
|||||||
maxNameLength = Teleport.name.length();
|
maxNameLength = Teleport.name.length();
|
||||||
ImGui::BeginTable("Teleports", 4, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_NoSavedSettings);
|
ImGui::BeginTable("Teleports", 4, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_NoSavedSettings);
|
||||||
ImGui::TableSetupColumn("#", ImGuiTableColumnFlags_WidthFixed, 20);
|
ImGui::TableSetupColumn("#", ImGuiTableColumnFlags_WidthFixed, 20);
|
||||||
ImGui::TableSetupColumn("Commands", ImGuiTableColumnFlags_WidthFixed, 100);
|
ImGui::TableSetupColumn("Commands", ImGuiTableColumnFlags_WidthFixed, 130);
|
||||||
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, maxNameLength * 8 + 10);
|
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, maxNameLength * 8 + 10);
|
||||||
ImGui::TableSetupColumn("Position");
|
ImGui::TableSetupColumn("Position");
|
||||||
ImGui::TableHeadersRow();
|
ImGui::TableHeadersRow();
|
||||||
@ -332,12 +361,13 @@ namespace cheat::feature
|
|||||||
bool checked = std::any_of(checkedIndices.begin(), checkedIndices.end(), [&index](const auto &i)
|
bool checked = std::any_of(checkedIndices.begin(), checkedIndices.end(), [&index](const auto &i)
|
||||||
{ return i == index; });
|
{ return i == index; });
|
||||||
bool selected = index == selectedIndex;
|
bool selected = index == selectedIndex;
|
||||||
|
std::string stringIndex = std::to_string(index);
|
||||||
|
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
ImGui::Text("%d", index);
|
ImGui::Text("%d", index);
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
ImGui::Checkbox(("##Index" + std::to_string(index)).c_str(), &checked);
|
ImGui::Checkbox(("##Index" + stringIndex).c_str(), &checked);
|
||||||
if (ImGui::IsItemClicked(0))
|
if (ImGui::IsItemClicked(0))
|
||||||
{
|
{
|
||||||
if (checked)
|
if (checked)
|
||||||
@ -352,23 +382,19 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(("TP##Button" + std::to_string(index)).c_str()))
|
if (ImGui::Button(("TP##Button" + stringIndex).c_str()))
|
||||||
{
|
{
|
||||||
auto &manager = game::EntityManager::instance();
|
TeleportTo(position, false);
|
||||||
auto avatar = manager.avatar();
|
|
||||||
if (avatar->moveComponent() == nullptr)
|
|
||||||
{
|
|
||||||
LOG_ERROR("Avatar has no move component, Is scene loaded?");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (PositionDistance(position, app::ActorUtils_GetAvatarPos(nullptr)) > 60.0f)
|
|
||||||
MapTeleport::GetInstance().TeleportTo(position);
|
|
||||||
else
|
|
||||||
manager.avatar()->setAbsolutePosition(position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(("Select##Button" + std::to_string(index)).c_str()))
|
if (ImGui::Button(("Lerp##Button" + stringIndex).c_str()))
|
||||||
|
{
|
||||||
|
TeleportTo(position, true);
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
|
||||||
|
if (ImGui::Button(("Select##Button" + stringIndex).c_str()))
|
||||||
{
|
{
|
||||||
selectedIndex = index;
|
selectedIndex = index;
|
||||||
selectedByClick = true;
|
selectedByClick = true;
|
||||||
|
@ -25,8 +25,9 @@ namespace cheat::feature
|
|||||||
class CustomTeleports : public Feature
|
class CustomTeleports : public Feature
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
config::Field<config::Toggle<Hotkey>> f_DebugMode;
|
|
||||||
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
||||||
|
config::Field<config::Toggle<Hotkey>> f_Interpolate;
|
||||||
|
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;
|
||||||
static CustomTeleports& GetInstance();
|
static CustomTeleports& GetInstance();
|
||||||
@ -55,6 +56,7 @@ namespace cheat::feature
|
|||||||
std::string selectedName;
|
std::string selectedName;
|
||||||
std::string selectedIndexName;
|
std::string selectedIndexName;
|
||||||
CustomTeleports();
|
CustomTeleports();
|
||||||
|
void TeleportTo(app::Vector3 position, bool interpolate);
|
||||||
void OnTeleportKeyPressed(bool next);
|
void OnTeleportKeyPressed(bool next);
|
||||||
void OnPrevious();
|
void OnPrevious();
|
||||||
void OnNext();
|
void OnNext();
|
||||||
|
301
cheat-library/src/user/cheat/visuals/AnimationChanger.cpp
Normal file
301
cheat-library/src/user/cheat/visuals/AnimationChanger.cpp
Normal file
@ -0,0 +1,301 @@
|
|||||||
|
#include "pch-il2cpp.h"
|
||||||
|
#include "AnimationChanger.h"
|
||||||
|
|
||||||
|
#include <helpers.h>
|
||||||
|
#include <cheat/events.h>
|
||||||
|
#include <misc/cpp/imgui_stdlib.h>
|
||||||
|
#include <cheat/game/EntityManager.h>
|
||||||
|
|
||||||
|
namespace cheat::feature
|
||||||
|
{
|
||||||
|
static std::string animations[] = {
|
||||||
|
// All characters
|
||||||
|
"SlipFaceWall",
|
||||||
|
"SlipBackWall",
|
||||||
|
"DropDown",
|
||||||
|
"JumpOffWall",
|
||||||
|
"Jump",
|
||||||
|
"JumpForRun",
|
||||||
|
"JumpForWalk",
|
||||||
|
"Fly",
|
||||||
|
"FlyStart",
|
||||||
|
"JumpForSprint",
|
||||||
|
"SwimIdle",
|
||||||
|
"SwimMove",
|
||||||
|
"SwimDash",
|
||||||
|
"ClimbMove1",
|
||||||
|
"ClimbIdle",
|
||||||
|
"ClimbJump",
|
||||||
|
"ClimbMove0",
|
||||||
|
"FallToGroundRun",
|
||||||
|
"FallOnGroundLit",
|
||||||
|
"FallOnGround",
|
||||||
|
"FallToGroundRunHard",
|
||||||
|
"FallToGroundSprint",
|
||||||
|
"Walk",
|
||||||
|
"Run",
|
||||||
|
"Standby",
|
||||||
|
"RunToIdle",
|
||||||
|
"RunToWalk",
|
||||||
|
"WalkToIdle",
|
||||||
|
"WalkToRun",
|
||||||
|
"Sprint",
|
||||||
|
"SprintToIdle",
|
||||||
|
"SprintToRun",
|
||||||
|
"ClimbDownToGround",
|
||||||
|
"SprintBS",
|
||||||
|
"ShowUp",
|
||||||
|
"CrouchToStandby",
|
||||||
|
"CrouchIdle",
|
||||||
|
"CrouchRoll",
|
||||||
|
"CrouchMove",
|
||||||
|
"SkiffNormal",
|
||||||
|
"Upstairs",
|
||||||
|
"JumpUpWallForStandby",
|
||||||
|
"JumpUpWallReady",
|
||||||
|
"Standby2ClimbA",
|
||||||
|
"SwimJump",
|
||||||
|
"SwimJumpDrop",
|
||||||
|
"SwimJumpToWater",
|
||||||
|
"Standby2ClimbB",
|
||||||
|
"CrouchDrop",
|
||||||
|
"TurnDir",
|
||||||
|
"StandbyWeapon",
|
||||||
|
"StandbyPutaway",
|
||||||
|
"StandbyPutawayOver",
|
||||||
|
"Icespine_Out",
|
||||||
|
"Icespine",
|
||||||
|
"LiquidStrike_MoveStandby",
|
||||||
|
"LiquidStrike_AS",
|
||||||
|
"LiquidStrike_BS",
|
||||||
|
"LiquidStrike_BS1",
|
||||||
|
"LiquidStrike_Move",
|
||||||
|
"LiquidStrike_Strike",
|
||||||
|
"LiquidStrike_FatalStandby",
|
||||||
|
"LiquidStrike_FatalMove",
|
||||||
|
"LiquidStrike_AS_OnWater",
|
||||||
|
"LiquidStrike_BS_0",
|
||||||
|
"FrozenWindmill",
|
||||||
|
"FrozenWindmill_AS",
|
||||||
|
"Attack03",
|
||||||
|
"Attack04",
|
||||||
|
"Attack05",
|
||||||
|
"Attack01",
|
||||||
|
"Attack02",
|
||||||
|
"ExtraAttack",
|
||||||
|
"ExtraAttack_AS",
|
||||||
|
"FallingAnthem_Loop",
|
||||||
|
"FallingAnthem_AS_2",
|
||||||
|
"FallingAnthem_BS_1",
|
||||||
|
"FallingAnthem_BS_2",
|
||||||
|
"FallingAnthem_AS_1",
|
||||||
|
"FallingAnthem_Loop_Low",
|
||||||
|
"SitBDown",
|
||||||
|
"SitBLoop",
|
||||||
|
"SitBUp",
|
||||||
|
"SitDown",
|
||||||
|
"SitLoop",
|
||||||
|
"SitUp",
|
||||||
|
"StandbyShow_01",
|
||||||
|
"StandbyShow_02",
|
||||||
|
"StandbyVoice",
|
||||||
|
"Think01BS",
|
||||||
|
"Think01Loop",
|
||||||
|
"Think01AS",
|
||||||
|
"Akimbo02BS",
|
||||||
|
"Akimbo02Loop",
|
||||||
|
"Akimbo02AS",
|
||||||
|
"ChannelBS",
|
||||||
|
"ChannelLoop",
|
||||||
|
"ChannelAS",
|
||||||
|
"PlayMusic_Lyre_AS",
|
||||||
|
"PlayMusic_Lyre_BS",
|
||||||
|
"PlayMusic_Lyre_Loop",
|
||||||
|
"PlayMusic_Qin_BS",
|
||||||
|
"PlayMusic_Qin_AS",
|
||||||
|
"PlayMusic_Qin_Loop",
|
||||||
|
"ActivitySkill_ElectricCoreFly",
|
||||||
|
"Hit_H",
|
||||||
|
"Hit_L",
|
||||||
|
"Hit_Throw",
|
||||||
|
"Hit_Throw_Ground",
|
||||||
|
"Hit_ThrowAir",
|
||||||
|
"Struggle",
|
||||||
|
"NormalDie",
|
||||||
|
"SwimDie",
|
||||||
|
"HitGroundDie",
|
||||||
|
"FallDie_AS",
|
||||||
|
"FallDie",
|
||||||
|
// Main Character only
|
||||||
|
"UziExplode_AS",
|
||||||
|
"UziExplode_BS",
|
||||||
|
"UziExplode_Charge_01",
|
||||||
|
"UziExplode_Strike_02",
|
||||||
|
"UziExplode_Charge_02",
|
||||||
|
"UziExplode_Strike_01",
|
||||||
|
"UziExplode_BS_1",
|
||||||
|
"WindBreathe_AS",
|
||||||
|
"WindBreathe",
|
||||||
|
"Hogyoku_AS",
|
||||||
|
"Hogyoku_BS",
|
||||||
|
"Hogyoku",
|
||||||
|
"Hogyoku_Charge",
|
||||||
|
"Hogyoku_Charge_AS",
|
||||||
|
"Hogyoku_Charge_2",
|
||||||
|
"RockTide_AS",
|
||||||
|
"RockTide",
|
||||||
|
"CrouchThrowBS",
|
||||||
|
"CrouchThrowLoop",
|
||||||
|
"CrouchThrowAS",
|
||||||
|
"FindCatThrowBS",
|
||||||
|
"FindCatThrowLoop",
|
||||||
|
"FindCatThrowAS",
|
||||||
|
"Player_Electric_ElementalArt",
|
||||||
|
"Player_Electric_ElementalArt_AS",
|
||||||
|
"Player_Electric_ElementalBurst",
|
||||||
|
"Player_Electric_ElementalBurst_AS",
|
||||||
|
"PutHand01BS",
|
||||||
|
"PutHand01Loop",
|
||||||
|
"PutHand01AS",
|
||||||
|
"Akimbo01BS",
|
||||||
|
"Backrake01BS",
|
||||||
|
"Forerake01BS",
|
||||||
|
"StrikeChest01BS",
|
||||||
|
"Akimbo01Loop",
|
||||||
|
"Akimbo01AS",
|
||||||
|
"Backrake01Loop",
|
||||||
|
"Backrake01AS",
|
||||||
|
"Forerake01Loop",
|
||||||
|
"Forerake01AS",
|
||||||
|
"StrikeChest01Loop",
|
||||||
|
"StrikeChest01AS",
|
||||||
|
"HoldHead01BS",
|
||||||
|
"HoldHead01Loop",
|
||||||
|
"HoldHead01AS",
|
||||||
|
"Clap01",
|
||||||
|
"Turn01_90LBS",
|
||||||
|
"Turn01_90RBS",
|
||||||
|
"Turn01_90LAS",
|
||||||
|
"Turn01_90RAS",
|
||||||
|
"Alert01BS",
|
||||||
|
"Alert01Loop",
|
||||||
|
"Alert01AS",
|
||||||
|
"Fishing01_BS",
|
||||||
|
"Fishing01Loop",
|
||||||
|
"Fishing01AS",
|
||||||
|
"Think01_BS",
|
||||||
|
"Think01_Loop",
|
||||||
|
"Think01_AS",
|
||||||
|
"Channel01BS",
|
||||||
|
"Channel01Loop",
|
||||||
|
"Channel01AS",
|
||||||
|
"Fishing_Battle_BS",
|
||||||
|
"Fishing_Cast_AS",
|
||||||
|
"Fishing_Cast_BS",
|
||||||
|
"Fishing_Cast_Loop",
|
||||||
|
"Fishing_Choose",
|
||||||
|
"Fishing_Choose_Loop",
|
||||||
|
"Fishing_End",
|
||||||
|
"Fishing_Pull_01",
|
||||||
|
"Fishing_Pull_02",
|
||||||
|
"Fishing_Wait",
|
||||||
|
"Fishing_Pull_Fail",
|
||||||
|
"Bartender_MixingStandby",
|
||||||
|
"Bartender_MixingStart",
|
||||||
|
"Bartender_MixingToPour",
|
||||||
|
"Bartender_Pour",
|
||||||
|
"Bartender_PourFinish",
|
||||||
|
"Bartender_PourStandby",
|
||||||
|
"Bartender_AddLoop",
|
||||||
|
"Bartender_PrepareStart",
|
||||||
|
"Bartender_Standby",
|
||||||
|
"Bartender_AddStandby",
|
||||||
|
"Bartender_PrepareToStandby",
|
||||||
|
"Bartender_StandbyFinish",
|
||||||
|
"Blocking_BS",
|
||||||
|
"Blocking_Loop",
|
||||||
|
"Blocking_Back",
|
||||||
|
"Blocking_Bounce",
|
||||||
|
"Blocking_Hit",
|
||||||
|
"Blocking_AS"
|
||||||
|
};
|
||||||
|
|
||||||
|
AnimationChanger::AnimationChanger() : Feature(),
|
||||||
|
NF(f_Enabled, "Animation Changer", "Visuals::AnimationChanger", false),
|
||||||
|
NF(f_Animation, "Animation", "Visuals::AnimationChanger", "ExtraAttack"),
|
||||||
|
NF(f_ApplyKey, "Apply Animation", "Visuals::AnimationChanger", Hotkey('Y')),
|
||||||
|
NF(f_ResetKey, "Reset Animation", "Visuals::AnimationChanger", Hotkey('R'))
|
||||||
|
{
|
||||||
|
events::GameUpdateEvent += MY_METHOD_HANDLER(AnimationChanger::OnGameUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
const FeatureGUIInfo& AnimationChanger::GetGUIInfo() const
|
||||||
|
{
|
||||||
|
static const FeatureGUIInfo info{ "AnimationChanger", "Visuals", false };
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnimationChanger::DrawMain()
|
||||||
|
{
|
||||||
|
ImGui::BeginGroupPanel("Animation Changer");
|
||||||
|
{
|
||||||
|
ConfigWidget(f_Enabled, "Changes active character's animation.\nNot all animations work for every character except Main Character.");
|
||||||
|
if (f_Enabled)
|
||||||
|
{
|
||||||
|
if (ImGui::BeginCombo("Animations", f_Animation.value().c_str()))
|
||||||
|
{
|
||||||
|
for (auto &animation : animations)
|
||||||
|
{
|
||||||
|
bool is_selected = (f_Animation.value().c_str() == animation);
|
||||||
|
if (ImGui::Selectable(animation.c_str(), is_selected))
|
||||||
|
f_Animation.value() = animation;
|
||||||
|
|
||||||
|
if (is_selected)
|
||||||
|
ImGui::SetItemDefaultFocus();
|
||||||
|
}
|
||||||
|
ImGui::EndCombo();
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigWidget("Apply Key", f_ApplyKey, true);
|
||||||
|
ConfigWidget("Reset Key", f_ResetKey, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndGroupPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AnimationChanger::NeedStatusDraw() const
|
||||||
|
{
|
||||||
|
return f_Enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnimationChanger::DrawStatus()
|
||||||
|
{
|
||||||
|
ImGui::Text("AnimationChanger");
|
||||||
|
}
|
||||||
|
|
||||||
|
AnimationChanger& AnimationChanger::GetInstance()
|
||||||
|
{
|
||||||
|
static AnimationChanger instance;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnimationChanger::OnGameUpdate()
|
||||||
|
{
|
||||||
|
if (!f_Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Taiga#5555: Maybe need to add separate option to change delay value if user feels like it's too fast or slow.
|
||||||
|
UPDATE_DELAY(400);
|
||||||
|
|
||||||
|
auto& manager = game::EntityManager::instance();
|
||||||
|
auto avatar = manager.avatar();
|
||||||
|
if (avatar->animator() == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (f_ApplyKey.value().IsPressed())
|
||||||
|
app::Animator_Play(avatar->animator(), string_to_il2cppi(f_Animation.value().c_str()), 0, 0, nullptr);
|
||||||
|
|
||||||
|
if (f_ResetKey.value().IsPressed())
|
||||||
|
app::Animator_Rebind(avatar->animator(), nullptr);
|
||||||
|
}
|
||||||
|
}
|
27
cheat-library/src/user/cheat/visuals/AnimationChanger.h
Normal file
27
cheat-library/src/user/cheat/visuals/AnimationChanger.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <cheat-base/cheat/Feature.h>
|
||||||
|
#include <cheat-base/config/config.h>
|
||||||
|
|
||||||
|
namespace cheat::feature
|
||||||
|
{
|
||||||
|
|
||||||
|
class AnimationChanger : public Feature
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
config::Field<config::Toggle<Hotkey>> f_Enabled;
|
||||||
|
config::Field<std::string> f_Animation;
|
||||||
|
config::Field<Hotkey> f_ApplyKey;
|
||||||
|
config::Field<Hotkey> f_ResetKey;
|
||||||
|
|
||||||
|
const FeatureGUIInfo& GetGUIInfo() const override;
|
||||||
|
void DrawMain() override;
|
||||||
|
virtual bool NeedStatusDraw() const override;
|
||||||
|
void DrawStatus() override;
|
||||||
|
static AnimationChanger& GetInstance();
|
||||||
|
void OnGameUpdate();
|
||||||
|
|
||||||
|
private:
|
||||||
|
AnimationChanger();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,7 @@ namespace cheat::feature
|
|||||||
NF(f_DestroyOres, "Destroy Ores", "AutoDestroy", false),
|
NF(f_DestroyOres, "Destroy Ores", "AutoDestroy", false),
|
||||||
NF(f_DestroyShields, "Destroy Shields", "AutoDestroy", false),
|
NF(f_DestroyShields, "Destroy Shields", "AutoDestroy", false),
|
||||||
NF(f_DestroyDoodads, "Destroy Doodads", "AutoDestroy", false),
|
NF(f_DestroyDoodads, "Destroy Doodads", "AutoDestroy", false),
|
||||||
|
NF(f_DestroyPlants, "Destroy Plants", "AutoDestroy", false),
|
||||||
NF(f_Range, "Range", "AutoDestroy", 10.0f)
|
NF(f_Range, "Range", "AutoDestroy", 10.0f)
|
||||||
{
|
{
|
||||||
HookManager::install(app::MoleMole_LCAbilityElement_ReduceModifierDurability, LCAbilityElement_ReduceModifierDurability_Hook);
|
HookManager::install(app::MoleMole_LCAbilityElement_ReduceModifierDurability, LCAbilityElement_ReduceModifierDurability_Hook);
|
||||||
@ -43,6 +44,7 @@ namespace cheat::feature
|
|||||||
ConfigWidget("Doodads", f_DestroyDoodads, "Barrels, boxes, vases, etc.");
|
ConfigWidget("Doodads", f_DestroyDoodads, "Barrels, boxes, vases, etc.");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::TextColored(ImColor(255, 165, 0, 255), "Extremely risky!");
|
ImGui::TextColored(ImColor(255, 165, 0, 255), "Extremely risky!");
|
||||||
|
ConfigWidget("Plants", f_DestroyPlants, "Dandelion Seeds, Sakura Bloom, etc.");
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
ConfigWidget("Range (m)", f_Range, 0.1f, 1.0f, 15.0f);
|
ConfigWidget("Range (m)", f_Range, 0.1f, 1.0f, 15.0f);
|
||||||
}
|
}
|
||||||
@ -54,12 +56,13 @@ namespace cheat::feature
|
|||||||
|
|
||||||
void AutoDestroy::DrawStatus()
|
void AutoDestroy::DrawStatus()
|
||||||
{
|
{
|
||||||
ImGui::Text("Destroy [%.01fm%s%s%s%s]",
|
ImGui::Text("Destroy [%.01fm%s%s%s%s%s]",
|
||||||
f_Range.value(),
|
f_Range.value(),
|
||||||
f_DestroyOres || f_DestroyShields || f_DestroyDoodads ? "|" : "",
|
f_DestroyOres || f_DestroyShields || f_DestroyDoodads || f_DestroyPlants ? "|" : "",
|
||||||
f_DestroyOres ? "O" : "",
|
f_DestroyOres ? "O" : "",
|
||||||
f_DestroyShields ? "S" : "",
|
f_DestroyShields ? "S" : "",
|
||||||
f_DestroyDoodads ? "D" : "");
|
f_DestroyDoodads ? "D" : "",
|
||||||
|
f_DestroyPlants ? "P" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoDestroy& AutoDestroy::GetInstance()
|
AutoDestroy& AutoDestroy::GetInstance()
|
||||||
@ -83,10 +86,11 @@ namespace cheat::feature
|
|||||||
autoDestroy.f_Range > manager.avatar()->distance(entity) &&
|
autoDestroy.f_Range > manager.avatar()->distance(entity) &&
|
||||||
(
|
(
|
||||||
(autoDestroy.f_DestroyOres && game::filters::combined::Ores.IsValid(manager.entity(entity))) ||
|
(autoDestroy.f_DestroyOres && game::filters::combined::Ores.IsValid(manager.entity(entity))) ||
|
||||||
(autoDestroy.f_DestroyDoodads && game::filters::combined::Doodads.IsValid(manager.entity(entity))) ||
|
(autoDestroy.f_DestroyDoodads && (game::filters::combined::Doodads.IsValid(manager.entity(entity)) || game::filters::chest::SBramble.IsValid(manager.entity(entity)))) ||
|
||||||
(autoDestroy.f_DestroyShields && !game::filters::combined::MonsterBosses.IsValid(manager.entity(entity)) && (
|
(autoDestroy.f_DestroyShields && !game::filters::combined::MonsterBosses.IsValid(manager.entity(entity)) && (
|
||||||
game::filters::combined::MonsterShielded.IsValid(manager.entity(entity)) || // For shields attached to monsters, e.g. abyss mage shields.
|
game::filters::combined::MonsterShielded.IsValid(manager.entity(entity)) || // For shields attached to monsters, e.g. abyss mage shields.
|
||||||
game::filters::combined::MonsterEquips.IsValid(manager.entity(entity)) // For shields/weapons equipped by monsters, e.g. rock shield.
|
game::filters::combined::MonsterEquips.IsValid(manager.entity(entity)) || // For shields/weapons equipped by monsters, e.g. rock shield.
|
||||||
|
(autoDestroy.f_DestroyPlants && game::filters::combined::PlantDestroy.IsValid(manager.entity(entity))) // For plants e.g dandelion seeds.
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -12,6 +12,7 @@ namespace cheat::feature
|
|||||||
config::Field<config::Toggle<Hotkey>> f_DestroyOres;
|
config::Field<config::Toggle<Hotkey>> f_DestroyOres;
|
||||||
config::Field<config::Toggle<Hotkey>> f_DestroyShields;
|
config::Field<config::Toggle<Hotkey>> f_DestroyShields;
|
||||||
config::Field<config::Toggle<Hotkey>> f_DestroyDoodads;
|
config::Field<config::Toggle<Hotkey>> f_DestroyDoodads;
|
||||||
|
config::Field<config::Toggle<Hotkey>> f_DestroyPlants;
|
||||||
config::Field<float> f_Range;
|
config::Field<float> f_Range;
|
||||||
|
|
||||||
static AutoDestroy& GetInstance();
|
static AutoDestroy& GetInstance();
|
||||||
|
@ -47,6 +47,7 @@ namespace cheat::feature
|
|||||||
void FreezeEnemies::OnGameUpdate()
|
void FreezeEnemies::OnGameUpdate()
|
||||||
{
|
{
|
||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
|
static bool change = false;
|
||||||
|
|
||||||
for (const auto& monster : manager.entities(game::filters::combined::Monsters))
|
for (const auto& monster : manager.entities(game::filters::combined::Monsters))
|
||||||
{
|
{
|
||||||
@ -61,11 +62,16 @@ namespace cheat::feature
|
|||||||
//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::FreezeAll, nullptr);
|
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeAll, nullptr);
|
||||||
app::Animator_set_speed(animator, 0.f, nullptr);
|
app::Animator_set_speed(animator, 0.f, nullptr);
|
||||||
|
change = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
|
app::Rigidbody_set_constraints(rigidBody, app::RigidbodyConstraints__Enum::FreezeRotation, nullptr);
|
||||||
|
if (!change)
|
||||||
|
{
|
||||||
app::Animator_set_speed(animator, 1.f, nullptr);
|
app::Animator_set_speed(animator, 1.f, nullptr);
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user