From 3c474a398eee3272feed743ff6437d71280fe3cf Mon Sep 17 00:00:00 2001 From: Jadis0x <49281043+jadis0x@users.noreply.github.com> Date: Sat, 1 Jun 2024 21:27:40 +0300 Subject: [PATCH] steam name changer added + Horror.menu update hooked + UnlockAchievements added but crashes when used --- user/features/menu.cpp | 12 +++------ user/features/misc/misc.cpp | 49 +++++++++++++++++++++++++++++++++++++ user/features/misc/misc.h | 1 + user/hooks/hooks.cpp | 33 +++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 9 deletions(-) diff --git a/user/features/menu.cpp b/user/features/menu.cpp index 4f3ef4a..06d4778 100644 --- a/user/features/menu.cpp +++ b/user/features/menu.cpp @@ -300,25 +300,19 @@ void DrawMiscTab() { //ImGui::Checkbox("Chat spam", &settings::chat_spam); //ImGui::InputText("Message", &settings::message); - /* if (ImGui::Button("Unlock Achievements")) { - Misc::CustomizedLobby(); + Misc::UnlockAchievements(); } - + /* if (ImGui::Button("TP Keys")) { //Misc::TPKeys(); } + */ ImGui::Checkbox("Change Steam name", &settings::steam_name_spoof); ImGui::InputText("New name##steam", &settings::new_name); - ImGui::Checkbox("Change server name", &settings::server_name_spoof); - ImGui::InputText("New name##server", &settings::server_name); - */ - - ImGui::Checkbox("Fly", &settings::fly); - ImGui::SliderFloat("Speed: ", &settings::fly_speed, 5.f, 20.f); /* if (ImGui::Button("Make random noise")) { diff --git a/user/features/misc/misc.cpp b/user/features/misc/misc.cpp index 218a05d..ccbc825 100644 --- a/user/features/misc/misc.cpp +++ b/user/features/misc/misc.cpp @@ -416,3 +416,52 @@ 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/features/misc/misc.h b/user/features/misc/misc.h index 825b332..9ce7bb3 100644 --- a/user/features/misc/misc.h +++ b/user/features/misc/misc.h @@ -18,4 +18,5 @@ namespace Misc { void Kill(bool self); void RankSpoofer(int value); void TpToAzazel(); + void UnlockAchievements(); } \ No newline at end of file diff --git a/user/hooks/hooks.cpp b/user/hooks/hooks.cpp index deab431..ea9bee1 100644 --- a/user/hooks/hooks.cpp +++ b/user/hooks/hooks.cpp @@ -60,6 +60,32 @@ void __stdcall hNolanBehaviour_OnAttributeUpdateValue(app::NolanBehaviour* __thi oNolanBehaviour_OnAttributeUpdateValue(__this, attribute, method); } + +// DO_APP_FUNC(0x006406A0, void, Menu_Update, (Menu * __this, MethodInfo * method)); +typedef void(__stdcall* TMenu_Update)(app::Menu*, MethodInfo*); +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); + } + + 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); + } + } + + oMenu_Update(__this, method); +} + // DO_APP_FUNC(0x004AABA0, void, NolanBehaviour_Update, (NolanBehaviour * __this, MethodInfo * method)); typedef void(__stdcall* TNolanBehaviour_Update)(app::NolanBehaviour*, MethodInfo*); TNolanBehaviour_Update oNolanBehaviour_Update = NULL; @@ -433,6 +459,13 @@ void CreateHooks() { return; } + // Horror.Menu Hook + MH_STATUS status_Menu_Update = MH_CreateHook((LPVOID*)app::Menu_Update, &hMenu_Update, reinterpret_cast(&oMenu_Update)); + if (status_Menu_Update != MH_OK) { + std::cout << "Failed to create status_Menu_Update hook: " << MH_StatusToString(status_Menu_Update) << std::endl; + return; + } + // NOLAN UPDATE HOOK MH_STATUS status_nolanUpdate = MH_CreateHook((LPVOID*)app::NolanBehaviour_Update, &hNolanBehaviour_Update, reinterpret_cast(&oNolanBehaviour_Update)); if (status_nolanUpdate != MH_OK) {