From 26c0103b0fec4d4cbe150304a65a85317b3497ce Mon Sep 17 00:00:00 2001 From: Jadis0x <49281043+jadis0x@users.noreply.github.com> Date: Mon, 15 Apr 2024 00:03:47 +0300 Subject: [PATCH] added BurnRitualObj function Code optimization needed. Some detected issues: - Farmhouse worked properly. - Only burnAll works on Molly map. - It does not work on Town and Inn map. - Only burnAll works on Slaughterhouse map. --- lib/ClientHelper.cpp | 185 +++++++++++++++++++++++++++++++++++++++++++ lib/ClientHelper.h | 8 +- 2 files changed, 192 insertions(+), 1 deletion(-) diff --git a/lib/ClientHelper.cpp b/lib/ClientHelper.cpp index 63bba9c..f6f7995 100644 --- a/lib/ClientHelper.cpp +++ b/lib/ClientHelper.cpp @@ -1,6 +1,7 @@ #include "pch-il2cpp.h" #include "helpers.h" +#include #include "ClientHelper.h" #include "wrapper.h" @@ -59,3 +60,187 @@ std::string get_SceneName() return std::string("unknown"); } + +void BurnRitualObj(bool burnAll) +{ + // Devour: SurvivalObjectBurnController + // Molly: SurvivalMollyAltarController + // Inn: InnMapController + // Town: SurvivalTownAltarController + // Slaughterhouse: SlaughterhouseAltarController + + /* MAP: TOWN, DEVOUR + DO_APP_FUNC(0x00562320, void, SurvivalObjectBurnController_BurnGoat, (SurvivalObjectBurnController * __this, MethodInfo * method)); + DO_APP_FUNC(0x00562590, void, SurvivalObjectBurnController_SkipToGoat, (SurvivalObjectBurnController * __this, int32_t number, MethodInfo * method)); + */ + + if (!IsHost()) { + return; + } + + Wrapper wrapper; + const Il2CppImage* image = wrapper.GetImage("Assembly-CSharp.dll"); + + std::string sceneName = get_SceneName(); + + std::cout << "call..\n"; + + // !!!!Check if Azazel is awake. + BurnManager(sceneName, wrapper, image, burnAll); +} + +void BurnManager(std::string& sceneName, Wrapper& wrapper, const Il2CppImage* image, bool burnAll) +{ + int32_t num = 10; + + if (sceneName == std::string("Devour")) { + + Il2CppObject* object = wrapper.GetObjectFromClass(image, "", "SurvivalObjectBurnController"); + + if (object != nullptr) { + auto SurvivalObjectBurnController_Object = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); + + if (SurvivalObjectBurnController_Object) { + auto SurvivalObjectBurnController = reinterpret_cast(SurvivalObjectBurnController_Object); + + if (SurvivalObjectBurnController) { + + if (burnAll) { + if (app::SurvivalObjectBurnController_SkipToGoat) { + app::SurvivalObjectBurnController_SkipToGoat(SurvivalObjectBurnController, num, nullptr); + } + } + else { + if (app::SurvivalObjectBurnController_BurnGoat) { + app::SurvivalObjectBurnController_BurnGoat(SurvivalObjectBurnController, nullptr); + } + } + } + } + } + } + else if (sceneName == std::string("Molly")) { + + /* + MAP: MOLLY + DO_APP_FUNC(0x0055C100, void, SurvivalMollyAltarController_SkipToGoat, (SurvivalMollyAltarController * __this, int32_t number, MethodInfo * method)); + DO_APP_FUNC(0x0055C8E0, void, SurvivalMollyAltarController_OnGoat, (SurvivalMollyAltarController * __this, MethodInfo * method)); + */ + + Il2CppObject* object = wrapper.GetObjectFromClass(image, "", "SurvivalMollyAltarController"); + + if (object != nullptr) { + auto MollyAltarController_Object = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); + + if (MollyAltarController_Object) { + auto SurvivalMollyAltarController = reinterpret_cast(MollyAltarController_Object); + + if (SurvivalMollyAltarController) { + + if (burnAll) { + if (app::SurvivalMollyAltarController_SkipToGoat) { + app::SurvivalMollyAltarController_SkipToGoat(SurvivalMollyAltarController, num, nullptr); + } + } + else { + if (app::SurvivalMollyAltarController_OnGoat) { + app::SurvivalMollyAltarController_OnGoat(SurvivalMollyAltarController, nullptr); + } + } + + } + } + } + } + else if (sceneName == std::string("Inn")) { + + /* MAP: INN + DO_APP_FUNC(0x00930CD0, void, MapController_SetProgressTo, (MapController * __this, int32_t progress, MethodInfo * method)); + DO_APP_FUNC(0x00930EA0, void, MapController_IncreaseProgress, (MapController * __this, MethodInfo * method)); + */ + + Il2CppObject* object = wrapper.GetObjectFromClass(image, "", "SurvivalMollyAltarController"); + + if (object != nullptr) { + auto MapController_Object = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); + + if (MapController_Object) { + auto MapController = reinterpret_cast(MapController_Object); + + if (MapController) { + + if (burnAll) { + if (app::MapController_SetProgressTo) { + app::MapController_SetProgressTo(MapController, num, nullptr); + } + } + else { + if (app::MapController_IncreaseProgress) { + app::MapController_IncreaseProgress(MapController, nullptr); + } + } + } + } + } + } + else if (sceneName == std::string("Town")) { + /* MAP: TOWN, DEVOUR + DO_APP_FUNC(0x00562320, void, SurvivalObjectBurnController_BurnGoat, (SurvivalObjectBurnController * __this, MethodInfo * method)); + DO_APP_FUNC(0x00562590, void, SurvivalObjectBurnController_SkipToGoat, (SurvivalObjectBurnController * __this, int32_t number, MethodInfo * method)); + */ + + Il2CppObject* object = wrapper.GetObjectFromClass(image, "", "SurvivalMollyAltarController"); + + if (object != nullptr) { + auto MapController_Object = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); + + if (MapController_Object) { + auto MapController = reinterpret_cast(MapController_Object); + + if (MapController) { + + if (burnAll) { + if (app::MapController_SetProgressTo) { + app::MapController_SetProgressTo(MapController, num, nullptr); + } + } + else { + if (app::MapController_IncreaseProgress) { + app::MapController_IncreaseProgress(MapController, nullptr); + } + } + } + } + } + } + else if (sceneName == std::string("Slaughterhouse")) { + /* MAP: Slaughterhouse + DO_APP_FUNC(0x0050DEB0, void, SlaughterhouseAltarController_SkipToGoat, (SlaughterhouseAltarController * __this, int32_t number, MethodInfo * method)); + */ + + Il2CppObject* object = wrapper.GetObjectFromClass(image, "", "SlaughterhouseAltarController"); + + if (object != nullptr) { + auto SlaughterhouseAltarController_Object = app::Object_1_FindObjectOfType(reinterpret_cast(object), nullptr); + + if (SlaughterhouseAltarController_Object) { + auto SlaughterhouseAltarController = reinterpret_cast(SlaughterhouseAltarController_Object); + + if (SlaughterhouseAltarController) { + + if (burnAll) { + if (app::SlaughterhouseAltarController_SkipToGoat) { + app::SlaughterhouseAltarController_SkipToGoat(SlaughterhouseAltarController, num, nullptr); + } + } + else { + return; + } + } + } + } + } + else { + return; + } +} diff --git a/lib/ClientHelper.h b/lib/ClientHelper.h index 2cd4844..7e05291 100644 --- a/lib/ClientHelper.h +++ b/lib/ClientHelper.h @@ -2,8 +2,14 @@ #include +class Wrapper; + bool IsSinglePlayer(); bool IsOnline(); bool IsHost(); + app::Menu* get_HorrorMenu(); -std::string get_SceneName(); \ No newline at end of file +std::string get_SceneName(); + +void BurnRitualObj(bool burnAll); +void BurnManager(std::string& sceneName, Wrapper& wrapper, const Il2CppImage* image, bool burnAll); \ No newline at end of file