From bd9bcae01d1eb9020df1280658543184465271fd Mon Sep 17 00:00:00 2001 From: chinosk <2248589280@qq.com> Date: Sun, 1 Dec 2024 03:49:58 +0000 Subject: [PATCH] Add `login as ios`. Trim version string. --- app/build.gradle | 2 +- app/src/main/cpp/GakumasLocalify/Hook.cpp | 42 +++++++++++++++++++ .../cpp/GakumasLocalify/config/Config.cpp | 3 ++ .../cpp/GakumasLocalify/config/Config.hpp | 2 + .../gakumas/localify/ConfigUpdateListener.kt | 6 +++ .../localify/hookUtils/FilesChecker.kt | 4 +- .../gakumas/localify/models/GakumasConfig.kt | 2 + .../ui/pages/subPages/AdvancedSettingsPage.kt | 4 ++ app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 11 files changed, 65 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f92b51c..35b3ec6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,7 +16,7 @@ android { minSdk 29 targetSdk 34 versionCode 4 - versionName "v1.6.3" + versionName "v1.6.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/cpp/GakumasLocalify/Hook.cpp b/app/src/main/cpp/GakumasLocalify/Hook.cpp index 9832299..2a429ea 100644 --- a/app/src/main/cpp/GakumasLocalify/Hook.cpp +++ b/app/src/main/cpp/GakumasLocalify/Hook.cpp @@ -763,6 +763,32 @@ namespace GakumasLocal::HookMain { CampusActorController_LateUpdate_Orig(self, mtd); } + DEFINE_HOOK(bool, PlatformInformation_get_IsAndroid, ()) { + if (Config::loginAsIOS) { + return false; + } + // Log::DebugFmt("PlatformInformation_get_IsAndroid: 0x%x", ret); + return PlatformInformation_get_IsAndroid_Orig(); + } + + DEFINE_HOOK(bool, PlatformInformation_get_IsIOS, ()) { + if (Config::loginAsIOS) { + return true; + } + // Log::DebugFmt("PlatformInformation_get_IsIOS: 0x%x", ret); + return PlatformInformation_get_IsIOS_Orig(); + } + + DEFINE_HOOK(Il2cppString*, ApiBase_GetPlatformString, (void* self, void* mtd)) { + if (Config::loginAsIOS) { + return Il2cppString::New("iOS"); + } + // auto ret = ApiBase_GetPlatformString_Orig(self, mtd); + // Log::DebugFmt("ApiBase_GetPlatformString: %s", ret->ToString().c_str()); + return ApiBase_GetPlatformString_Orig(self, mtd); + } + + void UpdateSwingBreastBonesData(void* initializeData) { if (!Config::enableBreastParam) return; static auto CampusActorAnimationInitializeData_klass = Il2cppUtils::GetClass("campus-submodule.Runtime.dll", "ActorAnimation", @@ -954,6 +980,22 @@ namespace GakumasLocal::HookMain { ADD_HOOK(CampusActorController_LateUpdate, Il2cppUtils::GetMethodPointer("campus-submodule.Runtime.dll", "Campus.Common", "CampusActorController", "LateUpdate")); + + ADD_HOOK(PlatformInformation_get_IsAndroid, Il2cppUtils::GetMethodPointer("Firebase.Platform.dll", "Firebase.Platform", + "PlatformInformation", "get_IsAndroid")); + ADD_HOOK(PlatformInformation_get_IsIOS, Il2cppUtils::GetMethodPointer("Firebase.Platform.dll", "Firebase.Platform", + "PlatformInformation", "get_IsIOS")); + + auto api_klass = Il2cppUtils::GetClass("Assembly-CSharp.dll", "Campus.Common.Network", "Api"); + if (api_klass) { + // Qua.Network.ApiBase + auto api_parent = UnityResolve::Invoke("il2cpp_class_get_parent", api_klass->address); + if (api_parent) { + // Log::DebugFmt("api_parent at %p, name: %s::%s", api_parent, api_parent->namespaze, api_parent->name); + ADD_HOOK(ApiBase_GetPlatformString, Il2cppUtils::il2cpp_class_get_method_from_name(api_parent, "GetPlatformString", 0)->methodPointer); + } + } + /* static auto CampusActorController_klass = Il2cppUtils::GetClass("campus-submodule.Runtime.dll", "Campus.Common", "CampusActorController"); diff --git a/app/src/main/cpp/GakumasLocalify/config/Config.cpp b/app/src/main/cpp/GakumasLocalify/config/Config.cpp index 2493565..83e28a4 100644 --- a/app/src/main/cpp/GakumasLocalify/config/Config.cpp +++ b/app/src/main/cpp/GakumasLocalify/config/Config.cpp @@ -21,6 +21,8 @@ namespace GakumasLocal::Config { std::string liveCustomeHeadId = ""; std::string liveCustomeCostumeId = ""; + bool loginAsIOS = false; + bool useCustomeGraphicSettings = false; float renderScale = 0.77f; int qualitySettingsLevel = 3; @@ -68,6 +70,7 @@ namespace GakumasLocal::Config { GetConfigItem(enableLiveCustomeDress); GetConfigItem(liveCustomeHeadId); GetConfigItem(liveCustomeCostumeId); + GetConfigItem(loginAsIOS); GetConfigItem(useCustomeGraphicSettings); GetConfigItem(renderScale); GetConfigItem(qualitySettingsLevel); diff --git a/app/src/main/cpp/GakumasLocalify/config/Config.hpp b/app/src/main/cpp/GakumasLocalify/config/Config.hpp index cba35b4..3813a4a 100644 --- a/app/src/main/cpp/GakumasLocalify/config/Config.hpp +++ b/app/src/main/cpp/GakumasLocalify/config/Config.hpp @@ -19,6 +19,8 @@ namespace GakumasLocal::Config { extern std::string liveCustomeHeadId; extern std::string liveCustomeCostumeId; + extern bool loginAsIOS; + extern bool useCustomeGraphicSettings; extern float renderScale; extern int qualitySettingsLevel; diff --git a/app/src/main/java/io/github/chinosk/gakumas/localify/ConfigUpdateListener.kt b/app/src/main/java/io/github/chinosk/gakumas/localify/ConfigUpdateListener.kt index 4c2bf32..3fa7fd9 100644 --- a/app/src/main/java/io/github/chinosk/gakumas/localify/ConfigUpdateListener.kt +++ b/app/src/main/java/io/github/chinosk/gakumas/localify/ConfigUpdateListener.kt @@ -17,6 +17,7 @@ import kotlinx.coroutines.runBlocking interface ConfigListener { fun onEnabledChanged(value: Boolean) fun onForceExportResourceChanged(value: Boolean) + fun onLoginAsIOSChanged(value: Boolean) fun onTextTestChanged(value: Boolean) fun onReplaceFontChanged(value: Boolean) fun onLazyInitChanged(value: Boolean) @@ -115,6 +116,11 @@ interface ConfigUpdateListener: ConfigListener, IHasConfigItems { pushKeyEvent(KeyEvent(1145, 30)) } + override fun onLoginAsIOSChanged(value: Boolean) { + config.loginAsIOS = value + saveConfig() + } + override fun onReplaceFontChanged(value: Boolean) { config.replaceFont = value saveConfig() diff --git a/app/src/main/java/io/github/chinosk/gakumas/localify/hookUtils/FilesChecker.kt b/app/src/main/java/io/github/chinosk/gakumas/localify/hookUtils/FilesChecker.kt index 61d72e7..2bea30e 100644 --- a/app/src/main/java/io/github/chinosk/gakumas/localify/hookUtils/FilesChecker.kt +++ b/app/src/main/java/io/github/chinosk/gakumas/localify/hookUtils/FilesChecker.kt @@ -84,7 +84,7 @@ object FilesChecker { for (i in assets.list(localizationFilesDir)!!) { if (i.toString() == "version.txt") { val stream = assets.open("$localizationFilesDir/$i") - return convertToString(stream) + return convertToString(stream).trim() } } return "0.0" @@ -96,7 +96,7 @@ object FilesChecker { val versionFile = File(pluginFilesDir, "version.txt") if (!versionFile.exists()) return "0.0" - return versionFile.readText() + return versionFile.readText().trim() } fun convertToString(inputStream: InputStream?): String { diff --git a/app/src/main/java/io/github/chinosk/gakumas/localify/models/GakumasConfig.kt b/app/src/main/java/io/github/chinosk/gakumas/localify/models/GakumasConfig.kt index 3f206bc..fca7b64 100644 --- a/app/src/main/java/io/github/chinosk/gakumas/localify/models/GakumasConfig.kt +++ b/app/src/main/java/io/github/chinosk/gakumas/localify/models/GakumasConfig.kt @@ -19,6 +19,8 @@ data class GakumasConfig ( var liveCustomeHeadId: String = "", var liveCustomeCostumeId: String = "", + var loginAsIOS: Boolean = false, + var useCustomeGraphicSettings: Boolean = false, var renderScale: Float = 0.77f, var qualitySettingsLevel: Int = 3, diff --git a/app/src/main/java/io/github/chinosk/gakumas/localify/ui/pages/subPages/AdvancedSettingsPage.kt b/app/src/main/java/io/github/chinosk/gakumas/localify/ui/pages/subPages/AdvancedSettingsPage.kt index c920b92..88dbd58 100644 --- a/app/src/main/java/io/github/chinosk/gakumas/localify/ui/pages/subPages/AdvancedSettingsPage.kt +++ b/app/src/main/java/io/github/chinosk/gakumas/localify/ui/pages/subPages/AdvancedSettingsPage.kt @@ -86,6 +86,10 @@ fun AdvanceSettingsPage(modifier: Modifier = Modifier, GakuSwitch(modifier, stringResource(R.string.force_export_resource), checked = config.value.forceExportResource) { v -> context?.onForceExportResourceChanged(v) } + + GakuSwitch(modifier, stringResource(R.string.login_as_ios), checked = config.value.loginAsIOS) { + v -> context?.onLoginAsIOSChanged(v) + } } } diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 7811307..b95925c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -50,6 +50,7 @@ テキストをエクスポート ドロップダウンメニューを表示 リソースのアップデートを強制する + iOSとしてログイン Gakumas Localify ゲームパッチ グラフィック設定 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1e78fbd..b856d71 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -16,6 +16,7 @@ 文本 hook 测试模式 导出文本 启动后强制导出资源 + 以 iOS 登陆 极高 超高 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e1a455c..ed35cef 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,6 +16,7 @@ Text Hook Test Mode Export Text Force Update Resource + Login as iOS Ultra Very High High