Compare commits
	
		
			No commits in common. "c27085772fcfab9be9ef8403947e30907dab27cc" and "e9ba8b58fd0ff00e98c3d88d8898de9943734b3e" have entirely different histories.
		
	
	
		
			c27085772f
			...
			e9ba8b58fd
		
	
		| 
						 | 
					@ -15,8 +15,8 @@ android {
 | 
				
			||||||
        applicationId "io.github.chinosk.gakumas.localify"
 | 
					        applicationId "io.github.chinosk.gakumas.localify"
 | 
				
			||||||
        minSdk 29
 | 
					        minSdk 29
 | 
				
			||||||
        targetSdk 34
 | 
					        targetSdk 34
 | 
				
			||||||
        versionCode 5
 | 
					        versionCode 4
 | 
				
			||||||
        versionName "v1.6.7"
 | 
					        versionName "v1.6.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 | 
					        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 | 
				
			||||||
        vectorDrawables {
 | 
					        vectorDrawables {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -466,71 +466,14 @@ namespace GakumasLocal::HookMain {
 | 
				
			||||||
        // return UnityResolve::UnityType::String::New("[I18]" + ret->ToString());
 | 
					        // return UnityResolve::UnityType::String::New("[I18]" + ret->ToString());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    DEFINE_HOOK(void, PictureBookLiveThumbnailView_SetData, (void* self, void* liveData, bool isReleased, bool isUnlocked, bool isNew, bool hasLiveSkin, void* ct, void* mtd)) {
 | 
				
			||||||
    DEFINE_HOOK(void*, UserDataManagerBase_get__userIdolCardSkinList, (void* self, void* mtd)) {  // Live默认选择
 | 
					        // Log::DebugFmt("PictureBookLiveThumbnailView_SetData: isReleased: %d, isUnlocked: %d, isNew: %d, hasLiveSkin: %d",
 | 
				
			||||||
        auto ret = UserDataManagerBase_get__userIdolCardSkinList_Orig(self, mtd);
 | 
					        //              isReleased, isUnlocked, isNew, hasLiveSkin);
 | 
				
			||||||
        Log::DebugFmt("UserDataManagerBase_get__userIdolCardSkinList: %p", ret);
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    DEFINE_HOOK(void*, UserDataManagerBase_get__userCostumeList, (void* self, void* mtd)) {  // 服装选择界面
 | 
					 | 
				
			||||||
        auto ret = UserDataManagerBase_get__userCostumeList_Orig(self, mtd);
 | 
					 | 
				
			||||||
        Log::DebugFmt("UserDataManagerBase_get__userCostumeList: %p", ret);
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    DEFINE_HOOK(void*, UserDataManagerBase_get__userCostumeHeadList, (void* self, void* mtd)) {  // 服装选择界面
 | 
					 | 
				
			||||||
        auto ret = UserDataManagerBase_get__userCostumeHeadList_Orig(self, mtd);
 | 
					 | 
				
			||||||
        Log::DebugFmt("UserDataManagerBase_get__userCostumeHeadList: %p", ret);
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
    }*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DEFINE_HOOK(void*, UserCostumeCollection_FindBy, (void* self, void* predicate, void* mtd)) {
 | 
					 | 
				
			||||||
        auto ret = UserCostumeCollection_FindBy_Orig(self, predicate, mtd);
 | 
					 | 
				
			||||||
        if (!Config::unlockAllLiveCostume) return ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        auto this_klass = Il2cppUtils::get_class_from_instance(self);
 | 
					 | 
				
			||||||
        // auto predicate_klass = Il2cppUtils::get_class_from_instance(predicate);  // System::Predicate`1
 | 
					 | 
				
			||||||
        // Log::DebugFmt("UserCostumeCollection_FindBy this: %s::%s, predicate: %s::%s", this_klass->namespaze, this_klass->name,
 | 
					 | 
				
			||||||
        //               predicate_klass->namespaze, predicate_klass->name);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        static auto UserCostumeCollection_klass = Il2cppUtils::GetClass("Assembly-CSharp.dll", "Campus.Common.User",
 | 
					 | 
				
			||||||
                                                                        "UserCostumeCollection");
 | 
					 | 
				
			||||||
        static auto UserCostumeCollection_GetAllList_mtd = Il2cppUtils::il2cpp_class_get_method_from_name(
 | 
					 | 
				
			||||||
                UserCostumeCollection_klass->address, "GetAllList", 1);
 | 
					 | 
				
			||||||
        static auto UserCostumeCollection_GetAllList = reinterpret_cast<void* (*)(void*, void*)>(UserCostumeCollection_GetAllList_mtd->methodPointer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        std::string thisKlassName(this_klass->name);
 | 
					 | 
				
			||||||
        // Campus.Common.User::UserCostumeHeadCollection || Campus.Common.User::UserCostumeCollection
 | 
					 | 
				
			||||||
        // 两个 class 的 GetAllList 均使用的父类 Qua.UserDataManagement.UserDataCollectionBase`2 的方法,地址一致
 | 
					 | 
				
			||||||
        if ((thisKlassName == "UserCostumeHeadCollection") || (thisKlassName == "UserCostumeCollection")) {
 | 
					 | 
				
			||||||
            // auto ret_klass = Il2cppUtils::get_class_from_instance(ret);  // WhereEnumerableIterator
 | 
					 | 
				
			||||||
            return UserCostumeCollection_GetAllList(self, nullptr);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DEFINE_HOOK(bool, UserIdolCardSkinCollection_Exists, (void* self, Il2cppString* id, void* mtd)) { // Live默认选择
 | 
					 | 
				
			||||||
        auto ret = UserIdolCardSkinCollection_Exists_Orig(self, id, mtd);
 | 
					 | 
				
			||||||
        // Log::DebugFmt("UserIdolCardSkinCollection_Exists: %s, ret: %d", id->ToString().c_str(), ret);
 | 
					 | 
				
			||||||
        if (!Config::unlockAllLive) return ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (id) {
 | 
					 | 
				
			||||||
            std::string idStr = id->ToString();
 | 
					 | 
				
			||||||
            if (idStr.starts_with("music") || idStr.starts_with("i_card-skin")) {  // eg. music-all-kllj-006, i_card-skin-hski-3-002
 | 
					 | 
				
			||||||
                return true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DEFINE_HOOK(void, PictureBookLiveThumbnailView_SetDataAsync, (void* self, void* liveData, bool isReleased, bool isUnlocked, bool isNew, bool hasLiveSkin, void* ct, void* mtd)) {
 | 
					 | 
				
			||||||
        // Log::DebugFmt("PictureBookLiveThumbnailView_SetDataAsync: isReleased: %d, isUnlocked: %d, isNew: %d, hasLiveSkin: %d", isReleased, isUnlocked, isNew, hasLiveSkin);
 | 
					 | 
				
			||||||
        if (Config::dbgMode && Config::unlockAllLive) {
 | 
					        if (Config::dbgMode && Config::unlockAllLive) {
 | 
				
			||||||
            isUnlocked = true;
 | 
					            isUnlocked = true;
 | 
				
			||||||
            isReleased = true;
 | 
					            isReleased = true;
 | 
				
			||||||
            hasLiveSkin = true;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        PictureBookLiveThumbnailView_SetDataAsync_Orig(self, liveData, isReleased, isUnlocked, isNew, hasLiveSkin, ct, mtd);
 | 
					        PictureBookLiveThumbnailView_SetData_Orig(self, liveData, isReleased, isUnlocked, isNew, hasLiveSkin, ct, mtd);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::vector<std::string> GetIdolMusicIdAll(const std::string& charaNameId = "") {
 | 
					    std::vector<std::string> GetIdolMusicIdAll(const std::string& charaNameId = "") {
 | 
				
			||||||
| 
						 | 
					@ -1068,45 +1011,9 @@ namespace GakumasLocal::HookMain {
 | 
				
			||||||
                 Il2cppUtils::GetMethodPointer("Octo.dll", "Octo",
 | 
					                 Il2cppUtils::GetMethodPointer("Octo.dll", "Octo",
 | 
				
			||||||
                                               "OnDownloadProgress", "Invoke"));
 | 
					                                               "OnDownloadProgress", "Invoke"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /*
 | 
					        ADD_HOOK(PictureBookLiveThumbnailView_SetData,
 | 
				
			||||||
        auto UserDataManager_klass = Il2cppUtils::GetClass("Assembly-CSharp.dll", "Campus.Common.User",
 | 
					 | 
				
			||||||
                                                           "UserDataManager");
 | 
					 | 
				
			||||||
        if (UserDataManager_klass) {
 | 
					 | 
				
			||||||
            auto UserDataManagerBase_klass = UnityResolve::Invoke<Il2cppUtils::Il2CppClassHead*>("il2cpp_class_get_parent", UserDataManager_klass->address);
 | 
					 | 
				
			||||||
            if (UserDataManagerBase_klass) {
 | 
					 | 
				
			||||||
                auto get_userIdolCardSkinList_mtd = Il2cppUtils::il2cpp_class_get_method_from_name(UserDataManagerBase_klass, "get__userIdolCardSkinList", 0);
 | 
					 | 
				
			||||||
                if (get_userIdolCardSkinList_mtd) {
 | 
					 | 
				
			||||||
                    ADD_HOOK(UserDataManagerBase_get__userIdolCardSkinList, get_userIdolCardSkinList_mtd->methodPointer);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                auto get_userCostumeList_mtd = Il2cppUtils::il2cpp_class_get_method_from_name(UserDataManagerBase_klass, "get__userCostumeList", 0);
 | 
					 | 
				
			||||||
                if (get_userCostumeList_mtd) {
 | 
					 | 
				
			||||||
                    ADD_HOOK(UserDataManagerBase_get__userCostumeList, get_userCostumeList_mtd->methodPointer);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                auto get_userCostumeHeadList_mtd = Il2cppUtils::il2cpp_class_get_method_from_name(UserDataManagerBase_klass, "get__userCostumeHeadList", 0);
 | 
					 | 
				
			||||||
                if (get_userCostumeHeadList_mtd) {
 | 
					 | 
				
			||||||
                    ADD_HOOK(UserDataManagerBase_get__userCostumeHeadList, get_userCostumeHeadList_mtd->methodPointer);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        auto UserIdolCardSkinCollection_klass = Il2cppUtils::GetClass("Assembly-CSharp.dll", "Campus.Common.User",
 | 
					 | 
				
			||||||
                                                                      "UserIdolCardSkinCollection");
 | 
					 | 
				
			||||||
        auto UserIdolCardSkinCollection_Exists_mtd = Il2cppUtils::il2cpp_class_get_method_from_name(UserIdolCardSkinCollection_klass->address, "Exists", 1);
 | 
					 | 
				
			||||||
        if (UserIdolCardSkinCollection_Exists_mtd) {
 | 
					 | 
				
			||||||
            ADD_HOOK(UserIdolCardSkinCollection_Exists, UserIdolCardSkinCollection_Exists_mtd->methodPointer);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        auto UserCostumeCollection_klass = Il2cppUtils::GetClass("Assembly-CSharp.dll", "Campus.Common.User",
 | 
					 | 
				
			||||||
                                                                      "UserCostumeCollection");
 | 
					 | 
				
			||||||
        auto UserCostumeCollection_FindBy_mtd = Il2cppUtils::il2cpp_class_get_method_from_name(
 | 
					 | 
				
			||||||
                UserCostumeCollection_klass->address, "FindBy", 1);
 | 
					 | 
				
			||||||
        if (UserCostumeCollection_FindBy_mtd) {
 | 
					 | 
				
			||||||
            ADD_HOOK(UserCostumeCollection_FindBy, UserCostumeCollection_FindBy_mtd->methodPointer);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ADD_HOOK(PictureBookLiveThumbnailView_SetDataAsync,
 | 
					 | 
				
			||||||
                 Il2cppUtils::GetMethodPointer("Assembly-CSharp.dll", "Campus.OutGame.PictureBook",
 | 
					                 Il2cppUtils::GetMethodPointer("Assembly-CSharp.dll", "Campus.OutGame.PictureBook",
 | 
				
			||||||
                                               "PictureBookLiveThumbnailView", "SetDataAsync", {"*", "*", "*", "*", "*"}));
 | 
					                                               "PictureBookLiveThumbnailView", "SetDataAsync", {"*", "*", "*", "*"}));
 | 
				
			||||||
        ADD_HOOK(PictureBookWindowPresenter_GetLiveMusics,
 | 
					        ADD_HOOK(PictureBookWindowPresenter_GetLiveMusics,
 | 
				
			||||||
                 Il2cppUtils::GetMethodPointer("Assembly-CSharp.dll", "Campus.OutGame",
 | 
					                 Il2cppUtils::GetMethodPointer("Assembly-CSharp.dll", "Campus.OutGame",
 | 
				
			||||||
                                               "PictureBookWindowPresenter", "GetLiveMusics"));
 | 
					                                               "PictureBookWindowPresenter", "GetLiveMusics"));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,6 @@ namespace GakumasLocal::Config {
 | 
				
			||||||
    bool enableFreeCamera = false;
 | 
					    bool enableFreeCamera = false;
 | 
				
			||||||
    int targetFrameRate = 0;
 | 
					    int targetFrameRate = 0;
 | 
				
			||||||
    bool unlockAllLive = false;
 | 
					    bool unlockAllLive = false;
 | 
				
			||||||
    bool unlockAllLiveCostume = false;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool enableLiveCustomeDress = false;
 | 
					    bool enableLiveCustomeDress = false;
 | 
				
			||||||
    std::string liveCustomeHeadId = "";
 | 
					    std::string liveCustomeHeadId = "";
 | 
				
			||||||
| 
						 | 
					@ -68,7 +67,6 @@ namespace GakumasLocal::Config {
 | 
				
			||||||
            GetConfigItem(targetFrameRate);
 | 
					            GetConfigItem(targetFrameRate);
 | 
				
			||||||
            GetConfigItem(enableFreeCamera);
 | 
					            GetConfigItem(enableFreeCamera);
 | 
				
			||||||
            GetConfigItem(unlockAllLive);
 | 
					            GetConfigItem(unlockAllLive);
 | 
				
			||||||
            GetConfigItem(unlockAllLiveCostume);
 | 
					 | 
				
			||||||
            GetConfigItem(enableLiveCustomeDress);
 | 
					            GetConfigItem(enableLiveCustomeDress);
 | 
				
			||||||
            GetConfigItem(liveCustomeHeadId);
 | 
					            GetConfigItem(liveCustomeHeadId);
 | 
				
			||||||
            GetConfigItem(liveCustomeCostumeId);
 | 
					            GetConfigItem(liveCustomeCostumeId);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,6 @@ namespace GakumasLocal::Config {
 | 
				
			||||||
    extern bool enableFreeCamera;
 | 
					    extern bool enableFreeCamera;
 | 
				
			||||||
    extern int targetFrameRate;
 | 
					    extern int targetFrameRate;
 | 
				
			||||||
    extern bool unlockAllLive;
 | 
					    extern bool unlockAllLive;
 | 
				
			||||||
    extern bool unlockAllLiveCostume;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    extern bool enableLiveCustomeDress;
 | 
					    extern bool enableLiveCustomeDress;
 | 
				
			||||||
    extern std::string liveCustomeHeadId;
 | 
					    extern std::string liveCustomeHeadId;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,6 @@ interface ConfigListener {
 | 
				
			||||||
    fun onEnableFreeCameraChanged(value: Boolean)
 | 
					    fun onEnableFreeCameraChanged(value: Boolean)
 | 
				
			||||||
    fun onTargetFpsChanged(s: CharSequence, start: Int, before: Int, count: Int)
 | 
					    fun onTargetFpsChanged(s: CharSequence, start: Int, before: Int, count: Int)
 | 
				
			||||||
    fun onUnlockAllLiveChanged(value: Boolean)
 | 
					    fun onUnlockAllLiveChanged(value: Boolean)
 | 
				
			||||||
    fun onUnlockAllLiveCostumeChanged(value: Boolean)
 | 
					 | 
				
			||||||
    fun onLiveCustomeDressChanged(value: Boolean)
 | 
					    fun onLiveCustomeDressChanged(value: Boolean)
 | 
				
			||||||
    fun onLiveCustomeHeadIdChanged(s: CharSequence, start: Int, before: Int, count: Int)
 | 
					    fun onLiveCustomeHeadIdChanged(s: CharSequence, start: Int, before: Int, count: Int)
 | 
				
			||||||
    fun onLiveCustomeCostumeIdChanged(s: CharSequence, start: Int, before: Int, count: Int)
 | 
					    fun onLiveCustomeCostumeIdChanged(s: CharSequence, start: Int, before: Int, count: Int)
 | 
				
			||||||
| 
						 | 
					@ -153,11 +152,6 @@ interface ConfigUpdateListener: ConfigListener, IHasConfigItems {
 | 
				
			||||||
        saveConfig()
 | 
					        saveConfig()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun onUnlockAllLiveCostumeChanged(value: Boolean) {
 | 
					 | 
				
			||||||
        config.unlockAllLiveCostume = value
 | 
					 | 
				
			||||||
        saveConfig()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    override fun onTargetFpsChanged(s: CharSequence, start: Int, before: Int, count: Int) {
 | 
					    override fun onTargetFpsChanged(s: CharSequence, start: Int, before: Int, count: Int) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            val valueStr = s.toString()
 | 
					            val valueStr = s.toString()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,6 @@ data class GakumasConfig (
 | 
				
			||||||
    var enableFreeCamera: Boolean = false,
 | 
					    var enableFreeCamera: Boolean = false,
 | 
				
			||||||
    var targetFrameRate: Int = 0,
 | 
					    var targetFrameRate: Int = 0,
 | 
				
			||||||
    var unlockAllLive: Boolean = false,
 | 
					    var unlockAllLive: Boolean = false,
 | 
				
			||||||
    var unlockAllLiveCostume: Boolean = false,
 | 
					 | 
				
			||||||
    var enableLiveCustomeDress: Boolean = false,
 | 
					    var enableLiveCustomeDress: Boolean = false,
 | 
				
			||||||
    var liveCustomeHeadId: String = "",
 | 
					    var liveCustomeHeadId: String = "",
 | 
				
			||||||
    var liveCustomeCostumeId: String = "",
 | 
					    var liveCustomeCostumeId: String = "",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -357,10 +357,6 @@ fun AdvanceSettingsPage(modifier: Modifier = Modifier,
 | 
				
			||||||
                            checked = config.value.unlockAllLive) {
 | 
					                            checked = config.value.unlockAllLive) {
 | 
				
			||||||
                                v -> context?.onUnlockAllLiveChanged(v)
 | 
					                                v -> context?.onUnlockAllLiveChanged(v)
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        GakuSwitch(modifier, stringResource(R.string.unlockAllLiveCostume),
 | 
					 | 
				
			||||||
                            checked = config.value.unlockAllLiveCostume) {
 | 
					 | 
				
			||||||
                                v -> context?.onUnlockAllLiveCostumeChanged(v)
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        HorizontalDivider(
 | 
					                        HorizontalDivider(
 | 
				
			||||||
                            thickness = 1.dp,
 | 
					                            thickness = 1.dp,
 | 
				
			||||||
                            color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.12f)
 | 
					                            color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.12f)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,7 +118,6 @@
 | 
				
			||||||
    <string name="translation_repository">翻訳のリポジトリ</string>
 | 
					    <string name="translation_repository">翻訳のリポジトリ</string>
 | 
				
			||||||
    <string name="translation_resource_update">翻訳リソースをアップデート</string>
 | 
					    <string name="translation_resource_update">翻訳リソースをアップデート</string>
 | 
				
			||||||
    <string name="unlockAllLive">すべてのライブを開放</string>
 | 
					    <string name="unlockAllLive">すべてのライブを開放</string>
 | 
				
			||||||
    <string name="unlockAllLiveCostume">すべてのライブ衣装を開放</string>
 | 
					 | 
				
			||||||
    <string name="useCustomeGraphicSettings">カスタムグラフィック設定を使用する</string>
 | 
					    <string name="useCustomeGraphicSettings">カスタムグラフィック設定を使用する</string>
 | 
				
			||||||
    <string name="use_remote_zip_resource">リモート ZIP リソースを使用する</string>
 | 
					    <string name="use_remote_zip_resource">リモート ZIP リソースを使用する</string>
 | 
				
			||||||
    <string name="usearmcorrection">Arm コレクションを使用する</string>
 | 
					    <string name="usearmcorrection">Arm コレクションを使用する</string>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,6 @@
 | 
				
			||||||
    <string name="start_game">以上述配置启动游戏/重载配置</string>
 | 
					    <string name="start_game">以上述配置启动游戏/重载配置</string>
 | 
				
			||||||
    <string name="setFpsTitle">最大 FPS (0 为保持游戏原设置)</string>
 | 
					    <string name="setFpsTitle">最大 FPS (0 为保持游戏原设置)</string>
 | 
				
			||||||
    <string name="unlockAllLive">解锁所有 Live</string>
 | 
					    <string name="unlockAllLive">解锁所有 Live</string>
 | 
				
			||||||
    <string name="unlockAllLiveCostume">解锁所有 Live 服装</string>
 | 
					 | 
				
			||||||
    <string name="liveUseCustomeDress">Live 使用自定义角色</string>
 | 
					    <string name="liveUseCustomeDress">Live 使用自定义角色</string>
 | 
				
			||||||
    <string name="live_costume_head_id">Live 自定义头部 ID (例: costume_head_hski-cstm-0002)</string>
 | 
					    <string name="live_costume_head_id">Live 自定义头部 ID (例: costume_head_hski-cstm-0002)</string>
 | 
				
			||||||
    <string name="live_custome_dress_id">Live 自定义服装 ID (例: hski-cstm-0002)</string>
 | 
					    <string name="live_custome_dress_id">Live 自定义服装 ID (例: hski-cstm-0002)</string>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,6 @@
 | 
				
			||||||
    <string name="start_game">Start Game / Hot Reload Config</string>
 | 
					    <string name="start_game">Start Game / Hot Reload Config</string>
 | 
				
			||||||
    <string name="setFpsTitle">Max FPS (0 is Use Original Settings)</string>
 | 
					    <string name="setFpsTitle">Max FPS (0 is Use Original Settings)</string>
 | 
				
			||||||
    <string name="unlockAllLive">Unlock All Live</string>
 | 
					    <string name="unlockAllLive">Unlock All Live</string>
 | 
				
			||||||
    <string name="unlockAllLiveCostume">Unlock All Live Costume</string>
 | 
					 | 
				
			||||||
    <string name="liveUseCustomeDress">Live Custom Character</string>
 | 
					    <string name="liveUseCustomeDress">Live Custom Character</string>
 | 
				
			||||||
    <string name="live_costume_head_id">Live Custom Head ID (eg. costume_head_hski-cstm-0002)</string>
 | 
					    <string name="live_costume_head_id">Live Custom Head ID (eg. costume_head_hski-cstm-0002)</string>
 | 
				
			||||||
    <string name="live_custome_dress_id">Live Custom Dress ID (eg. hski-cstm-0002)</string>
 | 
					    <string name="live_custome_dress_id">Live Custom Dress ID (eg. hski-cstm-0002)</string>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue