diff --git a/cheat-library/cheat-library.vcxproj b/cheat-library/cheat-library.vcxproj index 2add32f..51c3fc4 100644 --- a/cheat-library/cheat-library.vcxproj +++ b/cheat-library/cheat-library.vcxproj @@ -50,6 +50,7 @@ true + @@ -163,6 +164,7 @@ + diff --git a/cheat-library/cheat-library.vcxproj.filters b/cheat-library/cheat-library.vcxproj.filters index dbe9540..20245a6 100644 --- a/cheat-library/cheat-library.vcxproj.filters +++ b/cheat-library/cheat-library.vcxproj.filters @@ -234,6 +234,9 @@ Header Files + + Header Files + @@ -426,6 +429,9 @@ Source Files + + Source Files + diff --git a/cheat-library/src/user/cheat/cheat.cpp b/cheat-library/src/user/cheat/cheat.cpp index 18f7d8e..3c5b76b 100644 --- a/cheat-library/src/user/cheat/cheat.cpp +++ b/cheat-library/src/user/cheat/cheat.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include "GenshinCM.h" @@ -101,7 +102,8 @@ namespace cheat FEAT_INST(ChestIndicator), FEAT_INST(ProfileChanger), FEAT_INST(PaimonFollow), - FEAT_INST(HideUI) + FEAT_INST(HideUI), + FEAT_INST(Browser) }); #undef FEAT_INST diff --git a/cheat-library/src/user/cheat/visuals/Browser.cpp b/cheat-library/src/user/cheat/visuals/Browser.cpp new file mode 100644 index 0000000..1be0197 --- /dev/null +++ b/cheat-library/src/user/cheat/visuals/Browser.cpp @@ -0,0 +1,99 @@ +#include "pch-il2cpp.h" +#include "Browser.h" + +#include +#include +#include + +#include + +namespace cheat::feature +{ + app::GameObject* planeObject = nullptr; + app::Component_1* BrowserComponents = nullptr; + static std::string f_URL; + + Browser::Browser() : Feature(), + NF(f_Enabled, "Browser", "Visuals", 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) { + 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(BrowserComponents)->fields._url = string_to_il2cppi(custom_url); + reinterpret_cast(BrowserComponents)->fields._width = 1920; + reinterpret_cast(BrowserComponents)->fields._height = 1080; + reinterpret_cast(BrowserComponents)->fields.forceNextRender = true; + reinterpret_cast(BrowserComponents)->fields._EnableInput_k__BackingField = true; + } + } + } + else { + if (planeObject != nullptr && BrowserComponents != nullptr) + { + app::Object_1_DestroyImmediate_1(reinterpret_cast(planeObject), nullptr); + app::Object_1_DestroyImmediate_1(reinterpret_cast(BrowserComponents), nullptr); + planeObject = nullptr; + BrowserComponents = nullptr; + } + } + nextUpdate = currentTime + (int)f_DelayUpdate; + } +} \ No newline at end of file diff --git a/cheat-library/src/user/cheat/visuals/Browser.h b/cheat-library/src/user/cheat/visuals/Browser.h new file mode 100644 index 0000000..d6f0760 --- /dev/null +++ b/cheat-library/src/user/cheat/visuals/Browser.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include +#include + +namespace cheat::feature +{ + class Browser : public Feature + { + public: + config::Field> f_Enabled; + + static Browser& GetInstance(); + const FeatureGUIInfo& GetGUIInfo() const override; + void DrawMain() override; + virtual bool NeedStatusDraw() const override; + void DrawStatus() override; + + private: + SafeQueue toBeUpdate; + SafeValue nextUpdate; + int f_DelayUpdate = 20.f; + void OnGameUpdate(); + Browser(); + }; +} \ No newline at end of file