diff --git a/user/hooks/hooks.cpp b/user/hooks/hooks.cpp index 6dba3a1..845790e 100644 --- a/user/hooks/hooks.cpp +++ b/user/hooks/hooks.cpp @@ -41,7 +41,7 @@ TDebug_2_Log oDebug_2_Log = NULL; TDebug_2_Log oDebug_2_Warning = NULL; TDebug_2_Log oDebug_2_Error = NULL; void __stdcall hDebug_Log(app::Object* message, MethodInfo* method) { - std::cout << ToString(message) << std::endl; + std::cout << "[UNITY] " << ToString(message) << std::endl; il2cppi_log_write(ToString(message)); } @@ -54,6 +54,30 @@ void __stdcall hNolanBehaviour_OnAttributeUpdateValue(app::NolanBehaviour* __thi oNolanBehaviour_OnAttributeUpdateValue(__this, attribute, method); } +// DO_APP_FUNC(0x005E5E10, bool, OptionsHelpers_IsRobeUnlocked, (OptionsHelpers * __this, String * robe, String * character, MethodInfo * method)); +typedef bool(__stdcall* TOptionsHelpers_IsRobeUnlocked)(app::OptionsHelpers*, app::String*, app::String*, MethodInfo*); +TOptionsHelpers_IsRobeUnlocked oOptionsHelpers_IsRobeUnlocked = NULL; + +bool __stdcall hOptionsHelpers_IsRobeUnlocked(app::OptionsHelpers* __this, app::String* robe, app::String* character, MethodInfo* method) { + + if (settings::unlock_all) + return true; + + return oOptionsHelpers_IsRobeUnlocked(__this, robe, character, method); +} + +// DO_APP_FUNC(0x005E44C0, bool, OptionsHelpers_IsCharacterUnlocked, (OptionsHelpers * __this, String * prefab, MethodInfo * method)); +typedef bool(__stdcall* TOptionsHelpers_IsCharacterUnlocked)(app::OptionsHelpers*, app::String* , MethodInfo*); +TOptionsHelpers_IsCharacterUnlocked oOptionsHelpers_IsCharacterUnlocked = NULL; + +bool __stdcall hOptionsHelpers_IsCharacterUnlocked(app::OptionsHelpers* __this, app::String* prefab, MethodInfo* method) { + + if (settings::unlock_all) + return true; + + return oOptionsHelpers_IsCharacterUnlocked(__this, prefab, method); +} + void CreateHooks() { /* //Exemple : @@ -88,6 +112,16 @@ void CreateHooks() { std::cout << "Failed to enable hooks: " << MH_StatusToString(enable_status_Debug_Log) << std::endl; return; } + MH_STATUS status_robe = MH_CreateHook((LPVOID*)app::OptionsHelpers_IsRobeUnlocked, &hOptionsHelpers_IsRobeUnlocked, reinterpret_cast(&oOptionsHelpers_IsRobeUnlocked)); + if (status_robe != MH_OK) { + std::cout << "Failed to create robe hook: " << MH_StatusToString(status_robe) << std::endl; + return; + } + MH_STATUS status_characterUnlock = MH_CreateHook((LPVOID*)app::OptionsHelpers_IsCharacterUnlocked, &hOptionsHelpers_IsCharacterUnlocked, reinterpret_cast(&oOptionsHelpers_IsCharacterUnlocked)); + if (status_characterUnlock != MH_OK) { + std::cout << "Failed to create character unlock hook: " << MH_StatusToString(status_characterUnlock) << std::endl; + return; + } } typedef HRESULT(__stdcall* D3D11PresentHook) (IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags);