少年修仙传客户端代码仓库
hch
2023-10-16 cfdd99036f324b4fb0eacfd79b3d3f6606061fb0
9930 子 【BT0.1】【主干】境界修改 / 【BT0.1】【主干】境界修改
13个文件已修改
2个文件已添加
873 ■■■■ 已修改文件
Core/GameEngine/Model/Config/RealmXXZLConfig.cs 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/RealmXXZLConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonData.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/PersonalBossModel.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/WorldBossModel.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/FunctionForecastTip.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/MainInterfaceWin.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainWin/MainWinTopGrid.cs 284 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmModel.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmWin.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasureModel.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Decorate/Tweens/UIAlphaTween.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/RealmXXZLConfig.cs
New file
@@ -0,0 +1,211 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           2023年10月14日
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
public partial class RealmXXZLConfig
{
    public readonly int TaskID;
    public readonly int TaskType;
    public readonly int NeedValue;
    public readonly string AwardItemList;
    public readonly string Desc;
    public RealmXXZLConfig()
    {
    }
    public RealmXXZLConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out TaskID);
            int.TryParse(tables[1],out TaskType);
            int.TryParse(tables[2],out NeedValue);
            AwardItemList = tables[3];
            Desc = tables[4];
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, RealmXXZLConfig> configs = new Dictionary<string, RealmXXZLConfig>();
    public static RealmXXZLConfig Get(string id)
    {
        if (!inited)
        {
            Debug.Log("RealmXXZLConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        RealmXXZLConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new RealmXXZLConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
    public static RealmXXZLConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<RealmXXZLConfig> GetValues()
    {
        var values = new List<RealmXXZLConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        for (int i = 0; i < keys.Count; i++)
        {
            values.Add(Get(keys[i]));
        }
        return values;
    }
    public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool Has(int id)
    {
        return Has(id.ToString());
    }
    public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/RealmXXZL.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/RealmXXZL.txt");
        }
        configs.Clear();
        var tempConfig = new RealmXXZLConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
                try
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
                        continue;
                    }
                    var id = line.Substring(0, index);
                    if (preParse)
                    {
                        var config = new RealmXXZLConfig(line);
                        configs[id] = config;
                        (config as IConfigPostProcess).OnConfigParseCompleted();
                    }
                    else
                    {
                        rawDatas[id] = line;
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                if (!preParse)
                {
                    rawDatas = new Dictionary<string, string>(lines.Length - 3);
                }
                for (int i = 3; i < lines.Length; i++)
                {
                    try
                    {
                       var line = lines[i];
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
                            continue;
                        }
                        var id = line.Substring(0, index);
                        if (preParse)
                        {
                            var config = new RealmXXZLConfig(line);
                            configs[id] = config;
                            (config as IConfigPostProcess).OnConfigParseCompleted();
                        }
                        else
                        {
                            rawDatas[id] = line;
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
Core/GameEngine/Model/Config/RealmXXZLConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 10d3a4534c4e2af4d815a55968f34373
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs
@@ -29,6 +29,7 @@
                case 0:
                    worldBossModel.wearyValue = (int)info.KillCnt;
                    worldBossModel.extraBossWearyValue = (int)info.ItemAddCnt;
                    worldBossModel.killCntTotal = (int)info.KillCntTotal;
                    break;
                case 1:
                    bossHomeModel.wearyValue = (int)info.KillCnt;
System/Dungeon/DungeonData.cs
@@ -254,6 +254,7 @@
        public int extraTimes { get; private set; }           //使用物品增加的额外次数
        public int recoverTimes { get; private set; }        //找回次数
        public Dictionary<int, int> lineGrades;             //副本线路对应星级值列表
        public int enterCntTotal { get; private set; }        //找回次数
        public DungeonRecord(HA320_tagMCPlayerFBInfoData.tagMCFBInfo _serverInfo)
        {
@@ -295,6 +296,7 @@
                    this.lineGrades[i * 9 + j] = (tempValue % b) / a;
                }
            }
            this.enterCntTotal = (int)_serverInfo.EnterCntTotal;
        }
        public void UpdateRecord(HA3BD_tagMCBuyEnterInfo.tagMCBuyInfo _serverInfo)
System/Dungeon/DungeonModel.cs
@@ -283,6 +283,19 @@
            }
        }
        public int GetAllEnterTimes(int _dataMapId)
        {
            DungeonRecord record;
            if (TryGetRecord(_dataMapId, out record))
            {
                return record.enterCntTotal;
            }
            else
            {
                return 0;
            }
        }
        public int GetBuyTimesLimit(int _dataMapId)
        {
            var config = DungeonOpenTimeConfig.Get(_dataMapId);
System/FindPrecious/PersonalBossModel.cs
@@ -300,6 +300,20 @@
            }
            return false;
        }
        //是否通关过
        public bool IsFBPass(int lineId)
        {
            DungeonRecord dungeonRecord;
            if (dungeonModel.TryGetRecord(PERSONALBOSS_MAPID, out dungeonRecord))
            {
                if (dungeonRecord.lineGrades.ContainsKey(lineId) && dungeonRecord.lineGrades[lineId] != 0)
                {
                    return true;
                }
            }
            return false;
        }
    }
    public class PersonalBossData
System/FindPrecious/WorldBossModel.cs
@@ -58,6 +58,8 @@
            }
        }
        public int killCntTotal;
        public bool funcOpenClickSymbol {
            get { return LocalSave.GetBool("WorldBossClickSymbol_" + PlayerDatas.Instance.PlayerId); }
            set {
System/MainInterfacePanel/FunctionForecastTip.cs
@@ -22,8 +22,13 @@
        [SerializeField] Text _NameText;//标题名
        [SerializeField] Text _Information;//信息内容
        [SerializeField] Text m_Information_reward;//有奖励可领取
        [SerializeField] ButtonEx xxzlBtn;//修仙之路按钮
        [SerializeField] Text xxzlTxt;//修仙之路进度
        [SerializeField] UIEffect xxzlEffect;//修仙之路特效
        public static Action<int> FunctionOpenTagEvent;
        FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel<FeatureNoticeModel>(); } }
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        public void Init()//初始化
        {
            PlayerDatas.Instance.playerDataRefreshEvent += OnPlayersUpLV;
@@ -64,6 +69,24 @@
        List<FunctionForecastConfig> configs = new List<FunctionForecastConfig>();
        void DataAssignment()
        {
            if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Realm) || realmModel.IsRealmXXZLOver())
            {
                xxzlBtn.SetActive(false);
            }
            else
            {
                xxzlBtn.SetActive(true);
                xxzlBtn.AddListener(() =>
                {
                    WindowCenter.Instance.Open<RealmWin>();
                });
                xxzlTxt.text = realmModel.GetXXZLProcess() + "/" + RealmXXZLConfig.GetKeys().Count;
                if (realmModel.xxzlRedpoint.state == RedPointState.Simple)
                    xxzlEffect.Play();
                else
                    xxzlEffect.Stop();
            }
            if (FuncOpen.Instance.IsFuncOpen(OpenTag))
            {
                _FunctionForecastPanel.SetActive(false);
@@ -100,8 +123,9 @@
            {
                _FunctionForecastPanel.SetActive(true);
                _FunctionIcon.SetSprite("PersonBossIcon");
                m_Information_reward.SetActive(true);
                _NameText.SetActive(false);
                m_Information_reward.SetActive(false);
                _NameText.SetActive(true);
                _NameText.text = Language.Get("Z1043");
                _Information.SetActive(false);
            }
            else
@@ -117,7 +141,7 @@
            _FunctionForecastPanel.SetActive(true);
            m_Information_reward.SetActive(false);
            _NameText.SetActive(true);
            _Information.SetActive(true);
            _Information.SetActive(false);
            _FunctionIcon.SetSprite(FunctionForecastConfig.Get(ID).FuncIconKey);
            _NameText.text = FunctionForecastConfig.Get(ID).Describe;
            _Information.text= FunctionForecastConfig.Get(ID).OpenDescribe;
System/MainInterfacePanel/MainInterfaceWin.cs
@@ -92,7 +92,7 @@
            SliderOpen = true;
            m_SkillContainer.Init();
            m_FunctionForecastTip.Init();
            m_HeadPortraitTip.Init();
            m_LowSettingTip.Init();
            m_ChatTip.Init();
@@ -180,6 +180,7 @@
        protected override void OnAfterOpen()
        {
            m_FunctionForecastTip.Init();
            m_HighSettingTip.AfterOpen();
            m_ChatTip.OnAfterOpen();
            HandleAchievement();
System/MainWin/MainWinTopGrid.cs
@@ -1,136 +1,148 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, March 28, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
namespace Snxxz.UI
{
    public class MainWinTopGrid : MonoBehaviour
    {
        [SerializeField] bool m_AlwayShow;
        // 配置逻辑参考 IsOpen 函数
        [SerializeField] int m_FunctionId;
        [SerializeField] int m_ActivityType = 0;    //活动模板
        [SerializeField] int m_OpenServerActivityType = 100;
        [SerializeField] bool m_IsAnyOpenServerActivity = false;
        [SerializeField] Operation m_OperationActivityType = Operation.max;
        [SerializeField] RectTransform m_Content;
        [SerializeField] CanvasGroup m_CanvasGroup;
        [SerializeField] IsPlayerUIeffect m_IsPlayerUIeffect;
        public RectTransform rectTransform { get { return this.transform as RectTransform; } }
        public bool alwayShow { get { return m_AlwayShow; } }
        float targetY = 0f;
        float targetAlpha = 0f;
        public void Switch(bool active, float offset, float delay)
        {
            if (m_AlwayShow)
            {
                return;
            }
            targetY = active ? 0 : (120f + offset);
            targetAlpha = active ? 1f : 0f;
            if (active)
            {
                m_Content.DOLocalMoveY(targetY, 0.3f).SetDelay(delay).SetEase(Ease.OutSine).OnComplete(PlayerUIEffect);
            }
            else
            {
                m_Content.DOLocalMoveY(targetY, 0.3f).SetDelay(delay).SetEase(Ease.InSine).OnStart(StopUIEffect);
            }
            m_CanvasGroup.DOFade(targetAlpha, 0.3f).SetDelay(delay).SetEase(active ? Ease.OutSine : Ease.InSine);
            m_CanvasGroup.blocksRaycasts = active;
        }
        public void SwitchImmediately(bool active, float offset)
        {
            if (m_AlwayShow)
            {
                return;
            }
            targetY = active ? 0 : (120f + offset);
            targetAlpha = active ? 1f : 0f;
            m_Content.anchoredPosition = m_Content.anchoredPosition.SetY(targetY);
            m_CanvasGroup.alpha = targetAlpha;
            m_CanvasGroup.blocksRaycasts = active;
            if (active)
            {
                PlayerUIEffect();
            }
            else
            {
                StopUIEffect();
            }
        }
        public bool IsOpen()
        {
            if (m_FunctionId > 0)
            {
                if (m_FunctionId == 130)
                {
                    return ILRuntimeUtility.Instance.ModelInvoke<bool>("NeedForWhiteModel", "IsOpen");
                }
                else if (m_FunctionId == 193)
                {
                    return ILRuntimeUtility.Instance.ModelInvoke<bool>("OnlineRechargeModel", "IsOpen") &&
                        !ILRuntimeUtility.Instance.ModelInvoke<bool>("OnlineRechargeModel", "IsBottomButtonOpen");
                }
                return FuncOpen.Instance.IsFuncOpen(m_FunctionId);
            }
            //默认100为不判定
            if (m_OpenServerActivityType != 100)
            {
                return OpenServerActivityCenter.Instance.IsActivityOpen(m_OpenServerActivityType, m_ActivityType);
            }
            if (m_IsAnyOpenServerActivity)
            {
                var functionOrder = 0;
                return OpenServerActivityCenter.Instance.IsAnyActivityOpen(out functionOrder, m_ActivityType);
            }
            if (m_OperationActivityType != Operation.max)
            {
                return OperationTimeHepler.Instance.SatisfyOpenCondition(m_OperationActivityType);
            }
            return false;
        }
        private void PlayerUIEffect()
        {
            if (m_IsPlayerUIeffect != null)
            {
                m_IsPlayerUIeffect.StartPlayUIEffect();
            }
        }
        private void StopUIEffect()
        {
            if (m_IsPlayerUIeffect != null)
            {
                m_IsPlayerUIeffect.ObtainPlayUIEffect();
            }
        }
    }
}
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, March 28, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
namespace Snxxz.UI
{
    public class MainWinTopGrid : MonoBehaviour
    {
        [SerializeField] bool m_AlwayShow;
        // 配置逻辑参考 IsOpen 函数
        [SerializeField] int m_FunctionId;
        [SerializeField] int m_ActivityType = 0;    //活动模板
        [SerializeField] int m_OpenServerActivityType = 100;
        [SerializeField] bool m_IsAnyOpenServerActivity = false;
        [SerializeField] Operation m_OperationActivityType = Operation.max;
        [SerializeField] RectTransform m_Content;
        [SerializeField] CanvasGroup m_CanvasGroup;
        [SerializeField] IsPlayerUIeffect m_IsPlayerUIeffect;
        TreasureFindHostModel treasureFindHostModel
        {
            get { return ModelCenter.Instance.GetModel<TreasureFindHostModel>(); }
        }
        public RectTransform rectTransform { get { return this.transform as RectTransform; } }
        public bool alwayShow { get { return m_AlwayShow; } }
        float targetY = 0f;
        float targetAlpha = 0f;
        public void Switch(bool active, float offset, float delay)
        {
            if (m_AlwayShow)
            {
                return;
            }
            targetY = active ? 0 : (120f + offset);
            targetAlpha = active ? 1f : 0f;
            if (active)
            {
                m_Content.DOLocalMoveY(targetY, 0.3f).SetDelay(delay).SetEase(Ease.OutSine).OnComplete(PlayerUIEffect);
            }
            else
            {
                m_Content.DOLocalMoveY(targetY, 0.3f).SetDelay(delay).SetEase(Ease.InSine).OnStart(StopUIEffect);
            }
            m_CanvasGroup.DOFade(targetAlpha, 0.3f).SetDelay(delay).SetEase(active ? Ease.OutSine : Ease.InSine);
            m_CanvasGroup.blocksRaycasts = active;
        }
        public void SwitchImmediately(bool active, float offset)
        {
            if (m_AlwayShow)
            {
                return;
            }
            targetY = active ? 0 : (120f + offset);
            targetAlpha = active ? 1f : 0f;
            m_Content.anchoredPosition = m_Content.anchoredPosition.SetY(targetY);
            m_CanvasGroup.alpha = targetAlpha;
            m_CanvasGroup.blocksRaycasts = active;
            if (active)
            {
                PlayerUIEffect();
            }
            else
            {
                StopUIEffect();
            }
        }
        public bool IsOpen()
        {
            if (m_FunctionId > 0)
            {
                if (m_FunctionId == 130)
                {
                    return ILRuntimeUtility.Instance.ModelInvoke<bool>("NeedForWhiteModel", "IsOpen");
                }
                else if (m_FunctionId == 193)
                {
                    return ILRuntimeUtility.Instance.ModelInvoke<bool>("OnlineRechargeModel", "IsOpen") &&
                        !ILRuntimeUtility.Instance.ModelInvoke<bool>("OnlineRechargeModel", "IsBottomButtonOpen");
                }
                else if (m_FunctionId == 124 && FuncOpen.Instance.IsFuncOpen(m_FunctionId))
                {
                    //仙宝寻主已经全部获取
                    if (treasureFindHostModel.CheckTreasureFindHostFinish())
                        return false;
                    return true;
                }
                return FuncOpen.Instance.IsFuncOpen(m_FunctionId);
            }
            //默认100为不判定
            if (m_OpenServerActivityType != 100)
            {
                return OpenServerActivityCenter.Instance.IsActivityOpen(m_OpenServerActivityType, m_ActivityType);
            }
            if (m_IsAnyOpenServerActivity)
            {
                var functionOrder = 0;
                return OpenServerActivityCenter.Instance.IsAnyActivityOpen(out functionOrder, m_ActivityType);
            }
            if (m_OperationActivityType != Operation.max)
            {
                return OperationTimeHepler.Instance.SatisfyOpenCondition(m_OperationActivityType);
            }
            return false;
        }
        private void PlayerUIEffect()
        {
            if (m_IsPlayerUIeffect != null)
            {
                m_IsPlayerUIeffect.StartPlayUIEffect();
            }
        }
        private void StopUIEffect()
        {
            if (m_IsPlayerUIeffect != null)
            {
                m_IsPlayerUIeffect.ObtainPlayUIEffect();
            }
        }
    }
}
System/Realm/RealmModel.cs
@@ -20,6 +20,7 @@
        public int realmEquipDisplayLevel { get; private set; }
        public int realmLevelUpReikiPoint { get; private set; }
        public bool isBossPass { get; private set; }
        public int xxzlAwardState { get; private set; }
        public int realmExpTime { get; private set; }
        public long startExp { get; private set; }
@@ -89,6 +90,7 @@
        public readonly Redpoint challengeRedpoint = new Redpoint(114, 11402);
        //public readonly Redpoint realmPoolRedpoint = new Redpoint(114, 11403);
        public readonly Redpoint realmDailyRedpoint = new Redpoint(114, 11404);
        public readonly Redpoint xxzlRedpoint = new Redpoint(114, 11405);
        int m_SelectRealm = 0;
        public int selectRealm
@@ -129,11 +131,13 @@
        public event Action selectRealmRefresh;
        public event Action realmExpRefresh;
        public event Action<bool> xxzlStateRefresh;
        EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
        EquipStarModel equipStarModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        ActivitiesPushModel pushModel { get { return ModelCenter.Instance.GetModel<ActivitiesPushModel>(); } }
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
        public override void Init()
        {
@@ -142,6 +146,7 @@
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
            packModel.refreshItemCountEvent += RefreshItemCountEvent;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
            WindowCenter.Instance.windowBeforeOpenEvent += OnBeforeWindowOpen;
            ParseConfig();
        }
@@ -154,6 +159,7 @@
            buffSeconds = 0;
            buffAddRate = 0;
            realmEffectCount = 0;
            xxzlAwardState = 0;
            SysNotifyMgr.Instance.OnSystemNotifyEvent -= OnSystemNotifyEvent;
        }
@@ -667,7 +673,15 @@
        public void ReceivePackage(HA311_tagMCSyncRealmInfo package)
        {
            int beforeAwardState = xxzlAwardState;
            isBossPass = package.IsPass == 1;
            xxzlAwardState = (int)package.XXZLAwardState;
            bool isOver = false;
            if (beforeAwardState != 0 && beforeAwardState != xxzlAwardState && IsRealmXXZLOver())
            {
                isOver = true;
            }
            xxzlStateRefresh?.Invoke(isOver);
            RefreshRedpoint();
        }
@@ -779,11 +793,19 @@
            }
        }
        void RefreshRedpoint()
        {
            var levelUpable = false;
            var challengeable = false;
            var dailyRedpointable = false;
            levelUpRedpoint.state = RedPointState.None;
            challengeRedpoint.state = RedPointState.None;
            realmDailyRedpoint.state = RedPointState.None;
            if (!IsRealmXXZLOver())
                return;
            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Realm))
            {
@@ -837,6 +859,130 @@
        //    realmPoolRedpoint.state = isPoolFull ? RedPointState.Simple : RedPointState.None;
        //}
        #region 修仙之路
        public int selectXXZL;
        //任务完成进度
        public bool IsRealmXXZLMissionFinish(int missionID, out int process)
        {
            var config = RealmXXZLConfig.Get(missionID);
            bool isFinish = false;
            process = 0;
            switch (config.TaskType)
            {
                case 1:
                    isFinish = treasureModel.IsTreasureCollected(config.NeedValue);
                    process = isFinish ? 1 : 0;
                    break;
                case 2:
                    process = ModelCenter.Instance.GetModel<SkyTowerModel>().highestPassFloor;
                    isFinish = process >= config.NeedValue;
                    break;
                case 3:
                    process = ModelCenter.Instance.GetModel<WorldBossModel>().killCntTotal;
                    isFinish = process >= config.NeedValue;
                    break;
                case 4:
                    process = (int)ModelCenter.Instance.GetModel<DailyQuestModel>().ActivityPlaceInfo.TotalCount;
                    isFinish = process >= config.NeedValue;
                    break;
                case 5:
                    isFinish = ModelCenter.Instance.GetModel<PersonalBossModel>().IsFBPass(config.NeedValue);
                    process = isFinish ? 1 : 0;
                    break;
                case 6:
                    process = ModelCenter.Instance.GetModel<DungeonModel>().GetAllEnterTimes(60010);
                    isFinish = process >= config.NeedValue;
                    break;
                case 7:
                    process = ModelCenter.Instance.GetModel<ReikiRootModel>().GetReikiRootTotalPointWithFree();
                    isFinish = process >= config.NeedValue;
                    break;
            }
            return isFinish;
        }
        public bool IsRealmXXZLOver()
        {
            var count = RealmXXZLConfig.GetKeys().Count;
            return xxzlAwardState == (Math.Pow(2, count + 1) - 2);
        }
        public int GetXXZLProcess()
        {
            var ids = RealmXXZLConfig.GetKeys();
            int process = 0;
            foreach (var id in ids)
            {
                if (IsGetAward(int.Parse(id)))
                {
                    process++;
                }
            }
            return process;
        }
        public bool IsGetAward(int missionID)
        {
            return (xxzlAwardState & (int)Math.Pow(2, missionID)) != 0;
        }
        void RefreshXXZLRedpoint()
        {
            xxzlRedpoint.state = RedPointState.None;
            if (IsRealmXXZLOver())
            {
                WindowCenter.Instance.windowBeforeOpenEvent -= OnBeforeWindowOpen;
                return;
            }
            var ids = RealmXXZLConfig.GetKeys();
            foreach (var id in ids)
            {
                int process;
                if (!IsGetAward(int.Parse(id)) && IsRealmXXZLMissionFinish(int.Parse(id), out process))
                {
                    xxzlRedpoint.state = RedPointState.Simple;
                    return;
                }
            }
        }
        void OnBeforeWindowOpen(Window window)
        {
            if (window.name == "MainInterfaceWin")
            {
                RefreshXXZLRedpoint();
            }
        }
        public void FocusSelectIndex()
        {
            var ids = RealmXXZLConfig.GetKeys();
            int index = -1;
            foreach (var id in ids)
            {
                int missionID = int.Parse(id);
                int process;
                var state = IsGetAward(missionID);
                bool isFinish = IsRealmXXZLMissionFinish(missionID, out process);
                if (!state && isFinish)
                {
                    selectXXZL = missionID - 1;
                    return;
                }
                else if (!state && !isFinish && index == -1)
                {
                    index = missionID - 1;
                }
            }
            selectXXZL = index;
        }
        #endregion
    }
    public struct RealmLevelUpEquipCondition
System/Realm/RealmWin.cs
@@ -3,9 +3,11 @@
//    [  Date ]:           Tuesday, October 10, 2017
//--------------------------------------------------------
using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEngine.UI;
@@ -33,6 +35,20 @@
        [SerializeField] UIEffect m_EffectCover;
        [SerializeField] UIEffect m_EffectBoss;
        [SerializeField] UIEffect m_EffectBase;
        [SerializeField] Transform m_RealmContainer;
        [SerializeField] Transform m_XxzlContainer;
        [SerializeField] List<ButtonEx> juanImgs;
        [SerializeField] List<UIEffect> juanEffects;
        [SerializeField] List<ItemCell> items;
        [SerializeField] Text xxzlMission;
        [SerializeField] IntensifySmoothSlider ExpSlider;
        [SerializeField] Text processTxt;
        [SerializeField] Button activeBtn;
        [SerializeField] Image activedImg;
        [SerializeField] Button leftBtn;
        [SerializeField] Button rightBtn;
        [SerializeField] UIEffect xxzlOverEffect;
        int cacheRealmLevel = 0;
        ulong cacheFightPower = 0;
@@ -93,6 +109,28 @@
            m_Close.onClick.AddListener(OnBack);
            m_GotoBoss.AddListener(GotoBoss);
            m_RealmRestraint.AddListener(RealmRestraint);
            for (int i = 0; i < juanImgs.Count; i++)
            {
                int index = i;
                juanImgs[i].AddListener(() =>
                {
                    model.selectXXZL = index;
                    DisplayXXZL();
                    juanEffects[index].Play();
                });
            }
            leftBtn.AddListener(() => {
                if (model.selectXXZL == 0) return;
                model.selectXXZL--;
                juanImgs[model.selectXXZL].onClick.Invoke();
            });
            rightBtn.AddListener(() =>
            {
                if (model.selectXXZL == juanImgs.Count - 1) return;
                model.selectXXZL++;
                juanImgs[model.selectXXZL].onClick.Invoke();
            });
        }
        protected override void OnPreOpen()
@@ -105,18 +143,24 @@
            m_RealmAnimation.onCoverChange += OnCoverChange;
            mainDateModel.customDisplayPower += CustomDisplayPower;
            WindowCenter.Instance.windowAfterCloseEvent += WindowAfterCloseEvent;
            model.xxzlStateRefresh += Model_xxzlStateRefresh;
            cacheRealmLevel = PlayerDatas.Instance.baseData.realmLevel;
            cacheFightPower = PlayerDatas.Instance.baseData.FightPoint;
            customUpPower = 0;
            model.SetDayRemind();
            model.FocusSelectIndex();
        }
        protected override void OnActived()
        {
            base.OnActived();
            var isOver = model.IsRealmXXZLOver();
            m_RealmContainer.SetActive(isOver);
            m_XxzlContainer.SetActive(!isOver);
            m_RealmState = RealmState.LevelUp;
            HideRealmBoss();
@@ -133,6 +177,7 @@
        protected override void OnAfterOpen()
        {
            DisplayXXZL();
        }
        protected override void OnPreClose()
@@ -145,6 +190,7 @@
            mainDateModel.customDisplayPower -= CustomDisplayPower;
            m_RealmAnimation.onCoverChange -= OnCoverChange;
            WindowCenter.Instance.windowAfterCloseEvent -= WindowAfterCloseEvent;
            model.xxzlStateRefresh -= Model_xxzlStateRefresh;
            HideRealmUp();
        }
@@ -370,6 +416,8 @@
        void StartTween()
        {
            if (!model.IsRealmXXZLOver()) return;
            m_RealmBriefTween.Play();
            var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
@@ -611,6 +659,89 @@
            LevelUp,
            Boss,
        }
        public void DisplayXXZL()
        {
            var isOver = model.IsRealmXXZLOver();
            m_RealmContainer.SetActive(isOver);
            m_XxzlContainer.SetActive(!isOver);
            if (isOver) return;
            int process;
            for (int i = 0; i < juanImgs.Count; i++)
            {
                juanImgs[i].SetColorful(null, model.IsGetAward(i+1));
                var alphaObj = juanImgs[i].GetComponent<UIAlphaTween>();
                if (i == model.selectXXZL)
                {
                    alphaObj.Play();
                }
                else
                {
                    alphaObj.Stop();
                }
            }
            int missionID = model.selectXXZL + 1;
            var config = RealmXXZLConfig.Get(missionID);
            xxzlMission.text = config.Desc;
            process = 0;
            bool isMissionFinish = model.IsRealmXXZLMissionFinish(missionID, out process);
            var needValue = config.NeedValue;
            if (config.TaskType == 1 || config.TaskType == 5)
                needValue = 1;
            ExpSlider.value = Math.Max(1, process/needValue);
            processTxt.text = process + "/" + needValue;
            var awards = JsonMapper.ToObject<int[][]>(config.AwardItemList);
            for (int i = 0; i < items.Count; i++)
            {
                if (i < awards.Length)
                {
                    items[i].SetActive(true);
                    int itemID = awards[i][0];
                    items[i].Init(new ItemCellModel(itemID, false, (ulong)awards[i][1]));
                    items[i].button.AddListener(() =>
                    {
                        ItemTipUtility.Show(itemID);
                    });
                }
                else
                {
                    items[i].SetActive(false);
                }
            }
            bool awardState = model.IsGetAward(missionID);
            activeBtn.SetActive(!awardState);
            activeBtn.interactable = isMissionFinish;
            activeBtn.SetColorful(null, isMissionFinish);
            activeBtn.AddListener(() =>
            {
                CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward();
                pak.RewardType = 62;
                pak.DataEx = (uint)missionID;
                GameNetSystem.Instance.SendInfo(pak);
                juanImgs[missionID - 1].SetColorful(null, true);
                juanImgs[missionID - 1].GetComponent<ScaleTween>().Play();
                juanEffects[missionID - 1].Play();
            });
            activedImg.SetActive(awardState);
            juanEffects[model.selectXXZL].Play();
        }
        private void Model_xxzlStateRefresh(bool obj)
        {
            DisplayXXZL();
            if (obj)
            {
                xxzlOverEffect.Play();
                OnActived();
            }
        }
    }
}
System/Treasure/TreasureModel.cs
@@ -889,6 +889,16 @@
            return 0;
        }
        public bool IsTreasureCollected(int _treasureId)
        {
            Treasure treasure;
            if (TryGetTreasure(_treasureId, out treasure))
            {
                return treasure.state == TreasureState.Collected;
            }
            return false;
        }
        public int GetTreasureFightPower(int _treasureId, bool _real = true)
        {
            Treasure treasure;
UI/Decorate/Tweens/UIAlphaTween.cs
@@ -91,6 +91,15 @@
            }
        }
        public void Stop()
        {
            doTween = false;
            accumulatedTime = 0f;
            StopAllCoroutines();
            SetStartState();
        }
        void Start()
        {
            if (trigger == Trigger.Start)
Utility/ConfigInitiator.cs
@@ -326,6 +326,8 @@
        normalTasks.Add(new ConfigInitTask("NPCExConfig", () => { NPCExConfig.Init(); }, () => { return NPCExConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("CustomAward", () => { CustomAwardConfig.Init(); }, () => { return CustomAwardConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("FamilyBossHurtAward", () => { FamilyBossHurtAwardConfig.Init(); }, () => { return FamilyBossHurtAwardConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("RealmXXZL", () => { RealmXXZLConfig.Init(); }, () => { return RealmXXZLConfig.inited; }));
    }
    static List<ConfigInitTask> doingTasks = new List<ConfigInitTask>();