少年修仙传客户端代码仓库
client_Wu Xijin
2019-03-02 5c7184ae9160021cfa78bf94d86533996fc3e782
Merge branch 'master' into Equip
15个文件已修改
368 ■■■■ 已修改文件
Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_Evt_RefreshSceneObject.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_MapTrigger.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_MonsterData.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/Evt_RefreshMonster.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/MapTrigger.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Editor/MapEditor.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/UserInputHandler.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/TransferGroup.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasurePotentialBehaviour.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasurePotentialLevelUpWin.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasureSkillCell.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasureSkillModel.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasureSkillWin.cs 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs
@@ -11,7 +11,7 @@
    public class Bhv_Evt_RefreshMonster : Bhv_Evt
    {
        [HideInInspector]
        public Evt_RefreshMonster.E_OverCondition overCondition = Evt_RefreshMonster.E_OverCondition.None;
        public Evt_RefreshMonster.E_OverCondition overCondition = Evt_RefreshMonster.E_OverCondition.DeadCount;
        [HideInInspector]
        public Evt_RefreshMonster.E_RefreshType refreshType = Evt_RefreshMonster.E_RefreshType.All;
        [HideInInspector]
@@ -20,11 +20,15 @@
        public int conditionParam;
        [HideInInspector]
        public int overParam;
        [HideInInspector]
        public int nextEventID = -1;
#if UNITY_EDITOR
        [HideInInspector]
        private bool showMonsterList = false;
        private int npcID = -1;
        private string resName;
        public override void Save(BinaryWriter bw)
        {
@@ -33,6 +37,7 @@
            bw.Write((byte)refreshType);
            bw.Write(conditionParam);
            bw.Write(overParam);
            bw.Write(nextEventID);
            bw.Write(monsterList.Count);
            foreach (var _monster in monsterList)
            {
@@ -47,6 +52,7 @@
            bw.Write((byte)refreshType);
            bw.Write(conditionParam);
            bw.Write(overParam);
            bw.Write(nextEventID);
            bw.Write(monsterList.Count);
            foreach (var _monster in monsterList)
            {
@@ -61,6 +67,7 @@
            refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte();
            conditionParam = br.ReadInt32();
            overParam = br.ReadInt32();
            nextEventID = br.ReadInt32();
            int _count = br.ReadInt32();
            for (int i = 0; i < _count; ++i)
            {
@@ -130,21 +137,33 @@
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal(guiSkin.customStyles[1], GUILayout.Height(22));
                EditorGUILayout.LabelField("下一事件", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
                nextEventID = EditorGUILayout.IntField(nextEventID, guiSkin.textField, GUILayout.Height(22));
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
                showMonsterList = EditorGUILayout.Foldout(showMonsterList, "  刷怪列表", true, guiSkin.customStyles[3]);
                EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50));
                npcID = EditorGUILayout.IntField(npcID, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70));
                EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50));
                resName = EditorGUILayout.TextField(resName, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70));
                if (GUILayout.Button("添加", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
                {
                    var _go = new GameObject("RefreshMonster");
                    _go.transform.SetParent(transform);
                    _go.transform.localPosition = Vector3.zero;
                    _go.transform.eulerAngles = Vector3.zero;
                    _go.transform.localScale = Vector3.one;
                    var _monsterData = CreateNPC(npcID, resName);
                    if (_monsterData)
                    {
                        monsterList.Add(_monsterData);
                        showMonsterList = true;
                    var _monsterData = _go.AddComponent<Bhv_MonsterData>();
                    monsterList.Add(_monsterData);
                    showMonsterList = true;
                        Selection.activeGameObject = _monsterData.gameObject;
                        if (Selection.activeGameObject)
                        {
                            SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position);
                        }
                    }
                }
                EditorGUILayout.EndHorizontal();
                if (showMonsterList)
@@ -152,13 +171,10 @@
                    for (int i = monsterList.Count - 1; i >= 0; --i)
                    {
                        EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
                        EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
                        var _npcID = monsterList[i].npcID;
                        monsterList[i].npcID = EditorGUILayout.IntField(monsterList[i].npcID, guiSkin.textField, GUILayout.Height(20));
                        if (_npcID != monsterList[i].npcID)
                        {
                            monsterList[i].name = monsterList[i].npcID + "_RefreshNPC";
                        }
                        EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50));
                        EditorGUILayout.LabelField(monsterList[i].npcID.ToString(), guiSkin.textField, GUILayout.Height(20));
                        EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50));
                        EditorGUILayout.LabelField(monsterList[i].resName, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70));
                        if (GUILayout.Button("定高", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
                        {
                            Vector3 _pos = monsterList[i].transform.position;
@@ -194,6 +210,47 @@
            EditorGUILayout.EndVertical();
            return _result;
        }
        private Bhv_MonsterData CreateNPC(int id, string name)
        {
            if (id <= 0)
            {
                Debug.Log("NPCID非法");
                return null;
            }
            if (string.IsNullOrEmpty(name.Trim()))
            {
                Debug.Log("模型名不应该为空");
                return null;
            }
            string _path = "Assets/ResourcesOut/Mob/Prefab_Race_" + name + ".prefab";
            var _obj = AssetDatabase.LoadAssetAtPath<GameObject>(_path);
            if (!_obj)
            {
                Debug.LogError("所要创建的资源不存在: " + _path);
                return null;
            }
            _obj = Instantiate(_obj);
            RaycastHit _hit;
            Ray _ray = SceneView.lastActiveSceneView.camera.ViewportPointToRay(new Vector3(.5f, .5f, 0));
            if (Physics.Raycast(_ray, out _hit, 1000f, LayerUtility.WalkbleMask))
            {
                _obj.transform.position = _hit.point;
            }
            _obj.transform.SetParent(transform);
            _obj.transform.eulerAngles = Vector3.zero;
            _obj.transform.localScale = Vector3.one;
            var _monsterData = _obj.AddComponent<Bhv_MonsterData>();
            _monsterData.npcID = id;
            _monsterData.resName = name;
            return _monsterData;
        }
#endif
    }
}
Core/MapEditor/Behavior/Bhv_Evt_RefreshSceneObject.cs
@@ -164,7 +164,7 @@
                _sceneObjData.resName = sceneName;
                RaycastHit _hit;
                Ray _ray = SceneView.lastActiveSceneView.camera.ViewportPointToRay(new Vector3(.5f, .5f, 0));
                if (Physics.Raycast(_ray, out _hit, 1000f, LayerUtility.WalkbleMask))
                if (Physics.Raycast(_ray, out _hit, 10000f, LayerUtility.WalkbleMask))
                {
                    _sceneObjData.transform.position = _hit.point;
                }
Core/MapEditor/Behavior/Bhv_MapTrigger.cs
@@ -19,6 +19,8 @@
        [HideInInspector]
        public int prevID = -1;
        [HideInInspector]
        public int nextID = -1;
        [HideInInspector]
        public List<int> eventIDList = new List<int>();
#if UNITY_EDITOR
@@ -35,6 +37,7 @@
            bw.Write((byte)triggerType);
            bw.Write((byte)type);
            bw.Write(prevID);
            bw.Write(nextID);
            bw.Write((float)System.Math.Round(transform.position.x, 2));
            bw.Write((float)System.Math.Round(transform.position.y, 2));
            bw.Write((float)System.Math.Round(transform.position.z, 2));
@@ -59,6 +62,7 @@
            triggerType = (MapTrigger.E_TriggerType)br.ReadByte();
            type = (Evt.E_EventType)br.ReadByte();
            prevID = br.ReadInt32();
            nextID = br.ReadInt32();
            float _pX = br.ReadSingle();
            float _pY = br.ReadSingle();
            float _pZ = br.ReadSingle();
@@ -98,10 +102,24 @@
            if (showDetail)
            {
                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
                EditorGUILayout.LabelField("前置触发器", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80));
                prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20));
                EditorGUILayout.LabelField("触发器类型", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80));
                triggerType = (MapTrigger.E_TriggerType)EditorGUILayout.EnumPopup(triggerType, guiSkin.customStyles[1], GUILayout.Height(20), GUILayout.Width(100));
                if (triggerType != MapTrigger.E_TriggerType.EnterStage)
                {
                    var _descript = string.Empty;
                    if (triggerType == MapTrigger.E_TriggerType.Trigger)
                    {
                        _descript = "前置ID";
                    }
                    else if (triggerType == MapTrigger.E_TriggerType.Mission)
                    {
                        _descript = "任务ID";
                    }
                    EditorGUILayout.LabelField(_descript, guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(55));
                    prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20));
                }
                EditorGUILayout.LabelField("结束触发", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(55));
                nextID = EditorGUILayout.IntField(nextID, guiSkin.textField, GUILayout.Height(20));
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
Core/MapEditor/Behavior/Bhv_MonsterData.cs
@@ -8,6 +8,8 @@
        [HideInInspector]
        public int npcID;
        [HideInInspector]
        public string resName;
        [HideInInspector]
        public byte ai;
#if UNITY_EDITOR
@@ -15,6 +17,7 @@
        public void Save(BinaryWriter bw)
        {
            bw.Write(npcID);
            bw.Write(resName);
            bw.Write(ai);
            bw.Write((float)System.Math.Round(transform.position.x, 2));
            bw.Write((float)System.Math.Round(transform.position.y, 2));
@@ -24,6 +27,7 @@
        public void Load(BinaryReader br)
        {
            npcID = br.ReadInt32();
            resName = br.ReadString();
            ai = br.ReadByte();
            float _x = br.ReadSingle();
            float _y = br.ReadSingle();
@@ -34,7 +38,11 @@
        public void Export(BinaryWriter bw)
        {
            Save(bw);
            bw.Write(npcID);
            bw.Write(ai);
            bw.Write((float)System.Math.Round(transform.position.x, 2));
            bw.Write((float)System.Math.Round(transform.position.y, 2));
            bw.Write((float)System.Math.Round(transform.position.z, 2));
        }
#endif
Core/MapEditor/Data/Event/Evt_RefreshMonster.cs
@@ -8,7 +8,6 @@
    {
        public enum E_OverCondition
        {
            None,
            DeadCount,
            Time,
        }
@@ -21,7 +20,7 @@
        }
        public MonsterData[] monsters;
        public E_OverCondition overCondition = E_OverCondition.None;
        public E_OverCondition overCondition = E_OverCondition.DeadCount;
        public E_RefreshType refreshType = E_RefreshType.All;
        /// <summary>
        /// 参数
@@ -34,6 +33,7 @@
        /// <para>刷新类型: OneByOneTime, 作为时间(毫秒)</para>
        /// </summary>
        public int refreshParam;
        public int nextEventID = -1;
        public override void Load(BinaryReader br)
        {
@@ -42,6 +42,7 @@
            refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte();
            refreshParam = br.ReadInt32();
            conditionParam = br.ReadInt32();
            nextEventID = br.ReadInt32();
            int _count = br.ReadInt32();
            monsters = new MonsterData[_count];
            for (int i = 0; i < _count; ++i)
Core/MapEditor/Data/MapTrigger.cs
@@ -9,7 +9,8 @@
        public enum E_TriggerType
        {
            Trigger,
            EnterStage
            EnterStage,
            Mission,
        }
        public Evt.E_EventType type;
Core/MapEditor/Editor/MapEditor.cs
@@ -52,6 +52,7 @@
                        _root.AddComponent<MeshCollider>();
                        _root.transform.position = _go.transform.position;
                        _root.transform.rotation = _go.transform.rotation;
                        _root.layer = LayerUtility.Walkble;
                        break;
                    }
                }
Fight/Actor/UserInputHandler.cs
@@ -268,9 +268,9 @@
            _movementVector.Normalize();
            if (_hero != null)
            {
                _hero.destForward = _movementVector;
                if (IsMoveValid())
                {
                    _hero.destForward = _movementVector;
                    if (!_hero.SkillMgr.DoingPrepareSkill
                     && (_hero.SkillMgr.CurCastSkill == null
                     || _hero.SkillMgr.CurCastSkill.SkillCompelete))
Fight/Stage/Dungeon/DungeonStage.cs
@@ -477,6 +477,23 @@
        }
    }
    public Vector3 GetCloseTransPoint(Vector3 pos)
    {
        // 遍历找到离给定点最近并且可寻路至的传送点 P
        // 找到 P点的 另一端 P1
        // 判断当前传入的点是否可以寻路至 P1
        // 不行的话重新寻找 可以的话返回 P1 的坐标
        float _compareDis;
        float _dis;
        foreach (var _p in m_TransferGroupList)
        {
        }
        return Vector3.zero;
    }
    private void SceneResourceReplace10010()
    {
        for (var i = 100101; i <= 100109; i++)
Fight/Stage/MapEditor/Game/TransferGroup.cs
@@ -7,6 +7,7 @@
    private int m_CurrentIndex;
    private byte m_Step;
    private int targetPoint;
    private int startPoint;
    private List<SFXController> m_EffectList = new List<SFXController>();
    public TransferGroup(H2Engine.MapTrasfer data)
@@ -33,6 +34,8 @@
    private Vector3 m_StartPos;
    private bool isPositive = true;
    private SFXController m_FlyingEffect;
    public void Update()
    {
        if (m_Data.transferPoints == null
@@ -58,10 +61,10 @@
                    _distance = MathUtility.DistanceSqrtXZ(_hero.Pos, _p.position);
                    if (_distance < _p.radius * _p.radius)
                    {
                        m_Step = 1;
                        m_InCreaseTime = 0;
                        _hero.Pos = m_StartPos = m_Data.transferPoints[i].position;
                        m_Step = 11;
                        GA_Hero.s_MapSwitching = true;
                        _hero.StopPathFind();
                        startPoint = i;
                        if (i == 0)
                        {
                            isPositive = true;
@@ -72,7 +75,29 @@
                            targetPoint = i - 1;
                            isPositive = false;
                        }
                        if (!_hero.IsRun())
                        {
                            _hero.RunImmediate();
                        }
                        break;
                    }
                }
                break;
            case 11:
                _p = m_Data.transferPoints[startPoint];
                var _dir = MathUtility.ForwardXZ(_p.position, _hero.Pos);
                _hero.Pos += _hero.ActorInfo.moveSpeed * Time.deltaTime * _dir;
                _hero.destForward = _hero.Forward = _dir;
                _distance = MathUtility.DistanceSqrtXZ(_p.position, _hero.Pos);
                _hero.Run();
                if (_distance < 0.01f)
                {
                    _hero.Pos = m_StartPos = m_Data.transferPoints[startPoint].position;
                    m_Step = 1;
                    m_InCreaseTime = 0;
                    m_FlyingEffect = SFXPlayUtility.Instance.PlayBattleEffect(1180, _hero);
                    _hero.Idle();
                    _hero.SwitchHeadNameBindNode(true);
                }
                break;
            case 1:
@@ -84,6 +109,7 @@
                                         m_Data.transferPoints.Length,
                                         targetPoint);
                        m_Step = 0;
                        GA_Hero.s_MapSwitching = false;
                    }
                    else
                    {
@@ -99,6 +125,7 @@
                        DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(false);
                        _hero.Play(GAStaticDefine.State_Fly);
                        _hero.Idle();
                        CameraController.Instance.LookAtTarget = _hero.Root.GetChildTransformDeeply("Bip001");
                    }
                }
                else
@@ -108,7 +135,7 @@
                break;
            case 2:// 执行坐标改变
                _p = m_Data.transferPoints[targetPoint];
                _hero.Forward = MathUtility.ForwardXZ(_p.position, _hero.Pos);
                _hero.destForward = _hero.Forward = MathUtility.ForwardXZ(_p.position, _hero.Pos);
                m_InCreaseTime += .5f * Time.deltaTime;
                _hero.Pos = Vector3.Lerp(m_StartPos, _p.position, m_InCreaseTime);
                _distance = MathUtility.DistanceSqrtXZ(_hero.Pos, _p.position);
@@ -139,6 +166,14 @@
                    {
                        m_Step = 3;
                        GA_Hero.s_MapSwitching = false;
                        if (m_FlyingEffect)
                        {
                            SFXPlayUtility.Instance.Release(m_FlyingEffect);
                            m_FlyingEffect = null;
                        }
                        _hero.SwitchHeadNameBindNode(false);
                        _hero.StopPathFind();
                        CameraController.Instance.LookAtTarget = _hero.Root;
                    }
                }
                break;
@@ -164,6 +199,13 @@
            SFXPlayUtility.Instance.Release(_effect);
        }
        m_EffectList.Clear();
        if (m_FlyingEffect)
        {
            SFXPlayUtility.Instance.Release(m_FlyingEffect);
            m_FlyingEffect = null;
        }
        m_Data = null;
    }
}
System/Skill/TreasurePotentialBehaviour.cs
@@ -17,6 +17,7 @@
        [SerializeField] Image m_PotentialIcon;
        [SerializeField] Button m_Func;
        [SerializeField] RedpointBehaviour m_Redpoint;
        [SerializeField] UIEffect m_UnlockEffect;
        int skillId = 0;
@@ -67,6 +68,16 @@
            }
        }
        public void StartUnlock()
        {
            m_UnlockEffect.Play();
        }
        public void StopUnlock()
        {
            m_UnlockEffect.StopImediatly();
        }
        private void OnFunc()
        {
            bool isOpen = model.IsPotentialUnlock(skillId);
System/Skill/TreasurePotentialLevelUpWin.cs
@@ -29,12 +29,18 @@
        [SerializeField] Button m_LevelUp;
        [SerializeField] Button m_GetWay;
        [SerializeField] Button m_Close;
        [SerializeField] UIEffect m_LevelUpEffect;
        public static int selectPotentialId = 0;
        TreasureSkillModel model
        {
            get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); }
        }
        PackModel packModel
        {
            get { return ModelCenter.Instance.GetModel<PackModel>(); }
        }
        #region Built-in
        protected override void BindController()
@@ -53,6 +59,7 @@
        {
            Display();
            model.skillLevelUpRefresh += SkillLevelUpRefresh;
            packModel.refreshItemCountEvent += RefreshItemCountEvent;
        }
        protected override void OnAfterOpen()
@@ -62,6 +69,7 @@
        protected override void OnPreClose()
        {
            model.skillLevelUpRefresh -= SkillLevelUpRefresh;
            packModel.refreshItemCountEvent -= RefreshItemCountEvent;
        }
        protected override void OnAfterClose()
@@ -74,6 +82,7 @@
            if (selectPotentialId == id)
            {
                Display();
                m_LevelUpEffect.Play();
            }
        }
@@ -133,12 +142,7 @@
                if (!isMax)
                {
                    var requireSkillConfig = SkillConfig.Get(config.LearnSkillReq);
                    TreasurePotential requirePotential;
                    if (model.TryGetPotential(config.LearnSkillReq, out requirePotential))
                    {
                        m_Item.SetItem(config.ExAttr4, config.ExAttr5);
                    }
                    m_Item.SetItem(config.ExAttr4, config.ExAttr5);
                }
            }
@@ -172,6 +176,14 @@
            }
        }
        private void RefreshItemCountEvent(PackType packType, int arg2, int itemId)
        {
            if (packType == PackType.Item && model.skillLevelUpItems.Contains(itemId))
            {
                Display();
            }
        }
    }
}
System/Skill/TreasureSkillCell.cs
@@ -43,11 +43,12 @@
            var treasureId = treasureModel.GetTreasureBySkillId(skillId);
            var isSkillUnlock = false;
            Treasure treasure;
            if (treasureModel.TryGetTreasure(treasureId, out treasure))
            TreasureSkill treasureSkill;
            if (model.TryGetSkill(skillId, out treasureSkill))
            {
                isSkillUnlock = treasure.state == TreasureState.Collected;
                isSkillUnlock = treasureSkill.level > 0;
                m_SkillLevel.text = StringUtility.Contact("LV.", treasureSkill.level);
                m_Redpoint.redpointId = treasureSkill.redpoint.id;
            }
            m_ContainerLock.gameObject.SetActive(!isSkillUnlock);
@@ -56,12 +57,7 @@
            m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill);
            m_SkillLevel.gameObject.SetActive(isSkillUnlock);
            TreasureSkill treasureSkill;
            if (model.TryGetSkill(skillId, out treasureSkill))
            {
                m_SkillLevel.text = StringUtility.Contact("LV.", treasureSkill.level);
                m_Redpoint.redpointId = treasureSkill.redpoint.id;
            }
        }
        void DisplayBase()
System/Skill/TreasureSkillModel.cs
@@ -8,7 +8,8 @@
    {
        Dictionary<int, TreasureSkill> treasureSkills = new Dictionary<int, TreasureSkill>();
        Dictionary<int, List<int>> jobTreasureSkills = new Dictionary<int, List<int>>();
        List<int> skillLevelUpItems = new List<int>();
        public List<int> skillLevelUpItems = new List<int>();
        int m_SelectSkill;
        public int selectSkill
@@ -368,7 +369,7 @@
                foreach (var potential in skill.potentials)
                {
                    if (requireRemind && funcOpen &&
                    if (requireRemind && funcOpen && IsPotentialUnlock(potential.id) &&
                        TryLevelUpPotential(potential.id, out error)
                        && skill.level > 0)
                    {
System/Skill/TreasureSkillWin.cs
@@ -28,12 +28,20 @@
        [SerializeField] Button m_GetWay;
        [SerializeField] Button m_LevelUp;
        [SerializeField] RedpointBehaviour m_LevelRedpoint;
        [SerializeField] UIEffect m_LevelUpEffect;
        [SerializeField] Transform m_ContainerMax;
        [SerializeField] TreasurePotentialBehaviour[] m_TreasurePotentials;
        List<Clock> clocks = new List<Clock>();
        TreasureSkillModel model
        {
            get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); }
        }
        PackModel packModel
        {
            get { return ModelCenter.Instance.GetModel<PackModel>(); }
        }
        #region Built-in
@@ -56,6 +64,7 @@
            model.treasureSkillRefresh += TreasureSkillRefresh;
            model.selectRefresh += SelectRefresh;
            model.skillLevelUpRefresh += SkillLevelUpRefresh;
            packModel.refreshItemCountEvent += RefreshItemCountEvent;
        }
        protected override void OnAfterOpen()
@@ -67,7 +76,18 @@
            model.treasureSkillRefresh -= TreasureSkillRefresh;
            model.selectRefresh -= SelectRefresh;
            model.skillLevelUpRefresh -= SkillLevelUpRefresh;
            packModel.refreshItemCountEvent -= RefreshItemCountEvent;
            model.SetAlreadyRemind();
            for (int i = 0; i < m_TreasurePotentials.Length; i++)
            {
                m_TreasurePotentials[i].StopUnlock();
            }
            foreach (var clock in clocks)
            {
                clock.Stop();
            }
            clocks.Clear();
        }
        protected override void OnAfterClose()
@@ -108,6 +128,7 @@
        {
            DisplaySkills();
            DisplaySkillDetial();
            DisplayPotentials();
        }
        private void DisplaySkills()
@@ -156,19 +177,28 @@
                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.Daily_EmperorRelic);
                    });
                }
            }
        }
                for (int i = 0; i < m_TreasurePotentials.Length; i++)
                {
                    if (i < skill.potentials.Count)
                    {
                        m_TreasurePotentials[i].gameObject.SetActive(true);
                        m_TreasurePotentials[i].Display(skill.potentials[i].id);
                    }
                    else
                    {
                        m_TreasurePotentials[i].gameObject.SetActive(false);
                    }
                }
        private void DisplayPotentials()
        {
            for (int i = 0; i < m_TreasurePotentials.Length; i++)
            {
                DisplayPotential(i);
            }
        }
        private void DisplayPotential(int index)
        {
            TreasureSkill skill;
            if (!model.TryGetSkill(model.selectSkill, out skill))
            {
                return;
            }
            if (index < m_TreasurePotentials.Length)
            {
                m_TreasurePotentials[index].gameObject.SetActive(index < skill.potentials.Count);
                m_TreasurePotentials[index].Display(skill.potentials[index].id);
            }
        }
@@ -204,8 +234,18 @@
        private void SelectRefresh()
        {
            for (int i = 0; i < m_TreasurePotentials.Length; i++)
            {
                m_TreasurePotentials[i].StopUnlock();
            }
            foreach (var clock in clocks)
            {
                clock.Stop();
            }
            clocks.Clear();
            m_Controller.m_Scorller.RefreshActiveCellViews();
            DisplaySkillDetial();
            DisplayPotentials();
        }
        private void SkillLevelUpRefresh(int id)
@@ -214,6 +254,51 @@
            {
                m_Controller.m_Scorller.RefreshActiveCellViews();
                DisplaySkillDetial();
                m_LevelUpEffect.Play();
                TreasureSkill skill;
                if (model.TryGetSkill(model.selectSkill, out skill))
                {
                    for (int i = 0; i < skill.potentials.Count; i++)
                    {
                        var index = i;
                        if (index < m_TreasurePotentials.Length &&
                            skill.potentials[index].openLevel == skill.level)
                        {
                            m_TreasurePotentials[index].StartUnlock();
                            Clock clock = null;
                            clock = Clock.Create(1, () =>
                              {
                                  DisplayPotential(index);
                                  if (clock != null && clocks.Contains(clock))
                                  {
                                      clocks.Remove(clock);
                                  }
                              });
                            clocks.Add(clock);
                        }
                    }
                }
            }
            else
            {
                var skillId = 0;
                if (model.ContainsSkill(id, out skillId))
                {
                    if (skillId == model.selectSkill)
                    {
                        DisplayPotentials();
                    }
                }
            }
        }
        private void RefreshItemCountEvent(PackType packType, int arg2, int itemId)
        {
            if (packType == PackType.Item && model.skillLevelUpItems.Contains(itemId))
            {
                DisplaySkillDetial();
            }
        }
    }