少年修仙传客户端代码仓库
client_Hale
2018-09-13 0c1843f3e1e30993c3a13822da9f61b4b57d091d
Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts
15个文件已修改
4个文件已删除
392 ■■■■ 已修改文件
Core/GameEngine/Model/MapNpcConfigConfig.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/MapNpcConfigConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/tagRoleEquipStarsConfig.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/tagRoleEquipStarsConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Achievement/AchievementGotoPart1.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Achievement/AchievementModel.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/LingDanTips.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/PrayForDurgModel.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/PrayforDrugWin.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Compose/New/ComposeWin.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Compose/New/ComposeWinModel.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/DailyQuest/DailyQuestModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/FeatureNoticeModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/FeatureNoticeWin.cs 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/FeaturesType1.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/FeaturesType2.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/FunctionForecastTip.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasurePotentialBriefInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasurePotentialPanel.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/MapNpcConfigConfig.cs
File was deleted
Core/GameEngine/Model/MapNpcConfigConfig.cs.meta
File was deleted
Core/GameEngine/Model/tagRoleEquipStarsConfig.cs
File was deleted
Core/GameEngine/Model/tagRoleEquipStarsConfig.cs.meta
File was deleted
System/Achievement/AchievementGotoPart1.cs
@@ -314,7 +314,8 @@
        public static void GotoSpSkillLevelUp(int _achievementId)
        {
            var config = Config.Instance.Get<SuccessConfig>(_achievementId);
            var skillId = config.Condition[0];
            var index = PlayerDatas.Instance.baseData.Job - 1;
            var skillId = index < config.Condition.Length ? config.Condition[index] : config.Condition[0];
            var treasureId = 0;
            var humanTreasures = treasureModel.GetTreasureCategory(TreasureCategory.Human);
@@ -330,13 +331,27 @@
                }
            }
            var skillConfig = Config.Instance.Get<SkillConfig>(skillId);
            var treasureConfig = Config.Instance.Get<TreasureConfig>(treasureId);
            if (treasureId != 0)
            {
                treasureModel.currentCategory = TreasureCategory.Human;
                treasureModel.selectedTreasure = treasureId;
                treasureModel.selectedPotential = skillId;
                if (!FuncOpen.Instance.IsFuncOpen(82))
                {
                    FuncOpen.Instance.ProcessorFuncErrorTip(82);
                    return;
                }
                guideAchievementId = _achievementId;
                Treasure treasure;
                if (treasureModel.TryGetTreasure(treasureId, out treasure))
                {
                    if (!treasure.IsHighestStage)
                    {
                        SysNotifyMgr.Instance.ShowTip("TreasureSkillUnGet", skillConfig.SkillName, treasureConfig.Name);
                        return;
                    }
                    guideAchievementId = _achievementId;
                }
            }
        }
System/Achievement/AchievementModel.cs
@@ -428,6 +428,48 @@
                    case 116:
                        getItemPathModel.SetChinItemModel(config.Condition[0]);
                        break;
                    case 91:
                        var index = PlayerDatas.Instance.baseData.Job - 1;
                        var potentialId = index < config.Condition.Length ? config.Condition[index] : config.Condition[0];
                        var treasureModel = ModelCenter.Instance.GetModel<TreasureModel>();
                        var treasureId = 0;
                        var treasures = treasureModel.GetTreasureCategory(TreasureCategory.Human);
                        foreach (var id in treasures)
                        {
                            Treasure treasure;
                            treasureModel.TryGetTreasure(id, out treasure);
                            if (treasure.GetPotential(potentialId) != null)
                            {
                                treasureId = treasure.id;
                                break;
                            }
                        }
                        var skillConfig = Config.Instance.Get<SkillConfig>(potentialId);
                        var treasureConfig = Config.Instance.Get<TreasureConfig>(treasureId);
                        if (treasureId != 0)
                        {
                            if (!FuncOpen.Instance.IsFuncOpen(82))
                            {
                                return;
                            }
                            Treasure treasure;
                            if (treasureModel.TryGetTreasure(treasureId, out treasure))
                            {
                                if (!treasure.IsHighestStage)
                                {
                                    return;
                                }
                                treasureModel.currentCategory = TreasureCategory.Human;
                                treasureModel.selectedTreasure = treasureId;
                                if (!WindowCenter.Instance.CheckOpen<TreasureLevelUpWin>())
                                {
                                    WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.TreasureCollectSoul);
                                }
                            }
                        }
                        break;
                    default:
                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
System/BlastFurnace/LingDanTips.cs
@@ -85,6 +85,7 @@
        {
            get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PlayerPackModel>()); }
        }
        PrayForDurgModel prayModel { get { return ModelCenter.Instance.GetModel<PrayForDurgModel>(); } }
        private int noEnoughMatID = 0;
        private bool isEnoughSpecMat = true;
@@ -96,10 +97,7 @@
            _danDrugCtrl.lockType = EnhanceLockType.KeepVertical;
            _toggleGroup = _danDrugCtrl.GetComponent<ToggleGroup>();
            _makeDanBtn.onClick.AddListener(OnClickMakeDan);
            prayDurgBtn.AddListener(()=>
            {
                WindowCenter.Instance.Open<PrayforDrugWin>();
            });
            prayDurgBtn.AddListener(ClickPrayDrugBtn);
            FurnaceModel.RefreshStoveModelEvent += RefreshStoveModel;
            FurnaceModel.RefreshAddSpecMatEvent += SetSpecMatItemCell;
            _randomLineCtrl.OnRefreshCell += RefreshRandomLineCell;
@@ -107,6 +105,22 @@
           
        }
        private void ClickPrayDrugBtn()
        {
            if(FurnaceModel.StoveLV < prayModel.prayPushLv)
            {
                SysNotifyMgr.Instance.ShowTip("PrayforDrug102",prayModel.prayPushLv);
            }
            else if(prayModel.GetPrayDruglist().Count < 1)
            {
                SysNotifyMgr.Instance.ShowTip("PrayforDrug101");
            }
            else
            {
                WindowCenter.Instance.Open<PrayforDrugWin>();
            }
        }
        private void OnEnable()
        {
            isJumpToId = 0;
System/BlastFurnace/PrayForDurgModel.cs
@@ -25,8 +25,9 @@
        public void OnBeforePlayerDataInitialize()
        {
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= RefreshPlayeLv;
            FuncOpen.Instance.OnFuncStateChangeEvent -= UpdateFuncState;
            blastModel.RefreshStoveModelEvent -= UpdateBlastLv;
            playerPack.RefreshItemSumUseCntAct -= RefreshItemUsce;
        }
        public void OnAfterPlayerDataInitialize()
@@ -36,21 +37,32 @@
        public void OnPlayerLoginOk()
        {
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshPlayeLv;
            FuncOpen.Instance.OnFuncStateChangeEvent += UpdateFuncState;
            blastModel.RefreshStoveModelEvent += UpdateBlastLv;
            playerPack.RefreshItemSumUseCntAct += RefreshItemUsce;
            UpdatePrayDanRedpoint();
        }
        private void RefreshItemUsce(int id)
        {
            if (!playerPack.CheckIsDrugById(id)) return;
            AttrFruitConfig fruitConfig = Config.Instance.Get<AttrFruitConfig>(id);
            if (!playerPack.IsReachMaxUseDrug(fruitConfig)) return;
            UpdatePrayDanRedpoint();
        }
        private void UpdateBlastLv()
        {
            if (!blastModel.StoveIsUpGrade) return;
            UpdatePrayDanRedpoint();
        }
        private void UpdateFuncState(int funcId)
        {
            if (funcId != (int)FuncOpenEnum.BlastFurnace) return;
            UpdatePrayDanRedpoint();
        }
        private void RefreshPlayeLv(PlayerDataRefresh type)
        {
            if (type != PlayerDataRefresh.LV) return;
            UpdatePrayDanRedpoint();
        }
@@ -164,9 +176,9 @@
        private Redpoint prayRedpoint = new Redpoint(BlastFurnaceModel.LINGDANREDPOINT_KEY, PRAYDRUGREDPOINT_KEY);
        public void UpdatePrayDanRedpoint()
        {
            if (PlayerDatas.Instance.baseData.LV < prayPushLv
                || !FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BlastFurnace)
                 || alreadyPrayNum >= everyDayNum)
            if (blastModel.StoveLV < prayPushLv
                 || alreadyPrayNum >= everyDayNum
                 || GetPrayDruglist().Count < 1)
            {
                prayRedpoint.state = RedPointState.None;
                return;
System/BlastFurnace/PrayforDrugWin.cs
@@ -107,6 +107,7 @@
            {
                ctrl.m_Scorller.RefreshActiveCellViews();
            }
            ctrl.JumpIndex(0);
        }
        private void RefreshPrayDrug(ScrollerDataType type, CellView cell)
System/Compose/New/ComposeWin.cs
@@ -43,6 +43,8 @@
            get { return _composeModel ?? (_composeModel = ModelCenter.Instance.GetModel<ComposeWinModel>()); }
        }
        SelectEquipModel selectModel { get { return ModelCenter.Instance.GetModel<SelectEquipModel>(); } }
        #region Built-in
        protected override void BindController()
        {
@@ -121,6 +123,7 @@
        protected override void OnPreClose()
        {
            selectModel.ClearSelectModel();
        }
        protected override void OnAfterClose()
System/Compose/New/ComposeWinModel.cs
@@ -201,6 +201,7 @@
    /// </summary>
    private byte[] fixedIndexArray = null;
    private byte[] addonsReduceArray = null;
    private byte[] unfixedIndexArray = null;
    Dictionary<int, Dictionary<int, int>> fixedMatIsBindDict = new Dictionary<int, Dictionary<int, int>>();  //id , isBind, count
    Dictionary<int, Dictionary<int, int>> unfixedMatIsBindDict = new Dictionary<int, Dictionary<int, int>>();
@@ -273,7 +274,15 @@
            }
        }
        byte[] unfixedIndexArray = DictToArray(selectModel.GetHaveUnfixedSelectItem());
        if(compoundModel.unfixedItemCount > 0)
        {
            DictToArray(selectModel.GetHaveUnfixedSelectItem());
        }
        else
        {
            unfixedIndexArray = null;
        }
        if (unfixedIndexArray != null)
        {
            for (i = 0; i < unfixedIndexArray.Length; i++)
@@ -592,6 +601,8 @@
    private void SetMatIsBindDict(ItemModel itemModel,Dictionary<int, Dictionary<int, int>> matDict)
    {
        if (itemModel == null) return;
        if (!matDict.ContainsKey(itemModel.itemId))
        {
            Dictionary<int, int> bindDict = new Dictionary<int, int>();
System/DailyQuest/DailyQuestModel.cs
@@ -738,7 +738,7 @@
                        var beforeOpenTime1 = openTime1.TryGetTodayNearestOpenTime(out hourMinute1);
                        HourMinute hourMinute2;
                        var beforeOpenTime2 = openTime1.TryGetTodayNearestOpenTime(out hourMinute2);
                        var beforeOpenTime2 = openTime2.TryGetTodayNearestOpenTime(out hourMinute2);
                        if (beforeOpenTime1 && !beforeOpenTime2)
                        {
System/MainInterfacePanel/FeatureNoticeModel.cs
@@ -221,7 +221,7 @@
                {
                    return;
                }
                string strKey = "FeatureNotice" + functionForecastConfig.FrameLevel;
                string strKey = "FeatureNotice" + functionForecastConfig.FrameLevel+PlayerDatas.Instance.baseData.PlayerID;
                int type = LocalSave.GetInt(strKey);
                bool IsOpenMain = WindowCenter.Instance.CheckOpen<MainInterfaceWin>();
                if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.FrameLevel && type == 0)
System/MainInterfacePanel/FeatureNoticeWin.cs
@@ -12,6 +12,14 @@
namespace Snxxz.UI
{
    //功能预告面板
    public enum FeatureNoticeEnum
    {
        Pet=6,//灵宠
        Horse=8,//坐骑
        Wing=97,//翅膀
        GossipFurnace=87,//八卦炉
    }
    public class FeatureNoticeWin : Window
    {
        [SerializeField] Text m_TextAdvanceName;//功能名
@@ -26,6 +34,11 @@
        [SerializeField] Text m_TextUnopened;//未开启
        [SerializeField] Text m_Textschedule;//进度
        [SerializeField] Button m_ButtonGoto;
        [SerializeField] RawImage m_RawImage1;
        [SerializeField] RawImage m_RawImage2;
        [SerializeField] RawImage m_RawImage3;
        [SerializeField] RawImage m_RawImage4;
        [SerializeField] Text m_keyName;
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
        FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel<FeatureNoticeModel>(); } }
        #region Built-in
@@ -41,7 +54,10 @@
        protected override void OnPreOpen()
        {
            DefaultSelection();//获取默认选择
            if (!WindowJumpMgr.Instance.IsJumpState)//是否经历跳转打开
            {
                DefaultSelection();//获取默认选择
            }
            m_ScrollerController.OnRefreshCell += OnRefreshGridCell;       
            OnCreateGridLineCell(m_ScrollerController);
            ContentDisplay();
@@ -57,6 +73,13 @@
        }
        protected override void OnPreClose()
        {
            UI3DModelExhibition.Instance.StopShowNPC();
            UI3DModelExhibition.Instance.StopShowHourse();
            UI3DModelExhibition.Instance.StopShowWing();
            UI3DTreasureExhibition.Instance.StopShow();
        }
        protected override void OnAfterClose()
        {
            PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayersUpLV;
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
            m_ScrollerController.OnRefreshCell -= OnRefreshGridCell;
@@ -65,9 +88,9 @@
            if (featureNoticeModel.redPointStre1.state == RedPointState.Simple)
            {
                featureNoticeModel.redPointStre1.state = RedPointState.None;
            }
            }
        }
        private void treasureStageUpEvent(int obj)
        {
            ContentDisplay();
@@ -158,9 +181,7 @@
            }
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void DefaultSelection()//获取默认选择
        {
@@ -198,7 +219,7 @@
                return;
            }
            m_TextAdvanceName.text = functionForecastConfig.FuncName;
            m_FeaturesImage.SetSprite(functionForecastConfig.Icon);
            DisplayIcon(ClickFuncID);
            string[] StrList = ConfigParse.GetMultipleStr(functionForecastConfig.Content);
            if (StrList.Length > 0)
            {
@@ -218,9 +239,68 @@
            {
                TrailerClassification(ClickFuncID);
            }
        }
        private void DisplayIcon(int funcID)//显示图标或者模型
        {
            m_RawImage1.gameObject.SetActive(false);
            m_RawImage2.gameObject.SetActive(false);
            m_RawImage3.gameObject.SetActive(false);
            m_RawImage4.gameObject.SetActive(false);
            m_FeaturesImage.gameObject.SetActive(false);
            var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(ClickFuncID);
            switch (funcID)
            {
                case (int)FeatureNoticeEnum.Pet:
                    UI3DModelExhibition.Instance.StopShowHourse();
                    UI3DModelExhibition.Instance.StopShowWing();
                    UI3DTreasureExhibition.Instance.StopShow();
                    m_RawImage1.gameObject.SetActive(true);
                    var npcConfig = Config.Instance.Get<NPCConfig>(50106001);
                    UI3DModelExhibition.Instance.BeginShowNPC(50106001, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_RawImage1);
                    break;
                case (int)FeatureNoticeEnum.Horse:
                    UI3DModelExhibition.Instance.StopShowNPC();
                    UI3DModelExhibition.Instance.StopShowWing();
                    UI3DTreasureExhibition.Instance.StopShow();
                    m_RawImage2.gameObject.SetActive(true);
                    HorseConfig _model = Config.Instance.Get<HorseConfig>(100);
                    UI3DModelExhibition.Instance.BeginShowHourse(_model.Model, m_RawImage2);
                    break;
                case (int)FeatureNoticeEnum.Wing:
                    UI3DModelExhibition.Instance.StopShowNPC();
                    UI3DModelExhibition.Instance.StopShowHourse();
                    UI3DTreasureExhibition.Instance.StopShow();
                    m_RawImage3.gameObject.SetActive(true);
                    var vec3 = new Vector3(0,90,-90);
                    int job = PlayerDatas.Instance.baseData.Job;
                    if (job == 1)
                    {
                        var config = Config.Instance.Get<WingRefineExpConfig>(3711);
                        int _modelID = config.Model;
                        UI3DModelExhibition.Instance.BeginShowWing(_modelID, vec3, m_RawImage3);
                    }
                    else if (job == 2)
                    {
                        var config = Config.Instance.Get<WingRefineExpConfig>(3721);
                        int _modelID = config.Model;
                        UI3DModelExhibition.Instance.BeginShowWing(_modelID, vec3, m_RawImage3);
                    }
                    break;
                case (int)FeatureNoticeEnum.GossipFurnace:
                    UI3DModelExhibition.Instance.StopShowNPC();
                    UI3DModelExhibition.Instance.StopShowHourse();
                    UI3DModelExhibition.Instance.StopShowWing();
                    m_RawImage4.gameObject.SetActive(true);
                    UI3DTreasureExhibition.Instance.BeginShowTreasure(301, m_RawImage4);
                    break;
                default:
                    m_FeaturesImage.gameObject.SetActive(true);
                    m_FeaturesImage.SetSprite(functionForecastConfig.Icon);
                    break;
            }
        }
        void TrailerClassification(int funcID)//预告分类
        {
            m_TextTurnedOn.gameObject.SetActive(false);
@@ -239,20 +319,29 @@
                else if (funcoPenConfig.LimitMissionID != 0)//任务
                {
                    m_TextUnopened.gameObject.SetActive(true);
                    m_TextUnopened.text= string.Format(Language.Get("TaskFuncOpen"), funcoPenConfig.LimitLV);
                    if (PlayerDatas.Instance.baseData.LV >= funcoPenConfig.LimitLV)
                    {
                        m_TextUnopened.text = string.Format(Language.Get("YGTaskDone"), funcoPenConfig.LimitLV, PlayerDatas.Instance.baseData.LV, funcoPenConfig.LimitLV);
                    }
                    else
                    {
                        m_TextUnopened.text = string.Format(Language.Get("YGTask"), funcoPenConfig.LimitLV, PlayerDatas.Instance.baseData.LV, funcoPenConfig.LimitLV);
                    }
                    return;
                }
            }
            else//等级
            {
                m_TextUnopened.gameObject.SetActive(true);
                m_TextUnopened.text= string.Format(Language.Get("FuncLevelOpen"), funcoPenConfig.LimitLV);
                m_TextUnopened.text= string.Format(Language.Get("YGFuncLevel"), funcoPenConfig.LimitLV,PlayerDatas.Instance.baseData.LV, funcoPenConfig.LimitLV);
                return;
            }
        }
        private void MagicWeapon(int fabaoID)
        {
            m_Textschedule.gameObject.SetActive(true);
            m_ButtonGoto.gameObject.SetActive(true);
            Treasure treasure;
            TreasureConfig _treasure = Config.Instance.Get<TreasureConfig>(fabaoID);
@@ -266,7 +355,7 @@
            if (treasureModel.TryGetTreasure(fabaoID, out treasure)
                && treasure.state == TreasureState.Collected)
            {
                m_Textschedule.gameObject.SetActive(true);
                m_keyName.text = Language.Get("YGQWJX");
                var list = treasure.treasureStages;
                var funcStage = 0;
                for (int i = 0; i < list.Count; i++)
@@ -284,24 +373,24 @@
                    {
                        if (treasure.exp >= treasure.treasureStages[funcStage].exp)
                        {
                            m_Textschedule.text = "100%";
                            m_Textschedule.text = string.Format(Language.Get("YGYouFBDone"), "100%");
                        }
                        else
                        {
                            m_Textschedule.text = (float)treasure.exp / treasure.treasureStages[funcStage].exp + "%";
                        }
                            string str = ((float)treasure.exp / treasure.treasureStages[funcStage].exp) * 100 + "%";
                            m_Textschedule.text = string.Format(Language.Get("YGYouFB"), str);
                        }
                    }
                    else
                    {
                        m_Textschedule.text = 0+" %";
                        m_Textschedule.text = string.Format(Language.Get("YGYouFB"), "0%");
                    }
                }
            }
            else
            {
                m_TextUnopened.gameObject.SetActive(true);
                m_TextUnopened.text = string.Format(Language.Get("FuncFBOpen"), _treasure.Name);
                m_keyName.text = Language.Get("YGHQFB");
                m_Textschedule.text = string.Format(Language.Get("YGNoFB"), _treasure.Name);
            }
        }
    }
System/MainInterfacePanel/FeaturesType1.cs
@@ -15,10 +15,11 @@
        [SerializeField] Text m_FunctionalLevel;//功能等级
        [SerializeField] Text m_FunctionName;//功能名
        [SerializeField] Image m_FeaturesTypeIcon;//功能图标
        [SerializeField] ImageEx m_FeaturesTypeIcon;//功能图标
        [SerializeField] GameObject m_ImageSelected;
        [SerializeField] Button m_Button;
        [SerializeField] GameObject m_Img_Done;
        [SerializeField] ImageEx m_DisplayIcon;
        public GameObject ImageSelected
        {
            get { return m_ImageSelected; }
@@ -38,8 +39,30 @@
                return;
            }
            m_FunctionName.text = functionForecastConfig.FuncName;
            m_FunctionalLevel.text = functionForecastConfig.DisplayLevel.ToString();
            m_FunctionalLevel.text = functionForecastConfig.DisplayLevel.ToString()+ Language.Get("Z1041");
            m_FeaturesTypeIcon.SetSprite(functionForecastConfig.FuncIconKey);
            if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.DisplayLevel)
            {
                m_FunctionalLevel.color = new Color32(141,220,17,255);
            }
            else
            {
                m_FunctionalLevel.color = new Color32(255, 244, 205,255);
            }
            if (FuncOpen.Instance.IsFuncOpen(funcId))
            {
                m_Img_Done.SetActive(true);
                m_FeaturesTypeIcon.gray = false;
                m_DisplayIcon.gray = false;
                m_FunctionName.color = new Color(255,244,205);
            }
            else
            {
                m_Img_Done.SetActive(false);
                m_FeaturesTypeIcon.gray = true;
                m_DisplayIcon.gray = true;
                m_FunctionName.color = new Color(220, 220, 220);
            }
        }
    }
System/MainInterfacePanel/FeaturesType2.cs
@@ -12,11 +12,13 @@
    public class FeaturesType2:MonoBehaviour {
        [SerializeField] Text m_FunctionalLevel;//功能等级
        [SerializeField] Text m_FunctionName;//功能名
        [SerializeField] Image m_FeaturesTypeIcon;//功能图标
        [SerializeField] ImageEx m_FeaturesTypeIcon;//功能图标
        [SerializeField] GameObject m_ImageSelected;
        [SerializeField] Button m_Button;
        [SerializeField] GameObject m_DefaultBar;
        [SerializeField] GameObject m_SelectedBar;
        [SerializeField] GameObject m_Img_Done;
        [SerializeField] ImageEx m_NameBottom;
        public GameObject ImageSelected
        {
            get { return m_ImageSelected; }
@@ -36,15 +38,31 @@
                return;
            }
            m_FunctionName.text = functionForecastConfig.FuncName;
            m_FunctionalLevel.text = functionForecastConfig.DisplayLevel.ToString();
            m_FunctionalLevel.text = functionForecastConfig.DisplayLevel.ToString()+Language.Get("Z1041");
            m_FeaturesTypeIcon.SetSprite(functionForecastConfig.FuncIconKey);
            if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.DisplayLevel)
            {
                m_FunctionalLevel.color = new Color32(141, 220, 17,255);
            }
            else
            {
                m_FunctionalLevel.color = new Color32(255, 244, 205,255);
            }
            if (FuncOpen.Instance.IsFuncOpen(funcId))
            {
                m_SelectedBar.SetActive(true);
                m_Img_Done.SetActive(true);
                m_FeaturesTypeIcon.gray = false;
                m_NameBottom.gray = false;
                m_FunctionName.color = new Color(255, 244, 205);
            }
            else
            {
                m_SelectedBar.SetActive(false);
                m_Img_Done.SetActive(false);
                m_FeaturesTypeIcon.gray = true;
                m_NameBottom.gray = true;
                m_FunctionName.color = new Color(255, 244, 205);
            }
        }
System/MainInterfacePanel/FunctionForecastTip.cs
@@ -69,7 +69,7 @@
            foreach (var config in configs)
            {
                if (!FuncOpen.Instance.IsFuncOpen(config.FuncId)
                    && PlayerDatas.Instance.baseData.LV >= config.OpenLevel)
                    && PlayerDatas.Instance.baseData.LV >= config.OpenLevel && config.Display==1)
                {
                    OpenTag = config.FuncId;
                    if (FunctionOpenTagEvent != null)
System/Treasure/TreasurePotentialBriefInfo.cs
@@ -112,7 +112,7 @@
                if (config.LearnSkillReq > 0 && config.LearnSkillLV > 0)
                {
                    var preskillConfig = Config.Instance.Get<SkillConfig>(config.LearnSkillReq);
                    requirement = Language.Get("Hallows_NeedSkillLVStart", preskillConfig.SkillName, config.LearnSkillLV);
                    requirement = Language.Get("Hallows_NeedSkillLVStart", preskillConfig.SkillName, config.LearnSkillLV, config.SkillName);
                    m_PotentialName.text = requirement;
                    m_PotentialName.color = UIHelper.GetUIColor(TextColType.Red);
                }
System/Treasure/TreasurePotentialPanel.cs
@@ -299,6 +299,7 @@
        {
            selectedPotential = m_Treasure.potentials[_index].id;
            m_TreasureAnimation.DisplayPotentialLine(_index);
            HandleAchievement();
        }
        private void OnPotentialLineAnimComplete(int _index)
@@ -321,6 +322,10 @@
                        m_TreasureAnimation.UnlockTreasurePotential(0);
                        model.SetPotentialUnlockShow(model.selectedTreasure);
                    }
                    else
                    {
                        HandleAchievement();
                    }
                    DisplayLines();
                    break;
                case TreasureAnimation.TreasureShowStep.FirstPotential:
@@ -331,10 +336,45 @@
                        m_TreasureAnimation.UnlockTreasurePotential(0);
                        model.SetPotentialUnlockShow(model.selectedTreasure);
                    }
                    else
                    {
                        HandleAchievement();
                    }
                    break;
            }
        }
        void HandleAchievement()
        {
            if (AchievementGoto.guideAchievementId != 0 && m_Treasure != null)
            {
                var config = Config.Instance.Get<SuccessConfig>(AchievementGoto.guideAchievementId);
                if (config != null && config.Type == 91)
                {
                    var index = PlayerDatas.Instance.baseData.Job - 1;
                    var skillId = index < config.Condition.Length ? config.Condition[index] : config.Condition[0];
                    var potential = m_Treasure.GetPotential(skillId);
                    if (potential != null)
                    {
                        if (model.IsPotentialUnlock(m_Treasure.id, potential.id))
                        {
                            selectedPotential = potential.id;
                        }
                        else
                        {
                            var skillConfig = Config.Instance.Get<SkillConfig>(potential.id);
                            if (skillConfig.LearnSkillReq > 0 && skillConfig.LearnSkillLV > 0)
                            {
                                var preskillConfig = Config.Instance.Get<SkillConfig>(skillConfig.LearnSkillReq);
                                SysNotifyMgr.Instance.ShowTip("TreasurePotentialSelectError", preskillConfig.SkillName, skillConfig.LearnSkillLV, skillConfig.SkillName);
                            }
                        }
                    }
                    AchievementGoto.guideAchievementId = 0;
                }
            }
        }
        void DisplayLines()
        {
            if (m_Treasure == null)