hch
2025-12-04 7ceccc591077b348613dcd1880408b82e2a183d4
0312 分包下载初版
12个文件已修改
4个文件已添加
738 ■■■■■ 已修改文件
Main/Config/ConfigManager.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/priorbundleConfig.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/PartialConfigs/PriorBundleConfig.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA319_tagMCPackDownloadRecord.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA319_tagMCPackDownloadRecord.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA319_tagMCPackDownloadRecord.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/AssetVersion.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/AssetVersionUtility.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/DownLoadAndDiscompressHotTask.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/InGameDownLoad.cs 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/InGameDownLoadProgress.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/InGameDownLoadProgress.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/AssetVersion/InGameDownLoadWin.cs 357 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/GeneralConfig/GeneralDefine.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossManager.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/ConfigManager.cs
@@ -70,6 +70,7 @@
            typeof(OrderInfoConfig),
            typeof(PlayerAttrConfig),
            typeof(PlayerFaceConfig),
            typeof(PriorBundleConfig),
            typeof(RandomNameConfig),
            typeof(SignInConfig),
            typeof(StoreConfig),
@@ -296,6 +297,8 @@
        ClearConfigDictionary<PlayerAttrConfig>();
        // 清空 PlayerFaceConfig 字典
        ClearConfigDictionary<PlayerFaceConfig>();
        // 清空 PriorBundleConfig 字典
        ClearConfigDictionary<PriorBundleConfig>();
        // 清空 RandomNameConfig 字典
        ClearConfigDictionary<RandomNameConfig>();
        // 清空 SignInConfig 字典
Main/Config/Configs/priorbundleConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           2025年9月11日
//    [  Date ]:           Thursday, December 4, 2025
//--------------------------------------------------------
using System.Collections.Generic;
@@ -20,7 +20,6 @@
    public string AssetABName;
    public int AssetType;
    public int Prior;
    public int mapId;
    public override int LoadKey(string _key)
    {
@@ -39,8 +38,6 @@
            int.TryParse(tables[2],out AssetType); 
            int.TryParse(tables[3],out Prior); 
            int.TryParse(tables[4],out mapId);
        }
        catch (Exception exception)
        {
Main/Config/PartialConfigs/PriorBundleConfig.cs
@@ -55,8 +55,6 @@
        switch (category)
        {
            case AssetVersion.AssetCategory.Scene:
                if (fileName == "Map139_Zxt".ToLower())
                    return 0;
                return m_Scenes.ContainsKey(fileName) ? m_Scenes[fileName].Prior : 100;
            case AssetVersion.AssetCategory.Mob:
                return m_Mobs.ContainsKey(fileName) ? m_Mobs[fileName].Prior : 101;
@@ -66,57 +64,35 @@
                return m_Audios.ContainsKey(fileName) ? m_Audios[fileName].Prior : 103;
            case AssetVersion.AssetCategory.Video:
                return m_Video.ContainsKey(fileName) ? m_Video[fileName].Prior : 104;
//             case AssetVersion.AssetCategory.UI:
//                 {
// #if UNITY_EDITOR
//                     if (m_UI.ContainsKey(fileName))
//                     {
//                         //有配置的优先级为1的 也不包含在包内
//                         if (Launch.GetLaunchStage() != 0)
//                         {
//                             return m_UI[fileName].Prior;
//                         }
//                         else
//                         {
//                             return 2;
//                         }
//                     }
//                     return 0;
// #else
//                     return 0;
                    //return m_UI.ContainsKey(fileName) ? m_UI[fileName].Prior : 0;
// #endif
                // }
            default:
                return 0;
        }
    }
    //获取资源归属的地图id
    public static int GetAssetBelongToMap(AssetVersion.AssetCategory category, string fileName)
    {
        if (!categoryInited)
        {
            Init();
        }
    // //获取资源归属的地图id
    // public static int GetAssetBelongToMap(AssetVersion.AssetCategory category, string fileName)
    // {
    //     if (!categoryInited)
    //     {
    //         Init();
    //     }
        fileName = fileName.ToLower();
        switch (category)
        {
            case AssetVersion.AssetCategory.Scene:
                return m_Scenes.ContainsKey(fileName) ? m_Scenes[fileName].mapId : 0;
            case AssetVersion.AssetCategory.Mob:
                return m_Mobs.ContainsKey(fileName) ? m_Mobs[fileName].mapId : 0;
            case AssetVersion.AssetCategory.Effect:
                return m_Effects.ContainsKey(fileName) ? m_Effects[fileName].mapId : 0;
            case AssetVersion.AssetCategory.Audio:
                return m_Audios.ContainsKey(fileName) ? m_Audios[fileName].mapId : 0;
            default:
                return 0;
        }
    }
    //     fileName = fileName.ToLower();
    //     switch (category)
    //     {
    //         case AssetVersion.AssetCategory.Scene:
    //             return m_Scenes.ContainsKey(fileName) ? m_Scenes[fileName].mapId : 0;
    //         case AssetVersion.AssetCategory.Mob:
    //             return m_Mobs.ContainsKey(fileName) ? m_Mobs[fileName].mapId : 0;
    //         case AssetVersion.AssetCategory.Effect:
    //             return m_Effects.ContainsKey(fileName) ? m_Effects[fileName].mapId : 0;
    //         case AssetVersion.AssetCategory.Audio:
    //             return m_Audios.ContainsKey(fileName) ? m_Audios[fileName].mapId : 0;
    //         default:
    //             return 0;
    //     }
    // }
}
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA319_tagMCPackDownloadRecord.cs
New file
@@ -0,0 +1,12 @@
using UnityEngine;
using System.Collections;
// A3 19 分包下载奖励记录 #tagMCPackDownloadRecord
public class DTCA319_tagMCPackDownloadRecord : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA319_tagMCPackDownloadRecord vNetData = vNetPack as HA319_tagMCPackDownloadRecord;
        InGameDownLoad.Instance.UpdateRewardInfo(vNetData);
    }
}
Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA319_tagMCPackDownloadRecord.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f8147ca59895aeb4b8cece6552fcdc46
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/ServerPack/HA3_Function/HA319_tagMCPackDownloadRecord.cs
@@ -1,17 +1,17 @@
using UnityEngine;
using System.Collections;
// A3 19 分包下载奖励记录 #tagMCPackDownloadRecord
public class HA319_tagMCPackDownloadRecord : GameNetPackBasic {
    public byte Record;    //0-未领取 1-已领取
    public HA319_tagMCPackDownloadRecord () {
        _cmd = (ushort)0xA319;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out Record, vBytes, NetDataType.BYTE);
    }
}
// A3 19 分包下载奖励记录 #tagMCPackDownloadRecord
public class HA319_tagMCPackDownloadRecord : GameNetPackBasic {
    public byte Record;    // 0-未领取 1-已领取
    public HA319_tagMCPackDownloadRecord () {
        _cmd = (ushort)0xA319;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out Record, vBytes, NetDataType.BYTE);
    }
}
Main/System/AssetVersion/AssetVersion.cs
@@ -185,9 +185,8 @@
            else
            {
                var category = GetAssetCategory();
                // var prior = PriorBundleConfig.GetAssetPrior(category, AssetVersionUtility.DecodeFileName(m_FileName));
                // return prior <= 1;
                return false;
                var prior = PriorBundleConfig.GetAssetPrior(category, AssetVersionUtility.DecodeFileName(m_FileName));
                return prior <= 1;
            }
        }
        else
Main/System/AssetVersion/AssetVersionUtility.cs
@@ -101,6 +101,7 @@
        {
            assetVersionsLocalMd5 = FileExtersion.GetStringMD5Hash(_result);
            var assetVersions = UpdateAssetVersions(_result);
            PriorBundleConfig.LazyInit();
            BeginCheckAssets();
        }
        else
Main/System/AssetVersion/DownLoadAndDiscompressHotTask.cs
@@ -87,10 +87,7 @@
        step = Step.DownLoad;
        Co_StartDownLoad().Forget();
        // SnxxzGame.Instance.StartCoroutine(Co_StartDownLoad());
        // TODO YYL
        // GameNotice.OpenGameNotice();
        GameNotice.OpenGameNotice();
    }
    protected async UniTask Co_StartDownLoad()
Main/System/AssetVersion/InGameDownLoad.cs
@@ -3,6 +3,7 @@
using UnityEngine;
using System;
using System.Text.RegularExpressions;
using LitJson;
public class InGameDownLoad : SingletonMonobehaviour<InGameDownLoad>
@@ -79,7 +80,7 @@
        }
    }
    public List<Reward> rewards = new List<Reward>();
    public int[][] rewards;
    public bool hasReward { get; private set; }//是否有奖励
    public string completeDownLoadAccount
    {
@@ -87,7 +88,7 @@
        set { LocalSave.SetString("InGameDownLoadCompleteAccount", value); }
    }
    public Redpoint downLoadRedpoint = new Redpoint(116);
    public Redpoint downLoadRedpoint = new Redpoint(MainRedDot.RedPoint_Download);
    private void Awake()
    {
@@ -151,16 +152,7 @@
        {
            var assetVersion = this.assets[i];
            totalSize += assetVersion.size;//统计资源总大小
            //统计地图专属的资源 TODO YYL
            // var mapId = PriorBundleConfig.GetAssetBelongToMap(assetVersion.GetAssetCategory(), AssetVersionUtility.DecodeFileName(assetVersion.fileName));
            // if (mapId != 0)
            // {
            //     if (!mapTasks.ContainsKey(mapId))
            //     {
            //         mapTasks[mapId] = new List<AssetVersion>();
            //     }
            //     mapTasks[mapId].Add(assetVersion);
            // }
            //添加下载任务
            var remoteURL = StringUtility.Contact(VersionUtility.Instance.versionInfo.GetResourcesURL(VersionConfig.Get().branch), Language.fixPath, "/", assetVersion.relativePath);
            var localURL = StringUtility.Contact(ResourcesPath.Instance.ExternalStorePath, assetVersion.relativePath);
@@ -179,15 +171,14 @@
        var categoryA = lhs.GetAssetCategory();
        var categoryB = rhs.GetAssetCategory();
        // TODO YYL
        // var priorA = PriorBundleConfig.GetAssetPrior(categoryA, AssetVersionUtility.DecodeFileName(lhs.fileName));
        // var priorB = PriorBundleConfig.GetAssetPrior(categoryB, AssetVersionUtility.DecodeFileName(rhs.fileName));
        var priorA = PriorBundleConfig.GetAssetPrior(categoryA, AssetVersionUtility.DecodeFileName(lhs.fileName));
        var priorB = PriorBundleConfig.GetAssetPrior(categoryB, AssetVersionUtility.DecodeFileName(rhs.fileName));
        // if (priorA != priorB)
        // {
        //     return priorA < priorB ? -1 : 1;
        // }
        // else
        if (priorA != priorB)
        {
            return priorA < priorB ? -1 : 1;
        }
        else
        {
            var isManifestA = lhs.extersion == ".manifest";
            var isManifestB = rhs.extersion == ".manifest";
@@ -265,7 +256,7 @@
                    state = State.Prepared;
                }
                dominantState = Dominant.Whole;
                // UIManager.Instance.OpenWindow<InGameDownLoadWin>();
                UIManager.Instance.OpenWindow<InGameDownLoadWin>();
                break;
        }
    }
@@ -314,7 +305,7 @@
        {
            if (dominantState == Dominant.None)
            {
                RequestDownLoadReward(false);
                // RequestDownLoadReward(false);
                state = State.Completed;
            }
            else
@@ -340,11 +331,9 @@
    public void ParseRewardConfig()
    {
        var rewardString = FuncConfigConfig.Get("DownReward").Numerical1;
        var matches = Regex.Matches(rewardString, "(\\d+,\\d+,\\d+)");
        for (int i = 0; i < matches.Count; i++)
        if (rewards.IsNullOrEmpty())
        {
            rewards.Add(new Reward(matches[i].Value));
            rewards = JsonMapper.ToObject<int[][]>(FuncConfigConfig.Get("DownReward").Numerical1);
        }
    }
@@ -360,11 +349,11 @@
        downLoadRedpoint.state = state == State.Award ? RedPointState.Simple : RedPointState.None;
    }
    public void RequestDownLoadReward(bool _manual)
    public void RequestDownLoadReward()
    {
        var send = new CA504_tagCMPlayerGetReward();
        send.RewardType = 15;
        send.DataEx = (byte)(_manual ? 0 : 1);
        // send.DataEx = (byte)(_manual ? 0 : 1);
        GameNetSystem.Instance.SendInfo(send);
    }
@@ -667,26 +656,5 @@
        Whole = 2,
    }
    #region 登录下载界面 DownLoadWin
    // 增加下载奖励 根据标识决定多次发放;注意不要与游戏内的完整下载混淆
    // 后续改成appversion_new增加扩展信息返回下载标识,用于控制当前是否显示奖励,此处首包还未包含图片资源
    public int downloadMark = 0;
    public bool IsShowDownloadAward()
    {
        int downloadMark = 0;
        int.TryParse(VersionUtility.Instance.versionInfo.ResourceAward, out downloadMark);
        var mark = LocalSave.GetInt("downloadMark");
        return downloadMark > mark;
    }
    //下载完毕成功登录游戏即可设置
    public void SetDownloadMark()
    {
        LocalSave.SetInt("downloadMark", int.Parse(FuncConfigConfig.Get("DownReward").Numerical4));
    }
    #endregion
}
Main/System/AssetVersion/InGameDownLoadProgress.cs
New file
@@ -0,0 +1,144 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, May 23, 2018
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class InGameDownLoadProgress : MonoBehaviour
{
    [SerializeField] Text m_ProgressText;
    [SerializeField] Button m_ViewDownLoad;
    private void Awake()
    {
        if (!InGameDownLoad.Instance.hasReward
                && InGameDownLoad.Instance.completeDownLoadAccount == PlayerDatas.Instance.baseData.AccID)
        {
            m_ProgressText.SetActive(true);
            m_ProgressText.text = "100%";
            this.SetActive(true);
        }
        else if (InGameDownLoad.Instance.dominantState != InGameDownLoad.Dominant.None)
        {
            this.SetActive(true);
            m_ProgressText.SetActive(true);
            if (InGameDownLoad.Instance.state != InGameDownLoad.State.Completed)
            {
                m_ProgressText.text = "100%";
            }
            else
            {
                var progress = Mathf.RoundToInt(InGameDownLoad.Instance.progress * 100);
                m_ProgressText.text = StringUtility.Contact(progress, "%");
            }
        }
        else
        {
            this.SetActive(false);
        }
        InGameDownLoad.Instance.downLoadStateChangeEvent += OnDownLoadStateChange;
        InGameDownLoad.Instance.dominantDownLoadEvent += OnDownLoadDominantStateChange;
        m_ViewDownLoad.AddListener(OpenInGameDownloadWin);
    }
    private void OnEnable()
    {
        UpdateDownLoadProgress();
        GlobalTimeEvent.Instance.secondEvent += OnPerSecond;
    }
    private void OnDisable()
    {
        GlobalTimeEvent.Instance.secondEvent -= OnPerSecond;
    }
    private void OnDestroy()
    {
        m_ViewDownLoad.RemoveAllListeners();
    }
    private void OnDownLoadDominantStateChange(InGameDownLoad.Dominant _dominant)
    {
        UpdateDownLoadProgress();
        this.SetActive(InGameDownLoad.Instance.dominantState != InGameDownLoad.Dominant.None);
    }
    private void OnDownLoadStateChange(InGameDownLoad.State _step)
    {
        switch (_step)
        {
            case InGameDownLoad.State.Completed:
                this.SetActive(false);
                break;
            case InGameDownLoad.State.None:
            case InGameDownLoad.State.Prepared:
            case InGameDownLoad.State.DownLoad:
                if (InGameDownLoad.Instance.dominantState != InGameDownLoad.Dominant.None)
                {
                    UpdateDownLoadProgress();
                    this.SetActive(true);
                }
                else
                {
                    this.SetActive(false);
                }
                m_ProgressText.SetActive(true);
                break;
            case InGameDownLoad.State.Award:
                this.SetActive(true);
                m_ProgressText.SetActive(true);
                m_ProgressText.text = "100%";
                break;
        }
    }
    private void OnPerSecond()
    {
        UpdateDownLoadProgress();
    }
    private void UpdateDownLoadProgress()
    {
        if (m_ProgressText != null)
        {
            if (InGameDownLoad.Instance.state == InGameDownLoad.State.Award)
            {
                m_ProgressText.text = "100%";
            }
            else
            {
                var progress = Mathf.RoundToInt(InGameDownLoad.Instance.progress * 100);
                m_ProgressText.text = StringUtility.Contact(Mathf.Clamp(progress, 0, 99), "%");
            }
        }
    }
    private void OpenInGameDownloadWin()
    {
        switch (InGameDownLoad.Instance.state)
        {
            case InGameDownLoad.State.DownLoad:
            case InGameDownLoad.State.None:
            case InGameDownLoad.State.Pause:
            case InGameDownLoad.State.Prepared:
                UIManager.Instance.OpenWindow<InGameDownLoadWin>();
                break;
            case InGameDownLoad.State.Award:
                UIManager.Instance.OpenWindow<InGameDownLoadWin>();
                break;
            case InGameDownLoad.State.Completed:
                break;
        }
    }
}
Main/System/AssetVersion/InGameDownLoadProgress.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5cdfb6559ac6678419c11ea004a5dd19
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/AssetVersion/InGameDownLoadWin.cs
@@ -10,196 +10,205 @@
using UnityEngine.UI;
    public class InGameDownLoadWin : UIBase
public class InGameDownLoadWin : UIBase
{
    [SerializeField] RectTransform m_ContainerHint;
    [SerializeField] ItemCell[] items;
    [SerializeField] RectTransform[] m_RewardGotSigns;
    [SerializeField] RichText m_Content;
    [SerializeField] Button m_StartDownLoad;
    [SerializeField] Button m_PauseDownLoad;
    [SerializeField] Button m_Award;
    [SerializeField] Transform m_ContainerProgress;
    [SerializeField] SmoothSlider m_ProgressSlider;
    [SerializeField] Text m_Progress;
    [SerializeField] Text m_DownLoadSpeed;
    // [SerializeField] ToggleButton downLoadGo; //加速下载
    float timer = 1f;
    #region Built-in
    protected override void InitComponent()
    {
        [SerializeField] RectTransform m_RewardGotSign;
        // [SerializeField] RewardPreviewGroup m_RewardGroup;
        [SerializeField] RectTransform m_ContainerHint;
        [SerializeField] RichText m_Content;
        [SerializeField] Button m_StartDownLoad;
        [SerializeField] Button m_PauseDownLoad;
        [SerializeField] Button m_Award;
        [SerializeField] Button m_Close;
        m_StartDownLoad.AddListener(StartDownLoad);
        m_PauseDownLoad.AddListener(PauseDownLoad);
        m_Award.AddListener(Award);
        // downLoadGo.SetListener(() => {
        //     downLoadGo.isOn = !downLoadGo.isOn;
        //     InGameDownLoad.Instance.downLoadGo = downLoadGo.isOn;
        //     DownloadHotMgr.MaxDownLoadTask = InGameDownLoad.Instance.GetMaxTask();
        // });
    }
        [SerializeField] Transform m_ContainerProgress;
        [SerializeField] SmoothSlider m_ProgressSlider;
        [SerializeField] Text m_Progress;
        [SerializeField] Text m_DownLoadSpeed;
        [SerializeField] ToggleButton downLoadGo; //加速下载
        float timer = 1f;
        #region Built-in
        protected override void InitComponent()
    protected override void OnPreOpen()
    {
        InGameDownLoad.Instance.ParseRewardConfig();
        timer = 1f;
        for (int i = 0;  i < items.Length; i++)
        {
            m_StartDownLoad.AddListener(StartDownLoad);
            m_PauseDownLoad.AddListener(PauseDownLoad);
            m_Award.AddListener(Award);
            m_Close.AddListener(CloseWindow);
            downLoadGo.SetListener(() => {
                downLoadGo.isOn = !downLoadGo.isOn;
                InGameDownLoad.Instance.downLoadGo = downLoadGo.isOn;
                DownloadHotMgr.MaxDownLoadTask = InGameDownLoad.Instance.GetMaxTask();
            });
        }
        protected override void OnPreOpen()
        {
            timer = 1f;
            m_RewardGotSign.SetActive(InGameDownLoad.Instance.hasReward);
            // var items = new List<Item>();
            // foreach (var reward in InGameDownLoad.Instance.rewards)
            // {
            //     items.Add(new Item(reward.id, reward.count));
            // }
            // m_RewardGroup.Display(items);
            OnDownLoadStepChange(InGameDownLoad.Instance.state);
            downLoadGo.isOn = InGameDownLoad.Instance.downLoadGo;
        }
        protected override void OnOpen()
        {
            InGameDownLoad.Instance.downLoadStateChangeEvent += OnDownLoadStepChange;
        }
        protected override void OnPreClose()
        {
            InGameDownLoad.Instance.downLoadStateChangeEvent -= OnDownLoadStepChange;
        }
        protected override void OnClose()
        {
        }
        #endregion
        private void OnDownLoadStepChange(InGameDownLoad.State _step)
        {
            m_Award.SetActive(_step == InGameDownLoad.State.Award);
            m_PauseDownLoad.SetActive(_step == InGameDownLoad.State.DownLoad);
            m_StartDownLoad.SetActive(_step == InGameDownLoad.State.Prepared || _step == InGameDownLoad.State.Pause);
            m_ContainerProgress.SetActive(_step == InGameDownLoad.State.DownLoad || _step == InGameDownLoad.State.Pause);
            if (_step != InGameDownLoad.State.DownLoad)
            if (i < InGameDownLoad.Instance.rewards.Length)
            {
                m_DownLoadSpeed.text = string.Empty;
            }
            if (_step == InGameDownLoad.State.Prepared || _step == InGameDownLoad.State.Award)
            {
                m_ContainerHint.SetActive(true);
                DisplayHintContent();
                items[i].SetActive(true);
                int itemID = InGameDownLoad.Instance.rewards[i][0];
                items[i].Init(new ItemCellModel(InGameDownLoad.Instance.rewards[i][0], false, InGameDownLoad.Instance.rewards[i][1]));
                items[i].button.AddListener(() => {
                    ItemTipUtility.Show(itemID);
                });
                m_RewardGotSigns[i].SetActive(InGameDownLoad.Instance.hasReward);
            }
            else
            {
                m_ContainerHint.SetActive(false);
                items[i].SetActive(false);
            }
        }
        protected void LateUpdate()
        {
            var step = InGameDownLoad.Instance.state;
            if (step == InGameDownLoad.State.DownLoad)
            {
                timer += Time.deltaTime;
                if (timer > 1f)
                {
                    timer -= 1f;
                    m_ProgressSlider.value = InGameDownLoad.Instance.progress;
                    var totalSizeString = ((float)InGameDownLoad.Instance.showTotalSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1");
                    var downLoadedSize = Mathf.Clamp(InGameDownLoad.Instance.showDownLoadedSize, 0, InGameDownLoad.Instance.showTotalSize - 1);
                    var downLoadedSizeString = ((float)downLoadedSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1");
                    m_Progress.text = Language.GetFromLocal(13, StringUtility.Contact(downLoadedSizeString, "M", "/", totalSizeString, "M"));
        OnDownLoadStepChange(InGameDownLoad.Instance.state);
        // downLoadGo.isOn = InGameDownLoad.Instance.downLoadGo;
    }
                    if (InGameDownLoad.Instance.showDownLoadedSize >= InGameDownLoad.Instance.showTotalSize)
                    {
                        m_DownLoadSpeed.text = StringUtility.Contact(UnityEngine.Random.Range(5, 10), "KB/S");
                    }
                    else
                    {
                        m_DownLoadSpeed.text = DownloadHotMgr.Instance.SpeedFormat;
                    }
    protected override void OnOpen()
    {
        InGameDownLoad.Instance.downLoadStateChangeEvent += OnDownLoadStepChange;
    }
    protected override void OnPreClose()
    {
        InGameDownLoad.Instance.downLoadStateChangeEvent -= OnDownLoadStepChange;
    }
    protected override void OnClose()
    {
    }
    #endregion
    private void OnDownLoadStepChange(InGameDownLoad.State _step)
    {
        m_Award.SetActive(_step == InGameDownLoad.State.Award && !InGameDownLoad.Instance.hasReward);
        m_PauseDownLoad.SetActive(_step == InGameDownLoad.State.DownLoad);
        m_StartDownLoad.SetActive(_step == InGameDownLoad.State.Prepared || _step == InGameDownLoad.State.Pause);
        m_ContainerProgress.SetActive(_step == InGameDownLoad.State.DownLoad || _step == InGameDownLoad.State.Pause);
        if (_step != InGameDownLoad.State.DownLoad)
        {
            m_DownLoadSpeed.text = string.Empty;
        }
        if (_step == InGameDownLoad.State.Prepared || _step == InGameDownLoad.State.Award)
        {
            m_ContainerHint.SetActive(true);
            DisplayHintContent();
        }
        else
        {
            m_ContainerHint.SetActive(false);
        }
    }
    protected void LateUpdate()
    {
        var step = InGameDownLoad.Instance.state;
        if (step == InGameDownLoad.State.DownLoad)
        {
            timer += Time.deltaTime;
            if (timer > 1f)
            {
                timer -= 1f;
                m_ProgressSlider.value = InGameDownLoad.Instance.progress;
                var totalSizeString = ((float)InGameDownLoad.Instance.showTotalSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1");
                var downLoadedSize = Mathf.Clamp(InGameDownLoad.Instance.showDownLoadedSize, 0, InGameDownLoad.Instance.showTotalSize - 1);
                var downLoadedSizeString = ((float)downLoadedSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1");
                m_Progress.text = Language.GetFromLocal(13, StringUtility.Contact(downLoadedSizeString, "M", "/", totalSizeString, "M"));
                if (InGameDownLoad.Instance.showDownLoadedSize >= InGameDownLoad.Instance.showTotalSize)
                {
                    m_DownLoadSpeed.text = StringUtility.Contact(UnityEngine.Random.Range(5, 10), "KB/S");
                }
                else
                {
                    m_DownLoadSpeed.text = DownloadHotMgr.Instance.SpeedFormat;
                }
            }
        }
        private void DisplayHintContent()
        {
            var step = InGameDownLoad.Instance.state;
            switch (step)
            {
                case InGameDownLoad.State.Prepared:
                    var totalCount = InGameDownLoad.Instance.showTotalCount;
                    var totalSize = InGameDownLoad.Instance.showTotalSize;
                    if (totalSize > InGameDownLoad.BYTE_PER_MILLIONBYTE)
                    {
                        var sizeDescription = ((float)totalSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1");
                        m_Content.text = Language.GetFromLocal(19, sizeDescription);
                    }
                    else
                    {
                        var sizeDescription = ((float)totalSize / InGameDownLoad.BYTE_PER_KILOBYTE).ToString("f1");
                        m_Content.text = Language.GetFromLocal(20, sizeDescription);
                    }
                    break;
                case InGameDownLoad.State.DownLoad:
                    m_Content.text = Language.GetFromLocal(3);
                    break;
                case InGameDownLoad.State.Pause:
                    m_Content.text = Language.GetFromLocal(21);
                    break;
                case InGameDownLoad.State.Award:
                    m_Content.text = Language.GetFromLocal(25);
                    break;
            }
        }
        private void StartDownLoad()
        {
            timer = 1f;
            switch (InGameDownLoad.Instance.state)
            {
                case InGameDownLoad.State.Prepared:
                case InGameDownLoad.State.Pause:
                    if (Application.internetReachability == NetworkReachability.NotReachable)
                    {
                        ServerTipDetails.DisplayNormalTip(Language.GetFromLocal(24));
                    }
                    else
                    {
                        InGameDownLoad.Instance.StartDownLoad();
                        CloseWindow();
                    }
                    break;
                default:
                    CloseWindow();
                    break;
            }
        }
        private void PauseDownLoad()
        {
            timer = 1f;
            switch (InGameDownLoad.Instance.state)
            {
                case InGameDownLoad.State.DownLoad:
                    InGameDownLoad.Instance.Pause();
                    break;
                default:
                    break;
            }
        }
        private void Award()
        {
            InGameDownLoad.Instance.RequestDownLoadReward(true);
            UIManager.Instance.CloseWindow<InGameDownLoadWin>();
        }
    }
    private void DisplayHintContent()
    {
        var step = InGameDownLoad.Instance.state;
        switch (step)
        {
            case InGameDownLoad.State.Prepared:
                var totalCount = InGameDownLoad.Instance.showTotalCount;
                var totalSize = InGameDownLoad.Instance.showTotalSize;
                if (totalSize > InGameDownLoad.BYTE_PER_MILLIONBYTE)
                {
                    var sizeDescription = ((float)totalSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1");
                    m_Content.text = Language.GetFromLocal(19, sizeDescription);
                }
                else
                {
                    var sizeDescription = ((float)totalSize / InGameDownLoad.BYTE_PER_KILOBYTE).ToString("f1");
                    m_Content.text = Language.GetFromLocal(20, sizeDescription);
                }
                break;
            case InGameDownLoad.State.DownLoad:
                m_Content.text = Language.GetFromLocal(3);
                break;
            case InGameDownLoad.State.Pause:
                m_Content.text = Language.GetFromLocal(21);
                break;
            case InGameDownLoad.State.Award:
                m_Content.text = Language.GetFromLocal(25);
                break;
        }
    }
    private void StartDownLoad()
    {
        timer = 1f;
        switch (InGameDownLoad.Instance.state)
        {
            case InGameDownLoad.State.Prepared:
            case InGameDownLoad.State.Pause:
                if (Application.internetReachability == NetworkReachability.NotReachable)
                {
                    ServerTipDetails.DisplayNormalTip(Language.GetFromLocal(24));
                }
                else
                {
                    InGameDownLoad.Instance.StartDownLoad();
                    CloseWindow();
                }
                break;
            default:
                CloseWindow();
                break;
        }
    }
    private void PauseDownLoad()
    {
        timer = 1f;
        switch (InGameDownLoad.Instance.state)
        {
            case InGameDownLoad.State.DownLoad:
                InGameDownLoad.Instance.Pause();
                break;
            default:
                break;
        }
    }
    private void Award()
    {
        InGameDownLoad.Instance.RequestDownLoadReward();
        UIManager.Instance.CloseWindow<InGameDownLoadWin>();
    }
}
Main/System/GeneralConfig/GeneralDefine.cs
@@ -23,8 +23,7 @@
    public static int rechargeRedpointMinLv { get; private set; }
    
    public static List<int> inGameDownLoadLevelCheckPoints = null;
    public static List<int> inGameDownLoadTaskCheckPoints = null;
    public static List<int> inGameDownLoadLevelCheckPoints = new List<int>();
    public static int inGameDownLoadHighLevel { get; private set; }
    
    public static Dictionary<int, List<int>> itemPutInPackDict { get; private set; }
@@ -84,6 +83,9 @@
            config = FuncConfigConfig.Get("MainRightFunc");
            mainRightFuncOpenFuncID = int.Parse(config.Numerical1);
            inGameDownLoadLevelCheckPoints = new List<int>(GetIntArray("InGameDownLoad"));
            inGameDownLoadHighLevel = GetInt("InGameDownLoad", 2);
        }
        catch (Exception ex)
        {
Main/System/Guild/GuildBossManager.cs
@@ -1,8 +1,14 @@
using System.Collections.Generic;
using LitJson;
public class GuildBossManager : GameSystemManager<GuildBossManager>
{
    public Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction> bossActions = new Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction>();
    //配置
    public int initSuperHitRate;
    public int[] bzAddAttrs;
@@ -81,7 +87,6 @@
        return null;
    }
    // 获取公会中的伤害记录做排名
    public bool UpdateGuildBossInfo(HA513_tagMCFamilyActionInfo vNetData)
    {
@@ -90,6 +95,12 @@
            return false;
        }
        for (int i = 0; i < vNetData.Count; i++)
        {
            bossActions[(int)vNetData.FamilyActionList[i].Value1] = vNetData.FamilyActionList[i];
        }
        return true;
    }
Main/System/Redpoint/MainRedDot.cs
@@ -71,7 +71,8 @@
    public const int RedPoint_AutoBattleKey = 110;
    Redpoint autoBattleRedpoint = new Redpoint(RedPoint_AutoBattleKey);
    public const int RedPoint_Download = 116;
    //武将卡
    public const int HeroCardRedpoint = 200;
    public Redpoint HeroListRedpoint = new Redpoint(MainHerosRedpoint, HeroCardRedpoint);