瀏覽代碼

Merge branch 'master' of http://fort23.cn:3000/ck/XiuXianGame

# Conflicts:
#	Assets/StreamingAssets/assetConfig.txt   resolved by origin/master(远端) version
DESKTOP-BGJIU14\ck 1 天之前
父節點
當前提交
b240a65a3b

+ 1 - 1
Assets/Res/Config/EventConfig.json

@@ -6382,7 +6382,7 @@
         3
         3
       ],
       ],
       "EventValue": [
       "EventValue": [
-        30023,
+        9141,
         101
         101
       ],
       ],
       "EventName": 4277,
       "EventName": 4277,

+ 8 - 0
Assets/Res/Config/LanguageChineseConfig.json

@@ -40311,6 +40311,14 @@
     {
     {
       "ID": 10818,
       "ID": 10818,
       "txt": "下载后覆盖本地记录,确认吗?"
       "txt": "下载后覆盖本地记录,确认吗?"
+    },
+    {
+      "ID": 10819,
+      "txt": "游戏已发布新版本,请前往您的应用商店下载新版本"
+    },
+    {
+      "ID": 10820,
+      "txt": "挂机修为已达上限."
     }
     }
   ]
   ]
 }
 }

+ 20 - 20
Assets/Res/Config/SentimentEffectConfig.json

@@ -127,8 +127,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 3141,
       "massge": 3141,
       "pos": 1,
       "pos": 1,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 1,
       "effectType": 1,
       "effectVale": [
       "effectVale": [
         2
         2
@@ -144,8 +144,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10520,
       "massge": 10520,
       "pos": 1,
       "pos": 1,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 1,
       "effectType": 1,
       "effectVale": [
       "effectVale": [
         3
         3
@@ -161,8 +161,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10521,
       "massge": 10521,
       "pos": 1,
       "pos": 1,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 1,
       "effectType": 1,
       "effectVale": [
       "effectVale": [
         4
         4
@@ -178,8 +178,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10522,
       "massge": 10522,
       "pos": 1,
       "pos": 1,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 1,
       "effectType": 1,
       "effectVale": [
       "effectVale": [
         5
         5
@@ -195,8 +195,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10523,
       "massge": 10523,
       "pos": 1,
       "pos": 1,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 1,
       "effectType": 1,
       "effectVale": [
       "effectVale": [
         6
         6
@@ -297,8 +297,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 3143,
       "massge": 3143,
       "pos": 3,
       "pos": 3,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 7,
       "effectType": 7,
       "effectVale": [
       "effectVale": [
         2
         2
@@ -314,8 +314,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10528,
       "massge": 10528,
       "pos": 3,
       "pos": 3,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 7,
       "effectType": 7,
       "effectVale": [
       "effectVale": [
         3
         3
@@ -331,8 +331,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10529,
       "massge": 10529,
       "pos": 3,
       "pos": 3,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 7,
       "effectType": 7,
       "effectVale": [
       "effectVale": [
         4
         4
@@ -348,8 +348,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10530,
       "massge": 10530,
       "pos": 3,
       "pos": 3,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 7,
       "effectType": 7,
       "effectVale": [
       "effectVale": [
         5
         5
@@ -365,8 +365,8 @@
       "icon": "icon",
       "icon": "icon",
       "massge": 10531,
       "massge": 10531,
       "pos": 3,
       "pos": 3,
-      "lastSentimentEffectId": -1,
-      "unlockLevel": 0,
+      "lastSentimentEffectId": 1,
+      "unlockLevel": 1,
       "effectType": 7,
       "effectType": 7,
       "effectVale": [
       "effectVale": [
         6
         6

+ 23 - 7
Assets/Scripts/Core/Editor/BuildEtitor/BuildEditor.cs

@@ -10,6 +10,7 @@ using ICSharpCode.SharpZipLib.Checksum;
 using ICSharpCode.SharpZipLib.Zip;
 using ICSharpCode.SharpZipLib.Zip;
 using UnityEditor;
 using UnityEditor;
 using UnityEngine;
 using UnityEngine;
+using UnityFS;
 
 
 namespace Fort23.Editor
 namespace Fort23.Editor
 {
 {
@@ -133,10 +134,9 @@ namespace Fort23.Editor
         private static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions,
         private static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions,
             BuildOptions buildOptions, bool isBuildExe, bool isContainAB, bool clearFolder)
             BuildOptions buildOptions, bool isBuildExe, bool isContainAB, bool clearFolder)
         {
         {
-           
             AssetDatabase.Refresh();
             AssetDatabase.Refresh();
             var buildTarget = BuildTarget.StandaloneWindows;
             var buildTarget = BuildTarget.StandaloneWindows;
-            var exeName = "release";
+            var exeName = Application.version;
             switch (type)
             switch (type)
             {
             {
                 case PlatformType.PC:
                 case PlatformType.PC:
@@ -158,7 +158,7 @@ namespace Fort23.Editor
                     break;
                     break;
             }
             }
 
 
-         
+
             var build = string.Format(buildFolder, type,
             var build = string.Format(buildFolder, type,
                 $"{1}.{1}.{1}");
                 $"{1}.{1}.{1}");
             string bundlePath = string.Format(bundleFolder, type);
             string bundlePath = string.Format(bundleFolder, type);
@@ -196,7 +196,7 @@ namespace Fort23.Editor
             AssetBundleEditor.BuildAllBundle(buildTarget);
             AssetBundleEditor.BuildAllBundle(buildTarget);
             LogTool.Log("资源标记完成");
             LogTool.Log("资源标记完成");
             AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
             AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
-            
+
             BuildPipeline.BuildAssetBundles(bundlePath, buildAssetBundleOptions, buildTarget);
             BuildPipeline.BuildAssetBundles(bundlePath, buildAssetBundleOptions, buildTarget);
             var assetMd5Info = new AssetMD5Info(new List<MD5FileInfo>());
             var assetMd5Info = new AssetMD5Info(new List<MD5FileInfo>());
             var allBundles = Directory.GetFiles(bundlePath);
             var allBundles = Directory.GetFiles(bundlePath);
@@ -208,7 +208,7 @@ namespace Fort23.Editor
                 string fileName = fileInfo.Name;
                 string fileName = fileInfo.Name;
                 if (fileInfo.Name.Equals("UnityBundle"))
                 if (fileInfo.Name.Equals("UnityBundle"))
                 {
                 {
-                    fileName="UnityBundle.unity3d";
+                    fileName = "UnityBundle.unity3d";
                 }
                 }
 
 
                 // data = DllTool.KeyEncryption(data);
                 // data = DllTool.KeyEncryption(data);
@@ -245,7 +245,6 @@ namespace Fort23.Editor
                 md5Info.size = fileInfo.Length;
                 md5Info.size = fileInfo.Length;
                 md5Info.fileName = Path.GetFileName(assetConfigPath);
                 md5Info.fileName = Path.GetFileName(assetConfigPath);
                 assetMd5Info.fileInfo.Add(md5Info);
                 assetMd5Info.fileInfo.Add(md5Info);
-                
             }
             }
 
 
             LogTool.Log("完成资源打包");
             LogTool.Log("完成资源打包");
@@ -277,11 +276,28 @@ namespace Fort23.Editor
 
 
             if (isBuildExe)
             if (isBuildExe)
             {
             {
+                string path = $"{relativeDirPrefix}/{Application.version}";
+                string apkPath = $"{path}/{exeName}";
                 AssetDatabase.Refresh();
                 AssetDatabase.Refresh();
                 LogTool.Log("开始EXE打包");
                 LogTool.Log("开始EXE打包");
                 SaveGroup();
                 SaveGroup();
-                BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
+                BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, apkPath, buildTarget, buildOptions);
                 LogTool.Log("完成exe打包");
                 LogTool.Log("完成exe打包");
+                var assetMd5Info1 = new AssetMD5Info(new List<MD5FileInfo>());
+                var md5Info = new MD5FileInfo();
+                using (FileStream file = new FileStream(apkPath, FileMode.Open))
+                {
+                    md5Info.size = file.Length;
+                    var data = file.ReadAllBytes();
+                    md5Info.md5 = MD5Helper.FileMD5(data);
+                }
+
+                md5Info.fileName = Path.GetFileName(apkPath);
+                assetMd5Info1.fileInfo.Add(md5Info);
+
+                var md5Json1 = JsonHelper.ToJson(assetMd5Info1);
+                File.WriteAllText(path + "/MD5.txt", md5Json1);
+
                 string url = Application.dataPath.Split("Assets")[0] + relativeDirPrefix.Split("./")[1];
                 string url = Application.dataPath.Split("Assets")[0] + relativeDirPrefix.Split("./")[1];
                 Application.OpenURL(url);
                 Application.OpenURL(url);
             }
             }

+ 10 - 10
Assets/Scripts/Core/Editor/HybridCLR/BuildAssetsCommand.cs

@@ -23,7 +23,7 @@ namespace HybridCLR.Editor
             var build = Application.streamingAssetsPath + "/Dll/";
             var build = Application.streamingAssetsPath + "/Dll/";
             if (Directory.Exists(build))
             if (Directory.Exists(build))
             {
             {
-                Directory.Delete(build,true);
+                Directory.Delete(build, true);
             }
             }
 
 
             Directory.CreateDirectory(build);
             Directory.CreateDirectory(build);
@@ -46,9 +46,8 @@ namespace HybridCLR.Editor
 
 
             var md5Json = JsonHelper.ToJson(assetMd5Info);
             var md5Json = JsonHelper.ToJson(assetMd5Info);
             File.WriteAllText(build + "DllMD5.txt", md5Json);
             File.WriteAllText(build + "DllMD5.txt", md5Json);
-            
-          
-            
+
+
             LogTool.Log("MD5文件生成完成");
             LogTool.Log("MD5文件生成完成");
             PlatformType platformType;
             PlatformType platformType;
 #if UNITY_ANDROID
 #if UNITY_ANDROID
@@ -62,8 +61,8 @@ namespace HybridCLR.Editor
 #else
 #else
 			platformType = PlatformType.None;
 			platformType = PlatformType.None;
 #endif
 #endif
-            
-            
+
+
             var build1 = string.Format(BuildEditor.buildDllFolder, platformType,
             var build1 = string.Format(BuildEditor.buildDllFolder, platformType,
                 $"{1}.{1}.{1}");
                 $"{1}.{1}.{1}");
             foreach (var bundle in allBundles)
             foreach (var bundle in allBundles)
@@ -73,11 +72,11 @@ namespace HybridCLR.Editor
                 byte[] data = File.ReadAllBytes(bundle);
                 byte[] data = File.ReadAllBytes(bundle);
                 string fileName = fileInfo.Name;
                 string fileName = fileInfo.Name;
                 string p = build1 + fileName;
                 string p = build1 + fileName;
-          
+
                 File.WriteAllBytes(p, data);
                 File.WriteAllBytes(p, data);
-   
             }
             }
 
 
+            File.WriteAllText(build1 + "DllMD5.txt", md5Json);
             AssetDatabase.SaveAssets();
             AssetDatabase.SaveAssets();
             AssetDatabase.Refresh();
             AssetDatabase.Refresh();
         }
         }
@@ -129,6 +128,7 @@ namespace HybridCLR.Editor
             {
             {
                 Directory.CreateDirectory(buildDstDir);
                 Directory.CreateDirectory(buildDstDir);
             }
             }
+
             BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
             BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
             PrebuildCommandExt.CompileAndObfuscateDll();
             PrebuildCommandExt.CompileAndObfuscateDll();
             // ObfuscateUtil.CompileAndObfuscateHotUpdateAssemblies(target);
             // ObfuscateUtil.CompileAndObfuscateHotUpdateAssemblies(target);
@@ -163,8 +163,8 @@ namespace HybridCLR.Editor
                 Debug.Log($"[CopyAOTAssembliesToStreamingAssets] copy AOT dll {srcDllPath} -> {dllBytesPath}");
                 Debug.Log($"[CopyAOTAssembliesToStreamingAssets] copy AOT dll {srcDllPath} -> {dllBytesPath}");
             }
             }
         }
         }
-        
-        
+
+
         // [MenuItem("Build/CompileAndObfuscateAndCopyToStreamingAssets")]
         // [MenuItem("Build/CompileAndObfuscateAndCopyToStreamingAssets")]
         // public static void CompileAndObfuscateAndCopyToStreamingAssets()
         // public static void CompileAndObfuscateAndCopyToStreamingAssets()
         // {
         // {

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/SentimentEffectConfig.cs

@@ -85,7 +85,7 @@ namespace Excel2Json
 		
 		
 
 
 		/// <summary>
 		/// <summary>
-		///前置条件 (-1是主属性)
+		///前置条件 (1是主属性)
 		/// </summary>
 		/// </summary>
 #if !COMBAT_SERVER
 #if !COMBAT_SERVER
 		public int lastSentimentEffectId;
 		public int lastSentimentEffectId;

+ 6 - 0
Assets/Scripts/GameLogic/Hero/HeroInfo.cs

@@ -106,6 +106,12 @@ namespace GameLogic.Hero
             return GetGuaJiExp() + heroData.exp;
             return GetGuaJiExp() + heroData.exp;
         }
         }
 
 
+        public bool IsGuaijiShangXian()
+        {
+            int currentMiao = (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) / 1000);
+           return currentMiao >= PlayerManager.Instance.gameConstantConfig.offlineexpMaxTime;
+        }
+
         public void GetDaoLvBl()
         public void GetDaoLvBl()
         {
         {
             daolvBl.Clear();
             daolvBl.Clear();

+ 17 - 0
Assets/Scripts/GameUI/GameApplction.cs

@@ -56,6 +56,23 @@ public class GameApplction : IGameStart, ILogSend
     public async void StartGame(LoadType LoadType, string h5Url, GameStartUIPanel gameStartUIPanel,
     public async void StartGame(LoadType LoadType, string h5Url, GameStartUIPanel gameStartUIPanel,
         System.Action LoadFinish)
         System.Action LoadFinish)
     {
     {
+        VersionChecker versionChecker = new VersionChecker();
+        if (!await versionChecker.Start())
+        {
+            bool isok = await TipsPanle.OpenPnael(10819);
+            if (isok)
+            {
+                versionChecker.OpenOtherApp("com.xmcy.hykb");
+            }
+            else
+            {
+                Application.Quit();
+            }
+
+            return;
+        }
+
+
         Debug.Log("开始游戏逻辑");
         Debug.Log("开始游戏逻辑");
         HotSyncContent.DownloadUI = gameStartUIPanel;
         HotSyncContent.DownloadUI = gameStartUIPanel;
         this.LoadFinish = LoadFinish;
         this.LoadFinish = LoadFinish;

+ 17 - 11
Assets/Scripts/GameUI/UI/HeroInformationPanel/HeroInformationPanel.cs

@@ -109,7 +109,7 @@ namespace Fort23.Mono
                     TipMessagePanel.OpenTipMessagePanel(10810);
                     TipMessagePanel.OpenTipMessagePanel(10810);
                     return;
                     return;
                 }
                 }
-                
+
                 if (PlayerManager.Instance.myHero.GetAllExp() <
                 if (PlayerManager.Instance.myHero.GetAllExp() <
                     PlayerManager.Instance.myHero.powerUpConfig.levelUpExp)
                     PlayerManager.Instance.myHero.powerUpConfig.levelUpExp)
                 {
                 {
@@ -192,7 +192,6 @@ namespace Fort23.Mono
             ClosePool();
             ClosePool();
 
 
 
 
-
             Slider_Exp.maxValue = PlayerManager.Instance.myHero.powerUpConfig.levelUpExp;
             Slider_Exp.maxValue = PlayerManager.Instance.myHero.powerUpConfig.levelUpExp;
             Slider_Exp.value = PlayerManager.Instance.myHero.GetAllExp();
             Slider_Exp.value = PlayerManager.Instance.myHero.GetAllExp();
 
 
@@ -435,21 +434,28 @@ namespace Fort23.Mono
 
 
             Text_exp.text =
             Text_exp.text =
                 $"{(int)(PlayerManager.Instance.myHero.GetAllExp())}/{PlayerManager.Instance.myHero.powerUpConfig.levelUpExp}";
                 $"{(int)(PlayerManager.Instance.myHero.GetAllExp())}/{PlayerManager.Instance.myHero.powerUpConfig.levelUpExp}";
-
-            int miao = (int)((PlayerManager.Instance.myHero.powerUpConfig.levelUpExp -
-                              (PlayerManager.Instance.myHero.GetAllExp())) /
-                             PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei);
-            if (miao > 0)
+            if (PlayerManager.Instance.myHero.IsGuaijiShangXian())
             {
             {
-                Text_Speed.text = LanguageManager.Instance.Text(10230,
-                    PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei, PlayerManager.TimeToHSM(miao));
+                Text_Speed.text = LanguageManager.Instance.Text(10820);
             }
             }
             else
             else
             {
             {
-                Text_Speed.text = LanguageManager.Instance.Text(10266,
-                    PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei);
+                int miao = (int)((PlayerManager.Instance.myHero.powerUpConfig.levelUpExp -
+                                  (PlayerManager.Instance.myHero.GetAllExp())) /
+                                 PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei);
+                if (miao > 0)
+                {
+                    Text_Speed.text = LanguageManager.Instance.Text(10230,
+                        PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei, PlayerManager.TimeToHSM(miao));
+                }
+                else
+                {
+                    Text_Speed.text = LanguageManager.Instance.Text(10266,
+                        PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei);
+                }
             }
             }
 
 
+
             if (!fx_ui_tupo_loop.gameObject.activeSelf)
             if (!fx_ui_tupo_loop.gameObject.activeSelf)
             {
             {
                 if (PlayerManager.Instance.myHero.GetAllExp() >=
                 if (PlayerManager.Instance.myHero.GetAllExp() >=

+ 236 - 0
Assets/Scripts/GameUI/VersionChecker.cs

@@ -0,0 +1,236 @@
+using System;
+using System.IO;
+using System.Text;
+using Fort23.Core;
+using Fort23.GameData;
+using Fort23.UTool;
+using hirdParty.DownloadSystem;
+using ThirdParty;
+using ThirdParty.DownloadSystem;
+using UnityEngine;
+using UnityEngine.Networking;
+
+public class VersionChecker
+{
+    private string versionUrl;
+    string savePath;
+    private AssetMD5Info _assetMD5Info;
+    private VersionInfo versionInfo = null;
+
+
+    public async CTask<bool> Start()
+    {
+        versionUrl = $"{HotSyncContent.AssetURL}/version.json";
+        savePath = Path.Combine(Application.persistentDataPath, versionInfo.apkVersion + "update.apk");
+
+        versionInfo = await GetRemoteVersion();
+        string local = Application.version;
+
+        if (versionInfo != null && versionInfo.apkVersion != local)
+        {
+            return false;
+
+            // await GetMd5();
+            // if (!await Cheek())
+            // {
+            //     Debug.Log("检测到新版本,开始下载...");
+            //     await DownloadAndInstall();
+            // }
+        }
+
+        return true;
+    }
+
+
+    public void OpenOtherApp(string packageName)
+    {
+#if UNITY_ANDROID && !UNITY_EDITOR
+        try
+        {
+            AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+            AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
+
+            AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
+            AndroidJavaObject launchIntent =
+ packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", packageName);
+
+            if (launchIntent != null)
+            {
+                currentActivity.Call("startActivity", launchIntent);
+            }
+            else
+            {
+                Application.OpenURL("https://www.3839.com/a/189449.htm");
+                Debug.Log("应用未安装: " + packageName);
+            }
+        }
+        catch (System.Exception e)
+        {
+            Debug.Log("打开应用失败: " + e.Message);
+        }
+#endif
+    }
+
+    private async CTask GetMd5()
+    {
+        CTask cTask = CTask.Create();
+        DownloadFileData downloadFileData2 = new DownloadFileData();
+        downloadFileData2.remoteUrl = $"{HotSyncContent.AssetURL}/{versionInfo.apkVersion}/MD5.txt";
+        downloadFileData2.maxCount = int.MaxValue;
+        downloadFileData2.timeOut = 10;
+        DownloadHander downloadHander2 = FileDownloadSystem.Instance.DownloadFile(downloadFileData2);
+        DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
+        downLoadHanderGroup.AddHander(downloadHander2);
+        downLoadHanderGroup.OnCallBack = async delegate
+        {
+            if (downloadHander2.HttpDownloadBasic.DownloadHander.HttpDownloadBasic.Result() !=
+                UnityWebRequest.Result.Success)
+            {
+                LogTool.Warning("获取MD5失败,尝试重新获取");
+                await GetMd5();
+                cTask.SetResult();
+                return;
+            }
+
+            string json = UTF8Encoding.UTF8.GetString(downloadHander2.Data);
+            _assetMD5Info = JsonHelper.FromJson<AssetMD5Info>(json);
+            cTask.SetResult();
+        };
+
+        downLoadHanderGroup.StartUpdate();
+        await cTask;
+    }
+
+    private CTask<bool> Cheek()
+    {
+        CTask<bool> cheekTask = CTask<bool>.Create();
+        CheckFilePool _checkFileThrans = new CheckFilePool();
+        _checkFileThrans.isStreamingAssetsPath = false;
+        _checkFileThrans.streamingAssetsPath = Application.persistentDataPath;
+        _checkFileThrans.Start(Application.persistentDataPath,
+            _assetMD5Info.fileInfo);
+        _checkFileThrans.OnFinish = async delegate
+        {
+            //失败
+            if (_checkFileThrans.shiBaiFile.Count > 0)
+            {
+                cheekTask.SetResult(false);
+            }
+            else
+            {
+                cheekTask.SetResult(true);
+            }
+        };
+        return cheekTask;
+    }
+
+
+    private async CTask<VersionInfo> GetRemoteVersion()
+    {
+        UnityWebRequest req = UnityWebRequest.Get(versionUrl);
+        var s = req.SendWebRequest();
+        CTask cTask = CTask.Create();
+        s.completed += operation => cTask.SetResult();
+        await cTask;
+
+        if (req.result != UnityWebRequest.Result.Success)
+        {
+            LogTool.Error("版本号获取失败:" + req.error);
+            return await GetRemoteVersion();
+        }
+
+        var json = req.downloadHandler.text;
+        var data = JsonUtility.FromJson<VersionInfo>(json);
+        return data;
+    }
+
+    private async CTask DownloadAndInstall()
+    {
+        CTask cTask = CTask.Create();
+
+        Debug.Log("APK 下载路径:" + savePath);
+
+
+        DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
+        DownloadFileData downloadFileData = new DownloadFileData();
+        downloadFileData.remoteUrl = versionInfo.apkUrl;
+        Debug.Log("下载文件" + downloadFileData.remoteUrl);
+        downloadFileData.localPath = savePath;
+        DownloadHander fileDow = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
+
+        downLoadHanderGroup.AddHander(fileDow);
+
+        float m = downLoadHanderGroup.size / 1024f / 1024f;
+        float speed = fileDow.UnityWebRequestAsyncOperation.webRequest.downloadedBytes / 1024f;
+        LogTool.Log(
+            $"Downloading:   {m.ToString("0.00")}M / {_assetMD5Info.fileInfo[0].size.ToString("0.00")}M  speed {HotSyncContent.FormatSpeed(speed)}");
+
+        downLoadHanderGroup.OnCallBack = async () =>
+        {
+            if (fileDow.HttpDownloadBasic.DownloadHander.HttpDownloadBasic.Result() != UnityWebRequest.Result.Success)
+            {
+                await DownloadAndInstall();
+                cTask.SetResult();
+                return;
+            }
+
+            Debug.Log("APK 下载成功");
+            if (!await Cheek())
+            {
+                LogTool.Warning("md5对比失败,重新下载");
+                await DownloadAndInstall();
+                return;
+            }
+
+
+            InstallAPK(savePath);
+            cTask.SetResult();
+        };
+        downLoadHanderGroup.StartUpdate();
+        await cTask;
+    }
+
+    static void InstallAPK(string apkPath)
+    {
+#if UNITY_ANDROID
+        try
+        {
+            AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+            AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
+
+            AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
+            AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent");
+
+            string ACTION_VIEW = intentClass.GetStatic<string>("ACTION_VIEW");
+            intent.Call<AndroidJavaObject>("setAction", ACTION_VIEW);
+
+            AndroidJavaClass fileClass = new AndroidJavaClass("java.io.File");
+            AndroidJavaObject fileObj = new AndroidJavaObject("java.io.File", apkPath);
+
+            AndroidJavaClass uriClass = new AndroidJavaClass("androidx.core.content.FileProvider");
+            AndroidJavaObject context = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
+            AndroidJavaObject uri = uriClass.CallStatic<AndroidJavaObject>("getUriForFile",
+                context,
+                "com.yourgame.fileprovider",
+                fileObj);
+
+            intent.Call<AndroidJavaObject>("setDataAndType", uri, "application/vnd.android.package-archive");
+            intent.Call<AndroidJavaObject>("addFlags", 1 << 25); // FLAG_GRANT_READ_URI_PERMISSION
+            intent.Call<AndroidJavaObject>("addFlags", 1 << 31); // FLAG_ACTIVITY_NEW_TASK
+
+            currentActivity.Call("startActivity", intent);
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError("安装 APK 出错:" + ex.Message);
+        }
+#endif
+    }
+}
+
+[Serializable]
+public class VersionInfo
+{
+    public string apkVersion;
+    public string apkUrl;
+}

+ 11 - 0
Assets/Scripts/GameUI/VersionChecker.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: CX0etX/5AigsqZI2j0FijXKKnnU33xgqolTNgYgbmuUBga78Dnfh6GOUuLQz
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

File diff suppressed because it is too large
+ 0 - 0
Assets/StreamingAssets/assetConfig.txt


二進制
Excel2Json/Excel/EventConfig.xlsx


二進制
Excel2Json/Excel/Language.xlsx


二進制
Excel2Json/Excel/Sentiment.xlsx


Some files were not shown because too many files changed in this diff