Merge pull request #388 from Taiga74164/changes-2

Changes
This commit is contained in:
Taiga 2022-08-04 21:08:09 -07:00 committed by GitHub
commit c933f0bfd1
16 changed files with 529 additions and 121 deletions

View File

@ -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" />

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -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"

View File

@ -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

View File

@ -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);

View File

@ -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,
{ {

View File

@ -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;

View File

@ -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;

View File

@ -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();

View 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);
}
}

View 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();
};
}

View File

@ -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.
)) ))
) )
) )

View File

@ -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();

View File

@ -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;
}
} }
} }
} }