Forráskód Böngészése

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

# Conflicts:
#	Assets/StreamingAssets/assetConfig.txt   resolved by origin/master(远端) version
DESKTOP-BGJIU14\ck 2 napja
szülő
commit
b240a65a3b

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -106,6 +106,12 @@ namespace GameLogic.Hero
             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()
         {
             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,
         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("开始游戏逻辑");
         HotSyncContent.DownloadUI = gameStartUIPanel;
         this.LoadFinish = LoadFinish;

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

@@ -109,7 +109,7 @@ namespace Fort23.Mono
                     TipMessagePanel.OpenTipMessagePanel(10810);
                     return;
                 }
-                
+
                 if (PlayerManager.Instance.myHero.GetAllExp() <
                     PlayerManager.Instance.myHero.powerUpConfig.levelUpExp)
                 {
@@ -192,7 +192,6 @@ namespace Fort23.Mono
             ClosePool();
 
 
-
             Slider_Exp.maxValue = PlayerManager.Instance.myHero.powerUpConfig.levelUpExp;
             Slider_Exp.value = PlayerManager.Instance.myHero.GetAllExp();
 
@@ -435,21 +434,28 @@ namespace Fort23.Mono
 
             Text_exp.text =
                 $"{(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
             {
-                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 (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: 

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
Assets/StreamingAssets/assetConfig.txt


BIN
Excel2Json/Excel/EventConfig.xlsx


BIN
Excel2Json/Excel/Language.xlsx


BIN
Excel2Json/Excel/Sentiment.xlsx


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott