From 0b84c20f4a23f4ecd7c8395277bb64443f9215c8 Mon Sep 17 00:00:00 2001 From: Jadis0x <49281043+jadis0x@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:43:35 +0300 Subject: [PATCH] code optimization &new helper functions added / modified - UnityCore namespace changed to UnityEngine - Object class is no longer a template. FindObjectOfType function set to template - Added LogComponents function. It helps us retrieve components from the target gameObject. - Added GetObjectName function to Object structure (same method is available in utils header) - Added ConvertToSystemString function. Converts const char to system.string (app::String) --- IL2CppDLL.vcxproj | 4 +- IL2CppDLL.vcxproj.filters | 4 +- framework/helpers.cpp | 8 ++++ framework/helpers.h | 3 ++ lib/ClientHelper.cpp | 8 ++-- lib/UnityCore.cpp | 63 ------------------------- lib/UnityCore.h | 59 ------------------------ lib/UnityEngine.cpp | 72 +++++++++++++++++++++++++++++ lib/UnityEngine.h | 51 +++++++++++++++++++++ user/features/esp/esp.cpp | 6 +-- user/features/misc/misc.cpp | 91 ++++++++++--------------------------- user/hooks/hooks.cpp | 20 +++----- user/main.cpp | 15 +++--- user/players/players.cpp | 50 ++++++++------------ 14 files changed, 198 insertions(+), 256 deletions(-) delete mode 100644 lib/UnityCore.cpp delete mode 100644 lib/UnityCore.h create mode 100644 lib/UnityEngine.cpp create mode 100644 lib/UnityEngine.h diff --git a/IL2CppDLL.vcxproj b/IL2CppDLL.vcxproj index 53cb17a..359e13e 100644 --- a/IL2CppDLL.vcxproj +++ b/IL2CppDLL.vcxproj @@ -51,7 +51,7 @@ - + @@ -94,7 +94,7 @@ - + diff --git a/IL2CppDLL.vcxproj.filters b/IL2CppDLL.vcxproj.filters index b04e85c..218659f 100644 --- a/IL2CppDLL.vcxproj.filters +++ b/IL2CppDLL.vcxproj.filters @@ -73,7 +73,7 @@ user\features\misc - + lib @@ -195,7 +195,7 @@ include - + lib diff --git a/framework/helpers.cpp b/framework/helpers.cpp index a4eaebf..bc9b258 100644 --- a/framework/helpers.cpp +++ b/framework/helpers.cpp @@ -52,4 +52,12 @@ std::string il2cppi_to_string(Il2CppString* str) { std::string il2cppi_to_string(app::String* str) { return il2cppi_to_string(reinterpret_cast(str)); } +app::String* ConvertToSystemString(const char* str) +{ + Il2CppString* il2cpp_str = il2cpp_string_new(str); + + app::String* system_string_str = reinterpret_cast(il2cpp_str); + + return system_string_str; +} #endif \ No newline at end of file diff --git a/framework/helpers.h b/framework/helpers.h index 4517439..5c973d7 100644 --- a/framework/helpers.h +++ b/framework/helpers.h @@ -26,6 +26,9 @@ std::string il2cppi_to_string(Il2CppString* str); // Helper function to convert System.String to std::string std::string il2cppi_to_string(app::String* str); + +// Helper function to convert const char* to System.String +app::String* ConvertToSystemString(const char* str); #endif // Helper function to check if a metadata usage pointer is initialized diff --git a/lib/ClientHelper.cpp b/lib/ClientHelper.cpp index 7c69e7b..348a73b 100644 --- a/lib/ClientHelper.cpp +++ b/lib/ClientHelper.cpp @@ -4,7 +4,7 @@ #include "ClientHelper.h" #include "players/players.h" -#include "UnityCore.h" +#include "UnityEngine.h" bool IsSinglePlayer() { @@ -46,10 +46,8 @@ bool IsPlayerCrawling(app::GameObject* go) if (go == NULL) return false; - app::String* str = reinterpret_cast(il2cpp_string_new("NolanBehaviour")); - if (app::GameObject_GetComponentByName != NULL) { - app::Component* nbComponent = app::GameObject_GetComponentByName(go, str, nullptr); + app::Component* nbComponent = app::GameObject_GetComponentByName(go, ConvertToSystemString("NolanBehaviour"), nullptr); if (nbComponent) { app::NolanBehaviour* nb = reinterpret_cast(nbComponent); @@ -65,7 +63,7 @@ bool IsPlayerCrawling(app::GameObject* go) bool IsInGame() { - app::OptionsHelpers* optionsHelpers = UnityCore::Object::FindObjectOfType("OptionsHelpers"); + app::OptionsHelpers* optionsHelpers = UnityEngine::Object::FindObjectOfType("OptionsHelpers"); if (optionsHelpers) return optionsHelpers->fields._inGame_k__BackingField; diff --git a/lib/UnityCore.cpp b/lib/UnityCore.cpp deleted file mode 100644 index 05fb2eb..0000000 --- a/lib/UnityCore.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "pch-il2cpp.h" - -#include "UnityCore.h" -#include - -app::Component* Unity::GameObject::GetComponentByName(app::GameObject* go, const char* type) -{ - app::String* str = reinterpret_cast(il2cpp_string_new(type)); - - if (str != nullptr) { - app::Component* component = app::GameObject_GetComponentByName(go, str, nullptr); - - if (component != nullptr) { - return component; - } - } - - return nullptr; -} - -std::string Unity::Math::Vector3::ToString(app::Vector3* v) -{ - app::String* str = app::Vector3_ToString(v, nullptr); - - if (str == NULL) { - return std::string("NULL"); - } - - return il2cppi_to_string(str); -} - -std::string Unity::Math::Vector3::ToString(app::Vector3 v) -{ - return ("x: " + std::to_string(v.x) + " y: " + std::to_string(v.y) + " z: " + std::to_string(v.z)); -} - - -app::Transform* Unity::Transform::Get(app::GameObject* go) -{ - if (go != nullptr) { - if (app::GameObject_get_transform != nullptr) { - - app::Transform* __transform = app::GameObject_get_transform(go, nullptr); - - if (__transform) { - return __transform; - } - } - } - - return nullptr; -} - -app::Vector3 Unity::Transform::Position(app::Transform* transform) -{ - if (transform != nullptr) { - if (app::Transform_get_position != nullptr) { - return app::Transform_get_position(transform, nullptr); - } - } - - return app::Vector3(); -} diff --git a/lib/UnityCore.h b/lib/UnityCore.h deleted file mode 100644 index aec0950..0000000 --- a/lib/UnityCore.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - -#include "Wrapper.h" -#include -#include -#include "ClientHelper.h" - -namespace Unity { - namespace GameObject { - // DO_APP_FUNC(0x02D34DA0, Component *, GameObject_GetComponentByName, (GameObject * __this, String * type, MethodInfo * method)); - app::Component* GetComponentByName(app::GameObject* go, const char* type); - } - - namespace Math { - namespace Vector3 { - std::string ToString(app::Vector3* v); - std::string ToString(app::Vector3 v); - } - } - - namespace Transform { - app::Transform* Get(app::GameObject* go); - app::Vector3 Position(app::Transform* transform); - } -} - -namespace UnityCore { - template - class Object { - public: - Object() = default; - - static T* FindObjectOfType(const char* className, const char* classNamespace = ""); - }; - - template - inline T* Object::FindObjectOfType(const char* className, const char* classNamespace) - { - Wrapper obj("Assembly-CSharp.dll"); - - Il2CppObject* object = obj.find_class(classNamespace, className).get_class(); - if (object) { - - if (app::Object_1_FindObjectOfType == nullptr) return nullptr; - - app::Object_1* obj_1 = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); - - if (IsNull(obj_1) || obj_1 == nullptr) return nullptr; - - T* foundObject = reinterpret_cast(obj_1); - - if (foundObject) { - return foundObject; - } - } - - return nullptr; - } -} diff --git a/lib/UnityEngine.cpp b/lib/UnityEngine.cpp new file mode 100644 index 0000000..dc0cca8 --- /dev/null +++ b/lib/UnityEngine.cpp @@ -0,0 +1,72 @@ +#include "pch-il2cpp.h" + +#include "UnityEngine.h" +#include + +app::Component* UnityEngine::GameObject::GetComponentByName(app::GameObject* go, const char* type) +{ + app::Component* component = app::GameObject_GetComponentByName(go, ConvertToSystemString(type), nullptr); + + return component ? component : nullptr; +} + +app::Component__Array* UnityEngine::GameObject::LogComponents(app::GameObject* go) +{ + Wrapper obj("UnityEngine.CoreModule.dll"); + + Il2CppObject* object = obj.find_class("UnityEngine", "Component").get_class(); + + if (!object) return nullptr; + + app::Type* type = reinterpret_cast(object); + if (!type) return nullptr; + + app::Component__Array* __components = app::GameObject_GetComponents(go, type, nullptr); + + return __components ? __components : nullptr; +} + +const char* UnityEngine::Math::Vector3::ToString(app::Vector3* v) +{ + app::String* str = app::Vector3_ToString(v, nullptr); + + return str ? il2cppi_to_string(str).c_str() : "Vector::ToString returned nullptr!\n"; +} + +const char* UnityEngine::Math::Vector3::ToString(app::Vector3 v) +{ + return ("x: " + std::to_string(v.x) + " y: " + std::to_string(v.y) + " z: " + std::to_string(v.z)).c_str(); +} + +app::Transform* UnityEngine::Transform::Get(app::GameObject* go) +{ + if (!go || !app::GameObject_get_transform) return nullptr; + + app::Transform* __transform = app::GameObject_get_transform(go, nullptr); + + return __transform ? __transform : nullptr; +} + +app::Vector3 UnityEngine::Transform::Position(app::Transform* transform) +{ + if (!transform || !app::Transform_get_position) return app::Vector3(); + + return app::Transform_get_position(transform, nullptr); +} + +const char* UnityEngine::Object::GetObjectName(app::Object_1* obj) +{ + static std::string name = il2cppi_to_string(app::Object_1_GetName(obj, nullptr)); + return name.c_str(); +} + +app::GameObject__Array* UnityEngine::Object::FindGameObjectsWithTag(const char* tag) +{ + app::GameObject__Array* go_array_result = app::GameObject_FindGameObjectsWithTag(ConvertToSystemString(tag), nullptr); + + return go_array_result ? go_array_result : nullptr; +} + +void UnityEngine::Object::FindObjectFromInstanceID(int32_t instanceID) +{ +} diff --git a/lib/UnityEngine.h b/lib/UnityEngine.h new file mode 100644 index 0000000..497dbd2 --- /dev/null +++ b/lib/UnityEngine.h @@ -0,0 +1,51 @@ +#pragma once + +#include "Wrapper.h" +#include "helpers.h" +#include "ClientHelper.h" + +namespace UnityEngine { + namespace GameObject { + app::Component* GetComponentByName(app::GameObject* go, const char* type); + app::Component__Array* LogComponents(app::GameObject* go); + } + + namespace Math { + namespace Vector3 { + const char* ToString(app::Vector3* v); + const char* ToString(app::Vector3 v); + } + } + + namespace Transform { + app::Transform* Get(app::GameObject* go); + app::Vector3 Position(app::Transform* transform); + } + + struct Object { + + static const char* GetObjectName(app::Object_1* obj); + + static app::GameObject__Array* FindGameObjectsWithTag(const char* tag); + + // Object_1_FindObjectFromInstanceID + static void FindObjectFromInstanceID(int32_t instanceID); + + template + static T* FindObjectOfType(const char* className, const char* classNamespace = "", const char* assemblyName = "Assembly-CSharp.dll") { + + Wrapper obj(assemblyName); + + Il2CppObject* object = obj.find_class(classNamespace, className).get_class(); + + if (!object || !app::Object_1_FindObjectOfType) return nullptr; + + app::Object_1* obj_1 = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); + + if (!obj_1 || IsNull(obj_1)) return nullptr; + + return reinterpret_cast(obj_1); + } + + }; +} diff --git a/user/features/esp/esp.cpp b/user/features/esp/esp.cpp index 609285a..c01232d 100644 --- a/user/features/esp/esp.cpp +++ b/user/features/esp/esp.cpp @@ -2,7 +2,7 @@ #include #include "ClientHelper.h" -#include "UnityCore.h" +#include "UnityEngine.h" #include "players/players.h" #include "helpers.h" #include "esp.hpp" @@ -31,11 +31,11 @@ static void DrawBoxESP(app::GameObject *it, float footOffset, float headOffset, if (!it || cam == nullptr) return; - app::Transform* _transform = Unity::Transform::Get(it); + app::Transform* _transform = UnityEngine::Transform::Get(it); if (_transform == nullptr) return; - app::Vector3 pos = Unity::Transform::Position(_transform); + app::Vector3 pos = UnityEngine::Transform::Position(_transform); app::Vector3 footpos = app::Camera_WorldToScreenPoint_1(cam, app::Vector3{pos.x, pos.y + footOffset, pos.z}, NULL); app::Vector3 headpos = app::Camera_WorldToScreenPoint_1(cam, app::Vector3{pos.x, pos.y + headOffset, pos.z}, NULL); diff --git a/user/features/misc/misc.cpp b/user/features/misc/misc.cpp index ccbc825..209d76a 100644 --- a/user/features/misc/misc.cpp +++ b/user/features/misc/misc.cpp @@ -5,17 +5,18 @@ #include "ClientHelper.h" #include "players/players.h" #include "helpers.h" -#include "UnityCore.h" +#include "UnityEngine.h" #include #include "Windows.h" #include +#include "utils/utils.hpp" void Misc::ForceStart() { std::string _scene = SceneName(); if (IsHost() && _scene == std::string("Menu")) { - app::Menu* _menu = UnityCore::Object::FindObjectOfType("Menu", "Horror"); + app::Menu* _menu = UnityEngine::Object::FindObjectOfType("Menu", "Horror"); if (_menu) { if (app::Menu_OnLobbyStartButtonClick) { @@ -60,8 +61,7 @@ void Misc::CarryItem(const char* itemName) std::string carryItem = itemMap[itemName]; if (!carryItem.empty() && Player::GetLocalPlayer()) { - app::String* str2 = reinterpret_cast(il2cpp_string_new(carryItem.c_str())); - app::NolanBehaviour_StartCarry(Player::GetNolan(), str2, nullptr); + app::NolanBehaviour_StartCarry(Player::GetNolan(), ConvertToSystemString(carryItem.c_str()), nullptr); } } @@ -82,8 +82,7 @@ void Misc::CarryAnimal(const char* animalName) std::string carryAnimal = animalMap[animalName]; if (!carryAnimal.empty() && Player::GetLocalPlayer()) { - app::String* str2 = reinterpret_cast(il2cpp_string_new(carryAnimal.c_str())); - app::NolanBehaviour_StartCarry(Player::GetNolan(), str2, nullptr); + app::NolanBehaviour_StartCarry(Player::GetNolan(), ConvertToSystemString(carryAnimal.c_str()), nullptr); } } @@ -95,14 +94,12 @@ void Misc::InstantWin() std::string _scene = SceneName(); - if (_scene == std::string("Menu") && !IsHost() && !Player::GetLocalPlayer()) { - return; - } + if (_scene == std::string("Menu") && !IsHost() && !Player::GetLocalPlayer()) return; int32_t progress = 10; if (_scene == std::string("Inn")) { - app::MapController* _MapController = UnityCore::Object::FindObjectOfType("MapController"); + app::MapController* _MapController = UnityEngine::Object::FindObjectOfType("MapController"); if (_MapController) { @@ -114,7 +111,7 @@ void Misc::InstantWin() } } else if (_scene == std::string("Slaughterhouse")) { - app::SlaughterhouseAltarController* _SlaughterhouseAltarController = UnityCore::Object::FindObjectOfType("SlaughterhouseAltarController"); + app::SlaughterhouseAltarController* _SlaughterhouseAltarController = UnityEngine::Object::FindObjectOfType("SlaughterhouseAltarController"); if (_SlaughterhouseAltarController) { @@ -126,7 +123,8 @@ void Misc::InstantWin() } } else { - app::SurvivalObjectBurnController* _SurvivalObjectBurnController = UnityCore::Object::FindObjectOfType("SurvivalObjectBurnController"); + //app::SurvivalObjectBurnController* _SurvivalObjectBurnController = UnityEngine::Object::FindObjectOfType("SurvivalObjectBurnController"); + app::SurvivalObjectBurnController* _SurvivalObjectBurnController = UnityEngine::Object::FindObjectOfType("SurvivalObjectBurnController"); if (_SurvivalObjectBurnController) { // DO_APP_FUNC(0x00562590, void, SurvivalObjectBurnController_SkipToGoat, (SurvivalObjectBurnController * __this, int32_t number, MethodInfo * method)); @@ -176,10 +174,10 @@ void Misc::SpawnPrefab(const char* prefabName) { if (localPlayer) { app::Quaternion rotation = app::Quaternion_get_identity(NULL); - app::Transform* playerTransform = Unity::Transform::Get(localPlayer); + app::Transform* playerTransform = UnityEngine::Transform::Get(localPlayer); if (playerTransform == nullptr) return; - app::Vector3 playerPos = Unity::Transform::Position(playerTransform); + app::Vector3 playerPos = UnityEngine::Transform::Position(playerTransform); if (app::BoltNetwork_Instantiate_6) { app::GameObject* go = (app::GameObject*)app::BoltNetwork_Instantiate_6(p, playerPos, rotation, nullptr); @@ -196,7 +194,7 @@ void Misc::RankSpoofer(int value) { return; } else { - app::NolanRankController* rankController = UnityCore::Object::FindObjectOfType("NolanRankController"); + app::NolanRankController* rankController = UnityEngine::Object::FindObjectOfType("NolanRankController"); if (rankController != nullptr) { if (app::NolanRankController_SetRank != nullptr) { @@ -229,7 +227,7 @@ void Misc::Revive(bool self) } // app::SurvivalReviveInteractable - app::SurvivalReviveInteractable* revive = UnityCore::Object::FindObjectOfType("SurvivalReviveInteractable"); + app::SurvivalReviveInteractable* revive = UnityEngine::Object::FindObjectOfType("SurvivalReviveInteractable"); if (revive == NULL) { if (self) { @@ -290,10 +288,10 @@ void Misc::Jumpscare() { return; } - app::Survival* survival = UnityCore::Object::FindObjectOfType("Survival"); + app::Survival* survival = UnityEngine::Object::FindObjectOfType("Survival"); if (survival == NULL) { return; } - app::SurvivalAzazelBehaviour* azazel = UnityCore::Object::FindObjectOfType("SurvivalAzazelBehaviour"); + app::SurvivalAzazelBehaviour* azazel = UnityEngine::Object::FindObjectOfType("SurvivalAzazelBehaviour"); app::GameObject* ai = GetAzazel(survival); @@ -307,7 +305,7 @@ void Misc::Jumpscare() { if (currentPlayer == NULL) continue; - app::Component* component = Unity::GameObject::GetComponentByName(currentPlayer, "NolanBehaviour"); + app::Component* component = UnityEngine::GameObject::GetComponentByName(currentPlayer, "NolanBehaviour"); if (component != NULL) { app::NolanBehaviour* nb = reinterpret_cast(component); @@ -335,10 +333,10 @@ void Misc::Kill(bool self) { return; } - app::Survival* survival = UnityCore::Object::FindObjectOfType("Survival"); + app::Survival* survival = UnityEngine::Object::FindObjectOfType("Survival"); if (survival == NULL) { return; } - app::SurvivalAzazelBehaviour* azazel = UnityCore::Object::FindObjectOfType("SurvivalAzazelBehaviour"); + app::SurvivalAzazelBehaviour* azazel = UnityEngine::Object::FindObjectOfType("SurvivalAzazelBehaviour"); app::GameObject* ai = GetAzazel(survival); @@ -363,7 +361,7 @@ void Misc::Kill(bool self) { if (currentPlayer == NULL) continue; - app::Component* component = Unity::GameObject::GetComponentByName(currentPlayer, "NolanBehaviour"); + app::Component* component = UnityEngine::GameObject::GetComponentByName(currentPlayer, "NolanBehaviour"); if (component != NULL) { app::NolanBehaviour* nb = reinterpret_cast(component); @@ -397,7 +395,8 @@ void Misc::TpToAzazel() if (nb == nullptr) return; - app::Survival* _survival = UnityCore::Object::FindObjectOfType("Survival"); + + app::Survival* _survival = UnityEngine::Object::FindObjectOfType("Survival"); if (_survival == nullptr) return; // get azazel @@ -419,49 +418,5 @@ void Misc::TpToAzazel() void Misc::UnlockAchievements() { - app::AchievementHelpers* achievementsSingleton = app::AchievementHelpers_get_singleton(nullptr); - - if (achievementsSingleton != nullptr) { - - const char* achievements[] = { - "ACH_ALL_CLIPBOARDS_READ", "ACH_ALL_NOTES_READ", "ACH_UNLOCKED_CAGE", - "ACH_UNLOCKED_ATTIC_CAGE", "ACH_CALMED_ANNA", "ACH_FRIED_RAT", - "ACH_BURNT_GOAT", "ACH_KNOCKED_OUT_BY_ANNA", "ACH_KNOCKOUT_OUT_BY_DEMON", - "ACH_KNOCKED_OUT_IN_HIDING", "STAT_NUM_BLEACH_USED", "ACH_WON_SP", - "ACH_WIN_NIGHTMARE", "ACH_WON_HARD_SP", "ACH_WON_COOP", "ACH_WON_HARD", - "ACH_WIN_NIGHTMARE_SP", "ACH_LOST", "ACH_NEVER_KNOCKED_OUT", - "ACH_ONLY_ONE_KNOCKED_OUT", "ACH_WON_HARD_NO_MEDKITS", "ACH_WON_NO_MEDKITS", - "ACH_WON_NO_BATTERIES", "ACH_WON_NIGHTMARE_NO_MEDKITS", - "ACH_WON_NO_KNOCKOUT_COOP", "ACH_WON_HARD_NO_BATTERIES", - "ACH_WON_HARD_{0}", "ACH_WON_NIGHTMARE_{0}", "ACH_WON_NIGHTMARE_NO_BATTERIES", - "ACH_SURVIVED_TO_7_GOATS", "ACH_SURVIVED_TO_5_GOATS", "ACH_SURVIVED_TO_3_GOATS", - "ACH_WON_Manor_NIGHTMARE_SP", "ACH_WON_NIGHTMARE_", "ACH_WON_MANOR_NIGHTMARE_SP", - "ACH_WON_TOWN_HARD", "ACH_WON_INN_HARD_SP", "ACH_ALL_FEATHERS", - "ACH_WON_SLAUGHTERHOUSE_COOP", "ACH_ALL_BARBED_WIRES", "ACH_WON_INN_HARD", - "ACH_WON_MOLLY_HARD", "ACH_ALL_HORSESHOES", "ACH_WON_MOLLY_HARD_SP", - "ACH_WON_TOWN_NIGHTMARE_SP", "ACH_100_GASOLINE_USED", "ACH_WON_INN_SP", - "ACH_WON_MANOR_HARD_SP", "ACH_WON_MOLLY_SP", "ACH_1000_PIGS_DESTROYED", - "ACH_1000_MIRRORS_DESTROYED", "ACH_100_EGGS_DESTROYED", "ACH_WON_SLAUGHTERHOUSE_HARD_SP", - "ACH_WON_TOWN_COOP", "ACH_100_FUSES_USED", "ACH_WON_MOLLY_COOP", - "ACH_WON_MOLLY_NIGHTMARE_SP", "ACH_1000_BOOKS_DESTROYED", "ACH_ALL_PATCHES", - "ACH_WON_SLAUGHTERHOUSE_SP", "ACH_WON_TOWN_NIGHTMARE", "ACH_WON_INN_COOP", - "ACH_ALL_CHERRY_BLOSSOM", "ACH_WON_TOWN_HARD_SP", "ACH_WON_MOLLY_NIGHTMARE", - "ACH_WON_INN_NIGHTMARE_SP", "ACH_ALL_ROSES", "ACH_WON_TOWN_SP", - "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE_SP", "ACH_WON_INN_NIGHTMARE", - "ACH_WON_MANOR_COOP", "ACH_WON_SLAUGHTERHOUSE_HARD", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE", - "ACH_WON_MANOR_HARD", "ACH_WON_MANOR_NIGHTMARE", "ACH_WON_MANOR_SP" - }; - - - int size = sizeof(achievements) / sizeof(achievements[0]); - - std::cout << "Achievements length: " << size << "\n"; - - for (int i = 0; i < size; ++i) { - app::String* currentachievements = reinterpret_cast(il2cpp_string_new(achievements[i])); - - // crash - app::AchievementHelpers_Unlock(achievementsSingleton, currentachievements, false, nullptr); - } - } + // } diff --git a/user/hooks/hooks.cpp b/user/hooks/hooks.cpp index ea9bee1..28a36bc 100644 --- a/user/hooks/hooks.cpp +++ b/user/hooks/hooks.cpp @@ -10,7 +10,7 @@ #include "helpers.h" #include "players/players.h" -#include "UnityCore.h" +#include "UnityEngine.h" #include "ClientHelper.h" #include "features/misc/misc.h" @@ -67,19 +67,12 @@ TMenu_Update oMenu_Update = NULL; void __stdcall hMenu_Update(app::Menu* __this, MethodInfo* method) { if (settings::steam_name_spoof) { - - Il2CppString* steamId = il2cpp_string_new("43634643643"); - Il2CppString* new_name = il2cpp_string_new(settings::new_name.c_str()); - - __this->fields.steamID = reinterpret_cast(steamId); - __this->fields.steamName = reinterpret_cast(new_name); + __this->fields.steamName = ConvertToSystemString(settings::new_name.c_str()); } if (settings::server_name_spoof) { - app::String* newServerName = reinterpret_cast(il2cpp_string_new(settings::server_name.c_str())); - if (app::Text_set_text != nullptr) { - app::Text_set_text(__this->fields.serverNameText, newServerName, nullptr); + app::Text_set_text(__this->fields.serverNameText, ConvertToSystemString(settings::server_name.c_str()), nullptr); } } @@ -99,7 +92,7 @@ void __stdcall hNolanBehaviour_Update(app::NolanBehaviour* __this, MethodInfo* m if (transform) { - app::Vector3 pos = Unity::Transform::Position(transform); + app::Vector3 pos = UnityEngine::Transform::Position(transform); if (GetAsyncKeyState('W') & 0x8000) { pos = pos + (app::Transform_get_forward(transform, nullptr) * speed * Time_DeltaTime()); @@ -124,7 +117,7 @@ void __stdcall hNolanBehaviour_Update(app::NolanBehaviour* __this, MethodInfo* m app::GameObject* thisGameObject = app::Component_get_gameObject((app::Component*)__this, nullptr); if (thisGameObject != nullptr || !IsNull((app::Object_1*)thisGameObject)) { - app::Component* _UltimateCharacterLocomotion = Unity::GameObject::GetComponentByName(thisGameObject, "UltimateCharacterLocomotion"); + app::Component* _UltimateCharacterLocomotion = UnityEngine::GameObject::GetComponentByName(thisGameObject, "UltimateCharacterLocomotion"); if (_UltimateCharacterLocomotion != nullptr && !IsNull((app::Object_1*)_UltimateCharacterLocomotion)) { if (app::UltimateCharacterLocomotion_SetPosition_1) { @@ -161,8 +154,7 @@ void __stdcall hNolanBehaviour_FixedUpdate(app::NolanBehaviour* __this, MethodIn app::GameObject* goAzazel = __this->fields.m_Survival->fields.m_Azazel; if (goAzazel) { - app::String* azazelComponent = reinterpret_cast(il2cpp_string_new("UltimateCharacterLocomotion")); - auto component = app::GameObject_GetComponentByName(goAzazel, azazelComponent, nullptr); + auto component = app::GameObject_GetComponentByName(goAzazel, ConvertToSystemString("UltimateCharacterLocomotion"), nullptr); if (component) { app::UltimateCharacterLocomotion* locomotion = reinterpret_cast(component); diff --git a/user/main.cpp b/user/main.cpp index 8995477..a2439ce 100644 --- a/user/main.cpp +++ b/user/main.cpp @@ -15,7 +15,7 @@ #include "Wrapper.h" #include "ClientHelper.h" #include "hooks/hooks.hpp" -#include "UnityCore.h" +#include "UnityEngine.h" #include "color.hpp" #include "features/misc/misc.h" #include "utils/utils.hpp" @@ -80,15 +80,12 @@ void Run() std::cout << "[DevourClient]: " << dye::red_on_black("Client is out of date!") << "\n\n"; const char* latestDownloadLink = client.GetLatestDownloadLink(); - app::String* str = reinterpret_cast(il2cpp_string_new(latestDownloadLink)); - const int result = MessageBox(NULL, L"Version is not up to date! Would you like to download the new version?", L"DevourClient", MB_YESNO | MB_ICONERROR); - switch (result) { case IDYES: - app::Application_OpenURL(str, nullptr); + app::Application_OpenURL(ConvertToSystemString(latestDownloadLink), nullptr); break; case IDNO: MessageBox(NULL, L"You can download the new version at any time to benefit from new features, improvements, and bug fixes", L"DevourClient", MB_OK | MB_ICONEXCLAMATION); @@ -130,18 +127,18 @@ void Run() std::string scene = SceneName(); if (scene == std::string("Menu")) { - app::Menu* horrorMenu = UnityCore::Object::FindObjectOfType("Menu", "Horror"); + app::Menu* horrorMenu = UnityEngine::Object::FindObjectOfType("Menu", "Horror"); if (!horrorMenu) return; - app::String* str = reinterpret_cast(il2cpp_string_new("Welcome to DevourClient.\n\nAfter ensuring the game is in full screen, press the INS key to activate the menu.\n\n\nYou can disable the cheat by pressing the 'END' key.")); + app::String* message_modal_textContent = ConvertToSystemString("Welcome to DevourClient.\n\nAfter ensuring the game is in full screen, press the INS key to activate the menu.\n\n\nYou can disable the cheat by pressing the 'END' key."); - if (str) { + if (message_modal_textContent) { if (app::Menu_ShowMessageModal == nullptr) return; - app::Menu_ShowMessageModal(horrorMenu, str, nullptr); + app::Menu_ShowMessageModal(horrorMenu, message_modal_textContent, nullptr); } } diff --git a/user/players/players.cpp b/user/players/players.cpp index e841720..dc605f3 100644 --- a/user/players/players.cpp +++ b/user/players/players.cpp @@ -1,24 +1,15 @@ #include "pch-il2cpp.h" #include "players.h" - -#include +#include +#include "UnityEngine.h" #include "ClientHelper.h" - app::GameObject__Array* Players::GetAllPlayers() { - app::String* playerTagStr = reinterpret_cast(il2cpp_string_new("Player")); + app::GameObject__Array* players = UnityEngine::Object::FindGameObjectsWithTag("Player"); - if (app::GameObject_FindGameObjectsWithTag) { - app::GameObject__Array* playersTag = app::GameObject_FindGameObjectsWithTag(playerTagStr, nullptr); - - if (playersTag) { - return playersTag; - } - } - - return nullptr; + return players ? players : nullptr; } app::GameObject* Player::GetLocalPlayer() @@ -36,7 +27,6 @@ app::GameObject* Player::GetLocalPlayer() } app::GameObject__Array* playerList = Players::GetAllPlayers(); - app::String* NolanBehaviourStr = reinterpret_cast(il2cpp_string_new("NolanBehaviour")); if (!playerList || playerList->max_length == 0) return nullptr; @@ -49,16 +39,14 @@ app::GameObject* Player::GetLocalPlayer() continue; } else { - if (app::GameObject_GetComponentByName) { - app::Component* nbComponent = app::GameObject_GetComponentByName(currentPlayer, NolanBehaviourStr, nullptr); + app::Component* nbComponent = UnityEngine::GameObject::GetComponentByName(currentPlayer, "NolanBehaviour"); - if (nbComponent) { - app::NolanBehaviour* nb = reinterpret_cast(nbComponent); + if (nbComponent) { + app::NolanBehaviour* nb = reinterpret_cast(nbComponent); - if (nb && IsLocalPlayer(nb)) { - cachedLocalPlayer = currentPlayer; - return currentPlayer; - } + if (nb && IsLocalPlayer(nb)) { + cachedLocalPlayer = currentPlayer; + return currentPlayer; } } } @@ -75,16 +63,16 @@ app::NolanBehaviour* Player::GetNolan() if (localPlayer == nullptr) return nullptr; if (lastLocalPlayer != localPlayer) { - app::String* NolanBehaviourStr = reinterpret_cast(il2cpp_string_new("NolanBehaviour")); - if (app::GameObject_GetComponentByName) { - app::Component* nbComponent = app::GameObject_GetComponentByName(localPlayer, NolanBehaviourStr, nullptr); - if (nbComponent) { - app::NolanBehaviour* nb = reinterpret_cast(nbComponent); - if (nb) { - cachedNolan = nb; - lastLocalPlayer = localPlayer; - } + app::Component* nbComponent = UnityEngine::GameObject::GetComponentByName(localPlayer, "NolanBehaviour"); + + if (nbComponent) { + + app::NolanBehaviour* nb = reinterpret_cast(nbComponent); + + if (nb) { + cachedNolan = nb; + lastLocalPlayer = localPlayer; } } }