Merge branch 'master' into faketime

This commit is contained in:
Callow 2022-06-19 14:44:05 +03:00 committed by GitHub
commit 01cde9f4c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 1779 additions and 236 deletions

View File

@ -1,12 +1,10 @@
<h1 align="center">Akebi GC</h1> <h1 align="center">Akebi GC</h1>
The great software for some game that exploiting anime girls (and boys). The great software for some anime game which is for exploiting with girls (and boys).
In first week after 2.7 update cheat can be unstable. Please create issue, if you catch a crash after updating to 2.7.
<hr>
We opened a [Discord server](https://discord.gg/MmV8hNZB9S)
<h1 align="center">Getting Started</h1> <h1 align="center">Getting Started</h1>
### Building from source ## Building from source
It is reccomended to use [Visual Studio 2022.](https://visualstudio.microsoft.com/) It is reccomended to use [Visual Studio 2022.](https://visualstudio.microsoft.com/)
As well as setting up **`cheat-library`** as startup project. As well as setting up **`cheat-library`** as startup project.
**The following is a recommended procedure, but others may be used.** **The following is a recommended procedure, but others may be used.**
@ -14,7 +12,7 @@ As well as setting up **`cheat-library`** as startup project.
1. Open `Akebi-GC/akebi-gc.sln` 1. Open `Akebi-GC/akebi-gc.sln`
1. Build solution `akebi-gc.sln`. 1. Build solution `akebi-gc.sln`.
### Release ## Release
1. Head over to the releases page 1. Head over to the releases page
1. Download the latest binaries 1. Download the latest binaries
@ -33,15 +31,14 @@ As well as setting up **`cheat-library`** as startup project.
- Protection Bypass - Protection Bypass
- In-Game GUI - In-Game GUI
- Hotkeys - Hotkeys
- Notifications
#### Player #### Player
- God Mode - Invincible
- Unlimited Stamina - Unlimited Stamina
- Dumb Enemies (Enemies don't attack) - Dumb Enemies
- Player - Attack Modifier
- Multiply Attacks - No Cooldown Skill/Ultimate/Sprint
- No Cooldown Skill/Ultimate
- No Cooldown Sprint
#### World #### World
- Auto Loot - Auto Loot
@ -50,6 +47,7 @@ As well as setting up **`cheat-library`** as startup project.
- Auto Tree Farm - Auto Tree Farm
- Mob Vacuum - Mob Vacuum
- Auto Fish - Auto Fish
- Music Event (temporary)
#### Teleport #### Teleport
- Chest/Oculi Teleport (Teleports to nearest) - Chest/Oculi Teleport (Teleports to nearest)
@ -59,9 +57,14 @@ As well as setting up **`cheat-library`** as startup project.
- ESP - ESP
- Interactive Map - Interactive Map
- Elemental Sight - Elemental Sight
- Profile Changer
- Ingame Embedded Browser
- Hide UI
- Camera Zoom
- No Fog
#### Debugging #### Debugging
- Entity List - Entities Manager
- Position Info - Position Info
- FPS Graph - FPS Graph
- Packet Sniffer - Packet Sniffer
@ -94,10 +97,27 @@ As well as setting up **`cheat-library`** as startup project.
<img src="https://github.com/CallowBlack/gif-demos/blob/main/genshin-cheat/auto-talk-demo.gif"/> <img src="https://github.com/CallowBlack/gif-demos/blob/main/genshin-cheat/auto-talk-demo.gif"/>
</details> </details>
<h1 align="center">Roadmap</h1> # Bugs
Welcome to the short explanation for bug reporting
- [ ] Cutscene Skipping 1. You Found a bug.
- [ ] Create database for chests, oculi, etc. 1. write down what happened, as well as your first thoughts on what you think caused it.
1. can it be reproduced? Yes or no. If yes: Explain in as much clear as possible. i.e what happens when the bug occurs and why it occurs.
1. Tell us which version you are using. copy the `SHA`/ Version Number of the latest commit when you built the mod. For example: `bd17a00ec388f3b93624280cde9e1c66e740edf9` / Release 0.7
## Bug reporting template
<br>
### Ex.
I found a bug in the feature `enemy vacuum`.
I think it's caused by the filter functions that are defined in `someFeature.cpp`.
```
Date Occured: 5/3/2022
Is it reproducible: Occasionally
Latest Commit used: bd17a00ec388f3b93624280cde9e1c66e740edf9
Release Version: 0.7
```
<h1 align="center">Contributing</h1> <h1 align="center">Contributing</h1>
@ -112,28 +132,3 @@ As well as setting up **`cheat-library`** as startup project.
Open an issue with the title of the suggesstion you want to make. Open an issue with the title of the suggesstion you want to make.
In the description, make sure it is descriptive enough so our devs can understand what you want and how you want it. In the description, make sure it is descriptive enough so our devs can understand what you want and how you want it.
## Bugs
Welcome to the short explanation for bug reporting, as well as the bug report template.
1. Find a bug and write down what happened, as well as your first thoughts on what you think caused it.
2. Try to reproduce the bug. For this you need to understand what actually happened, leading up to the bug and when the actual bug happened. To make sure you get all this information correctly taking various forms of documentations, such as video, screenshots etc is essential. These steps makes it a lot easier to try and figure out what actually happened. Try to replicate the scenario where the bug appeared, as close to the original as possible. What we would recommend for this step is using the bug reporting template which can be found on page 2 and simply adding the information you have / find in there.
3. can it be reproduced? Yes or no. If yes: Explain in as much detail as possible what happens when the bug occurs and why it occurs. Try and explain it as cleanly and as concise as possible to make sure that the coders dont have to read an essay to understand what could be a simple bug with a simple fix. For this, remember that information is very subjective so it is much better to over communicate than to risk confusion. If no: Try to provide as much information about the bug as possible, so that the testers will be able to replicate the scenario in which the bug occurred more easily so we can try to reproduce the bug.
4. Tell us which version you are using. Otherwise we would be getting bug reports on the same issue, that has been infact fixed in the latest commits. copy the SHA / Version Number of the latest commit when you built the mod. For example: `bd17a00ec388f3b93624280cde9e1c66e740edf9` / Release 0.7
Notes: Please remember to always record your testing sessions on your local hard drive and then upload them unlisted to youtube to conserve memory space on your computer and to give us easy access to your replays. This is to ensure that the optimal amount of documentation is available for the bug testers and coders to use as a guideline for either replicating scenarios, reproducing bugs or fixing them.
TL:DR Record all your stuff while playing the mod and report any bugs to the issues section of this repository.
### Bug reporting template
Title: e.g. “Instantly kill enemy with Shackles“
Description: “Game crashed if x, y, z“
-- Footer --
Date Occured: 5 / 3 / 2022
Is it reproducible: Yes / Occasionally / No
Latest Commit used: `bd17a00ec388f3b93624280cde9e1c66e740edf9`
Release Version: 0.7

View File

@ -45,7 +45,7 @@ namespace cheat
ImGui::SetNextWindowSize(ImVec2(600, 300), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(600, 300), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("CCGenshin (By Callow)")) if (!ImGui::Begin("Akebi-GC"))
{ {
ImGui::End(); ImGui::End();
return; return;

View File

@ -207,7 +207,7 @@ namespace renderer
key = VK_MBUTTON; key = VK_MBUTTON;
break; break;
case WM_XBUTTONUP: case WM_XBUTTONUP:
key = GET_XBUTTON_WPARAM(wParam); key = GET_XBUTTON_WPARAM(wParam) == XBUTTON1 ? VK_XBUTTON1 : VK_XBUTTON2;
break; break;
case WM_KEYUP: case WM_KEYUP:
key = static_cast<short>(wParam); key = static_cast<short>(wParam);

View File

@ -51,9 +51,14 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClInclude> </ClInclude>
<ClInclude Include="src\user\cheat\teleport\CustomTeleports.h" /> <ClInclude Include="src\user\cheat\teleport\CustomTeleports.h" />
<ClInclude Include="src\user\cheat\visuals\Browser.h" />
<ClInclude Include="src\user\cheat\visuals\CameraZoom.h" /> <ClInclude Include="src\user\cheat\visuals\CameraZoom.h" />
<ClInclude Include="src\user\cheat\visuals\EnablePeaking.h" />
<ClInclude Include="src\user\cheat\visuals\FPSUnlock.h" /> <ClInclude Include="src\user\cheat\visuals\FPSUnlock.h" />
<ClInclude Include="src\user\cheat\visuals\HideUI.h" />
<ClInclude Include="src\user\cheat\visuals\NoFog.h" /> <ClInclude Include="src\user\cheat\visuals\NoFog.h" />
<ClInclude Include="src\user\cheat\visuals\PaimonFollow.h" />
<ClInclude Include="src\user\cheat\visuals\ProfileChanger.h" />
<ClInclude Include="src\user\cheat\visuals\ShowChestIndicator.h" /> <ClInclude Include="src\user\cheat\visuals\ShowChestIndicator.h" />
<ClInclude Include="src\user\cheat\world\AutoCook.h" /> <ClInclude Include="src\user\cheat\world\AutoCook.h" />
<ClInclude Include="src\user\cheat\world\AutoFish.h" /> <ClInclude Include="src\user\cheat\world\AutoFish.h" />
@ -119,6 +124,7 @@
<ClInclude Include="src\user\cheat\world\DumbEnemies.h" /> <ClInclude Include="src\user\cheat\world\DumbEnemies.h" />
<ClInclude Include="src\user\cheat\world\KillAura.h" /> <ClInclude Include="src\user\cheat\world\KillAura.h" />
<ClInclude Include="src\user\cheat\world\MobVacuum.h" /> <ClInclude Include="src\user\cheat\world\MobVacuum.h" />
<ClInclude Include="src\user\cheat\world\MusicEvent.h" />
<ClInclude Include="src\user\main.h" /> <ClInclude Include="src\user\main.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -162,9 +168,14 @@
</ClCompile> </ClCompile>
<ClCompile Include="src\user\cheat\teleport\CustomTeleports.cpp" /> <ClCompile Include="src\user\cheat\teleport\CustomTeleports.cpp" />
<ClCompile Include="src\user\cheat\GenshinCM.cpp" /> <ClCompile Include="src\user\cheat\GenshinCM.cpp" />
<ClCompile Include="src\user\cheat\visuals\Browser.cpp" />
<ClCompile Include="src\user\cheat\visuals\CameraZoom.cpp" /> <ClCompile Include="src\user\cheat\visuals\CameraZoom.cpp" />
<ClCompile Include="src\user\cheat\visuals\EnablePeaking.cpp" />
<ClCompile Include="src\user\cheat\visuals\FPSUnlock.cpp" /> <ClCompile Include="src\user\cheat\visuals\FPSUnlock.cpp" />
<ClCompile Include="src\user\cheat\visuals\HideUI.cpp" />
<ClCompile Include="src\user\cheat\visuals\NoFog.cpp" /> <ClCompile Include="src\user\cheat\visuals\NoFog.cpp" />
<ClCompile Include="src\user\cheat\visuals\PaimonFollow.cpp" />
<ClCompile Include="src\user\cheat\visuals\ProfileChanger.cpp" />
<ClCompile Include="src\user\cheat\visuals\ShowChestIndicator.cpp" /> <ClCompile Include="src\user\cheat\visuals\ShowChestIndicator.cpp" />
<ClCompile Include="src\user\cheat\world\AutoCook.cpp" /> <ClCompile Include="src\user\cheat\world\AutoCook.cpp" />
<ClCompile Include="src\user\cheat\world\AutoFish.cpp" /> <ClCompile Include="src\user\cheat\world\AutoFish.cpp" />
@ -227,6 +238,7 @@
<ClCompile Include="src\user\cheat\world\DumbEnemies.cpp" /> <ClCompile Include="src\user\cheat\world\DumbEnemies.cpp" />
<ClCompile Include="src\user\cheat\world\KillAura.cpp" /> <ClCompile Include="src\user\cheat\world\KillAura.cpp" />
<ClCompile Include="src\user\cheat\world\MobVacuum.cpp" /> <ClCompile Include="src\user\cheat\world\MobVacuum.cpp" />
<ClCompile Include="src\user\cheat\world\MusicEvent.cpp" />
<ClCompile Include="src\user\main.cpp" /> <ClCompile Include="src\user\main.cpp" />
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup>
@ -919,8 +931,7 @@
</Command> </Command>
</PostBuildEvent> </PostBuildEvent>
<CustomBuildStep> <CustomBuildStep>
<Command>"$(OutDir)injector.exe" <Command>"$(OutDir)injector.exe" powershell -nop -c "&amp;amp; {sleep 15}"</Command>
powershell -nop -c "&amp; {sleep 15}"</Command>
<Outputs>$(OutDir)_noexist.nope;%(Outputs)</Outputs> <Outputs>$(OutDir)_noexist.nope;%(Outputs)</Outputs>
<Inputs>$(TargetPath);%(Inputs)</Inputs> <Inputs>$(TargetPath);%(Inputs)</Inputs>
</CustomBuildStep> </CustomBuildStep>

View File

@ -228,6 +228,24 @@
<ClInclude Include="src\user\cheat\world\FakeTime.h"> <ClInclude Include="src\user\cheat\world\FakeTime.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\user\cheat\visuals\ProfileChanger.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\user\cheat\visuals\PaimonFollow.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\user\cheat\visuals\HideUI.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\user\cheat\visuals\Browser.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\user\cheat\world\MusicEvent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\user\cheat\visuals\EnablePeaking.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Font Include="res\Ruda-Bold.ttf" /> <Font Include="res\Ruda-Bold.ttf" />
@ -414,6 +432,24 @@
<ClCompile Include="src\user\cheat\world\FakeTime.cpp"> <ClCompile Include="src\user\cheat\world\FakeTime.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\user\cheat\visuals\ProfileChanger.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\user\cheat\visuals\PaimonFollow.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\user\cheat\visuals\HideUI.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\user\cheat\visuals\Browser.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\user\cheat\world\MusicEvent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\user\cheat\visuals\EnablePeaking.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="res\res.rc"> <ResourceCompile Include="res\res.rc">

View File

@ -17,6 +17,8 @@ DO_APP_FUNC(0x00F0DCE0, bool, MoleMole_MapModule_IsAreaUnlock, (MoleMole_MapModu
// DBDMOONJALD => op_Implicit // DBDMOONJALD => op_Implicit
DO_APP_FUNC(0x01B0A910, uint16_t, MoleMole_SimpleSafeUInt16_get_Value, (SimpleSafeUInt16 v, MethodInfo* method)); DO_APP_FUNC(0x01B0A910, uint16_t, MoleMole_SimpleSafeUInt16_get_Value, (SimpleSafeUInt16 v, MethodInfo* method));
DO_APP_FUNC(0x0400F280, uint32_t, MoleMole_SimpleSafeUInt32_get_Value, (SimpleSafeUInt32 v, MethodInfo* method)); DO_APP_FUNC(0x0400F280, uint32_t, MoleMole_SimpleSafeUInt32_get_Value, (SimpleSafeUInt32 v, MethodInfo* method));
DO_APP_FUNC(0x05DF4590, String*, Marshal_PtrToStringAnsi, (void* ptr, MethodInfo* method));
// Map utility // Map utility
DO_APP_FUNC(0x00E866B0, Rect, MonoInLevelMapPage_get_mapRect, (MonoInLevelMapPage* __this, MethodInfo* method)); DO_APP_FUNC(0x00E866B0, Rect, MonoInLevelMapPage_get_mapRect, (MonoInLevelMapPage* __this, MethodInfo* method));
@ -40,7 +42,8 @@ DO_APP_FUNC(0x016189E0, void, MoleMole_DataItem_HandleNormalProp, (DataItem* __t
// God mode // God mode
DO_APP_FUNC(0x027DB100, void, VCHumanoidMove_NotifyLandVelocity, (VCHumanoidMove* __this, Vector3 velocity, float reachMaxDownVelocityTime, MethodInfo* method)); DO_APP_FUNC(0x027DB100, void, VCHumanoidMove_NotifyLandVelocity, (VCHumanoidMove* __this, Vector3 velocity, float reachMaxDownVelocityTime, MethodInfo* method));
DO_APP_FUNC(0x036889B0, bool, Miscs_CheckTargetAttackable, (BaseEntity* attackerEntity, BaseEntity* targetEntity, MethodInfo* method)); DO_APP_FUNC(0x036889B0, bool, Miscs_CheckTargetAttackable, (BaseEntity* attackerEntity, BaseEntity* targetEntity, MethodInfo* method));
// DO_APP_FUNC(0x00D0CA90, void, MoleMole_LCBaseCombat_FireBeingHitEvent, (LCBaseCombat* __this, uint32_t attackeeRuntimeID, AttackResult* attackResult, MethodInfo* method)); DO_APP_FUNC(0x00D0CA90, void, MoleMole_LCBaseCombat_FireBeingHitEvent, (LCBaseCombat* __this, uint32_t attackeeRuntimeID, AttackResult* attackResult, MethodInfo* method));
DO_APP_FUNC(0x02383880, bool, MoleMole_ActorAbilityPlugin_HanlderModifierThinkTimerUp, (ActorAbilityPlugin* __this, float delay, Object* arg, MethodInfo* method));
// Cooldown cheats // Cooldown cheats
@ -73,6 +76,9 @@ DO_APP_FUNC(0x00F97D70, void, MoleMole_TalkDialogContext_OnDialogSelectItem, (Ta
DO_APP_FUNC(0x02BF0040, void, MoleMole_InLevelCutScenePageContext_OnFreeClick, (InLevelCutScenePageContext* __this, MethodInfo* method)); DO_APP_FUNC(0x02BF0040, void, MoleMole_InLevelCutScenePageContext_OnFreeClick, (InLevelCutScenePageContext* __this, MethodInfo* method));
DO_APP_FUNC(0x02BF1AC0, void, MoleMole_InLevelCutScenePageContext_UpdateView, (InLevelCutScenePageContext* __this, MethodInfo* method)); DO_APP_FUNC(0x02BF1AC0, void, MoleMole_InLevelCutScenePageContext_UpdateView, (InLevelCutScenePageContext* __this, MethodInfo* method));
DO_APP_FUNC(0x02BEF110, void, MoleMole_InLevelCutScenePageContext_ClearView, (InLevelCutScenePageContext* __this, MethodInfo* method)); DO_APP_FUNC(0x02BEF110, void, MoleMole_InLevelCutScenePageContext_ClearView, (InLevelCutScenePageContext* __this, MethodInfo* method));
// Skip Cutscene | RyujinZX#6666
DO_APP_FUNC(0x0363A300, void, CriwareMediaPlayer_Update, (CriwareMediaPlayer* __this, MethodInfo* method));
DO_APP_FUNC(0x0363A0D0, void, CriwareMediaPlayer_Skip, (CriwareMediaPlayer* __this, MethodInfo* method));
// Protection bypass // Protection bypass
@ -133,6 +139,7 @@ DO_APP_FUNC(0x0292C7F0, void, MoleMole_FishingModule_onFishChosenNotify, (void*
// Visuals // Visuals
DO_APP_FUNC(0x013FC090, void, MoleMole_SCameraModuleInitialize_SetWarningLocateRatio, (SCameraModuleInitialize* __this, double deltaTime, CameraShareData* data, MethodInfo* method)); DO_APP_FUNC(0x013FC090, void, MoleMole_SCameraModuleInitialize_SetWarningLocateRatio, (SCameraModuleInitialize* __this, double deltaTime, CameraShareData* data, MethodInfo* method));
DO_APP_FUNC(0x01B8DC20, void, MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue, (MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method));
// Chest Indicator | RyujinZX#6666 // Chest Indicator | RyujinZX#6666
DO_APP_FUNC(0x04C9B450, bool, MoleMole_LCIndicatorPlugin_DoCheck, (LCIndicatorPlugin* __this, MethodInfo* method)); DO_APP_FUNC(0x04C9B450, bool, MoleMole_LCIndicatorPlugin_DoCheck, (LCIndicatorPlugin* __this, MethodInfo* method));
@ -143,10 +150,57 @@ DO_APP_FUNC(0x04C9A750, void, MoleMole_LCIndicatorPlugin_HideIcon, (LCIndicatorP
DO_APP_FUNC(0x02854E30, void, MoleMole_PlayerModule_RequestPlayerCook, (MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method)); DO_APP_FUNC(0x02854E30, void, MoleMole_PlayerModule_RequestPlayerCook, (MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method));
DO_APP_FUNC(0x02858180, void, MoleMole_PlayerModule_OnPlayerCookRsp, (MoleMole_PlayerModule* __this, PlayerCookRsp* rsp, MethodInfo* method)); DO_APP_FUNC(0x02858180, void, MoleMole_PlayerModule_OnPlayerCookRsp, (MoleMole_PlayerModule* __this, PlayerCookRsp* rsp, MethodInfo* method));
DO_APP_FUNC(0x033F5820, void, MoleMole_CookingQtePageContext_UpdateProficiency, (CookingQtePageContext* __this, MethodInfo* method)); DO_APP_FUNC(0x033F5820, void, MoleMole_CookingQtePageContext_UpdateProficiency, (CookingQtePageContext* __this, MethodInfo* method));
DO_APP_FUNC(0x0116AA10, uint32_t, CookRecipeExcelConfig_get_maxProficiency, (CookRecipeExcelConfig* __this, MethodInfo* method)); DO_APP_FUNC(0x008ECD70, uint32_t, MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum, (uint32_t UpdateCookRecipeDic, MethodInfo* method));
DO_APP_FUNC(0x032256C0, void, CookingQtePageContext_CloseItemGotPanel, (CookingQtePageContext* __this, MethodInfo* method));
// Profile Changer | RyujinZX#6666
DO_APP_FUNC(0x027A41A0, Button_1*, ProfilePage, (MonoInLevelPlayerProfilePage* __this, MethodInfo* method)); // MonoInLevelPlayerProfilePage_get_logoutButton
DO_APP_FUNC(0x016A77B0, void, ProfileEditPage, (MonoFriendInformationDialog* __this, Sprite* value, MethodInfo* method)); // MonoFriendInformationDialog_set_icon
// Game Object, Component, Transform Utility
DO_APP_FUNC(0x0662F130, GameObject*, GameObject_Find, (String* name, MethodInfo* method));
DO_APP_FUNC(0x0662F190, Component_1*, GameObject_GetComponentByName, (GameObject* __this, String* type, MethodInfo* method));
DO_APP_FUNC(0x0662F660, bool, GameObject_get_active, (GameObject* __this, MethodInfo* method));
DO_APP_FUNC(0x0662F720, void, GameObject_set_active, (GameObject* __this, bool value, MethodInfo* method));
DO_APP_FUNC(0x065546E0, Transform*, Transform_GetChild, (Transform* __this, int32_t index, MethodInfo* method));
DO_APP_FUNC(0x0652EA10, Component_1*, Component_1_GetComponent_1, (Component_1* __this, String* type, MethodInfo* method));
DO_APP_FUNC(0x0662F520, void, GameObject_SetActive, (GameObject* __this, bool value, MethodInfo* method));
DO_APP_FUNC(0x0662F100, GameObject*, GameObject_CreatePrimitive, (PrimitiveType__Enum type, MethodInfo* method));
DO_APP_FUNC(0x0662F700, Transform*, GameObject_get_transform, (GameObject* __this, MethodInfo* method));
DO_APP_FUNC(0x06555EF0, void, Transform_set_localRotation, (Transform* __this, Quaternion value, MethodInfo* method));
DO_APP_FUNC(0x065548E0, void, Transform_set_localScale, (Transform* __this, Vector3 value, MethodInfo* method));
DO_APP_FUNC(0x06555EE0, void, Transform_set_localPosition, (Transform* __this, Vector3 value, MethodInfo* method));
DO_APP_FUNC(0x0662F090, Component_1*, GameObject_AddComponentInternal, (GameObject* __this, String* className, MethodInfo* method));
DO_APP_FUNC(0x0662F0A0, Component_1*, GameObject_AddComponent, (GameObject* __this, Type* componentType, MethodInfo* method));
DO_APP_FUNC(0x065508C0, void, Object_1_DestroyImmediate_1, (Object_1* obj, MethodInfo* method));
DO_APP_FUNC(0x06550C00, Object_1*, Object_1_Instantiate_2, (Object_1* original, MethodInfo* method));
DO_APP_FUNC(0x041B0BB0, Object*, Object_1_Instantiate_5, (Object* original, MethodInfo* method));
DO_APP_FUNC(0x041B0BB0, GameObject*, Object_1_Instantiate_11, (GameObject* original, MethodInfo* method));
// Music game event
DO_APP_FUNC(0x00FFE490, void, MusicGamePlayComponent_OnPlayerUpdate, (MusicGamePlayComponent* __this, MethodInfo* method));
DO_APP_FUNC(0x00FFE600, void, MusicGamePlayComponent_OnStart, (MusicGamePlayComponent* __this, BeatMapData* beatMapData, MusicMetaInfo* musicMetaInfo, MethodInfo* method));
DO_APP_FUNC(0x00FFE310, void, MusicGamePlayComponent_OnMiss, (MusicGamePlayComponent* __this, MethodInfo* method));
DO_APP_FUNC(0x00FFEE40, void, MusicGamePlayComponent_set_combo, (MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method));
DO_APP_FUNC(0x00FFF050, void, MusicGamePlayComponent_set_score, (MusicGamePlayComponent* __this, float value, MethodInfo* method));
DO_APP_FUNC(0x01B5AEB0, void, MusicGamePlayComponent_set_maxCombo, (MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method));
DO_APP_FUNC(0x02C749E0, void, MusicGamePlayComponent_set_perfectCnt, (MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method));
DO_APP_FUNC(0x035C4E50, void, MusicGamePlayComponent_set_greatCnt, (MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method));
DO_APP_FUNC(0x017A31C0, void, MusicGamePlayComponent_set_missCnt, (MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method));
DO_APP_FUNC(0x00FFDE90, void, MusicGamePlayComponent_OnHit, (MusicGamePlayComponent* __this, float score, MethodInfo* method));
// Utility // Utility
DO_APP_FUNC(0x03551B60, String*, Text_get_text, (Text* __this, MethodInfo* method));
DO_APP_FUNC(0x06568060, void, Text_set_text, (Text* __this, String* value, MethodInfo* method));
DO_APP_FUNC(0x0658D6B0, void, Slider_1_set_value, (Slider_1* __this, float value, MethodInfo* method));
DO_APP_FUNC(0x0658D560, void, Slider_1_set_maxValue, (Slider_1* __this, float value, MethodInfo* method));
DO_APP_FUNC(0x0658D5E0, void, Slider_1_set_minValue, (Slider_1* __this, float value, MethodInfo* method));
DO_APP_FUNC(0x065F6470, Rect, Sprite_get_rect, (Sprite* __this, MethodInfo* method));
DO_APP_FUNC(0x0667D6A0, Texture2D*, NativeGallery_LoadImageAtPath, (String* imagePath, int32_t maxSize, bool markTextureNonReadable, bool generateMipmaps, bool linearColorSpace, MethodInfo* method));
DO_APP_FUNC(0x065F6270, Sprite*, Sprite_Create, (Texture2D* texture, Rect rect, Vector2 pivot, float pixelsPerUnit, MethodInfo* method));
DO_APP_FUNC(0x036865D0, float, Miscs_CalcCurrentGroundWaterHeight, (float x, float z, MethodInfo* method)); DO_APP_FUNC(0x036865D0, float, Miscs_CalcCurrentGroundWaterHeight, (float x, float z, MethodInfo* method));
DO_APP_FUNC(0x03685E00, float, Miscs_CalcCurrentGroundHeight, (float x, float z, MethodInfo* method)); DO_APP_FUNC(0x03685E00, float, Miscs_CalcCurrentGroundHeight, (float x, float z, MethodInfo* method));
DO_APP_FUNC(0x03685F10, float, Miscs_CalcCurrentGroundHeight_1, (float x, float z, float rayStartHeight, float rayDetectLength, int32_t layer, MethodInfo* method)); DO_APP_FUNC(0x03685F10, float, Miscs_CalcCurrentGroundHeight_1, (float x, float z, float rayStartHeight, float rayDetectLength, int32_t layer, MethodInfo* method));
@ -169,8 +223,6 @@ DO_APP_FUNC(0x01AA5200, Notify, Notify_CreateNotify_1, (MoleMole_NotifyTypes__En
DO_APP_FUNC(0x020C7AA0, float, MoleMole_SafeFloat_get_Value, (SafeFloat safeFloat, MethodInfo* method)); DO_APP_FUNC(0x020C7AA0, float, MoleMole_SafeFloat_get_Value, (SafeFloat safeFloat, MethodInfo* method));
// DO_APP_FUNC(0x020C7920, MoleMole_SafeFloat, MoleMole_SafeFloat_DBDMOONJALD, (float IGFNEICJINB, MethodInfo * method)); // DO_APP_FUNC(0x020C7920, MoleMole_SafeFloat, MoleMole_SafeFloat_DBDMOONJALD, (float IGFNEICJINB, MethodInfo * method));
DO_APP_FUNC(0x020C7920, SafeFloat, MoleMole_SafeFloat_set_Value, (float value, MethodInfo* method)); DO_APP_FUNC(0x020C7920, SafeFloat, MoleMole_SafeFloat_set_Value, (float value, MethodInfo* method));
//DO_APP_FUNC(0x039E2290, MoleMole_LCBaseCombat *, MoleMole_BaseEntity_GetLogicCombatComponent_1, (MoleMole_BaseEntity * __this, MethodInfo * method));
DO_APP_FUNC(0x039E2290, LCBaseCombat*, MoleMole_BaseEntity_GetLogicCombatComponent_1, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x039E2290, LCBaseCombat*, MoleMole_BaseEntity_GetLogicCombatComponent_1, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC(0x035CC430, String*, MoleMole_BaseEntity_ToStringRelease, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x035CC430, String*, MoleMole_BaseEntity_ToStringRelease, (BaseEntity* __this, MethodInfo* method));
@ -184,21 +236,13 @@ DO_APP_FUNC(0x035C08A0, Vector3, MoleMole_BaseEntity_GetRight, (BaseEntity* __th
DO_APP_FUNC(0x035CB210, Vector3, MoleMole_BaseEntity_GetUp, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x035CB210, Vector3, MoleMole_BaseEntity_GetUp, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC(0x035D5B30, bool, MoleMole_BaseEntity_IsActive, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x035D5B30, bool, MoleMole_BaseEntity_IsActive, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC(0x035C7A50, Rigidbody*, MoleMole_BaseEntity_GetRigidbody, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x035C7A50, Rigidbody*, MoleMole_BaseEntity_GetRigidbody, (BaseEntity* __this, MethodInfo* method));
//DO_APP_FUNC(0x039E22C0, MoleMole_VCBaseMove_1 *, MoleMole_BaseEntity_GetMoveComponent_1, (MoleMole_BaseEntity * __this, MethodInfo * method));
DO_APP_FUNC(0x039E22C0, VCBaseMove*, MoleMole_BaseEntity_GetMoveComponent_1, (BaseEntity* __this, MethodInfo* method)); // double check DO_APP_FUNC(0x039E22C0, VCBaseMove*, MoleMole_BaseEntity_GetMoveComponent_1, (BaseEntity* __this, MethodInfo* method)); // double check
DO_APP_FUNC(0x035C3850, List_1_MoleMole_BaseComponent_*, MoleMole_BaseEntity_GetAllLogicComponents, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x035C3850, List_1_MoleMole_BaseComponent_*, MoleMole_BaseEntity_GetAllLogicComponents, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC(0x0187FDC0, GameObject*, MoleMole_BaseEntity_get_gameObject, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x0187FDC0, GameObject*, MoleMole_BaseEntity_get_gameObject, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC(0x035ACC70, GameObject*, MoleMole_BaseEntity_get_rootGameObject, (BaseEntity* __this, MethodInfo* method)); DO_APP_FUNC(0x035ACC70, GameObject*, MoleMole_BaseEntity_get_rootGameObject, (BaseEntity* __this, MethodInfo* method));
DO_APP_FUNC_METHODINFO(0x096EAD20, MoleMole_BaseEntity_GetMoveComponent_1__MethodInfo); DO_APP_FUNC_METHODINFO(0x096EAD20, MoleMole_BaseEntity_GetMoveComponent_1__MethodInfo);
//DO_APP_FUNC_METHODINFO(0x096EF950, MoleMole_BaseEntity_GetLogicCombatComponent_1__MethodInfo); // double check
DO_APP_FUNC_METHODINFO(0x096EC0B8, MoleMole_BaseEntity_GetLogicCombatComponent_1__MethodInfo); DO_APP_FUNC_METHODINFO(0x096EC0B8, MoleMole_BaseEntity_GetLogicCombatComponent_1__MethodInfo);
// check comparison from 2.2 & 2.6
// function type & name is wrong
// DO_APP_FUNC(0, MoleMole_AvatarEntity *, MoleMole_EntityManager_GetLocalAvatarEntity, (MoleMole_EntityManager * __this, MethodInfo * method));
DO_APP_FUNC(0x01BF68A0, BaseEntity*, MoleMole_EntityManager_GetLocalAvatarEntity, (MoleMole_EntityManager* __this, MethodInfo* method)); DO_APP_FUNC(0x01BF68A0, BaseEntity*, MoleMole_EntityManager_GetLocalAvatarEntity, (MoleMole_EntityManager* __this, MethodInfo* method));
DO_APP_FUNC(0x01BF4E50, CameraEntity*, MoleMole_EntityManager_GetMainCameraEntity, (MoleMole_EntityManager* __this, MethodInfo* method)); DO_APP_FUNC(0x01BF4E50, CameraEntity*, MoleMole_EntityManager_GetMainCameraEntity, (MoleMole_EntityManager* __this, MethodInfo* method));
@ -206,10 +250,6 @@ DO_APP_FUNC(0x01BEB030, BaseEntity*, MoleMole_EntityManager_GetValidEntity, (Mol
DO_APP_FUNC(0x01BF2D60, bool, MoleMole_EntityManager_RemoveEntity, (MoleMole_EntityManager* __this, BaseEntity* entity, uint32_t specifiedRuntimeID, MethodInfo* method)); DO_APP_FUNC(0x01BF2D60, bool, MoleMole_EntityManager_RemoveEntity, (MoleMole_EntityManager* __this, BaseEntity* entity, uint32_t specifiedRuntimeID, MethodInfo* method));
DO_APP_FUNC(0x01C02800, bool, MoleMole_EntityManager_IsCachedEntity, (MoleMole_EntityManager* __this, BaseEntity* entity, MethodInfo* method)); DO_APP_FUNC(0x01C02800, bool, MoleMole_EntityManager_IsCachedEntity, (MoleMole_EntityManager* __this, BaseEntity* entity, MethodInfo* method));
DO_APP_FUNC(0x01BF01F0, List_1_MoleMole_BaseEntity_*, MoleMole_EntityManager_GetEntities, (MoleMole_EntityManager* __this, MethodInfo* method)); DO_APP_FUNC(0x01BF01F0, List_1_MoleMole_BaseEntity_*, MoleMole_EntityManager_GetEntities, (MoleMole_EntityManager* __this, MethodInfo* method));
// check comparison with 2.6
// function name changed to:
// DO_APP_FUNC(0, Bounds, Utils_4_GetBounds, (GameObject * go, MethodInfo * method));
DO_APP_FUNC(0x044B8970, Bounds, Utils_4_GetBounds, (GameObject* go, MethodInfo* method)); DO_APP_FUNC(0x044B8970, Bounds, Utils_4_GetBounds, (GameObject* go, MethodInfo* method));
// Modify | RyujinZX#6666 // Modify | RyujinZX#6666

View File

@ -3818,10 +3818,22 @@ namespace app {
void* m_CachedPtr; void* m_CachedPtr;
}; };
struct Object_1 {
struct Object_1__Class* klass;
MonitorData* monitor;
struct Object_1__Fields fields;
};
struct Component_1__Fields { struct Component_1__Fields {
struct Object_1__Fields _; struct Object_1__Fields _;
}; };
struct Component_1 {
struct Component_1__Class* klass;
MonitorData* monitor;
struct Component_1__Fields fields;
};
struct Transform__Fields { struct Transform__Fields {
struct Component_1__Fields _; struct Component_1__Fields _;
}; };
@ -4490,6 +4502,11 @@ namespace app {
void* m_Corners; void* m_Corners;
}; };
/*struct MaskableGraphic {
struct MaskableGraphic__Class* klass;
MonitorData* monitor;
struct MaskableGraphic__Fields fields;
};*/
struct Text__Fields { struct Text__Fields {
struct MaskableGraphic__Fields _; struct MaskableGraphic__Fields _;
@ -9197,6 +9214,16 @@ namespace app {
Il2CppClass_1 _1; Il2CppClass_1 _1;
}; };
struct Canvas__Fields {
struct Behaviour__Fields _;
};
struct Canvas {
struct Canvas__Class* klass;
MonitorData* monitor;
struct Canvas__Fields fields;
};
struct __declspec(align(8)) UIManager__Fields { struct __declspec(align(8)) UIManager__Fields {
struct LinkedList_1_MoleMole_BaseContext_* _inputContextList; struct LinkedList_1_MoleMole_BaseContext_* _inputContextList;
struct HashSet_1_MoleMole_BaseContext_* _inputContextSet; struct HashSet_1_MoleMole_BaseContext_* _inputContextSet;
@ -9204,7 +9231,7 @@ namespace app {
struct HashSet_1_MoleMole_BaseContext_* BCPDECEFFMF; struct HashSet_1_MoleMole_BaseContext_* BCPDECEFFMF;
struct UIPlatformConfig* platformConfig; struct UIPlatformConfig* platformConfig;
uint32_t _curProfileHandle; uint32_t _curProfileHandle;
void* _sceneCanvas; struct Canvas* _sceneCanvas;
struct Camera* _uiCamera; struct Camera* _uiCamera;
}; };
@ -11337,6 +11364,370 @@ namespace app {
struct CookRecipeExcelConfig__Fields fields; struct CookRecipeExcelConfig__Fields fields;
}; };
struct CriwareMediaPlayer__Fields {
struct MonoBehaviour__Fields _;
struct FDNEMKPLJJP* _eventCallback_k__BackingField;
struct AspectRatioFitter* _parentAspectRatioFitter;
struct AspectRatioFitter* _aspectRatioFitter;
struct Image_1* _image;
struct Text* _text;
struct CriManaMovieControllerForUI* _controllerForUI;
struct CriWareInitializer* _criwareInitializer;
struct CriWareErrorHandler* _criwareErrorHandler;
struct VideoSubtitles* _videoSubtitles;
int32_t _lastStatus; // Player_Status__Enum
struct Action_1_String_* _onStartPlay;
struct Action_1_String_* _onFinishPlay;
struct Action_1_String_* _onError;
struct Action* _onClose;
struct String* _videoRuntimePath;
bool _useSubtitle;
struct String* _subtitleRuntimePath;
struct String* _stat;
int32_t _audioTrack;
int32_t KBIMMFBKMJE; // KIPKAJKIFKJ__Enum
uint64_t _encryptKey;
bool _audioEncrypted;
};
struct CriwareMediaPlayer {
struct CriwareMediaPlayer__Class* klass;
MonitorData* monitor;
struct CriwareMediaPlayer__Fields fields;
};
struct Sprite__Fields {
struct Object_1__Fields _;
};
struct Sprite {
struct Sprite__Class* klass;
MonitorData* monitor;
struct Sprite__Fields fields;
};
struct Texture__Fields {
struct Object_1__Fields _;
};
struct Texture2D__Fields {
struct Texture__Fields _;
};
struct Texture2D {
struct Texture2D__Class* klass;
MonitorData* monitor;
struct Texture2D__Fields fields;
};
struct Image_1__Fields {
struct MaskableGraphic__Fields _;
struct Sprite* m_CachedSprite;
struct Sprite* m_Sprite;
struct Sprite* m_OverrideSprite;
int32_t m_Type;
bool m_PreserveAspect;
bool m_FillCenter;
int32_t m_FillMethod;
float m_FillAmount;
bool m_FillClockwise;
int32_t m_FillOrigin;
float m_AlphaHitTestMinimumThreshold;
bool m_Tracked;
};
struct Image_1 {
struct Image_1__Class* klass;
MonitorData* monitor;
struct Image_1__Fields fields;
};
struct MonoInLevelPlayerProfilePage__Fields {
struct MonoUIProxy__Fields _;
struct Text* _playerName;
struct Text* _playerLv;
struct Text* _playerExp;
struct Slider_1* _playerExpSlider;
struct Text* _playerID;
struct Text* _playerCost;
struct Text* _playerInfo;
struct Text* _playerNum;
struct Image_1* playerIconImage;
struct Text* _playerWorldLv;
struct Text* _playerBirthday;
struct Text* _playerSignature;
struct Text* _playerNoSignature;
struct RectTransform* _playerSignatureRect;
struct Image_1* _nameCardPic;
struct Button_1* _closeButton;
struct MonoElementSwitch* _elementSwitch;
struct MihoyoGridLayoutGroup* _menuEntryLayout;
struct MonoReusableList* _entryList;
struct List_1_MoleMole_PaimonEntryConfig_* _entryConfigs;
struct MonoUIContainer* _playerLevelBtn;
struct Vector3 _offsetPos;
float transDuration;
float transLerpRatio;
int32_t lerpPattern;
struct MonoUIContainer* _photographBtn;
struct MonoUIContainer* _bulletinBtn;
struct MonoUIContainer* _mailBtn;
struct MonoUIContainer* _timeBtn;
struct MonoUIContainer* _settingBtn;
struct Button_1* _iconBtn;
struct MonoUIContainer* _editBtn;
struct RectTransform* _editPanel;
struct Button_1* _editReturnBtn;
struct MonoUIContainer* _editHeadPortraitBtn;
struct MonoUIContainer* _editNameCardBtn;
struct MonoUIContainer* _editSignatureBtn;
struct MonoUIContainer* _editNameBtn;
struct MonoUIContainer* _editCopyUidBtn;
struct MonoUIContainer* _editBirthdayBtn;
struct MonoUIContainer* _editProfileBtn;
struct MonoUIContainer* _worldLvInfoBtn;
struct MonoUIContainer* _playerLvInfoBtn;
struct Button_1* _copyBtn;
struct RectTransform* _copyText;
struct RectTransform* _ps4OnlineID;
struct Text* _ps4OnlineIDText;
struct GameObject* _upArrowIcon;
struct GameObject* _downArrowIcon;
float _redpointsCheckUpperOffset;
float _redpointsCheckLowerOffset;
struct String* _animStateAllowPaimonResponsePS5MicBlowEvent;
float _thresholdDiscardPS5MicBlowEvent;
float _thresholdPaimonResponsePS5MicBlowEventContinuely;
struct MonoPS5MicBlowEventHandlerBase* _ps5MicBlowEventHandler;
};
struct MonoInLevelPlayerProfilePage {
struct MonoInLevelPlayerProfilePage__Class* klass;
MonitorData* monitor;
struct MonoInLevelPlayerProfilePage__Fields fields;
};
struct MonoFriendInformationDialog__Fields {
struct MonoUIProxy__Fields _;
struct MonoElementSwitch* _elementSwitch;
struct Text* _playerUID;
struct Image_1* _icon;
struct Text* _nickname;
struct Text* _remarkname;
struct Text* _playerLevel;
struct Text* _worldLevel;
struct Text* _signature;
struct RectTransform* _signatureRect;
struct Button_1* _returnBtn;
struct MonoUIContainer* _ps4ID;
struct RectTransform* _blockChatImg;
struct RectTransform* _joypadBtnGroup;
struct Image_1* _cardImg;
struct Button_1* _signatureBtn;
struct RectTransform* _editPanel;
struct Button_1* _editReturnBtn;
struct MonoGridScroller* _editScroller;
struct Text* _achievementTxt;
struct Text* _towerTxt;
struct Text* _towerNoDataTxt;
struct Text* _toggleTxt;
struct GameObject* _iconHide;
struct GameObject* _avatarEmptyGrp;
struct GameObject* _toggleGrp;
struct MonoGridScroller* _avatarScroller;
struct MonoUIContainer* _toggle;
struct MonoUIContainer* _mainPageBtn;
struct GameObject* _achievementGrp;
struct GameObject* _avatarGrp;
struct MonoUIContainer* _nameCardBtn;
struct GameObject* _nameCardGrp;
struct MonoGridScroller* _nameCardScroller;
struct GameObject* _nameCardEmptyGrp;
};
struct MonoFriendInformationDialog {
struct MonoFriendInformationDialog__Class* klass;
MonitorData* monitor;
struct MonoFriendInformationDialog__Fields fields;
};
struct Color32 {
int32_t rgba;
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
};
enum class PrimitiveType__Enum : int32_t {
Sphere = 0x00000000,
Capsule = 0x00000001,
Cylinder = 0x00000002,
Cube = 0x00000003,
Plane = 0x00000004,
Quad = 0x00000005,
};
enum class BrowserNative_ContextMenuOrigin__Enum : int32_t {
Editable = 0x00000002,
Image = 0x00000004,
Selection = 0x00000008,
Other = 0x00000001,
};
enum class Browser_NewWindowAction__Enum : int32_t {
Ignore = 0x00000001,
Redirect = 0x00000002,
NewBrowser = 0x00000003,
NewWindow = 0x00000004,
};
struct Browser__Fields {
struct MonoBehaviour__Fields _;
bool offScreen;
struct IBrowserUI* _uiHandler;
bool uiHandlerAssigned;
struct String* _url;
int32_t _width;
int32_t _height;
bool generateMipmap;
struct Color32 baseColor;
float _zoom;
struct Action_2_String_String_* onConsoleMessage;
BrowserNative_ContextMenuOrigin__Enum allowContextMenuOn;
Browser_NewWindowAction__Enum newWindowAction;
struct INewWindowHandler* _NewWindowHandler_k__BackingField;
bool _EnableRendering_k__BackingField;
bool _EnableInput_k__BackingField;
struct CookieManager* _CookieManager_k__BackingField;
int32_t browserId;
int32_t unsafeBrowserId;
bool browserIdRequested;
struct Texture2D* texture;
struct Action_1_UnityEngine_Texture2D_* afterResize;
bool textureIsOurs;
bool forceNextRender;
bool isPopup;
struct List_1_System_Action_* thingsToDo;
struct List_1_System_Action_* onloadActions;
struct List_1_System_Object_* thingsToRemember;
int32_t nextCallbackId;
struct Dictionary_2_System_Int32_ZenFulcrum_EmbeddedBrowser_Browser_JSResultFunc_* registeredCallbacks;
struct BrowserNative_ReadyFunc* onNativeReady;
struct Action_1_ZenFulcrum_EmbeddedBrowser_JSONNode_* onLoad;
struct Action_1_ZenFulcrum_EmbeddedBrowser_JSONNode_* onFetch;
struct Action_1_ZenFulcrum_EmbeddedBrowser_JSONNode_* onFetchError;
struct Action_1_ZenFulcrum_EmbeddedBrowser_JSONNode_* onCertError;
struct Action* onSadTab;
struct Action* onTextureUpdated;
struct Action* onNavStateChange;
struct Action_2_Int32_ZenFulcrum_EmbeddedBrowser_JSONNode_* onDownloadStarted;
struct Action_2_Int32_ZenFulcrum_EmbeddedBrowser_JSONNode_* onDownloadStatus;
struct Action_3_String_Boolean_String_* onNodeFocus;
struct Action_1_ZenFulcrum_EmbeddedBrowser_JSONNode_* onUniWebviewMsgReceive;
struct Action_1_ZenFulcrum_EmbeddedBrowser_JSONNode_* onBeforeNavigationMsgReceive;
struct Action_2_Boolean_Boolean_* onBrowserFocus;
struct BrowserFocusState* focusState;
struct BrowserInput* browserInput;
struct Browser* overlay;
bool skipNextLoad;
bool loadPending;
struct BrowserNavState* navState;
bool newWindowHandlerSet;
struct INewWindowHandler* newWindowHandler;
struct DialogHandler* dialogHandler;
struct Action* pageReplacer;
float pageReplacerPriority;
struct List_1_System_Action_* thingsToDoClone;
struct Color32__Array* colorBuffer;
};
struct Browser {
struct Browser__Class* klass;
MonitorData* monitor;
struct Browser__Fields fields;
};
struct __declspec(align(8)) BeatMapData__Fields {
struct List_1_MoleMole_MusicGame_TrackData_* trackDatas;
struct POLBDGNBFKM* config;
};
struct BeatMapData {
struct BeatMapData__Class* klass;
MonitorData* monitor;
struct BeatMapData__Fields fields;
};
struct __declspec(align(8)) MusicMetaInfo__Fields {
struct BpmInfo* bpmInfo;
struct List_1_System_Single_* simpleBeatHintTimeMsList;
struct List_1_System_Single_* complexBeatHintTimeMsList;
struct CGDACGGKKNJ* musicConfig;
struct PMIELLLMJKA* musicInfoConfig;
struct POLBDGNBFKM* beatMapConfig;
struct JNEKHDKOKGL* musicInstrumentConfig;
};
struct MusicMetaInfo {
struct MusicMetaInfo__Class* klass;
MonitorData* monitor;
struct MusicMetaInfo__Fields fields;
};
struct MusicGamePlayComponent__Fields {
void* _;
uint32_t _combo;
float _score_k__BackingField;
uint32_t _maxCombo_k__BackingField;
uint32_t _perfectCnt_k__BackingField;
uint32_t _greatCnt_k__BackingField;
uint32_t _missCnt_k__BackingField;
};
struct MusicGamePlayComponent {
struct MusicGamePlayComponent__Class* klass;
MonitorData* monitor;
struct MusicGamePlayComponent__Fields fields;
};
struct MoleMole_VCBaseSetDitherValue__Fields {
void* _;
bool _usingDitherAlpha;
float _ditherAlphaValue;
float _managerDitherAlphaValue;
float _localDitherAlphaValue;
bool IBKAJMBMGAE;
struct MoleMole_VCBaseModel* _modelComponent;
float _showStartDitherDuration;
bool _needStartDitherAction;
float _detectDitherRangeBetweenCameraAndAvatar;
float _detectDitherRangeNormalBetweenCamera;
float _detectDitherRangeNormalBetweenCameraInTimeLine;
bool GCEGGKLBFPG;
struct List_1_MoleMole_BaseDither_* _dithers;
bool _isDitherChangeStarted;
float _spd;
float _fromValue;
float _toValue;
struct Action* _changeFinishHandler;
bool _triggerUpdateDitherShow;
bool _prevUsingDitherAlpha;
float _prevDitherAlphaValue;
float _prevTextureBias;
bool _prevInMotionVectorMode;
bool _isVisible;
};
struct MoleMole_VCBaseSetDitherValue {
struct MoleMole_VCBaseSetDitherValue__Class* klass;
MonitorData* monitor;
struct MoleMole_VCBaseSetDitherValue__Fields fields;
};
#if !defined(_GHIDRA_) && !defined(_IDA_) #if !defined(_GHIDRA_) && !defined(_IDA_)
} }
#endif #endif

View File

@ -14,32 +14,32 @@
uintptr_t il2cpp_get_mono_base_address() uintptr_t il2cpp_get_mono_base_address()
{ {
static HMODULE hMono = GetModuleHandle("mono.dll"); static HMODULE hMono = GetModuleHandle("mono.dll");
if (hMono != NULL) if (hMono != NULL)
return (uintptr_t)hMono; return (uintptr_t)hMono;
HMODULE hModules[1024] = {}; HMODULE hModules[1024] = {};
DWORD cbNeeded = 0; DWORD cbNeeded = 0;
BOOL result = EnumProcessModules(GetCurrentProcess(), hModules, sizeof(hModules), &cbNeeded); BOOL result = EnumProcessModules(GetCurrentProcess(), hModules, sizeof(hModules), &cbNeeded);
if (result == FALSE) if (result == FALSE)
return NULL; return NULL;
for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{ {
if (hModules[i] == NULL) if (hModules[i] == NULL)
continue; continue;
if (GetProcAddress(hModules[i], "il2cpp_thread_attach") != NULL) if (GetProcAddress(hModules[i], "il2cpp_thread_attach") != NULL)
return (uintptr_t)hModules[i]; return (uintptr_t)hModules[i];
} }
return 0; return 0;
} }
uintptr_t il2cppi_get_base_address() { uintptr_t il2cppi_get_base_address() {
return (uintptr_t) GetModuleHandleW(L"UserAssembly.dll"); return (uintptr_t)GetModuleHandleW(L"UserAssembly.dll");
} }
uintptr_t il2cppi_get_unity_address() { uintptr_t il2cppi_get_unity_address() {
@ -49,13 +49,13 @@ uintptr_t il2cppi_get_unity_address() {
// Helper function to open a new console window and redirect stdout there // Helper function to open a new console window and redirect stdout there
void il2cppi_new_console() { void il2cppi_new_console() {
AllocConsole(); AllocConsole();
freopen_s((FILE**) stdout, "CONOUT$", "w", stdout); freopen_s((FILE**)stdout, "CONOUT$", "w", stdout);
freopen_s((FILE**) stderr, "CONOUT$", "w", stderr); freopen_s((FILE**)stderr, "CONOUT$", "w", stderr);
} }
void il2cppi_close_console() { void il2cppi_close_console() {
fclose(stdout); fclose(stdout);
fclose(stderr); fclose(stderr);
FreeConsole(); FreeConsole();
} }
@ -85,6 +85,11 @@ std::string il2cppi_to_string(app::String* str) {
return il2cppi_to_string(reinterpret_cast<Il2CppString*>(str)); return il2cppi_to_string(reinterpret_cast<Il2CppString*>(str));
} }
app::String* string_to_il2cppi(std::string input) {
return app::Marshal_PtrToStringAnsi((void*)input.c_str(), nullptr);
}
std::string to_hex_string(app::Byte__Array* barray, int length) { std::string to_hex_string(app::Byte__Array* barray, int length) {
if (barray == nullptr) if (barray == nullptr)
return std::string(); return std::string();

View File

@ -46,7 +46,7 @@ struct UniLinkListNode
}; };
template<class ElementT> template<class ElementT>
struct UniLinkList struct UniLinkList
{ {
void* klass; void* klass;
MonitorData* monitor; MonitorData* monitor;
@ -127,15 +127,15 @@ struct __declspec(align(8)) UniDict {
MonitorData* monitor; MonitorData* monitor;
void* buckets; void* buckets;
UniArray<UniDictEntry<KeyT, ValT>>* entries; UniArray<UniDictEntry<KeyT, ValT>>* entries;
int32_t count; int32_t count;
int32_t version; int32_t version;
int32_t freeList; int32_t freeList;
int32_t freeCount; int32_t freeCount;
void* comparer; void* comparer;
void* keys; void* keys;
void* values; void* values;
std::vector<std::pair<KeyT, ValT>> pairs() std::vector<std::pair<KeyT, ValT>> pairs()
{ {
auto pairs = std::vector<std::pair<KeyT, ValT>>(); auto pairs = std::vector<std::pair<KeyT, ValT>>();
@ -153,8 +153,8 @@ struct __declspec(align(8)) UniDict {
break; break;
if (entry.hashCode > 0) if (entry.hashCode > 0)
pairs.push_back({ entry.key, entry.value }); pairs.push_back({ entry.key, entry.value });
index++; index++;
} }
@ -165,11 +165,11 @@ struct __declspec(align(8)) UniDict {
template<class T> template<class T>
T* CastTo(void* pObject, void* pClass) T* CastTo(void* pObject, void* pClass)
{ {
auto object = reinterpret_cast<app::Object*>(pObject); auto object = reinterpret_cast<app::Object*>(pObject);
if (object == nullptr || object->klass == nullptr || object->klass != pClass) if (object == nullptr || object->klass == nullptr || object->klass != pClass)
return nullptr; return nullptr;
return reinterpret_cast<T*>(object); return reinterpret_cast<T*>(object);
} }
inline app::Vector3 operator + (const app::Vector3& A, const app::Vector3& B) inline app::Vector3 operator + (const app::Vector3& A, const app::Vector3& B)
@ -204,12 +204,12 @@ inline app::Vector3 operator / (const app::Vector3& A, const float k)
inline app::Vector3 operator - (const app::Vector3& A) inline app::Vector3 operator - (const app::Vector3& A)
{ {
return { -A.x, -A.y, -A.z}; return { -A.x, -A.y, -A.z };
} }
inline app::Vector2 operator + (const app::Vector2& A, const float k) inline app::Vector2 operator + (const app::Vector2& A, const float k)
{ {
return { A.x + k, A.y + k}; return { A.x + k, A.y + k };
} }
inline app::Vector2 operator - (const app::Vector2& A, const app::Vector2& B) inline app::Vector2 operator - (const app::Vector2& A, const app::Vector2& B)
@ -219,46 +219,46 @@ inline app::Vector2 operator - (const app::Vector2& A, const app::Vector2& B)
inline app::Vector2 operator - (const app::Vector2& A, const float k) inline app::Vector2 operator - (const app::Vector2& A, const float k)
{ {
return { A.x - k, A.y - k}; return { A.x - k, A.y - k };
} }
inline app::Vector2 operator + (const app::Vector2& A, const app::Vector2& B) inline app::Vector2 operator + (const app::Vector2& A, const app::Vector2& B)
{ {
return { A.x + B.x, A.y + B.y }; return { A.x + B.x, A.y + B.y };
} }
inline app::Vector2 operator * (const app::Vector2& A, const float k) inline app::Vector2 operator * (const app::Vector2& A, const float k)
{ {
return { A.x * k, A.y * k }; return { A.x * k, A.y * k };
} }
inline app::Vector2 operator * (const app::Vector2& A, const app::Vector2& B) inline app::Vector2 operator * (const app::Vector2& A, const app::Vector2& B)
{ {
return { A.x * B.x, A.y * B.y }; return { A.x * B.x, A.y * B.y };
} }
inline app::Vector2 operator / (const app::Vector2& A, const float k) inline app::Vector2 operator / (const app::Vector2& A, const float k)
{ {
return { A.x / k, A.y / k }; return { A.x / k, A.y / k };
} }
inline app::Vector2 operator - (const app::Vector2& A) inline app::Vector2 operator - (const app::Vector2& A)
{ {
return { -A.x, -A.y }; return { -A.x, -A.y };
} }
inline float GetVectorMagnitude(const app::Vector3& A) inline float GetVectorMagnitude(const app::Vector3& A)
{ {
return sqrtf(A.x * A.x + A.y * A.y + A.z * A.z); return sqrtf(A.x * A.x + A.y * A.y + A.z * A.z);
} }
inline app::Vector3 GetVectorDirection(const app::Vector3& from, const app::Vector3& to) inline app::Vector3 GetVectorDirection(const app::Vector3& from, const app::Vector3& to)
{ {
auto dirRaw = to - from; auto dirRaw = to - from;
return dirRaw / GetVectorMagnitude(dirRaw); return dirRaw / GetVectorMagnitude(dirRaw);
} }
inline bool IsVectorZero(const app::Vector3& vector) inline bool IsVectorZero(const app::Vector3& vector)
{ {
return vector.x == 0 && vector.y == 0 && vector.z == 0; return vector.x == 0 && vector.y == 0 && vector.z == 0;
} }
@ -282,7 +282,7 @@ std::string il2cppi_to_string(app::String* str);
std::string il2cppi_to_string(app::Vector vec); std::string il2cppi_to_string(app::Vector vec);
std::string il2cppi_to_string(app::Vector2 vec); std::string il2cppi_to_string(app::Vector2 vec);
std::string il2cppi_to_string(app::Vector3 vec); std::string il2cppi_to_string(app::Vector3 vec);
app::String* string_to_il2cppi(std::string input);
std::string to_hex_string(app::Byte__Array* barray, int length); std::string to_hex_string(app::Byte__Array* barray, int length);
#endif #endif
@ -292,6 +292,6 @@ template<typename T> bool il2cppi_is_initialized(T* metadataItem) {
return *metadataItem != 0; return *metadataItem != 0;
#else #else
// Metadata >=27 (Unity 2020.2) // Metadata >=27 (Unity 2020.2)
return !((uintptr_t) *metadataItem & 1); return !((uintptr_t)*metadataItem & 1);
#endif #endif
} }

View File

@ -38,11 +38,17 @@
#include <cheat/world/AutoFish.h> #include <cheat/world/AutoFish.h>
#include <cheat/world/AutoCook.h> #include <cheat/world/AutoCook.h>
#include <cheat/world/MusicEvent.h>
#include <cheat/visuals/NoFog.h> #include <cheat/visuals/NoFog.h>
#include <cheat/visuals/FPSUnlock.h> #include <cheat/visuals/FPSUnlock.h>
#include <cheat/visuals/CameraZoom.h> #include <cheat/visuals/CameraZoom.h>
#include <cheat/visuals/ShowChestIndicator.h> #include <cheat/visuals/ShowChestIndicator.h>
#include <cheat/visuals/ProfileChanger.h>
#include <cheat/visuals/PaimonFollow.h>
#include <cheat/visuals/HideUI.h>
#include <cheat/visuals/Browser.h>
#include <cheat/visuals/EnablePeaking.h>
#include "GenshinCM.h" #include "GenshinCM.h"
@ -93,12 +99,18 @@ namespace cheat
FEAT_INST(AutoFish), FEAT_INST(AutoFish),
FEAT_INST(AutoCook), FEAT_INST(AutoCook),
FEAT_INST(MusicEvent),
FEAT_INST(NoFog), FEAT_INST(NoFog),
FEAT_INST(FPSUnlock), FEAT_INST(FPSUnlock),
FEAT_INST(CameraZoom), FEAT_INST(CameraZoom),
FEAT_INST(ChestIndicator) FEAT_INST(ChestIndicator),
FEAT_INST(ProfileChanger),
FEAT_INST(PaimonFollow),
FEAT_INST(HideUI),
FEAT_INST(Browser),
FEAT_INST(EnablePeaking)
}); });
#undef FEAT_INST #undef FEAT_INST

View File

@ -29,6 +29,7 @@ namespace cheat::feature
NF(f_ArrowRadius, "Arrow Radius", "ESP", 100.0f), NF(f_ArrowRadius, "Arrow Radius", "ESP", 100.0f),
NF(f_OutlineThickness, "Outline Thickness", "ESP", 1.0f), NF(f_OutlineThickness, "Outline Thickness", "ESP", 1.0f),
NF(f_TracerSize, "Tracer Size", "ESP", 1.0f), NF(f_TracerSize, "Tracer Size", "ESP", 1.0f),
NF(f_MiddleScreenTracer, "Middle Screen Tracer", "ESP", false),
NF(f_DrawDistance, "Draw Distance", "ESP", false), NF(f_DrawDistance, "Draw Distance", "ESP", false),
NF(f_DrawName, "Draw Name", "ESP", false), NF(f_DrawName, "Draw Name", "ESP", false),
@ -71,6 +72,7 @@ namespace cheat::feature
ConfigWidget(f_Fill); ConfigWidget(f_Fill);
ConfigWidget(f_FillTransparency, 0.01f, 0.0f, 1.0f, "Transparency of filled part."); ConfigWidget(f_FillTransparency, 0.01f, 0.0f, 1.0f, "Transparency of filled part.");
ConfigWidget(f_MiddleScreenTracer, "Draw tracer from middle part of the screen.");
if (f_DrawTracerMode.value() == DrawTracerMode::OffscreenArrows) if (f_DrawTracerMode.value() == DrawTracerMode::OffscreenArrows)
{ {
@ -460,11 +462,15 @@ namespace cheat::feature
ADD_FILTER_FIELD(featured, TimeTrialChallenge); ADD_FILTER_FIELD(featured, TimeTrialChallenge);
ADD_FILTER_FIELD(guide, CampfireTorch); ADD_FILTER_FIELD(guide, CampfireTorch);
ADD_FILTER_FIELD(guide, DayNightSwitchingMechanism);
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);
ADD_FILTER_FIELD(guide, PlacesofEssenceWorship);
ADD_FILTER_FIELD(guide, Pot); ADD_FILTER_FIELD(guide, Pot);
ADD_FILTER_FIELD(guide, RuinBrazier); ADD_FILTER_FIELD(guide, RuinBrazier);
ADD_FILTER_FIELD(guide, Stormstone); ADD_FILTER_FIELD(guide, Stormstone);
ADD_FILTER_FIELD(guide, TriangularMechanism);
ADD_FILTER_FIELD(living, BakeDanuki); ADD_FILTER_FIELD(living, BakeDanuki);
ADD_FILTER_FIELD(living, BirdEgg); ADD_FILTER_FIELD(living, BirdEgg);
@ -507,6 +513,7 @@ namespace cheat::feature
ADD_FILTER_FIELD(mineral, ScarletQuartz); ADD_FILTER_FIELD(mineral, ScarletQuartz);
ADD_FILTER_FIELD(mineral, StarSilver); ADD_FILTER_FIELD(mineral, StarSilver);
ADD_FILTER_FIELD(mineral, WhiteIronChunk); ADD_FILTER_FIELD(mineral, WhiteIronChunk);
ADD_FILTER_FIELD(mineral, DunlinsTooth);
// Trounce. Arranged by appearance in-game. // Trounce. Arranged by appearance in-game.
ADD_FILTER_FIELD(monster, Dvalin); ADD_FILTER_FIELD(monster, Dvalin);
@ -576,7 +583,6 @@ namespace cheat::feature
ADD_FILTER_FIELD(monster, Samachurl); ADD_FILTER_FIELD(monster, Samachurl);
ADD_FILTER_FIELD(monster, SangonomiyaCohort); ADD_FILTER_FIELD(monster, SangonomiyaCohort);
ADD_FILTER_FIELD(monster, ShadowyHusk); ADD_FILTER_FIELD(monster, ShadowyHusk);
ADD_FILTER_FIELD(monster, ShadowyHusk);
ADD_FILTER_FIELD(monster, ShogunateInfantry); ADD_FILTER_FIELD(monster, ShogunateInfantry);
ADD_FILTER_FIELD(monster, Slime); ADD_FILTER_FIELD(monster, Slime);
ADD_FILTER_FIELD(monster, Specter); ADD_FILTER_FIELD(monster, Specter);
@ -629,6 +635,7 @@ namespace cheat::feature
ADD_FILTER_FIELD(puzzle, CubeDevices); ADD_FILTER_FIELD(puzzle, CubeDevices);
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);
@ -643,6 +650,7 @@ namespace cheat::feature
ADD_FILTER_FIELD(puzzle, OozingConcretions); ADD_FILTER_FIELD(puzzle, OozingConcretions);
ADD_FILTER_FIELD(puzzle, PirateHelm); ADD_FILTER_FIELD(puzzle, PirateHelm);
ADD_FILTER_FIELD(puzzle, PressurePlate); ADD_FILTER_FIELD(puzzle, PressurePlate);
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);

View File

@ -38,6 +38,7 @@ namespace cheat::feature
config::Field<float> f_ArrowRadius; config::Field<float> f_ArrowRadius;
config::Field<float> f_OutlineThickness; config::Field<float> f_OutlineThickness;
config::Field<float> f_TracerSize; config::Field<float> f_TracerSize;
config::Field<bool> f_MiddleScreenTracer;
config::Field<int> f_FontSize; config::Field<int> f_FontSize;
config::Field<bool> f_FontOutline; config::Field<bool> f_FontOutline;

View File

@ -390,7 +390,19 @@ namespace cheat::feature::esp::render
return; return;
auto draw = ImGui::GetBackgroundDrawList(); auto draw = ImGui::GetBackgroundDrawList();
draw->AddLine(s_AvatarPosition, *screenPos, color);
auto& esp = ESP::GetInstance();
if (esp.f_MiddleScreenTracer)
{
ImRect screen_rect = { 0.0f, 0.0f, ImGui::GetIO().DisplaySize.x, ImGui::GetIO().DisplaySize.y };
auto screen_center = screen_rect.GetCenter();
draw->AddLine(screen_center, *screenPos, color);
}
else
{
draw->AddLine(s_AvatarPosition, *screenPos, color);
}
} }
#define PI 3.14159265358979323846f #define PI 3.14159265358979323846f

View File

@ -47,11 +47,15 @@ namespace cheat::game::filters
namespace guide namespace guide
{ {
SimpleFilter CampfireTorch = { app::EntityType__Enum_1::Gadget, "_FireBasin" }; SimpleFilter CampfireTorch = { app::EntityType__Enum_1::Gadget, "_FireBasin" };
SimpleFilter DayNightSwitchingMechanism = { app::EntityType__Enum_1::Field, "_CircleConsole" };
SimpleFilter EnkanomiyaPhaseGate = { app::EntityType__Enum_1::Gadget, "_Singularity" };
SimpleFilter MysteriousCarvings = { app::EntityType__Enum_1::Gadget, "_ReginStatue" }; SimpleFilter MysteriousCarvings = { app::EntityType__Enum_1::Gadget, "_ReginStatue" };
SimpleFilter PhaseGate = { app::EntityType__Enum_1::Field, "_TeleportHighway" }; SimpleFilter PhaseGate = { app::EntityType__Enum_1::Field, "_TeleportHighway" };
SimpleFilter PlacesofEssenceWorship = { app::EntityType__Enum_1::Field, "_EnergySource" };
SimpleFilter Pot = { app::EntityType__Enum_1::Gadget, "_Cooking_" }; SimpleFilter Pot = { app::EntityType__Enum_1::Gadget, "_Cooking_" };
SimpleFilter RuinBrazier = { app::EntityType__Enum_1::Gadget, "_AncientHeatSource" }; SimpleFilter RuinBrazier = { app::EntityType__Enum_1::Gadget, "_AncientHeatSource" };
SimpleFilter Stormstone = { app::EntityType__Enum_1::Gadget, "_ReginLamp" }; SimpleFilter Stormstone = { app::EntityType__Enum_1::Gadget, "_ReginLamp" };
SimpleFilter TriangularMechanism = { app::EntityType__Enum_1::Field, "_TuningFork" };
} }
namespace living namespace living
@ -60,12 +64,12 @@ namespace cheat::game::filters
SimpleFilter ButterflyWings = { app::EntityType__Enum_1::EnvAnimal, "Butterfly" }; SimpleFilter ButterflyWings = { app::EntityType__Enum_1::EnvAnimal, "Butterfly" };
SimpleFilter Crab = { app::EntityType__Enum_1::EnvAnimal, "Crab" }; SimpleFilter Crab = { app::EntityType__Enum_1::EnvAnimal, "Crab" };
SimpleFilter CrystalCore = { app::EntityType__Enum_1::EnvAnimal, "Wisp" }; SimpleFilter CrystalCore = { app::EntityType__Enum_1::EnvAnimal, "Wisp" };
SimpleFilter Fish = { app::EntityType__Enum_1::Monster, "Fish" }; SimpleFilter Fish = { app::EntityType__Enum_1::EnvAnimal, "Fish" };
SimpleFilter Frog = { app::EntityType__Enum_1::EnvAnimal, "Frog" }; SimpleFilter Frog = { app::EntityType__Enum_1::EnvAnimal, "Frog" };
SimpleFilter LizardTail = { app::EntityType__Enum_1::EnvAnimal, "Lizard" }; SimpleFilter LizardTail = { app::EntityType__Enum_1::EnvAnimal, "Lizard" };
SimpleFilter LuminescentSpine = { app::EntityType__Enum_1::EnvAnimal, "FireFly" }; SimpleFilter LuminescentSpine = { app::EntityType__Enum_1::EnvAnimal, "FireFly" };
SimpleFilter Onikabuto = { app::EntityType__Enum_1::GatherObject, "Electrohercules" }; SimpleFilter Onikabuto = { app::EntityType__Enum_1::GatherObject, "Electrohercules" };
SimpleFilter Starconch = { app::EntityType__Enum_1::GatherObject, "Shell" }; SimpleFilter Starconch = { app::EntityType__Enum_1::GatherObject, "_Shell" };
SimpleFilter Eel = { app::EntityType__Enum_1::EnvAnimal, "Eel_" }; SimpleFilter Eel = { app::EntityType__Enum_1::EnvAnimal, "Eel_" };
SimpleFilter Inu = { app::EntityType__Enum_1::EnvAnimal, "_Inu_Shihandai" }; SimpleFilter Inu = { app::EntityType__Enum_1::EnvAnimal, "_Inu_Shihandai" };
SimpleFilter Boar = { app::EntityType__Enum_1::Monster, "Boar" }; SimpleFilter Boar = { app::EntityType__Enum_1::Monster, "Boar" };
@ -103,6 +107,7 @@ namespace cheat::game::filters
SimpleFilter ScarletQuartz = { app::EntityType__Enum_1::GatherObject, "_OreDulinsBlood" }; SimpleFilter ScarletQuartz = { app::EntityType__Enum_1::GatherObject, "_OreDulinsBlood" };
SimpleFilter StarSilver = { app::EntityType__Enum_1::GatherObject, "_OreMoonMeteor" }; SimpleFilter StarSilver = { app::EntityType__Enum_1::GatherObject, "_OreMoonMeteor" };
SimpleFilter WhiteIronChunk = { app::EntityType__Enum_1::GatherObject, "_OreMetal" }; SimpleFilter WhiteIronChunk = { app::EntityType__Enum_1::GatherObject, "_OreMetal" };
SimpleFilter DunlinsTooth = { app::EntityType__Enum_1::GatherObject, "_DunlinsTooth" };
} }
namespace monster namespace monster
@ -137,7 +142,7 @@ namespace cheat::game::filters
SimpleFilter Tartaglia = { app::EntityType__Enum_1::Monster, "_Tartaglia" }; SimpleFilter Tartaglia = { app::EntityType__Enum_1::Monster, "_Tartaglia" };
SimpleFilter Azhdaha = { app::EntityType__Enum_1::Monster, "_Dahaka" }; SimpleFilter Azhdaha = { app::EntityType__Enum_1::Monster, "_Dahaka" };
SimpleFilter Signora = { app::EntityType__Enum_1::Monster, "_LaSignora" }; SimpleFilter Signora = { app::EntityType__Enum_1::Monster, "_LaSignora" };
SimpleFilter Shogun = { app::EntityType__Enum_1::Monster, "_Shougan" }; SimpleFilter Shogun = { app::EntityType__Enum_1::Monster, "_Shougun" };
SimpleFilter EyeOfTheStorm = { app::EntityType__Enum_1::Monster, "_Elemental_Wind" }; SimpleFilter EyeOfTheStorm = { app::EntityType__Enum_1::Monster, "_Elemental_Wind" };
SimpleFilter ElectroHypostasis = { app::EntityType__Enum_1::Monster, "_Effigy_Electric" }; SimpleFilter ElectroHypostasis = { app::EntityType__Enum_1::Monster, "_Effigy_Electric" };
SimpleFilter AnemoHypostasis = { app::EntityType__Enum_1::Monster, "_Effigy_Wind" }; SimpleFilter AnemoHypostasis = { app::EntityType__Enum_1::Monster, "_Effigy_Wind" };
@ -227,6 +232,7 @@ namespace cheat::game::filters
WhitelistFilter CubeDevices = { std::vector<app::EntityType__Enum_1> {app::EntityType__Enum_1::Gadget, app::EntityType__Enum_1::Platform }, std::vector<std::string> {"_ElecStone", "_ElecSwitch" }}; WhitelistFilter CubeDevices = { std::vector<app::EntityType__Enum_1> {app::EntityType__Enum_1::Gadget, app::EntityType__Enum_1::Platform }, std::vector<std::string> {"_ElecStone", "_ElecSwitch" }};
SimpleFilter EightStoneTablets = { app::EntityType__Enum_1::Gadget, "_HistoryBoard" }; SimpleFilter EightStoneTablets = { app::EntityType__Enum_1::Gadget, "_HistoryBoard" };
SimpleFilter ElectricConduction = { app::EntityType__Enum_1::Gear, "_ElectricPowerSource" }; SimpleFilter ElectricConduction = { app::EntityType__Enum_1::Gear, "_ElectricPowerSource" };
SimpleFilter RelayStone = { app::EntityType__Enum_1::Worktop, "_ElectricTransfer_" };
WhitelistFilter ElectroSeelie = { std::vector<app::EntityType__Enum_1> {app::EntityType__Enum_1::Field, app::EntityType__Enum_1::Platform }, std::vector<std::string> {"_ElectricSeelie"} }; WhitelistFilter ElectroSeelie = { std::vector<app::EntityType__Enum_1> {app::EntityType__Enum_1::Field, app::EntityType__Enum_1::Platform }, std::vector<std::string> {"_ElectricSeelie"} };
SimpleFilter ElementalMonument = { app::EntityType__Enum_1::Gear, "_ElemTablet" }; SimpleFilter ElementalMonument = { app::EntityType__Enum_1::Gear, "_ElemTablet" };
SimpleFilter FloatingAnemoSlime = { app::EntityType__Enum_1::Platform, "_WindSlime" }; SimpleFilter FloatingAnemoSlime = { app::EntityType__Enum_1::Platform, "_WindSlime" };
@ -241,6 +247,7 @@ namespace cheat::game::filters
SimpleFilter OozingConcretions = { app::EntityType__Enum_1::Gadget, "_AbyssCoreLv" }; SimpleFilter OozingConcretions = { app::EntityType__Enum_1::Gadget, "_AbyssCoreLv" };
SimpleFilter PirateHelm = { app::EntityType__Enum_1::Field, "_PirateHelm" }; SimpleFilter PirateHelm = { app::EntityType__Enum_1::Field, "_PirateHelm" };
WhitelistFilter PressurePlate = { std::vector<app::EntityType__Enum_1> {app::EntityType__Enum_1::Field, app::EntityType__Enum_1::Gadget }, std::vector<std::string> {"Gear_Gravity", "_LitPathPlate" } }; WhitelistFilter PressurePlate = { std::vector<app::EntityType__Enum_1> {app::EntityType__Enum_1::Field, app::EntityType__Enum_1::Gadget }, std::vector<std::string> {"Gear_Gravity", "_LitPathPlate" } };
SimpleFilter SealLocations = { app::EntityType__Enum_1::Gadget, "_RunesKey" };
SimpleFilter SeelieLamp = { app::EntityType__Enum_1::Field, "Gear_SeeliaLamp" }; SimpleFilter SeelieLamp = { app::EntityType__Enum_1::Field, "Gear_SeeliaLamp" };
SimpleFilter Seelie = { app::EntityType__Enum_1::Platform, "Gear_Seelie" }; SimpleFilter Seelie = { app::EntityType__Enum_1::Platform, "Gear_Seelie" };
SimpleFilter SmallRockPile = { app::EntityType__Enum_1::Gadget, "_StonePile_01" }; SimpleFilter SmallRockPile = { app::EntityType__Enum_1::Gadget, "_StonePile_01" };
@ -315,8 +322,7 @@ namespace cheat::game::filters
living::Fox + living::Fox +
living::Squirrel + living::Squirrel +
living::Boar + living::Boar +
living::Weasel + living::Weasel
living::Fish
}; };
SimpleFilter AnimalPickUp = { SimpleFilter AnimalPickUp = {
living::CrystalCore + living::CrystalCore +
@ -331,7 +337,8 @@ namespace cheat::game::filters
living::LuminescentSpine + living::LuminescentSpine +
living::Starconch + living::Starconch +
living::BirdEgg + living::BirdEgg +
living::WeaselThief living::WeaselThief +
living::Fish
}; };
SimpleFilter AnimalNPC = { SimpleFilter AnimalNPC = {
living::Dog + living::Dog +
@ -342,6 +349,7 @@ namespace cheat::game::filters
SimpleFilter Monsters = { app::EntityType__Enum_1::Monster }; SimpleFilter Monsters = { app::EntityType__Enum_1::Monster };
SimpleFilter MonsterCommon = { SimpleFilter MonsterCommon = {
monster::Slime + monster::Slime +
monster::FloatingFungus +
monster::Specter + monster::Specter +
monster::Whopperflower + monster::Whopperflower +
monster::Hilichurl + monster::Hilichurl +
@ -350,7 +358,10 @@ namespace cheat::game::filters
monster::FatuiSkirmisher + monster::FatuiSkirmisher +
monster::TreasureHoarder + monster::TreasureHoarder +
monster::Nobushi + monster::Nobushi +
monster::Kairagi monster::Kairagi +
monster::Millelith +
monster::ShogunateInfantry +
monster::SangonomiyaCohort
}; };
SimpleFilter MonsterElites = { SimpleFilter MonsterElites = {
monster::Mitachurl + monster::Mitachurl +
@ -372,7 +383,8 @@ namespace cheat::game::filters
monster::GeovishapHatchling + monster::GeovishapHatchling +
monster::Geovishap + monster::Geovishap +
monster::HydroBathysmalVishap + monster::HydroBathysmalVishap +
monster::EyeOfTheStorm monster::EyeOfTheStorm +
monster::BlackSerpentKnight
}; };
SimpleFilter MonsterBosses = { SimpleFilter MonsterBosses = {
// Adding these comments for better tracking. // Adding these comments for better tracking.
@ -391,9 +403,18 @@ namespace cheat::game::filters
// Liyue // Liyue
monster::PyroRegisvine + monster::PyroRegisvine +
monster::Oceanid + monster::Oceanid +
monster::OceanidBoar +
monster::OceanidCrab +
monster::OceanidCrane +
monster::OceanidFalcon +
monster::OceanidFinch +
monster::OceanidFrog +
monster::OceanidSquirrel +
monster::OceanidWigeon +
monster::GeoHypostasis + monster::GeoHypostasis +
monster::RuinSerpent + monster::RuinSerpent +
monster::PrimoGeovishap + monster::PrimoGeovishap +
monster::Beisht +
// Inazuma // Inazuma
monster::PerpetualMechanicalArray + monster::PerpetualMechanicalArray +
monster::PyroHypostasis + monster::PyroHypostasis +
@ -401,6 +422,7 @@ namespace cheat::game::filters
monster::ThunderManifestation + monster::ThunderManifestation +
monster::GoldenWolflord + monster::GoldenWolflord +
monster::HydroHypostasis + monster::HydroHypostasis +
monster::HydroHypostasisSummon +
monster::CryoBathysmalVishap + monster::CryoBathysmalVishap +
monster::ElectroBathysmalVishap monster::ElectroBathysmalVishap
}; };

View File

@ -50,11 +50,15 @@ namespace cheat::game::filters
namespace guide namespace guide
{ {
extern SimpleFilter CampfireTorch; extern SimpleFilter CampfireTorch;
extern SimpleFilter DayNightSwitchingMechanism;
extern SimpleFilter EnkanomiyaPhaseGate;
extern SimpleFilter MysteriousCarvings; extern SimpleFilter MysteriousCarvings;
extern SimpleFilter PhaseGate; extern SimpleFilter PhaseGate;
extern SimpleFilter PlacesofEssenceWorship;
extern SimpleFilter Pot; extern SimpleFilter Pot;
extern SimpleFilter RuinBrazier; extern SimpleFilter RuinBrazier;
extern SimpleFilter Stormstone; extern SimpleFilter Stormstone;
extern SimpleFilter TriangularMechanism;
} }
namespace living namespace living
@ -103,6 +107,7 @@ namespace cheat::game::filters
extern SimpleFilter ScarletQuartz; extern SimpleFilter ScarletQuartz;
extern SimpleFilter StarSilver; extern SimpleFilter StarSilver;
extern SimpleFilter WhiteIronChunk; extern SimpleFilter WhiteIronChunk;
extern SimpleFilter DunlinsTooth;
} }
namespace monster namespace monster
@ -223,9 +228,10 @@ namespace cheat::game::filters
extern SimpleFilter BakeDanuki; extern SimpleFilter BakeDanuki;
extern SimpleFilter BloattyFloatty; extern SimpleFilter BloattyFloatty;
extern WhitelistFilter CubeDevices; extern WhitelistFilter CubeDevices;
extern SimpleFilter EightStoneTablets; extern SimpleFilter EightStoneTablets;
extern SimpleFilter ElectricConduction; extern SimpleFilter ElectricConduction;
extern SimpleFilter RelayStone;
extern WhitelistFilter ElectroSeelie; extern WhitelistFilter ElectroSeelie;
extern SimpleFilter ElementalMonument; extern SimpleFilter ElementalMonument;
extern SimpleFilter FloatingAnemoSlime; extern SimpleFilter FloatingAnemoSlime;
@ -240,6 +246,7 @@ namespace cheat::game::filters
extern SimpleFilter OozingConcretions; extern SimpleFilter OozingConcretions;
extern SimpleFilter PirateHelm; extern SimpleFilter PirateHelm;
extern WhitelistFilter PressurePlate; extern WhitelistFilter PressurePlate;
extern SimpleFilter SealLocations;
extern SimpleFilter SeelieLamp; extern SimpleFilter SeelieLamp;
extern SimpleFilter Seelie; extern SimpleFilter Seelie;
extern SimpleFilter SmallRockPile; extern SimpleFilter SmallRockPile;

View File

@ -1544,13 +1544,14 @@ namespace cheat::feature
static ImCircle GetMinimapCircle() static ImCircle GetMinimapCircle()
{ {
static app::Rect mapRect = {};
if (_monoMiniMap == nullptr) if (_monoMiniMap == nullptr)
return {}; return {};
UPDATE_DELAY_VAR(ImCircle, _miniMapCircle, 2000); UPDATE_DELAY_VAR(ImCircle, _miniMapCircle, 2000);
auto uiManager = GET_SINGLETON(MoleMole_UIManager); auto uiManager = GET_SINGLETON(MoleMole_UIManager);
if (uiManager == nullptr || uiManager->fields._sceneCanvas == nullptr) if (uiManager == nullptr || uiManager->fields._sceneCanvas == nullptr || uiManager->fields._uiCamera == nullptr)
return {}; return {};
auto back = _monoMiniMap->fields._grpMapBack; auto back = _monoMiniMap->fields._grpMapBack;
@ -1560,13 +1561,16 @@ namespace cheat::feature
auto mapPos = app::Transform_get_position(reinterpret_cast<app::Transform*>(back), nullptr); auto mapPos = app::Transform_get_position(reinterpret_cast<app::Transform*>(back), nullptr);
auto center = app::Camera_WorldToScreenPoint(uiManager->fields._uiCamera, mapPos, nullptr); auto center = app::Camera_WorldToScreenPoint(uiManager->fields._uiCamera, mapPos, nullptr);
center.y = app::Screen_get_height(nullptr) - center.y; center.y = app::Screen_get_height(nullptr) - center.y;
if (mapRect.m_Width == 0)
mapRect = app::RectTransform_get_rect(back, nullptr);
auto mapRect = app::RectTransform_get_rect(back, nullptr);
float scaleFactor = app::Canvas_get_scaleFactor(uiManager->fields._sceneCanvas, nullptr); float scaleFactor = app::Canvas_get_scaleFactor(uiManager->fields._sceneCanvas, nullptr);
_miniMapCircle = { if (scaleFactor != 0)
ImVec2(center.x, center.y), _miniMapCircle = {
(mapRect.m_Width * scaleFactor) / 2 ImVec2(center.x, center.y),
}; (mapRect.m_Width * scaleFactor) / 2
};
return _miniMapCircle; return _miniMapCircle;
} }

View File

@ -8,13 +8,17 @@ namespace cheat::feature
{ {
static bool Miscs_CheckTargetAttackable_Hook(app::BaseEntity* attacker, app::BaseEntity* target, MethodInfo* method); static bool Miscs_CheckTargetAttackable_Hook(app::BaseEntity* attacker, app::BaseEntity* target, MethodInfo* method);
static void VCHumanoidMove_NotifyLandVelocity_Hook(app::VCHumanoidMove* __this, app::Vector3 velocity, float reachMaxDownVelocityTime, MethodInfo* method); static void VCHumanoidMove_NotifyLandVelocity_Hook(app::VCHumanoidMove* __this, app::Vector3 velocity, float reachMaxDownVelocityTime, MethodInfo* method);
static void LCBaseCombat_FireBeingHitEvent_Hook(app::LCBaseCombat* __this, uint32_t attackeeRuntimeID, app::AttackResult* attackResult, MethodInfo* method);
static bool MoleMole_ActorAbilityPlugin_HanlderModifierThinkTimerUp_Hook(app::ActorAbilityPlugin* __this, float delay, app::Object* arg, MethodInfo* method);
GodMode::GodMode() : Feature(), GodMode::GodMode() : Feature(),
NFEX(f_Enabled, "God mode", "m_GodMode", "Player", false, false) NFEX(f_Enabled, "God mode", "m_GodMode", "Player", false, false),
NF(f_AltGodMode, "Alternative God Mode", "Player", false)
{ {
// HookManager::install(app::MoleMole_LCBaseCombat_FireBeingHitEvent, LCBaseCombat_FireBeingHitEvent_Hook);
HookManager::install(app::VCHumanoidMove_NotifyLandVelocity, VCHumanoidMove_NotifyLandVelocity_Hook); HookManager::install(app::VCHumanoidMove_NotifyLandVelocity, VCHumanoidMove_NotifyLandVelocity_Hook);
HookManager::install(app::Miscs_CheckTargetAttackable, Miscs_CheckTargetAttackable_Hook); HookManager::install(app::Miscs_CheckTargetAttackable, Miscs_CheckTargetAttackable_Hook);
HookManager::install(app::MoleMole_LCBaseCombat_FireBeingHitEvent, LCBaseCombat_FireBeingHitEvent_Hook);
HookManager::install(app::MoleMole_ActorAbilityPlugin_HanlderModifierThinkTimerUp, MoleMole_ActorAbilityPlugin_HanlderModifierThinkTimerUp_Hook);
} }
const FeatureGUIInfo& GodMode::GetGUIInfo() const const FeatureGUIInfo& GodMode::GetGUIInfo() const
@ -28,16 +32,21 @@ namespace cheat::feature
ConfigWidget("God Mode", f_Enabled, ConfigWidget("God Mode", f_Enabled,
"Enables god mode, i.e. no incoming damage.\n" \ "Enables god mode, i.e. no incoming damage.\n" \
"May not work with some types of damage."); "May not work with some types of damage.");
ImGui::Indent();
ConfigWidget("Alternative God Mode", f_AltGodMode,
"Alternative god mode that ignores incoming damage\n" \
"including environmental damage.");
ImGui::Unindent();
} }
bool GodMode::NeedStatusDraw() const bool GodMode::NeedStatusDraw() const
{ {
return f_Enabled; return f_Enabled || f_AltGodMode;
} }
void GodMode::DrawStatus() void GodMode::DrawStatus()
{ {
ImGui::Text("God Mode"); ImGui::Text("God Mode%s", f_AltGodMode ? "+Alt " : " ");
} }
GodMode& GodMode::GetInstance() GodMode& GodMode::GetInstance()
@ -64,7 +73,7 @@ namespace cheat::feature
static void VCHumanoidMove_NotifyLandVelocity_Hook(app::VCHumanoidMove* __this, app::Vector3 velocity, float reachMaxDownVelocityTime, MethodInfo* method) static void VCHumanoidMove_NotifyLandVelocity_Hook(app::VCHumanoidMove* __this, app::Vector3 velocity, float reachMaxDownVelocityTime, MethodInfo* method)
{ {
auto& gm = GodMode::GetInstance(); auto& gm = GodMode::GetInstance();
if (gm.f_Enabled && -velocity.y > 13) if ((gm.f_Enabled || gm.f_AltGodMode) && -velocity.y > 13)
{ {
float randAdd = (float)(std::rand() % 1000) / 1000; float randAdd = (float)(std::rand() % 1000) / 1000;
velocity.y = -8 - randAdd; velocity.y = -8 - randAdd;
@ -75,13 +84,24 @@ namespace cheat::feature
} }
// Analog function for disable attack damage (Thanks to Taiga74164) // Analog function for disable attack damage (Thanks to Taiga74164)
//void LCBaseCombat_FireBeingHitEvent_Hook(app::LCBaseCombat* __this, uint32_t attackeeRuntimeID, app::AttackResult* attackResult, MethodInfo* method) static void LCBaseCombat_FireBeingHitEvent_Hook(app::LCBaseCombat* __this, uint32_t attackeeRuntimeID, app::AttackResult* attackResult, MethodInfo* method)
//{ {
// auto avatarEntity = GetAvatarEntity(); auto& gm = GodMode::GetInstance();
// if (avatarEntity != nullptr && Config::cfgGodModEnable.GetValue() && avatarEntity->fields._runtimeID_k__BackingField == attackeeRuntimeID) auto& manager = game::EntityManager::instance();
// return; if (gm.f_AltGodMode && manager.avatar()->runtimeID() == attackeeRuntimeID)
// return;
// return callOrigin(LCBaseCombat_FireBeingHitEvent_Hook, __this, attackeeRuntimeID, attackResult, method);
//} CALL_ORIGIN(LCBaseCombat_FireBeingHitEvent_Hook, __this, attackeeRuntimeID, attackResult, method);
}
// Environmental damage immunity (Thanks to RELOADED#7236 / GitHub: @34736384)
static bool MoleMole_ActorAbilityPlugin_HanlderModifierThinkTimerUp_Hook(app::ActorAbilityPlugin* __this, float delay, app::Object* arg, MethodInfo* method)
{
auto& gm = GodMode::GetInstance();
if (gm.f_AltGodMode/* || gm.f_Enabled*/)
return FALSE;
return CALL_ORIGIN(MoleMole_ActorAbilityPlugin_HanlderModifierThinkTimerUp_Hook, __this, delay, arg, method);
}
} }

View File

@ -9,6 +9,7 @@ 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_AltGodMode;
static GodMode& GetInstance(); static GodMode& GetInstance();

View File

@ -183,6 +183,17 @@ namespace cheat::feature
return attackerID == avatarID || IsAvatarOwner(attacker); return attackerID == avatarID || IsAvatarOwner(attacker);
} }
bool IsValidByFilter(game::Entity* entity)
{
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
game::filters::combined::Ores.IsValid(entity) ||
game::filters::puzzle::Geogranum.IsValid(entity) ||
game::filters::puzzle::LargeRockPile.IsValid(entity) ||
game::filters::puzzle::SmallRockPile.IsValid(entity))
return true;
return false;
}
// Raises when any entity do hit event. // Raises when any entity do hit event.
// Just recall attack few times (regulating by combatProp) // Just recall attack few times (regulating by combatProp)
// It's not tested well, so, I think, anticheat can detect it. // It's not tested well, so, I think, anticheat can detect it.
@ -196,24 +207,30 @@ namespace cheat::feature
auto& manager = game::EntityManager::instance(); auto& manager = game::EntityManager::instance();
auto originalTarget = manager.entity(targetID); auto originalTarget = manager.entity(targetID);
if (!game::filters::combined::OrganicTargets.IsValid(originalTarget)) if (!IsValidByFilter(originalTarget))
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method); return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
std::vector<cheat::game::Entity*> validEntities; std::vector<cheat::game::Entity*> validEntities;
validEntities.push_back(originalTarget); validEntities.push_back(originalTarget);
if (rapidFire.f_MultiTarget) if (rapidFire.f_MultiTarget)
{ {
auto filteredEntities = manager.entities(game::filters::combined::Monsters); auto filteredEntities = manager.entities();
for (const auto& entity : filteredEntities) { for (const auto& entity : filteredEntities) {
auto distance = originalTarget->distance(entity); auto distance = originalTarget->distance(entity);
if (entity->runtimeID() == manager.avatar()->runtimeID())
continue;
if (entity->runtimeID() == targetID) if (entity->runtimeID() == targetID)
continue; continue;
if (distance > rapidFire.f_MultiTargetRadius) if (distance > rapidFire.f_MultiTargetRadius)
continue; continue;
if (!IsValidByFilter(entity))
continue;
validEntities.push_back(entity); validEntities.push_back(entity);
} }
} }

View File

@ -0,0 +1,100 @@
#include "pch-il2cpp.h"
#include "Browser.h"
#include <helpers.h>
#include <cheat/events.h>
#include <misc/cpp/imgui_stdlib.h>
namespace cheat::feature
{
app::GameObject* planeObject = nullptr;
app::Component_1* BrowserComponents = nullptr;
static std::string f_URL;
Browser::Browser() : Feature(),
NFEX(f_Enabled, "Browser", "Browser", "Visuals", false, false),
toBeUpdate(), nextUpdate(0)
{
events::GameUpdateEvent += MY_METHOD_HANDLER(Browser::OnGameUpdate);
}
const FeatureGUIInfo& Browser::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "Browser", "Visuals", false };
return info;
}
void Browser::DrawMain()
{
ConfigWidget(f_Enabled, "Create in-game Browser");
ImGui::InputText("URL", &f_URL);
}
bool Browser::NeedStatusDraw() const
{
return f_Enabled;
}
void Browser::DrawStatus()
{
ImGui::Text("Browser");
}
Browser& Browser::GetInstance()
{
static Browser instance;
return instance;
}
void Browser::OnGameUpdate()
{
auto currentTime = util::GetCurrentTimeMillisec();
if (currentTime < nextUpdate)
return;
if (f_Enabled) {
auto entityRoot = app::GameObject_Find(string_to_il2cppi("EntityRoot/AvatarRoot/"), nullptr);
if (!app::GameObject_get_active(entityRoot, nullptr))
return;
if (planeObject == nullptr) {
auto PrimitiveType = app::PrimitiveType__Enum::Plane;
planeObject = app::GameObject_CreatePrimitive(PrimitiveType, nullptr);
app::Transform* planeObject_Transform = app::GameObject_get_transform(planeObject, nullptr);
app::Quaternion planeObject_Transform_Quaternion = { 0.5, 0.5, -0.5, 0.5 };
auto avatarPos = app::ActorUtils_GetAvatarPos(nullptr);
auto relativePos = app::WorldShiftManager_GetRelativePosition(avatarPos, nullptr);
app::Vector3 planeObject_Transform_Vector3 = { relativePos.x, relativePos.y + 3, relativePos.z };
app::Vector3 planeObject_Transform_Scale = { 1, 1, 1 };
app::Transform_set_localPosition(planeObject_Transform, planeObject_Transform_Vector3, nullptr);
app::Transform_set_localScale(planeObject_Transform, planeObject_Transform_Scale, nullptr);
app::Transform_set_localRotation(planeObject_Transform, planeObject_Transform_Quaternion, nullptr);
}
if (planeObject != nullptr) {
if (BrowserComponents == nullptr) {
std::string custom_url = f_URL.length() < 2 || f_URL.c_str() == "" ? "https://www.google.com/" : f_URL.c_str();
BrowserComponents = app::GameObject_AddComponentInternal(planeObject, string_to_il2cppi("Browser"), nullptr);
reinterpret_cast<app::Browser*>(BrowserComponents)->fields._url = string_to_il2cppi(custom_url);
reinterpret_cast<app::Browser*>(BrowserComponents)->fields._width = 1920;
reinterpret_cast<app::Browser*>(BrowserComponents)->fields._height = 1080;
reinterpret_cast<app::Browser*>(BrowserComponents)->fields.forceNextRender = true;
reinterpret_cast<app::Browser*>(BrowserComponents)->fields._EnableInput_k__BackingField = true;
}
}
}
else {
if (planeObject != nullptr && BrowserComponents != nullptr) {
app::Object_1_DestroyImmediate_1(reinterpret_cast<app::Object_1*>(planeObject), nullptr);
app::Object_1_DestroyImmediate_1(reinterpret_cast<app::Object_1*>(BrowserComponents), nullptr);
planeObject = nullptr;
BrowserComponents = nullptr;
}
}
nextUpdate = currentTime + (int)f_DelayUpdate;
}
}

View File

@ -0,0 +1,26 @@
#pragma once
#include <cheat-base/cheat/Feature.h>
#include <cheat-base/config/config.h>
#include <cheat-base/thread-safe.h>
namespace cheat::feature
{
class Browser : public Feature
{
public:
config::Field<config::Toggle<Hotkey>> f_Enabled;
static Browser& GetInstance();
const FeatureGUIInfo& GetGUIInfo() const override;
void DrawMain() override;
virtual bool NeedStatusDraw() const override;
void DrawStatus() override;
private:
SafeQueue<uint32_t> toBeUpdate;
SafeValue<int64_t> nextUpdate;
int f_DelayUpdate = 20.f;
void OnGameUpdate();
Browser();
};
}

View File

@ -9,8 +9,8 @@ namespace cheat::feature
static void SCameraModuleInitialize_SetWarningLocateRatio_Hook(app::SCameraModuleInitialize* __this, double deltaTime, app::CameraShareData* data, MethodInfo* method); static void SCameraModuleInitialize_SetWarningLocateRatio_Hook(app::SCameraModuleInitialize* __this, double deltaTime, app::CameraShareData* data, MethodInfo* method);
CameraZoom::CameraZoom() : Feature(), CameraZoom::CameraZoom() : Feature(),
NFEX(f_Enabled, "Camera Zoom", "CameraZoom", "Visuals", false, false), NF(f_Enabled, "Camera Zoom", "Visuals::CameraZoom", false),
NF(f_Zoom, "Zoom", "CameraZoom", 200) NF(f_Zoom, "Zoom", "Visuals::CameraZoom", 200)
{ {
HookManager::install(app::MoleMole_SCameraModuleInitialize_SetWarningLocateRatio, SCameraModuleInitialize_SetWarningLocateRatio_Hook); HookManager::install(app::MoleMole_SCameraModuleInitialize_SetWarningLocateRatio, SCameraModuleInitialize_SetWarningLocateRatio_Hook);
} }

View File

@ -0,0 +1,52 @@
#include "pch-il2cpp.h"
#include "EnablePeaking.h"
#include <helpers.h>
namespace cheat::feature
{
static void MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook(app::MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method);
EnablePeaking::EnablePeaking() : Feature(),
NF(f_Enabled, "Enable Peaking", "Visuals::EnablePeaking", false)
{
HookManager::install(app::MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue, MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook);
}
const FeatureGUIInfo& EnablePeaking::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "EnablePeaking", "Visuals", false };
return info;
}
void EnablePeaking::DrawMain()
{
ConfigWidget(f_Enabled, ";)");
}
bool EnablePeaking::NeedStatusDraw() const
{
return f_Enabled;
}
void EnablePeaking::DrawStatus()
{
ImGui::Text("Enable Peaking");
}
EnablePeaking& EnablePeaking::GetInstance()
{
static EnablePeaking instance;
return instance;
}
static void MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook(app::MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method)
{
EnablePeaking& EnablePeaking = EnablePeaking::GetInstance();
if (EnablePeaking.f_Enabled)
value = 1;
CALL_ORIGIN(MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue_Hook, __this, value, method);
}
}

View File

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

View File

@ -0,0 +1,61 @@
#include "pch-il2cpp.h"
#include "HideUI.h"
#include <helpers.h>
#include <cheat/events.h>
namespace cheat::feature
{
app::GameObject* ui_camera{};
HideUI::HideUI() : Feature(),
NFEX(f_Enabled, "Hide UI", "HideUI", "Visuals", false, false)
{
events::GameUpdateEvent += MY_METHOD_HANDLER(HideUI::OnGameUpdate);
}
const FeatureGUIInfo& HideUI::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "HideUI", "Visuals", false };
return info;
}
void HideUI::DrawMain()
{
ConfigWidget(f_Enabled, "Hide in-game UI.");
}
bool HideUI::NeedStatusDraw() const
{
return f_Enabled;
}
void HideUI::DrawStatus()
{
ImGui::Text("HideUI");
}
HideUI& HideUI::GetInstance()
{
static HideUI instance;
return instance;
}
void HideUI::OnGameUpdate()
{
if (f_Enabled)
{
if (ui_camera == nullptr)
ui_camera = app::GameObject_Find(string_to_il2cppi("/UICamera"), nullptr);
if (ui_camera)
app::GameObject_SetActive(ui_camera, false, nullptr);
}
else
{
if (ui_camera)
app::GameObject_SetActive(ui_camera, true, nullptr);
}
}
}

View File

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

View File

@ -0,0 +1,78 @@
#include "pch-il2cpp.h"
#include "PaimonFollow.h"
#include <helpers.h>
#include <cheat/events.h>
namespace cheat::feature
{
namespace GameObject {
app::GameObject* Paimon = nullptr;
app::GameObject* ProfileLayer = nullptr;
}
PaimonFollow::PaimonFollow() : Feature(),
NFEX(f_Enabled, "Paimon Follow", "PaimonFollow", "Visuals", false, false),
toBeUpdate(), nextUpdate(0)
{
events::GameUpdateEvent += MY_METHOD_HANDLER(PaimonFollow::OnGameUpdate);
}
const FeatureGUIInfo& PaimonFollow::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "PaimonFollow", "Visuals", true };
return info;
}
void PaimonFollow::DrawMain()
{
ConfigWidget(f_Enabled, "To display paimon, turn on the function, open the profile (esc) and close it. \n" \
"If the paimon disappeared after teleportation, do not disable the function, open and close the profile.");
}
bool PaimonFollow::NeedStatusDraw() const
{
return f_Enabled;
}
void PaimonFollow::DrawStatus()
{
ImGui::Text("Paimon Follow");
}
PaimonFollow& PaimonFollow::GetInstance()
{
static PaimonFollow instance;
return instance;
}
void PaimonFollow::OnGameUpdate()
{
if (!f_Enabled)
return;
auto currentTime = util::GetCurrentTimeMillisec();
if (currentTime < nextUpdate)
return;
if (GameObject::Paimon == nullptr) {
GameObject::Paimon = app::GameObject_Find(string_to_il2cppi("/EntityRoot/OtherGadgetRoot/NPC_Guide_Paimon(Clone)"), nullptr);
}
if (GameObject::ProfileLayer == nullptr) {
GameObject::ProfileLayer = app::GameObject_Find(string_to_il2cppi("/Canvas/Pages/PlayerProfilePage"), nullptr);
}
if (GameObject::Paimon != nullptr && GameObject::ProfileLayer != nullptr) {
auto ProfileOpen = app::GameObject_get_active(GameObject::ProfileLayer, nullptr);
if (ProfileOpen) {
app::GameObject_set_active(GameObject::Paimon, false, nullptr);
}
else {
app::GameObject_set_active(GameObject::Paimon, true, nullptr);
}
}
nextUpdate = currentTime + (int)f_DelayUpdate;
}
}

View File

@ -0,0 +1,26 @@
#pragma once
#include <cheat-base/cheat/Feature.h>
#include <cheat-base/config/config.h>
#include <cheat-base/thread-safe.h>
namespace cheat::feature
{
class PaimonFollow : public Feature
{
public:
config::Field<config::Toggle<Hotkey>> f_Enabled;
static PaimonFollow& GetInstance();
const FeatureGUIInfo& GetGUIInfo() const override;
void DrawMain() override;
virtual bool NeedStatusDraw() const override;
void DrawStatus() override;
private:
SafeQueue<uint32_t> toBeUpdate;
SafeValue<int64_t> nextUpdate;
int f_DelayUpdate = 100.f;
void OnGameUpdate();
PaimonFollow();
};
}

View File

@ -0,0 +1,244 @@
#include "pch-il2cpp.h"
#include "ProfileChanger.h"
#include <helpers.h>
#include <cheat/events.h>
#include <misc/cpp/imgui_stdlib.h>
#include <fstream>
namespace cheat::feature
{
namespace GameObject {
app::GameObject* WaterMark = nullptr;
}
namespace Components {
app::Component_1* WaterMark = nullptr;
app::Texture2D* CardTexture = nullptr;
app::Texture2D* AvatarTexture = nullptr;
app::Sprite* CardSprite = nullptr;
app::Sprite* AvatarSprite = nullptr;
app::Rect RectCard;
app::Rect RectAvatar;
}
// Profile Page
app::Button_1* ProfilePage(app::MonoInLevelPlayerProfilePage* __this, MethodInfo* method);
// Edit Player Info Page
static void ProfileEditPage(app::MonoFriendInformationDialog* __this, app::Sprite* value, MethodInfo* method);
ProfileChanger::ProfileChanger() : Feature(),
NF(f_Enabled, "Custom Profile", "Visuals::ProfileChanger", false),
NF(f_UID, "UID", "Visuals::ProfileChanger", false),
NF(f_NickName, "NickName", "Visuals::ProfileChanger", false),
NF(f_Level, "Level", "Visuals::ProfileChanger", false),
NF(f_Exp, "Exp", "Visuals::ProfileChanger", false),
NF(f_CurExp, "CurExp", "Visuals::ProfileChanger", 1),
NF(f_MaxExp, "MaxExp", "Visuals::ProfileChanger", 1),
NF(f_ExpBar, "ExpBar", "Visuals::ProfileChanger", false),
NF(f_ExpBarValue, "ExpBarValue", "Visuals::ProfileChanger", 20.0f),
NF(f_WorldLevel, "WorldLevel", "Visuals::ProfileChanger", false),
NF(f_Avatar, "AvatarImage", "Visuals::ProfileChanger", false),
NF(f_Card, "CardImage", "Visuals::ProfileChanger", false),
toBeUpdate(), nextUpdate(0)
{
HookManager::install(app::ProfilePage, ProfilePage);
HookManager::install(app::ProfileEditPage, ProfileEditPage);
events::GameUpdateEvent += MY_METHOD_HANDLER(ProfileChanger::OnGameUpdate);
}
const FeatureGUIInfo& ProfileChanger::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "CustomProfile", "Visuals", true };
return info;
}
void ProfileChanger::DrawMain()
{
ConfigWidget(f_Enabled, "Custom Profile.");
ConfigWidget(f_UID, "Changes the uid visually.");
ConfigWidget(f_NickName, "Changes the nickname visually.");
ConfigWidget(f_Level, "Changes the level visually.");
ConfigWidget(f_Exp, "Changes the exp visually.");
if (f_Exp) {
ConfigWidget("CurExp", f_CurExp, 1, 2, 100000, "Changes the ExpBar visually.");
ConfigWidget("MaxExp", f_MaxExp, 1, 2, 100000, "Changes the ExpBar visually.");
ConfigWidget(f_ExpBar, "Changes the ExpBar visually.");
if (f_ExpBar)
ConfigWidget("ExpBarValue", f_ExpBarValue, 1, 2, 100, "Changes the ExpBar visually.");
}
ConfigWidget(f_WorldLevel, "Changes the world-level visually.");
ConfigWidget(f_Avatar, "Changes the Avatar Image visually.\n" \
"Note the size of the picture must be: 256x256.\n" \
"Example path: C:\\Avatars.png");
ConfigWidget(f_Card, "Changes the Card visually.\n" \
"Note the size of the picture must be: 840x400.\n" \
"Example path: C:\\Avatars.png");
}
bool ProfileChanger::NeedStatusDraw() const
{
return f_Enabled;
}
void ProfileChanger::DrawStatus()
{
ImGui::Text("Custom Profile");
}
ProfileChanger& ProfileChanger::GetInstance()
{
static ProfileChanger instance;
return instance;
}
void ProfileChanger::OnGameUpdate()
{
if (!f_Enabled || !f_UID)
return;
auto currentTime = util::GetCurrentTimeMillisec();
if (currentTime < nextUpdate)
return;
if (f_UID) {
if (GameObject::WaterMark == nullptr)
GameObject::WaterMark = app::GameObject_Find(string_to_il2cppi("/BetaWatermarkCanvas(Clone)/Panel/TxtUID"), nullptr);
if (GameObject::WaterMark != nullptr && Components::WaterMark == nullptr)
Components::WaterMark = app::GameObject_GetComponentByName(GameObject::WaterMark, string_to_il2cppi("Text"), nullptr);
if (Components::WaterMark != nullptr)
app::Text_set_text(reinterpret_cast<app::Text*>(Components::WaterMark), string_to_il2cppi(f_UID), nullptr);
}
nextUpdate = currentTime + (int)f_DelayUpdate;
}
bool ProfileChanger::CheckFile(const std::string& Filename) {
struct stat buffer;
return (stat(Filename.c_str(), &buffer) == 0);
}
app::Button_1* ProfilePage(app::MonoInLevelPlayerProfilePage* __this, MethodInfo* method)
{
auto& profile = ProfileChanger::GetInstance();
if (profile.f_Enabled) {
if (profile.f_UID)
app::Text_set_text(__this->fields._playerID, string_to_il2cppi(profile.f_UID), nullptr);
if (profile.f_Level)
app::Text_set_text(__this->fields._playerLv, string_to_il2cppi(profile.f_Level), nullptr);
if (profile.f_Exp) {
std::string CurExpStr = std::to_string(profile.f_CurExp);
std::string MaxExpStr = std::to_string(profile.f_MaxExp);
app::Text_set_text(__this->fields._playerExp, string_to_il2cppi(CurExpStr + "/" + MaxExpStr), nullptr);
if (profile.f_ExpBar)
{
app::Slider_1_set_minValue(__this->fields._playerExpSlider, 1, nullptr);
app::Slider_1_set_maxValue(__this->fields._playerExpSlider, 100, nullptr);
app::Slider_1_set_value(__this->fields._playerExpSlider, profile.f_ExpBarValue, nullptr);
}
}
if (profile.f_WorldLevel)
app::Text_set_text(__this->fields._playerWorldLv, string_to_il2cppi(profile.f_WorldLevel), nullptr);
if (profile.f_NickName){
auto playerModule = GET_SINGLETON(MoleMole_PlayerModule);
if (playerModule != nullptr && playerModule->fields._accountData_k__BackingField != nullptr) {
auto& accountData = playerModule->fields._accountData_k__BackingField->fields;
accountData.nickName = string_to_il2cppi(profile.f_NickName);
}
}
// Card Name png size 840x400
if (profile.f_Card){
if (profile.CheckFile(profile.f_Card)) {
Components::CardTexture = app::NativeGallery_LoadImageAtPath(string_to_il2cppi(profile.f_Card), 100, false, false, false, nullptr);
// If you don't do this check, then the UI will break after teleportation, I'm just too lazy to set up Rect manually
if (Components::RectCard.m_Width == 0)
Components::RectCard = app::Sprite_get_rect(__this->fields._nameCardPic->fields.m_Sprite, nullptr);
app::Vector2 Vec2 = { 100, 100 };
Components::CardSprite = app::Sprite_Create(Components::CardTexture, Components::RectCard, Vec2, 1, nullptr);
__this->fields._nameCardPic->fields.m_OverrideSprite = Components::CardSprite;
}
else {
std::cout << "Card Image: \n" << "not found" << std::endl;
}
}
// Avatar png size 256x256
if (profile.f_Avatar) {
if (profile.CheckFile(profile.f_Avatar)) {
Components::AvatarTexture = app::NativeGallery_LoadImageAtPath(string_to_il2cppi(profile.f_Avatar), 100, false, false, false, nullptr);
// If you don't do this check, then the UI will break after teleportation, I'm just too lazy to set up Rect manually
if (Components::RectAvatar.m_Width == 0)
Components::RectAvatar = app::Sprite_get_rect(__this->fields.playerIconImage->fields.m_Sprite, nullptr);
app::Vector2 Vec2Avatar = { 128, 128 };
Components::AvatarSprite = app::Sprite_Create(Components::AvatarTexture, Components::RectAvatar, Vec2Avatar, 1, nullptr);
__this->fields.playerIconImage->fields.m_OverrideSprite = Components::AvatarSprite;
}
else {
std::cout << "Avatar Image: \n" << "not found" << std::endl;
}
}
}
return CALL_ORIGIN(ProfilePage, __this, method);
}
static void ProfileEditPage(app::MonoFriendInformationDialog* __this, app::Sprite* value, MethodInfo* method) {
auto& profile = ProfileChanger::GetInstance();
if (profile.f_Enabled) {
if (profile.f_UID)
__this->fields._playerUID->fields.m_Text = string_to_il2cppi(profile.f_UID);
if (profile.f_Level)
__this->fields._playerLevel->fields.m_Text = string_to_il2cppi(profile.f_Level);
if (profile.f_WorldLevel)
__this->fields._worldLevel->fields.m_Text = string_to_il2cppi(profile.f_WorldLevel);
// Card Name png size 840x400
if (profile.f_Card) {
if (profile.CheckFile(profile.f_Card)) {
Components::CardTexture = app::NativeGallery_LoadImageAtPath(string_to_il2cppi(profile.f_Card), 100, false, false, false, nullptr);
// If you don't do this check, then the UI will break after teleportation, I'm just too lazy to set up Rect manually
if (Components::RectCard.m_Width == 0)
Components::RectCard = app::Sprite_get_rect(__this->fields._cardImg->fields.m_Sprite, nullptr);
app::Vector2 Vec2 = { 100, 100 };
Components::CardSprite = app::Sprite_Create(Components::CardTexture, Components::RectCard, Vec2, 1, nullptr);
__this->fields._cardImg->fields.m_OverrideSprite = Components::CardSprite;
}
else {
std::cout << "Card Image: \n" << "not found" << std::endl;
}
}
// Avatar png size 256x256
if (profile.f_Avatar) {
if (profile.CheckFile(profile.f_Avatar)) {
Components::AvatarTexture = app::NativeGallery_LoadImageAtPath(string_to_il2cppi(profile.f_Avatar), 100, false, false, false, nullptr);
if (Components::RectAvatar.m_Width == 0)
Components::RectAvatar = app::Sprite_get_rect(__this->fields._icon->fields.m_Sprite, nullptr);
app::Vector2 Vec2Avatar = { 128, 128 };
Components::AvatarSprite = app::Sprite_Create(Components::AvatarTexture, Components::RectAvatar, Vec2Avatar, 1, nullptr);
__this->fields._icon->fields.m_OverrideSprite = Components::AvatarSprite;
}
else {
std::cout << "Card Image: \n" << "not found" << std::endl;
}
}
}
return CALL_ORIGIN(ProfileEditPage, __this, value, method);
}
}

View File

@ -0,0 +1,44 @@
#pragma once
#include <cheat-base/cheat/Feature.h>
#include <cheat-base/config/config.h>
#include <cheat-base/thread-safe.h>
namespace cheat::feature
{
class ProfileChanger : public Feature
{
public:
config::Field<config::Toggle<Hotkey>> f_Enabled;
config::Field<config::Toggle<std::string>> f_UID;
config::Field<config::Toggle<std::string>> f_NickName;
config::Field<config::Toggle<std::string>> f_Level;
config::Field<config::Toggle<Hotkey>> f_Exp;
config::Field<int> f_CurExp;
config::Field<int> f_MaxExp;
config::Field<config::Toggle<Hotkey>> f_ExpBar;
config::Field<float> f_ExpBarValue;
config::Field<config::Toggle<std::string>> f_WorldLevel;
config::Field<config::Toggle<std::string>> f_Avatar; // Avatar png size 256x256
config::Field<config::Toggle<std::string>> f_Card; // Card Name png size 840x400
static ProfileChanger& GetInstance();
const FeatureGUIInfo& GetGUIInfo() const override;
void DrawMain() override;
virtual bool NeedStatusDraw() const override;
void DrawStatus() override;
bool CheckFile(const std::string& name);
private:
SafeQueue<uint32_t> toBeUpdate;
SafeValue<int64_t> nextUpdate;
int f_DelayUpdate = 100.f;
void OnGameUpdate();
ProfileChanger();
};
}

View File

@ -9,7 +9,7 @@ namespace cheat::feature
static bool IndicatorPlugin_DoCheck(app::LCIndicatorPlugin* __this, MethodInfo* method); static bool IndicatorPlugin_DoCheck(app::LCIndicatorPlugin* __this, MethodInfo* method);
ChestIndicator::ChestIndicator() : Feature(), ChestIndicator::ChestIndicator() : Feature(),
NF(f_Enabled, "Show Chest Indicator", "ShowChest", false) NFEX(f_Enabled, "Show Chest Indicator", "ChestIndicator", "Visuals", false, false)
{ {
HookManager::install(app::MoleMole_LCIndicatorPlugin_DoCheck, IndicatorPlugin_DoCheck); HookManager::install(app::MoleMole_LCIndicatorPlugin_DoCheck, IndicatorPlugin_DoCheck);
} }

View File

@ -6,22 +6,27 @@
namespace cheat::feature namespace cheat::feature
{ {
namespace GameObject {
app::GameObject* Profirency = nullptr;
}
namespace Components {
app::Component_1* Profirency = nullptr;
}
static void PlayerModule_RequestPlayerCook(app::MoleMole_PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method); static 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);
static void CookingQtePageContext_SetProficiencyInfo(app::CookingQtePageContext* __this, MethodInfo* method);
static uint32_t CookRecipeExcelConfig_get_maxProficiency(app::CookRecipeExcelConfig* __this, MethodInfo* method);
AutoCook::AutoCook() : Feature(), AutoCook::AutoCook() : Feature(),
NF(f_Enabled, "Auto Cooking", "AutoCook", false), NF(f_Enabled, "Standart Cooking", "AutoCook", false),
NF(f_Count, "Count Item", "AutoCook", 1), NF(f_FastProficiency, "Fast Proficiency", "AutoCook", false),
NF(f_Quality, "Quality", "AutoCook", 1) NF(f_CountField, "Count Item", "AutoCook", 1),
NF(f_QualityField, "Quality", "AutoCook", 1)
{ {
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);
HookManager::install(app::MoleMole_CookingQtePageContext_UpdateProficiency, CookingQtePageContext_UpdateProficiency); HookManager::install(app::MoleMole_CookingQtePageContext_UpdateProficiency, CookingQtePageContext_UpdateProficiency);
HookManager::install(app::CookRecipeExcelConfig_get_maxProficiency, CookRecipeExcelConfig_get_maxProficiency);
} }
const FeatureGUIInfo& AutoCook::GetGUIInfo() const const FeatureGUIInfo& AutoCook::GetGUIInfo() const
@ -32,11 +37,13 @@ namespace cheat::feature
void AutoCook::DrawMain() void AutoCook::DrawMain()
{ {
ConfigWidget(f_Enabled, "Automatic cooking."); ConfigWidget(f_Enabled, "Fast Cooking if the recipe has fast cooking open. \n" \
ConfigWidget("Count Item", f_Count, 1, 1, 100, "If fast cooking is closed, you in addition need to turn on Fast Proficiency.");
ConfigWidget(f_FastProficiency, "Quickly prepare an unstudied recipe to the maximum possible.");
ConfigWidget("Count Item", f_CountField, 1, 1, 100,
"How much to cook at a time.\n" \ "How much to cook at a time.\n" \
"(If the recipe is not fully explored, set it to 1.)"); "(For standard mode only.)");
ConfigWidget("Quality Cooking", f_Quality, 1, 1, 3, "Quality of the cook."); ConfigWidget("Quality Cooking", f_QualityField, 1, 1, 3, "Quality of the cook.");
} }
bool AutoCook::NeedStatusDraw() const bool AutoCook::NeedStatusDraw() const
@ -46,7 +53,7 @@ namespace cheat::feature
void AutoCook::DrawStatus() void AutoCook::DrawStatus()
{ {
ImGui::Text("Auto Cook"); ImGui::Text("Auto Cooking [%s]", f_FastProficiency ? "Proficiency" : "Standart");
} }
AutoCook& AutoCook::GetInstance() AutoCook& AutoCook::GetInstance()
@ -57,51 +64,88 @@ namespace cheat::feature
// Auto Cooking | RyujinZX#6666 // Auto Cooking | RyujinZX#6666
std::vector<std::string> split(std::string& s, char delimeter)
{
std::stringstream ss(s);
std::string item;
std::vector<std::string> tokens;
while (std::getline(ss, item, delimeter))
{
tokens.push_back(item);
}
return tokens;
}
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)
{ {
AutoCook& autoCook = AutoCook::GetInstance(); AutoCook& autoCook = AutoCook::GetInstance();
if (autoCook.f_Enabled) if (autoCook.f_Enabled || autoCook.f_FastProficiency)
{ {
qteQuality = autoCook.f_Quality; autoCook.CookFoodMaxNum = app::MoleMole_Config_CookRecipeExcelConfig_CheckCookFoodMaxNum(recipeId, nullptr);
count = autoCook.f_Count; qteQuality = autoCook.f_QualityField;
}
return CALL_ORIGIN(PlayerModule_RequestPlayerCook, __this, recipeId, avatarId, qteQuality, count, method); if (!autoCook.f_FastProficiency && autoCook.f_Enabled){
count = autoCook.f_CountField;
if (autoCook.f_CountField > autoCook.CookFoodMaxNum)
count = autoCook.CookFoodMaxNum;
return CALL_ORIGIN(PlayerModule_RequestPlayerCook, __this, recipeId, avatarId, qteQuality, count, method);
}
if (autoCook.f_Enabled && autoCook.f_FastProficiency) {
count = 1;
GameObject::Profirency = app::GameObject_Find(string_to_il2cppi("/Canvas/Pages/CookingPage/GrpCooking/GrpTab/GrpItemTips/CookingItemTip/Viewport/ItemTips_Cooking(Clone)/Content/GrpProficiency/Level/"), nullptr);
auto RectTransform = app::GameObject_GetComponentByName(GameObject::Profirency, string_to_il2cppi("RectTransform"), nullptr);
auto TransformChild = app::Transform_GetChild(reinterpret_cast<app::Transform*>(RectTransform), 0, nullptr);
auto TextComponent = app::Component_1_GetComponent_1(reinterpret_cast<app::Component_1*>(TransformChild), string_to_il2cppi("Text"), nullptr);
if (TextComponent != nullptr) {
auto Text_str = app::Text_get_text(reinterpret_cast<app::Text*>(TextComponent), nullptr);
auto ProficiencyStr = il2cppi_to_string(Text_str).erase(0, il2cppi_to_string(Text_str).find_first_of(" ."));
std::vector<std::string> FinalProficiency = split(ProficiencyStr, '/');
autoCook.CookCount = atoi(FinalProficiency[1].c_str()) - atoi(FinalProficiency[0].c_str());
}
if (autoCook.CookCount == 0)
autoCook.CookCount = 1;
if (autoCook.CookCount > autoCook.CookFoodMaxNum)
autoCook.CookCount = autoCook.CookFoodMaxNum;
for (int i = 1; i <= autoCook.CookCount; i++) {
CALL_ORIGIN(PlayerModule_RequestPlayerCook, __this, recipeId, avatarId, qteQuality, count, method);
}
}
}
else {
return CALL_ORIGIN(PlayerModule_RequestPlayerCook, __this, recipeId, avatarId, qteQuality, count, 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) {
AutoCook& autoCook = AutoCook::GetInstance(); AutoCook& autoCook = AutoCook::GetInstance();
if (autoCook.f_Enabled) if (autoCook.f_Enabled || autoCook.f_FastProficiency)
{ {
rsp->fields.qteQuality_ = autoCook.f_Quality; rsp->fields.qteQuality_ = autoCook.f_QualityField;
rsp->fields.cookCount_ = autoCook.f_Count; rsp->fields.cookCount_ = autoCook.f_CountField;
if (autoCook.f_FastProficiency)
// Unlock Quick Cooking, It will reset after a restart, so it is better to study the recipe in full at once. rsp->fields.cookCount_ = 1;
if (rsp->fields.recipeData_ != nullptr) // if (rsp->fields.recipeData_ != nullptr)
rsp->fields.recipeData_->fields.proficiency_ = autoCook.CookCount; // rsp->fields.recipeData_->fields.proficiency_ = autoCook.CookCount;
} }
return CALL_ORIGIN(PlayerModule_OnPlayerCookRsp, __this, rsp, method); return CALL_ORIGIN(PlayerModule_OnPlayerCookRsp, __this, rsp, method);
} }
static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method) { static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method) {
AutoCook& autoCook = AutoCook::GetInstance(); AutoCook& autoCook = AutoCook::GetInstance();
if (autoCook.f_Enabled) if (autoCook.f_Enabled || autoCook.f_FastProficiency)
{ {
__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
} }
return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method); return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method);
} }
static uint32_t CookRecipeExcelConfig_get_maxProficiency(app::CookRecipeExcelConfig* __this, MethodInfo* method) {
AutoCook& autoCook = AutoCook::GetInstance();
if (autoCook.f_Enabled)
{
uint32_t maxCount = app::MoleMole_SimpleSafeUInt32_get_Value(__this->fields.maxProficiencyRawNum, nullptr);
autoCook.CookCount = maxCount;
}
return CALL_ORIGIN(CookRecipeExcelConfig_get_maxProficiency, __this, method);
}
} }

View File

@ -9,10 +9,13 @@ namespace cheat::feature
{ {
public: public:
config::Field<config::Toggle<Hotkey>> f_Enabled; config::Field<config::Toggle<Hotkey>> f_Enabled;
config::Field<int> f_Count; config::Field<config::Toggle<Hotkey>> f_FastProficiency;
config::Field<int> f_Quality;
uint32_t CookCount; config::Field<int> f_CountField;
config::Field<int> f_QualityField;
int CookFoodMaxNum; // Maximum quantity at a time
int CookCount;
static AutoCook& GetInstance(); static AutoCook& GetInstance();

View File

@ -116,12 +116,48 @@ namespace cheat::feature
} }
}; };
template <typename KeyT, typename ValT, uint32_t Size, class /*forward*/ _Hasher = std::hash<KeyT>>
class lra_map {
using key_value_pair = std::pair<KeyT, ValT>;
using list_iterator = typename std::list<key_value_pair>::iterator;
public:
void put(const KeyT& key, const ValT& val) {
auto it = elem_map.find(key);
// if element already in the map, don't modify it.
if (it != elem_map.end())
return;
items_list.push_front(key_value_pair(key, val));
elem_map[key] = items_list.begin();
if (Size < elem_map.size()) {
{
const KeyT& last_key = items_list.back().first;
elem_map.erase(last_key);
}
items_list.pop_back();
}
}
ValT& get(const KeyT& key) {
auto it = elem_map.find(key);
if (it == elem_map.end())
throw std::runtime_error("Tried to access key not present in map");
return it->second->second;
}
bool exists(const KeyT& key) const {
return elem_map.find(key) != elem_map.end();
}
protected:
std::list<key_value_pair> items_list;
std::unordered_map<KeyT, list_iterator, _Hasher> elem_map;
};
void AutoTreeFarm::OnGameUpdate() void AutoTreeFarm::OnGameUpdate()
{ {
static std::unordered_map<Vector3d, uint32_t, hash_fn> s_AttackCountMap; static lra_map<Vector3d, uint32_t, 10, hash_fn> s_AttackCountMap;
static std::queue<app::SceneTreeObject*> s_AttackQueue; static std::queue<app::SceneTreeObject*> s_AttackQueue;
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;
@ -142,7 +178,7 @@ namespace cheat::feature
if (s_AttackQueueSet.count(tree) > 0) if (s_AttackQueueSet.count(tree) > 0)
continue; continue;
if (tree->fields._lastTreeDropTimeStamp + m_RepeatDelay > timestamp) if (s_LastAttackTimestamp + m_RepeatDelay > timestamp)
continue; continue;
auto position = tree->fields._.realBounds.m_Center; auto position = tree->fields._.realBounds.m_Center;
@ -173,22 +209,20 @@ namespace cheat::feature
if (m_AttackPerTree > 0) if (m_AttackPerTree > 0)
{ {
if (s_AttackCountMap.count(position) == 0) if (!s_AttackCountMap.exists(position))
s_AttackCountMap[position] = 0; s_AttackCountMap.put(position, 0);
auto& attackCount = s_AttackCountMap[position]; auto& attackCount = s_AttackCountMap.get(position);
attackCount++; attackCount++;
if (attackCount > static_cast<uint32_t>(m_AttackPerTree)) if (attackCount > static_cast<uint32_t>(m_AttackPerTree))
continue; continue;
} }
tree->fields._lastTreeDropTimeStamp = timestamp; s_LastAttackTimestamp = timestamp;
app::MoleMole_NetworkManager_RequestHitTreeDropNotify(networkManager, position, position, treeType, nullptr); app::MoleMole_NetworkManager_RequestHitTreeDropNotify(networkManager, position, position, treeType, nullptr);
break; break;
} }
if (s_AttackCountMap.size() > 1000)
s_AttackCountMap.clear();
} }
} }

View File

@ -4,20 +4,23 @@
#include <helpers.h> #include <helpers.h>
#include <cheat/game/EntityManager.h> #include <cheat/game/EntityManager.h>
namespace cheat::feature namespace cheat::feature
{ {
static void InLevelCutScenePageContext_UpdateView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method); static void InLevelCutScenePageContext_UpdateView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method);
static void InLevelCutScenePageContext_ClearView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method); static void InLevelCutScenePageContext_ClearView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method);
static void CriwareMediaPlayer_Update(app::CriwareMediaPlayer* __this, MethodInfo* method);
DialogSkip::DialogSkip() : Feature(), DialogSkip::DialogSkip() : Feature(),
NF(f_Enabled, "Auto talk", "AutoTalk", false), NF(f_Enabled, "Auto talk", "AutoTalk", false),
NF(f_AutoSelectDialog, "Auto select dialog", "AutoTalk", true), NF(f_AutoSelectDialog, "Auto select dialog", "AutoTalk", true),
NF(f_ExcludeImportant, "Exclude Katheryne/Tubby", "AutoTalk", true), NF(f_ExcludeImportant, "Exclude Katheryne/Tubby", "AutoTalk", true),
NF(f_FastDialog, "Fast dialog", "AutoTalk", false), NF(f_FastDialog, "Fast dialog", "AutoTalk", false),
NF(f_TimeSpeedup, "Time Speed", "AutoTalk", 5.0f) NF(f_CutsceneUSM, "Skip Cutscenes", "AutoTalk", false),
NF(f_TimeSpeedup, "Time Speed", "AutoTalk", 5.0f)
{ {
HookManager::install(app::MoleMole_InLevelCutScenePageContext_UpdateView, InLevelCutScenePageContext_UpdateView_Hook); HookManager::install(app::MoleMole_InLevelCutScenePageContext_UpdateView, InLevelCutScenePageContext_UpdateView_Hook);
HookManager::install(app::MoleMole_InLevelCutScenePageContext_ClearView, InLevelCutScenePageContext_ClearView_Hook); HookManager::install(app::MoleMole_InLevelCutScenePageContext_ClearView, InLevelCutScenePageContext_ClearView_Hook);
HookManager::install(app::CriwareMediaPlayer_Update, CriwareMediaPlayer_Update);
} }
const FeatureGUIInfo& DialogSkip::GetGUIInfo() const const FeatureGUIInfo& DialogSkip::GetGUIInfo() const
@ -41,21 +44,25 @@ namespace cheat::feature
{ {
ConfigWidget(f_TimeSpeedup, 0.1f, 2.0f, 50.0f, "Time Speedup Multipler \nHigher Values will lead to sync issues with servers \nand is not recommended for Laggy Internet connections."); ConfigWidget(f_TimeSpeedup, 0.1f, 2.0f, 50.0f, "Time Speedup Multipler \nHigher Values will lead to sync issues with servers \nand is not recommended for Laggy Internet connections.");
} }
ConfigWidget("Skip Cutscenes", f_CutsceneUSM, "Automatically skips game movies.");
} }
bool DialogSkip::NeedStatusDraw() const bool DialogSkip::NeedStatusDraw() const
{ {
return f_Enabled; return f_Enabled || f_CutsceneUSM;
} }
void DialogSkip::DrawStatus() void DialogSkip::DrawStatus()
{ {
ImGui::Text("Dialog [%s%s%s%s%s]", if (f_Enabled)
f_AutoSelectDialog ? "Auto" : "Manual", ImGui::Text("Dialog [%s%s%s%s%s]",
f_AutoSelectDialog && (f_ExcludeImportant || f_FastDialog) ? "|" : "", f_AutoSelectDialog ? "Auto" : "Manual",
f_ExcludeImportant ? "Exc" : "", f_AutoSelectDialog && (f_ExcludeImportant || f_FastDialog) ? "|" : "",
f_ExcludeImportant && f_FastDialog ? "|" : "", f_ExcludeImportant ? "Exc" : "",
f_FastDialog ? "Fast" : "Normal"); f_ExcludeImportant && f_FastDialog ? "|" : "",
f_FastDialog ? "Fast" : "Normal");
ImGui::Text(f_CutsceneUSM ? "Skip Cutscenes" : "");
} }
DialogSkip& DialogSkip::GetInstance() DialogSkip& DialogSkip::GetInstance()
@ -64,10 +71,10 @@ namespace cheat::feature
return instance; return instance;
} }
// Raised when dialog view updating // Raised when dialog view updating
// We call free click, if auto talk enabled, that means we just emulate user click // We call free click, if auto talk enabled, that means we just emulate user click
// When appear dialog choose we create notify with dialog select first item. // When appear dialog choose we create notify with dialog select first item.
void DialogSkip::OnCutScenePageUpdate(app::InLevelCutScenePageContext* context) void DialogSkip::OnCutScenePageUpdate(app::InLevelCutScenePageContext* context)
{ {
if (!f_Enabled) if (!f_Enabled)
return; return;
@ -86,7 +93,7 @@ namespace cheat::feature
// add their own name substrings of entities to avoid // add their own name substrings of entities to avoid
// speeding up dialog on. // speeding up dialog on.
std::vector<std::string> impEntitiesNames = { std::vector<std::string> impEntitiesNames = {
"Djinn", "Djinn",
"Katheryne" "Katheryne"
}; };
auto dialogPartnerID = context->fields._inteeID; auto dialogPartnerID = context->fields._inteeID;
@ -103,25 +110,25 @@ namespace cheat::feature
} }
} }
if (talkDialog->fields._inSelect && f_AutoSelectDialog && !isImportant) if (talkDialog->fields._inSelect && f_AutoSelectDialog && !isImportant)
{ {
int32_t value = 0; int32_t value = 0;
auto object = il2cpp_value_box((Il2CppClass*)*app::Int32__TypeInfo, &value); auto object = il2cpp_value_box((Il2CppClass*)*app::Int32__TypeInfo, &value);
auto notify = app::Notify_CreateNotify_1(app::MoleMole_NotifyTypes__Enum::DialogSelectItemNotify, (app::Object*)object, nullptr); auto notify = app::Notify_CreateNotify_1(app::MoleMole_NotifyTypes__Enum::DialogSelectItemNotify, (app::Object*)object, nullptr);
app::MoleMole_TalkDialogContext_OnDialogSelectItem(talkDialog, &notify, nullptr); app::MoleMole_TalkDialogContext_OnDialogSelectItem(talkDialog, &notify, nullptr);
} }
else if (!talkDialog->fields._inSelect) else if (!talkDialog->fields._inSelect)
app::MoleMole_InLevelCutScenePageContext_OnFreeClick(context, nullptr); app::MoleMole_InLevelCutScenePageContext_OnFreeClick(context, nullptr);
} }
static void InLevelCutScenePageContext_UpdateView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method) static void InLevelCutScenePageContext_UpdateView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method)
{ {
CALL_ORIGIN(InLevelCutScenePageContext_UpdateView_Hook, __this, method); CALL_ORIGIN(InLevelCutScenePageContext_UpdateView_Hook, __this, method);
DialogSkip& dialogSkip = DialogSkip::GetInstance(); DialogSkip& dialogSkip = DialogSkip::GetInstance();
dialogSkip.OnCutScenePageUpdate(__this); dialogSkip.OnCutScenePageUpdate(__this);
} }
// Raised when exiting a dialog. We try to hackishly return to normal value. // Raised when exiting a dialog. We try to hackishly return to normal value.
// Should be a better way to store the pre-dialog speed using Time_get_timeScale. // Should be a better way to store the pre-dialog speed using Time_get_timeScale.
static void InLevelCutScenePageContext_ClearView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method) static void InLevelCutScenePageContext_ClearView_Hook(app::InLevelCutScenePageContext* __this, MethodInfo* method)
@ -131,5 +138,14 @@ namespace cheat::feature
app::Time_set_timeScale(1.0f, nullptr); app::Time_set_timeScale(1.0f, nullptr);
CALL_ORIGIN(InLevelCutScenePageContext_ClearView_Hook, __this, method); CALL_ORIGIN(InLevelCutScenePageContext_ClearView_Hook, __this, method);
} }
static void CriwareMediaPlayer_Update(app::CriwareMediaPlayer* __this, MethodInfo* method)
{
DialogSkip& dialogSkip = DialogSkip::GetInstance();
if (dialogSkip.f_CutsceneUSM)
app::CriwareMediaPlayer_Skip(__this, nullptr);
return CALL_ORIGIN(CriwareMediaPlayer_Update, __this, method);
}
} }

View File

@ -2,16 +2,17 @@
#include <cheat-base/cheat/Feature.h> #include <cheat-base/cheat/Feature.h>
#include <cheat-base/config/config.h> #include <cheat-base/config/config.h>
namespace cheat::feature namespace cheat::feature
{ {
class DialogSkip : public Feature class DialogSkip : public Feature
{ {
public: public:
config::Field<config::Toggle<Hotkey>> f_Enabled; config::Field<config::Toggle<Hotkey>> f_Enabled;
config::Field<config::Toggle<Hotkey>> f_AutoSelectDialog; config::Field<config::Toggle<Hotkey>> f_AutoSelectDialog;
config::Field<config::Toggle<Hotkey>> f_ExcludeImportant; config::Field<config::Toggle<Hotkey>> f_ExcludeImportant;
config::Field<config::Toggle<Hotkey>> f_FastDialog; config::Field<config::Toggle<Hotkey>> f_FastDialog;
config::Field<config::Toggle<Hotkey>> f_CutsceneUSM;
config::Field<float> f_TimeSpeedup; config::Field<float> f_TimeSpeedup;
static DialogSkip& GetInstance(); static DialogSkip& GetInstance();
@ -23,7 +24,7 @@ namespace cheat::feature
void DrawStatus() override; void DrawStatus() override;
void OnCutScenePageUpdate(app::InLevelCutScenePageContext* context); void OnCutScenePageUpdate(app::InLevelCutScenePageContext* context);
private: private:
DialogSkip(); DialogSkip();
}; };

View File

@ -0,0 +1,152 @@
#include "pch-il2cpp.h"
#include "MusicEvent.h"
#include <helpers.h>
#include <cheat/events.h>
namespace cheat::feature
{
static void MusicGamePlayComponent_OnStart_Hook(app::MusicGamePlayComponent* __this, app::BeatMapData* beatMapData, app::MusicMetaInfo* musicMetaInfo, MethodInfo* method);
static void MusicGamePlayComponent_OnMiss_Hook(app::MusicGamePlayComponent* __this, MethodInfo* method);
static void MusicGamePlayComponent_set_combo_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method);
static void MusicGamePlayComponent_set_score_Hook(app::MusicGamePlayComponent* __this, float value, MethodInfo* method);
static void MusicGamePlayComponent_set_maxCombo_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method);
static void MusicGamePlayComponent_set_perfectCnt_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method);
static void MusicGamePlayComponent_set_greatCnt_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method);
static void MusicGamePlayComponent_set_missCnt_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method);
static void MusicGamePlayComponent_OnHit_Hook(app::MusicGamePlayComponent* __this, float score, MethodInfo* method);
MusicEvent::MusicEvent() : Feature(),
NF(f_Enabled, "Music Event", "MusicEvent", false)
{
//HookManager::install(app::MusicGamePlayComponent_OnStart, MusicGamePlayComponent_OnStart_Hook);
HookManager::install(app::MusicGamePlayComponent_OnMiss, MusicGamePlayComponent_OnMiss_Hook);
HookManager::install(app::MusicGamePlayComponent_set_combo, MusicGamePlayComponent_set_combo_Hook);
HookManager::install(app::MusicGamePlayComponent_set_score, MusicGamePlayComponent_set_score_Hook);
HookManager::install(app::MusicGamePlayComponent_set_maxCombo, MusicGamePlayComponent_set_maxCombo_Hook);
HookManager::install(app::MusicGamePlayComponent_set_perfectCnt, MusicGamePlayComponent_set_perfectCnt_Hook);
HookManager::install(app::MusicGamePlayComponent_set_greatCnt, MusicGamePlayComponent_set_greatCnt_Hook);
HookManager::install(app::MusicGamePlayComponent_set_missCnt, MusicGamePlayComponent_set_missCnt_Hook);
HookManager::install(app::MusicGamePlayComponent_OnHit, MusicGamePlayComponent_OnHit_Hook);
}
const FeatureGUIInfo& MusicEvent::GetGUIInfo() const
{
static const FeatureGUIInfo info{ "", "World", false };
return info;
}
void MusicEvent::DrawMain()
{
ConfigWidget(f_Enabled, "Enemies don't attack or use abilities against player. \n"
"May not work with some enemies or enemy abilites.");
}
bool MusicEvent::NeedStatusDraw() const
{
return f_Enabled;
}
void MusicEvent::DrawStatus()
{
ImGui::Text("Music Event");
}
MusicEvent& MusicEvent::GetInstance()
{
static MusicEvent instance;
return instance;
}
static void MusicGamePlayComponent_OnStart_Hook(app::MusicGamePlayComponent * __this, app::BeatMapData* beatMapData, app::MusicMetaInfo* musicMetaInfo, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
__this->fields._combo = 9999999;
__this->fields._score_k__BackingField = 9999999;
__this->fields._maxCombo_k__BackingField = 9999999;
__this->fields._perfectCnt_k__BackingField = 9999999;
__this->fields._greatCnt_k__BackingField = 9999999;
__this->fields._missCnt_k__BackingField = 0;
}
CALL_ORIGIN(MusicGamePlayComponent_OnStart_Hook, __this, beatMapData, musicMetaInfo, method);
}
static void MusicGamePlayComponent_OnMiss_Hook(app::MusicGamePlayComponent* __this, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
return;
}
CALL_ORIGIN(MusicGamePlayComponent_OnMiss_Hook, __this, method);
}
static void MusicGamePlayComponent_set_combo_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
value = 999999999;
}
CALL_ORIGIN(MusicGamePlayComponent_set_combo_Hook, __this, value, method);
}
static void MusicGamePlayComponent_set_score_Hook(app::MusicGamePlayComponent* __this, float value, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
value = 999999999;
}
CALL_ORIGIN(MusicGamePlayComponent_set_score_Hook, __this, value, method);
}
static void MusicGamePlayComponent_set_maxCombo_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
value = 999999999;
}
CALL_ORIGIN(MusicGamePlayComponent_set_maxCombo_Hook, __this, value, method);
}
static void MusicGamePlayComponent_set_perfectCnt_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
value = 999999999;
}
CALL_ORIGIN(MusicGamePlayComponent_set_perfectCnt_Hook, __this, value, method);
}
static void MusicGamePlayComponent_set_greatCnt_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
value = 999999999;
}
CALL_ORIGIN(MusicGamePlayComponent_set_greatCnt_Hook, __this, value, method);
}
static void MusicGamePlayComponent_set_missCnt_Hook(app::MusicGamePlayComponent* __this, uint32_t value, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
value = 0;
}
CALL_ORIGIN(MusicGamePlayComponent_set_missCnt_Hook, __this, value, method);
}
static void MusicGamePlayComponent_OnHit_Hook(app::MusicGamePlayComponent* __this, float score, MethodInfo* method)
{
MusicEvent& MusicEvent = MusicEvent::GetInstance();
if (MusicEvent.f_Enabled)
{
score = 999999999;
}
CALL_ORIGIN(MusicGamePlayComponent_OnHit_Hook, __this, score, method);
}
}

View File

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

View File

@ -81,10 +81,14 @@ static bool LoadLibraryInject(HANDLE hProc, const std::string& dllpath)
VirtualFreeEx(hProc, pDLLPath, 0, MEM_RELEASE); VirtualFreeEx(hProc, pDLLPath, 0, MEM_RELEASE);
return false; return false;
} }
CloseHandle(hThread);
// TODO: Add waiting for thread end and release unneccessary data. // Waiting for thread end and release unnecessary data.
// VirtualFreeEx(hProc, pDLLPath, 0, MEM_RELEASE); if (WaitForSingleObject(hThread, 2000) == WAIT_OBJECT_0) {
// ILog("[DLL Injection] Remote thread ended successfully.\n");
VirtualFreeEx(hProc, pDLLPath, 0, MEM_RELEASE);
}
CloseHandle(hThread);
ILog("[DLL Injection] Successfully LoadLibraryA injection.\n"); ILog("[DLL Injection] Successfully LoadLibraryA injection.\n");
return true; return true;