少年修仙传客户端代码仓库
client_Zxw
2019-03-06 90d6578412b713ec00f31a9e5a1a1d865e484803
Merge remote-tracking branch 'origin/master' into Auction
8个文件已添加
26个文件已修改
1134 ■■■■ 已修改文件
Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_Evt.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_MapTrigger.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_MonsterData.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/MonsterData.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/MapTrigger.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Editor/MapEditor.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H08_Event/DTC0820_tagMissionDict.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/SFX/SFXPlayUtility.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/HeroBehaviour.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/AttackHandler.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/SkillHelper.cs 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/UserInputHandler.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_Hero.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcClientFightNorm.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/ClientSceneManager.cs 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/ClientSceneManager.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/EventRefreshNPCHandler.cs 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/EventRefreshNPCHandler.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/IEventHandler.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/IEventHandler.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/TriggerHandler.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/TriggerHandler.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/SkillButtonEffects.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainWin/SkillContainer.cs 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/SkillModel.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasurePotentialLevelUpWin.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasureSkillModel.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/TreasureSkillWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/UI3DModelExhibition.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/UI3DModelFactory.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/RuntimeLogUtility.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs
@@ -9,13 +9,15 @@
public class PlayerSkillDatas
{
    private Dictionary<int, PlayerSkillData> _playerSkills = new Dictionary<int, PlayerSkillData>();
    private Dictionary<int, PlayerSkillData> _quickSkills = new Dictionary<int, PlayerSkillData>();
    public static event Action OnQuickSkillRefresh;
    public static event Action OnRefreshSkill;
    private Dictionary<int, PlayerSkillData> m_PlayerSkills = new Dictionary<int, PlayerSkillData>();
    private Dictionary<int, PlayerSkillData> m_QuickSkills = new Dictionary<int, PlayerSkillData>();
    private Dictionary<int, List<int>> filterPlayerSkillDic = new Dictionary<int, List<int>>();
    private Dictionary<int, int> filterQuickSkillDic = new Dictionary<int, int>();
    public static event Action OnQuickSkillRefresh;
    public static event Action OnRefreshSkill;
    private bool hasInitQuickSkill = false;
    private bool isServerPrepare = false;
    SkillModel m_Model;
@@ -38,30 +40,32 @@
        }
        PlayerSkillData data = null;
        _playerSkills.TryGetValue(vNetData.NewSkillID, out data);
        m_PlayerSkills.TryGetValue(vNetData.NewSkillID, out data);
        if (data == null)
        {
            data = new PlayerSkillData(vNetData.NewSkillID, 1);
            _playerSkills.Add(data.id, data);
            m_PlayerSkills.Add(data.id, data);
        }
        model.CheckEquipPassSkill(data);
        bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
        if (hasInitQuickSkill)
        {
            int pos = ContainsQuickSkillType(data.id);
            if (pos != -1)
            {
                SetQuickSkill(pos, data.id);
            }
        }
        PlayerSkillData olddata = null;
        _playerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
        m_PlayerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
        if (olddata != null)
        {
            if (hasInitQuickSkill)
            {
                int pos = ContainsQuickSkill(olddata.id);
                if (pos != -1 && !fitter)
                {
                    SetQuickSkill(pos, data.id);
                }
            }
            _playerSkills.Remove(vNetData.OldSkillID);
            m_PlayerSkills.Remove(vNetData.OldSkillID);
            olddata = null;
        }
@@ -85,10 +89,10 @@
    public void SetQuickSkills()
    {
        _quickSkills.Clear();
        m_QuickSkills.Clear();
        for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
        {
            _quickSkills.Add(i, null);
            m_QuickSkills.Add(i, null);
        }
        for (int i = 0; i <= SkillModel.QUICK_SKILL_COUNT; i++)
        {
@@ -100,6 +104,11 @@
                {
                    continue;
                }
                var config = SkillConfig.Get(id);
                if (config == null)
                {
                    continue;
                }
                PlayerSkillData data = GetSKillById(id);
                if (data == null)
                {
@@ -107,7 +116,7 @@
                }
                if (!GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id))
                {
                    _quickSkills[i] = data;
                    m_QuickSkills[i] = data;
                }
            }
        }
@@ -129,7 +138,10 @@
    public void UpdateQuickSkill(PlayerSkillData data)
    {
        if (!hasInitQuickSkill) return;
        if (!hasInitQuickSkill)
        {
            return;
        }
        bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
        if (fitter || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        {
@@ -169,20 +181,20 @@
    public PlayerSkillData GetQuickSkillByPos(int pos)
    {
        PlayerSkillData data = null;
        _quickSkills.TryGetValue(pos, out data);
        m_QuickSkills.TryGetValue(pos, out data);
        return data;
    }
    public PlayerSkillData GetSKillById(int id)
    {
        PlayerSkillData data = null;
        _playerSkills.TryGetValue(id, out data);
        m_PlayerSkills.TryGetValue(id, out data);
        return data;
    }
    public Dictionary<int, PlayerSkillData> GetQuickSkills()
    {
        return _quickSkills;
        return m_QuickSkills;
    }
    public void SetQuickSkill(int pos, int id)
@@ -201,17 +213,16 @@
        {
            return;
        }
        if (data.skillCfg == null || PlayerDatas.Instance.baseData.LV < data.skillCfg.LearnLVReq
            || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        if (data.skillCfg == null || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        {
            ServerTipDetails.DisplayNormalTip(Language.Get("L1009"));
            return;
        }
        bool change = false;
        for (int i = 0; i < _quickSkills.Count; i++)
        for (int i = 0; i < m_QuickSkills.Count; i++)
        {
            PlayerSkillData skill = null;
            _quickSkills.TryGetValue(i, out skill);
            m_QuickSkills.TryGetValue(i, out skill);
            if (skill == null)
            {
                continue;
@@ -223,21 +234,21 @@
            else if (skill.id == id)
            {
                change = true;
                PlayerSkillData temp = _quickSkills[pos];
                _quickSkills[pos] = skill;
                _quickSkills[i] = temp;
                PlayerSkillData temp = m_QuickSkills[pos];
                m_QuickSkills[pos] = skill;
                m_QuickSkills[i] = temp;
                break;
            }
        }
        if (!change)
        {
            _quickSkills[pos] = data;
            m_QuickSkills[pos] = data;
        }
        for (int i = 0; i < _quickSkills.Count; i++)
        for (int i = 0; i < m_QuickSkills.Count; i++)
        {
            PlayerSkillData skill = null;
            _quickSkills.TryGetValue(i, out skill);
            m_QuickSkills.TryGetValue(i, out skill);
            if (skill != null)
            {
                string val = MathUtils.Convert10To64(skill.id);
@@ -257,15 +268,34 @@
    public Dictionary<int, PlayerSkillData> GetAllSkill()
    {
        return _playerSkills;
        return m_PlayerSkills;
    }
    public int ContainsQuickSkill(int id)
    {
        foreach (int pos in _quickSkills.Keys)
        foreach (int pos in m_QuickSkills.Keys)
        {
            if (_quickSkills[pos] == null) continue;
            if (_quickSkills[pos].id == id) return pos;
            if (m_QuickSkills[pos] == null) continue;
            if (m_QuickSkills[pos].id == id) return pos;
        }
        return -1;
    }
    public int ContainsQuickSkillType(int id)
    {
        foreach (int pos in m_QuickSkills.Keys)
        {
            if (m_QuickSkills[pos] == null)
            {
                continue;
            }
            var quickSkillConfig = SkillConfig.Get(m_QuickSkills[pos].id);
            var skillConfig = SkillConfig.Get(id);
            if (quickSkillConfig != null && skillConfig != null
                && quickSkillConfig.SkillTypeID == skillConfig.SkillTypeID)
            {
                return pos;
            }
        }
        return -1;
    }
@@ -296,7 +326,7 @@
    public PlayerSkillData GetSkillBySkillTypeID(int typeID)
    {
        foreach (var skill in _playerSkills.Values)
        foreach (var skill in m_PlayerSkills.Values)
        {
            if (skill.typeID == typeID)
                return skill;
@@ -307,7 +337,7 @@
    public int GetSkillCountByType(int _type)
    {
        var count = 0;
        foreach (var _skill in _playerSkills.Values)
        foreach (var _skill in m_PlayerSkills.Values)
        {
            if (_skill.skillCfg.FuncType == _type)
            {
@@ -319,8 +349,8 @@
    public void ClearSkillData()
    {
        _quickSkills.Clear();
        _playerSkills.Clear();
        m_QuickSkills.Clear();
        m_PlayerSkills.Clear();
    }
}
Core/MapEditor/Behavior/Bhv_Evt.cs
@@ -43,9 +43,7 @@
        public virtual void Export(BinaryWriter bw)
        {
            bw.Write((byte)type);
            Debug.LogFormat("type: {0}", type);
            bw.Write(id);
            Debug.LogFormat("id: {0}", id);
        }
#endif
    }
Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs
@@ -71,7 +71,23 @@
            int _count = br.ReadInt32();
            for (int i = 0; i < _count; ++i)
            {
                var _go = new GameObject();
                var _resName = br.ReadString();
                GameObject _go = null;
                if (!string.IsNullOrEmpty(_resName.Trim()))
                {
                    string _path = "Assets/ResourcesOut/Mob/Prefab_Race_" + _resName + ".prefab";
                    _go = AssetDatabase.LoadAssetAtPath<GameObject>(_path);
                    if (_go)
                    {
                        _go = Instantiate(_go);
                    }
                }
                else
                {
                    _go = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                }
                _go.transform.SetParent(transform);
                _go.transform.localPosition = Vector3.zero;
                _go.transform.eulerAngles = Vector3.zero;
@@ -171,10 +187,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(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));
                        EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(50));
                        EditorGUILayout.LabelField(monsterList[i].npcID.ToString(), guiSkin.textField, GUILayout.Height(20), GUILayout.Width(70));
                        EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(50));
                        EditorGUILayout.LabelField(monsterList[i].resName, guiSkin.textField, GUILayout.Height(20), GUILayout.Width(70));
                        if (GUILayout.Button("定高", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
                        {
                            Vector3 _pos = monsterList[i].transform.position;
@@ -246,7 +262,7 @@
            _obj.transform.localScale = Vector3.one;
            var _monsterData = _obj.AddComponent<Bhv_MonsterData>();
            _monsterData.npcID = id;
            _monsterData.npcID = (uint)id;
            _monsterData.resName = name;
            return _monsterData;
Core/MapEditor/Behavior/Bhv_MapTrigger.cs
@@ -85,7 +85,10 @@
            EditorGUILayout.BeginVertical(guiSkin.box);
            EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
            EditorGUI.indentLevel += 1;
            showDetail = EditorGUILayout.Foldout(showDetail, "  触发器ID:" + id, true, guiSkin.customStyles[3]);
            showDetail = EditorGUILayout.Foldout(showDetail, "", true, guiSkin.customStyles[3]);
            EditorGUILayout.LabelField("触发器ID:", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(70));
            id = EditorGUILayout.IntField(id, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(60));
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("查找", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
            {
                Selection.activeGameObject = gameObject;
Core/MapEditor/Behavior/Bhv_MonsterData.cs
@@ -6,7 +6,7 @@
    public class Bhv_MonsterData : MonoBehaviour
    {
        [HideInInspector]
        public int npcID;
        public uint npcID;
        [HideInInspector]
        public string resName;
        [HideInInspector]
@@ -16,8 +16,8 @@
        public void Save(BinaryWriter bw)
        {
            bw.Write(npcID);
            bw.Write(resName);
            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));
@@ -26,8 +26,7 @@
        public void Load(BinaryReader br)
        {
            npcID = br.ReadInt32();
            resName = br.ReadString();
            npcID = br.ReadUInt32();
            ai = br.ReadByte();
            float _x = br.ReadSingle();
            float _y = br.ReadSingle();
Core/MapEditor/Data/Event/MonsterData.cs
@@ -6,13 +6,13 @@
    [System.Serializable]
    public class MonsterData
    {
        public int npcID;
        public uint npcID;
        public Vector3 position;
        public int ai;
        public void Load(BinaryReader br)
        {
            npcID = br.ReadInt32();
            npcID = br.ReadUInt32();
            ai = br.ReadByte();
            float _x = br.ReadSingle();
            float _y = br.ReadSingle();
Core/MapEditor/Data/MapTrigger.cs
@@ -16,6 +16,7 @@
        public Evt.E_EventType type;
        public E_TriggerType triggerType;
        public int prevID;
        public int nextID;
        public int id;
        public int[] evevntIDs;
        public Vector3 position;
@@ -28,6 +29,7 @@
            triggerType = (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();
Core/MapEditor/Editor/MapEditor.cs
@@ -82,6 +82,14 @@
        public override void OnInspectorGUI()
        {
            if (GUILayout.Button("测试"))
            {
                var m = MapData.LoadFormFile(10120);
                if (m == null)
                {
                    Debug.Log("加载失败");
                }
            }
            if (gUISkin == null)
            {
                gUISkin = AssetDatabase.LoadAssetAtPath<GUISkin>("Assets/Scripts/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin");
Core/NetworkPackage/DTCFile/ServerPack/H08_Event/DTC0820_tagMissionDict.cs
@@ -28,7 +28,8 @@
            taskmodel.TaskRefreshes((int)vNetData.MissionID, vNetData.DictKeyLen, vNetData.DictKey, (int)vNetData.DictValue);//任务字典
            taskmodel.Task0820(vNetData);
            taskmodel.GetTaskGetOnNow((int)vNetData.MissionID, vNetData.DictKey);
            PreFightMission.Instance.HandleNewPlayerMission(vNetData);
            // PreFightMission.Instance.HandleNewPlayerMission(vNetData);
            ClientSceneManager.Instance.Handle_0820(vNetData);
        }
    }
Core/SFX/SFXPlayUtility.cs
@@ -148,6 +148,7 @@
        }
        EffectConfig _effectModel = EffectConfig.Get(id);
        if (_effectModel.setParent > 0)
        {
            _controller.transform.SetParent(parent);
Fight/Actor/HeroBehaviour.cs
@@ -362,7 +362,7 @@
        skill.hitTargetList.Clear();
        skill.hitClientBattleTargetList.Clear();
        SoSkill _soSkill = ScriptableObjectLoader.LoadSoSkill(skill.id);
        SoSkill _soSkill = ScriptableObjectLoader.LoadSoSkill(skill.skillInfo.config.SkillTypeID);
        if (_soSkill == null)
        {
            DebugEx.LogWarningFormat("技能: {0} 没有配置SoSkill文件, 将没有范围检测能力.", skill.id);
@@ -894,6 +894,11 @@
                        m_Hero.SelectTarget = null;
                    }
                    var _clientNpc = _target as GA_NpcClientFightNorm;
                    if (_clientNpc.belongEventID != -1)
                    {
                        ClientSceneManager.Instance.NpcDead(_clientNpc.belongEventID, _clientNpc);
                    }
                    // 前期战斗只发送石头人的
                    //if (1000 == _target.NpcConfig.NPCID)
                    //{
Fight/Actor/Skill/AttackHandler.cs
@@ -1225,4 +1225,52 @@
        public ulong CurHP;
        public uint CurHPEx;
    }
    public static bool CanAttack(E_SkillCastTarget castTarget, GActorFight caster, GActorFight target)
    {
        if (target == null || caster == null || caster.ActorInfo.serverDie)
        {
            return false;
        }
        switch (castTarget)
        {
            case E_SkillCastTarget.None:
                return false;
            case E_SkillCastTarget.Self:
                return target == caster;
            case E_SkillCastTarget.TeamMate:
                return target.ActorInfo.teamID == caster.ActorInfo.teamID;
            case E_SkillCastTarget.Friend:
                break;
            case E_SkillCastTarget.CanAttacked:
                return target.CanAtked();
            case E_SkillCastTarget.SelfAndFriend:
                return target == caster;
            case E_SkillCastTarget.PlayerDeadBody:
                return target.ActorInfo.serverDie && target is GActorPlayerBase;
            case E_SkillCastTarget.UnDeadPlayer:
                return !target.ActorInfo.serverDie && target is GActorPlayerBase;
            case E_SkillCastTarget.CanAttackedMonster:
                return target is GA_NpcFightNorm && target.CanAtked();
            case E_SkillCastTarget.CanAttackedPlayer:
                return target is GActorPlayerBase && target.CanAtked();
            case E_SkillCastTarget.All:
                return true;
            case E_SkillCastTarget.PetToOwner:
                return target.ActorInfo.ownerSID == caster.ServerInstID && caster is GA_Pet;
            case E_SkillCastTarget.SummonToOwner:
                return target.ActorInfo.ownerSID == caster.ServerInstID && caster is GA_NpcSummonFight;
            case E_SkillCastTarget.Monster:
                var _npc = target as GActorNpcFight;
                if (_npc == null)
                {
                    return false;
                }
                return _npc.NpcConfig.IsBoss < 2;
            case E_SkillCastTarget.FriendNpc:
                return (target is GActorNpcFight && target.ActorInfo.faction != 0 && target.ActorInfo.faction == PlayerDatas.Instance.baseData.faction);
        }
        return true;
    }
}
Fight/Actor/Skill/SkillHelper.cs
@@ -8,7 +8,7 @@
/// </summary>
[XLua.LuaCallCSharp]
public class SkillHelper : Singleton<SkillHelper>
{
    private Dictionary<int, SkillInfo> m_SkillInfoDict;
    private Dictionary<int, List<SkillInfo>> m_SkillToSpSkill;
@@ -119,49 +119,8 @@
        {
            effectValue = new Dictionary<int, EffectValue>();
            soFile = ScriptableObjectLoader.LoadSoSkill(skillID);
            if (soFile)
            {
                HasHitEvent = soFile.animationEventList.Count > 0;
                if (HasHitEvent)
                {
                    HasHitEvent = false;
                    SoConfigBase _soConfig = null;
                    int _param;
                    int _id;
                    SoSkill.E_AttackType _type;
                    for (int i = 0; i < soFile.animationEventList.Count; ++i)
                    {
                        if (soFile.animationEventList[i].frameEventType != E_FrameEventType.OnSkillEvent)
                        {
                            continue;
                        }
                        _soConfig = null;
                        _param = soFile.animationEventList[i].intParam;
                        _id = SoSkill.GetFrameEventId(_param);
                        _type = SoSkill.GetAttactType(_param);
                        if (_type == SoSkill.E_AttackType.Sweep)
                        {
                            _soConfig = ScriptableObjectLoader.LoadSoSweepHit(_id);
                        }
                        else if (_type == SoSkill.E_AttackType.FlyObject)
                        {
                            _soConfig = ScriptableObjectLoader.LoadSoFlyObject(_id);
                        }
                        if (_soConfig != null && _soConfig.floodPercent != 0)
                        {
                            HasHitEvent = true;
                            break;
                        }
                    }
                }
            }
            config = SkillConfig.Get(skillID);
            if (config != null)
            {
                if (config.Effect1 > 0)
@@ -225,6 +184,48 @@
                    effectValue[config.Effect5] = _effectValue;
                }
            }
            soFile = ScriptableObjectLoader.LoadSoSkill(config.SkillTypeID);
            if (soFile)
            {
                HasHitEvent = soFile.animationEventList.Count > 0;
                if (HasHitEvent)
                {
                    HasHitEvent = false;
                    SoConfigBase _soConfig = null;
                    int _param;
                    int _id;
                    SoSkill.E_AttackType _type;
                    for (int i = 0; i < soFile.animationEventList.Count; ++i)
                    {
                        if (soFile.animationEventList[i].frameEventType != E_FrameEventType.OnSkillEvent)
                        {
                            continue;
                        }
                        _soConfig = null;
                        _param = soFile.animationEventList[i].intParam;
                        _id = SoSkill.GetFrameEventId(_param);
                        _type = SoSkill.GetAttactType(_param);
                        if (_type == SoSkill.E_AttackType.Sweep)
                        {
                            _soConfig = ScriptableObjectLoader.LoadSoSweepHit(_id);
                        }
                        else if (_type == SoSkill.E_AttackType.FlyObject)
                        {
                            _soConfig = ScriptableObjectLoader.LoadSoFlyObject(_id);
                        }
                        if (_soConfig != null && _soConfig.floodPercent != 0)
                        {
                            HasHitEvent = true;
                            break;
                        }
                    }
                }
            }
        }
    }
Fight/Actor/UserInputHandler.cs
@@ -186,11 +186,6 @@
            return;
        }
        if (!IsMoveValid())
        {
            return;
        }
        if (Input.GetMouseButtonDown(0))
        {
            if (UIUtility.IsPointerOverGameObject())
@@ -235,6 +230,11 @@
                OnClickedFloor(_destPosition);
            }
            if (!IsMoveValid())
            {
                return;
            }
            m_PrevClickPosition = _destPosition;
            PlayerDatas.Instance.hero.MoveToPosition(_destPosition);
Fight/GameActor/GA_Hero.cs
@@ -1019,6 +1019,20 @@
            return;
        }
        if (SelectTarget != null)
        {
            E_SkillCastTarget _targetType = (E_SkillCastTarget)(_skill.skillInfo.config.Tag / 10);
            E_SkillCastType _castType = (E_SkillCastType)(_skill.skillInfo.config.Tag % 10);
            if (_castType == E_SkillCastType.NeedTarget)
            {
                if (!AttackHandler.CanAttack(_targetType, this, SelectTarget as GActorNpcFight))
                {
                    SysNotifyMgr.Instance.ShowTip("SkillSelectedTarget");
                    return;
                }
            }
        }
        if (!PreFightMission.Instance.IsFinished())
        {
            if (skillID == 190)
Fight/GameActor/GA_NpcClientFightNorm.cs
@@ -3,6 +3,7 @@
public class GA_NpcClientFightNorm : GActorNpcFight
{
    public int belongEventID;
    private HeadUpName m_HeadUpName;
    private LifeBar m_LifeBar;
@@ -135,6 +136,8 @@
            m_Obstacle = null;
        }
        belongEventID = -1;
        base.OnUnit();
    }
Fight/Stage/Dungeon/DungeonStage.cs
@@ -8,9 +8,7 @@
public class DungeonStage : Stage
{
    public static Dictionary<MapArea.E_Type, List<MapArea>> s_MapAreaDict;
    private static List<TransferGroup> m_TransferGroupList = new List<TransferGroup>();
    public static MapType CurrentMapType;
    private H2Engine.MapData mapData;
    public override void Initialize()
    {
@@ -31,11 +29,6 @@
        SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
        SceneResourcesReplace();
        foreach (var _t in m_TransferGroupList)
        {
            _t.UnInit();
        }
        m_TransferGroupList.Clear();
        // 做一些前期战斗的预加载
        // if (!PreFightMission.Instance.IsFinished())
        // {
@@ -114,7 +107,7 @@
            _hero.SkillMgr.ResetAllCD();
        }
        HandleMapData();
        ClientSceneManager.Instance.Init();
        GA_Hero.s_MapSwitching = false;
    }
@@ -124,7 +117,6 @@
        base.UnInitialize();
        StopAllCoroutines();
        mapData = null;
        if (s_MapAreaDict != null)
        {
@@ -150,7 +142,7 @@
            CameraController.Instance.StopZoom();
            CameraController.Instance.StopShake();
        }
        ClientSceneManager.Instance.UnInit();
        GAMgr.Instance.UnInit();
        DropItemManager.ReleaseAll();
        SFXPlayUtility.Instance.Unitialize();
@@ -168,10 +160,7 @@
        DropItemManager.Update();
        foreach (var _trasfer in m_TransferGroupList)
        {
            _trasfer.Update();
        }
        ClientSceneManager.Instance.Update();
        // if (PreFightMission.Instance.IsFinished() == false)
        // {
@@ -274,48 +263,7 @@
        }
    }
    private void HandleMapData()
    {
        mapData = H2Engine.MapData.LoadFormFile(PlayerDatas.Instance.baseData.MapID);
        if (mapData == null)
        {
            return;
        }
        // 目前版本只处理刷场景物件
        // foreach (var _trigger in mapData.triggers)
        // {
        //     if (_trigger.triggerType != H2Engine.MapTrigger.E_TriggerType.EnterStage)
        //     {
        //         continue;
        //     }
        //     foreach (var _id in _trigger.evevntIDs)
        //     {
        //         var _event = mapData.eventDict[_id];
        //         if (_event.type == H2Engine.Evt.E_EventType.SceneObject)
        //         {
        //             var _refreshSceneObject = _event as H2Engine.Evt_RefreshSceneObject;
        //             if (_refreshSceneObject != null)
        //             {
        //                 foreach (var _sceneObjData in _refreshSceneObject.sceneObjects)
        //                 {
        //                     var _prefab = InstanceResourcesLoader.LoadModelPrefab(InstanceResourcesLoader.raceSuffix, _sceneObjData.resName, false);
        //                     if (_prefab)
        //                     {
        //                         var _go = GameObject.Instantiate(_prefab);
        //                         _go.transform.position = _sceneObjData.position;
        //                         _go.transform.eulerAngles = _sceneObjData.eulerAngles;
        //                     }
        //                 }
        //             }
        //         }
        //     }
        // }
        foreach (var _trasfer in mapData.transfers)
        {
            m_TransferGroupList.Add(new TransferGroup(_trasfer));
        }
    }
    private void HandleAutoFight()
    {
@@ -475,23 +423,6 @@
            default:
                break;
        }
    }
    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()
Fight/Stage/MapEditor/Game/ClientSceneManager.cs
New file
@@ -0,0 +1,307 @@
using H2Engine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClientSceneManager : Singleton<ClientSceneManager>
{
    private H2Engine.MapData m_MapData;
    private List<TransferGroup> m_TransferGroupList = new List<TransferGroup>();
    private Dictionary<int, IEventHandler> m_EventHandlerDict = new Dictionary<int, IEventHandler>();
    private List<IEventHandler> m_ReadyRemoveEventHandlerList = new List<IEventHandler>();
    private Dictionary<int, uint> m_TriggerIDToMissionIDDict = new Dictionary<int, uint>();
    private List<int> m_ReadyRemoveTriggerList = new List<int>();
    private Dictionary<int, List<GActorNpcFight>> m_EventActorDict = new Dictionary<int, List<GActorNpcFight>>();
    private IEnumerator DelayUnTrigger(int id)
    {
        while (m_MapData == null)
        {
            yield return null;
        }
        Debug.LogFormat("=           结束触发: {0}             =", id);
        foreach (var _trigger in m_MapData.triggers)
        {
            if (_trigger.id != id)
            {
                continue;
            }
            if (_trigger.evevntIDs == null
             || _trigger.evevntIDs.Length == 0)
            {
                continue;
            }
            Debug.LogFormat("=           触发器有: {0} 个事件             =", _trigger.evevntIDs.Length);
            foreach (var _eventID in _trigger.evevntIDs)
            {
                if (!m_EventActorDict.ContainsKey(_eventID))
                {
                    continue;
                }
                if (m_EventActorDict[_eventID] == null
                 || m_EventActorDict[_eventID].Count == 0)
                {
                    continue;
                }
                Debug.LogFormat("=           残留有: {0} 个NPC             =", m_EventActorDict[_eventID].Count);
                foreach (var _npc in m_EventActorDict[_eventID])
                {
                    _npc.KillerServerInstID = PlayerDatas.Instance.PlayerId;
                    _npc.ActorInfo.serverDie = true;
                    GAMgr.Instance.ServerDie(_npc.ServerInstID);
                    GAMgr.Instance.DelayDie(_npc);
                    _npc.Die(PlayerDatas.Instance.PlayerId);
                }
                m_EventHandlerDict.Remove(_eventID);
            }
            break;
        }
    }
    public void NpcBorn(int eventID, GActorNpcFight npc)
    {
        if (!m_EventActorDict.ContainsKey(eventID))
        {
            m_EventActorDict.Add(eventID, new List<GActorNpcFight>());
        }
        if (!m_EventActorDict[eventID].Contains(npc))
        {
            m_EventActorDict[eventID].Add(npc);
            Debug.LogFormat("= 为事件: {0} 增加Npc: {1}", eventID, npc.ServerInstID);
        }
    }
    public void NpcDead(int eventID, GActorNpcFight npc)
    {
        if (eventID < 0 || npc == null)
        {
            return;
        }
        var _eventHandler = GetEventHandler(eventID) as EventRefreshNPCHandler;
        if (_eventHandler != null)
        {
            _eventHandler.NpcDead(npc.NpcConfig.NPCID);
        }
        if (m_EventActorDict.ContainsKey(eventID))
        {
            if (m_EventActorDict[eventID].Contains(npc))
            {
                m_EventActorDict[eventID].Remove(npc);
            }
        }
    }
    public void Handle_0820(H0820_tagMissionDict package)
    {
        m_ReadyRemoveTriggerList.Clear();
        foreach (var _triggerID in m_TriggerIDToMissionIDDict.Keys)
        {
            if (m_TriggerIDToMissionIDDict[_triggerID] == package.MissionID)
            {
                if (package.DictKey.Equals("state"))
                {
                    if (package.DictValue > 2)
                    {
                        m_ReadyRemoveTriggerList.Add(_triggerID);
                        SnxxzGame.Instance.StartCoroutine(DelayUnTrigger(_triggerID));
                    }
                }
            }
        }
        foreach (var _id in m_ReadyRemoveTriggerList)
        {
            m_TriggerIDToMissionIDDict.Remove(_id);
        }
        if (package.DictKey.Equals("riggerID"))
        {
            int _triggerID = (int)package.DictValue;
            if (_triggerID == 0)
            {
                foreach (var _removeTriggerID in m_TriggerIDToMissionIDDict.Keys)
                {
                    SnxxzGame.Instance.StartCoroutine(DelayUnTrigger(_removeTriggerID));
                }
            }
            else
            {
                m_TriggerIDToMissionIDDict[_triggerID] = package.MissionID;
                SnxxzGame.Instance.StartCoroutine(DelayTrigger(package.MissionID, _triggerID));
            }
        }
        else if (package.DictKey.Equals("xinshou"))
        {
            if (package.DictValue == 0)
            {
                Debug.LogFormat("=           退出了前端模式             =");
            }
            else
            {
                Debug.LogFormat("=           进入了前端模式             =");
            }
        }
    }
    private bool m_Inited = false;
    public void Init()
    {
        if (m_Inited)
        {
            return;
        }
        m_Inited = true;
        int _mapID = PlayerDatas.Instance.baseData.MapID;
        m_MapData = MapData.LoadFormFile(_mapID);
        if (m_MapData == null)
        {
            return;
        }
        foreach (var _trasfer in m_MapData.transfers)
        {
            m_TransferGroupList.Add(new TransferGroup(_trasfer));
        }
    }
    public void UnInit()
    {
        foreach (var _t in m_TransferGroupList)
        {
            _t.UnInit();
        }
        m_TransferGroupList.Clear();
        foreach (var _triggerID in m_TriggerIDToMissionIDDict.Keys)
        {
            DelayUnTrigger(_triggerID);
        }
        m_Inited = false;
    }
    public void Update()
    {
        foreach (var _trasfer in m_TransferGroupList)
        {
            _trasfer.Update();
        }
        m_ReadyRemoveEventHandlerList.Clear();
        foreach (var _eventHandler in m_EventHandlerDict.Values)
        {
            _eventHandler.Update();
            if (_eventHandler.IsCompelete())
            {
                m_ReadyRemoveEventHandlerList.Add(_eventHandler);
            }
        }
        foreach (var _eventHandler in m_ReadyRemoveEventHandlerList)
        {
            _eventHandler.UnInit();
            m_EventHandlerDict.Remove(_eventHandler.GetEventID());
        }
    }
    public IEventHandler GetEventHandler(int id)
    {
        if (m_EventHandlerDict.ContainsKey(id))
        {
            return m_EventHandlerDict[id];
        }
        return null;
    }
    public Vector3 GetCloseTransPoint(Vector3 pos)
    {
        // 遍历找到离给定点最近并且可寻路至的传送点 P
        // 找到 P点的 另一端 P1
        // 判断当前传入的点是否可以寻路至 P1
        // 不行的话重新寻找 可以的话返回 P1 的坐标
        float _compareDis;
        float _dis;
        foreach (var _p in m_TransferGroupList)
        {
        }
        return Vector3.zero;
    }
    private IEnumerator DelayTrigger(uint missionID, int triggerID)
    {
        if (triggerID == 0)
        {
            yield return SnxxzGame.Instance.StartCoroutine(DelayUnTrigger(triggerID));
            yield break;
        }
        while (StageLoad.Instance.isLoading)
        {
            yield return null;
        }
        Debug.LogFormat("=           任务: {0} 触发: {1}             =", missionID, triggerID);
        if (m_MapData == null)
        {
            Init();
        }
        if (m_MapData.triggers == null
         || m_MapData.triggers.Length == 0)
        {
            yield break;
        }
        foreach (var _trigger in m_MapData.triggers)
        {
            if (_trigger.id != triggerID)
            {
                continue;
            }
            if (_trigger.evevntIDs == null
             || _trigger.evevntIDs.Length == 0)
            {
                continue;
            }
            foreach (var _eventID in _trigger.evevntIDs)
            {
                if (!m_MapData.eventDict.ContainsKey(_eventID))
                {
                    continue;
                }
                var _event = m_MapData.eventDict[_eventID];
                if (_event.type == Evt.E_EventType.Enemy)
                {
                    var _refreshEvent = new EventRefreshNPCHandler();
                    _refreshEvent.Init(_event as Evt_RefreshMonster);
                    m_EventHandlerDict.Add(_refreshEvent.GetEventID(), _refreshEvent);
                }
            }
            break;
        }
    }
}
Fight/Stage/MapEditor/Game/ClientSceneManager.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: b5880d5e8e289c74cab760bb8367869c
timeCreated: 1551698978
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Fight/Stage/MapEditor/Game/EventRefreshNPCHandler.cs
New file
@@ -0,0 +1,139 @@
using UnityEngine;
using H2Engine;
public class EventRefreshNPCHandler : IEventHandler
{
    private Evt_RefreshMonster m_Evt = null;
    private int m_DeadCount = 0;
    private float m_Duration = 0;
    private int m_RefreshCount = -1;
    private float m_RefreshInterval = 0;
    public int GetEventID()
    {
        if (m_Evt != null)
        {
            return m_Evt.id;
        }
        return -1;
    }
    public Evt.E_EventType GetEventType()
    {
        return Evt.E_EventType.Enemy;
    }
    public void Init(Evt evt)
    {
        m_Evt = evt as Evt_RefreshMonster;
        m_DeadCount = 0;
        m_Duration = 0;
        m_RefreshCount = -1;
        m_RefreshInterval = 0;
    }
    public void Update()
    {
        if (IsCompelete() && m_Duration > 0)
        {
            return;
        }
        m_Duration += Time.deltaTime;
        // 此模式下刷出第一只怪
        if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.OneByOnePrevDie)
        {
            if (m_RefreshCount == -1)
            {
                RefreshNpc();
            }
        }
        else if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.All)
        {
            RefreshAll();
        }
        else if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.OneByOneTime)
        {
            m_RefreshInterval += Time.deltaTime;
            if (m_RefreshInterval > m_Evt.refreshParam)
            {
                m_RefreshInterval = 0;
                RefreshNpc();
            }
        }
    }
    public void NpcDead(int npcID)
    {
        m_DeadCount += 1;
        Debug.LogFormat("通知死亡: {0}, 当前计数: {1}", npcID, m_DeadCount);
        if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.OneByOnePrevDie)
        {
            RefreshNpc();
        }
        CA225_tagCMClientTaskCount _a225 = new CA225_tagCMClientTaskCount
        {
            CountID = (uint)npcID
        };
        GameNetSystem.Instance.SendInfo(_a225);
    }
    private void RefreshNpc()
    {
        m_RefreshCount += 1;
        if (m_RefreshCount >= 0 && m_RefreshCount < m_Evt.monsters.Length)
        {
            var _data = m_Evt.monsters[m_RefreshCount];
            var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>(_data.npcID, E_ActorGroup.Enemy);
            _npc.Pos = _data.position;
            _npc.belongEventID = m_Evt.id;
            ClientSceneManager.Instance.NpcBorn(m_Evt.id, _npc);
        }
    }
    private void RefreshAll()
    {
        if (m_RefreshCount < m_Evt.monsters.Length)
        {
            foreach (var _data in m_Evt.monsters)
            {
                var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>(_data.npcID, E_ActorGroup.Enemy);
                _npc.Pos = _data.position;
                _npc.belongEventID = m_Evt.id;
                ClientSceneManager.Instance.NpcBorn(m_Evt.id, _npc);
            }
            m_RefreshCount = m_Evt.monsters.Length;
        }
    }
    public void UnInit()
    {
        Debug.LogFormat("事件: {0} => UnInit()", m_Evt.id);
    }
    public bool IsCompelete()
    {
        if (m_Evt == null)
        {
            return true;
        }
        if (m_Evt.overCondition == Evt_RefreshMonster.E_OverCondition.DeadCount)
        {
            if (m_Evt.conditionParam <= 0)
            {
                return m_DeadCount >= m_Evt.monsters.Length;
            }
            return m_DeadCount >= m_Evt.conditionParam;
        }
        else if (m_Evt.overCondition == Evt_RefreshMonster.E_OverCondition.Time)
        {
            return m_Duration >= m_Evt.conditionParam && m_DeadCount >= m_Evt.monsters.Length;
        }
        return false;
    }
}
Fight/Stage/MapEditor/Game/EventRefreshNPCHandler.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c7f7e93eba93cd044bdd4b6ddc9aa334
timeCreated: 1551667471
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Fight/Stage/MapEditor/Game/IEventHandler.cs
New file
@@ -0,0 +1,11 @@
using H2Engine;
public interface IEventHandler
{
    int GetEventID();
    Evt.E_EventType GetEventType();
    void Init(Evt evt);
    bool IsCompelete();
    void Update();
    void UnInit();
}
Fight/Stage/MapEditor/Game/IEventHandler.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8831940d4fa557e42825777dcd3ca1b7
timeCreated: 1551684662
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Fight/Stage/MapEditor/Game/TriggerHandler.cs
New file
@@ -0,0 +1,12 @@
using H2Engine;
using UnityEngine;
public class TriggerHandler
{
    private MapTrigger m_Trigger;
    public TriggerHandler(MapTrigger trigger)
    {
        m_Trigger = trigger;
    }
}
Fight/Stage/MapEditor/Game/TriggerHandler.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d4b520a4d7e5d434a8cbbfa2f21eaadc
timeCreated: 1551678527
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/MainInterfacePanel/SkillButtonEffects.cs
@@ -272,26 +272,14 @@
                    break;
                case "Btn_SkillXp":
                    Prompting((int)SkillEffects.skillEffect_xp);
                    switch (PlayerDatas.Instance.baseData.Job)
                    {
                        case 1:
                            if (PlayerDatas.Instance.skill.GetSKillById(150) != null)
                            {
                                BoolFb = true;
                                AccordingBool = true;
                                SkillsHole = (int)SkillEffects.skillEffect_xp;
                                SkillSelectedXp.SetActive(true);
                            }
                            break;
                        case 2:
                            if (PlayerDatas.Instance.skill.GetSKillById(250) != null)
                            {
                                BoolFb = true;
                                AccordingBool = true;
                                SkillsHole = (int)SkillEffects.skillEffect_xp;
                                SkillSelectedXp.SetActive(true);
                            }
                            break;
                    var skillModel = ModelCenter.Instance.GetModel<SkillModel>();
                    var xpSkillId = skillModel.GetXpSkillID();
                    if (PlayerDatas.Instance.skill.GetSKillById(xpSkillId) != null)
                    {
                        BoolFb = true;
                        AccordingBool = true;
                        SkillsHole = (int)SkillEffects.skillEffect_xp;
                        SkillSelectedXp.SetActive(true);
                    }
                    break;
                default:
@@ -414,18 +402,13 @@
                case SkillEffects.skillEffect_xp:
                    _LongPressShowPanel = XpSkillInfo.GetChild(0).GetComponent<LongPressShowPanel>();
                    break;
            }
            PlayerSkillData _PlayerSkillData=null;
            }
            PlayerSkillData _PlayerSkillData = null;
            if ((SkillEffects)SkillsHole == SkillEffects.skillEffect_xp)
            {
                if (PlayerDatas.Instance.baseData.Job == 1)
                {
                    _PlayerSkillData = PlayerDatas.Instance.skill.GetSKillById(150);
                }
                else if (PlayerDatas.Instance.baseData.Job == 2)
                {
                    _PlayerSkillData = PlayerDatas.Instance.skill.GetSKillById(250);
                }
            {
                var skillModel = ModelCenter.Instance.GetModel<SkillModel>();
                var xpSkillId = skillModel.GetXpSkillID();
                _PlayerSkillData = PlayerDatas.Instance.skill.GetSKillById(xpSkillId);
            }
            else
            {
@@ -489,11 +472,9 @@
                        SysNotifyMgr.Instance.ShowTip("Skill7Btn_Unlock");
                        break;
                    case SkillEffects.skillEffect_xp:
                        if (PlayerDatas.Instance.baseData.Job == 1 && PlayerDatas.Instance.skill.GetSKillById(150) == null)
                        {
                            SysNotifyMgr.Instance.ShowTip("SkillXpBtn_Unlock");
                        }
                        if (PlayerDatas.Instance.baseData.Job == 2 && PlayerDatas.Instance.skill.GetSKillById(250) == null)
                        var skillModel = ModelCenter.Instance.GetModel<SkillModel>();
                        var xpSkillId = skillModel.GetXpSkillID();
                        if (PlayerDatas.Instance.skill.GetSKillById(xpSkillId) == null)
                        {
                            SysNotifyMgr.Instance.ShowTip("SkillXpBtn_Unlock");
                        }
System/MainWin/SkillContainer.cs
@@ -97,7 +97,7 @@
            m_Skill7.RemoveAllListeners();
            skillXP.RemoveAllListeners();
            PlayerSkillDatas.OnRefreshSkill -= OnSkillRefresh;
            if(AchievementGoto.achievementType == AchievementGoto.ExcuteSkill)
            if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill)
            {
                AchievementGoto.achievementType = 0;
            }
@@ -119,17 +119,10 @@
            m_Skill7.SetSkillData(indexSkillDataDict[6]);
            m_BlinkSkill.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(190));
            switch (PlayerDatas.Instance.baseData.Job)
            {
                case 1:
                    m_SkillXP.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(150));
                    break;
                case 2:
                    m_SkillXP.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(250));
                    break;
                default:
                    break;
            }
            var model = ModelCenter.Instance.GetModel<SkillModel>();
            var skillXpId = model.GetXpSkillID();
            m_SkillXP.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(skillXpId));
        }
        void SwitchTarget()
@@ -244,32 +237,15 @@
        }
        void CastSkillXp()
        {
            switch (PlayerDatas.Instance.baseData.Job)
            {
                case 1:
                    if (PlayerDatas.Instance.skill.GetSKillById(150) == null)
                    {
                        DebugEx.Log("技能未解锁");
                        return;
                    }
                    DoCastSkill(150);
                    break;
                case 2:
                    if (PlayerDatas.Instance.skill.GetSKillById(250) == null)
                    {
                        DebugEx.Log("技能未解锁");
                        return;
                    }
                    DoCastSkill(250);
                    break;
                default:
                    break;
            }
        {
            var model = ModelCenter.Instance.GetModel<SkillModel>();
            var skillXpId = model.GetXpSkillID();
            if (PlayerDatas.Instance.skill.GetSKillById(skillXpId) == null)
            {
                DebugEx.Log("技能未解锁");
                return;
            }
            DoCastSkill(skillXpId);
        }
        void PrepareCastSkill1()
@@ -353,29 +329,14 @@
        void PrepareCastSkillXp()
        {
            switch (PlayerDatas.Instance.baseData.Job)
            {
                case 1:
                    if (PlayerDatas.Instance.skill.GetSKillById(150) == null)
                    {
                        DebugEx.Log("技能未解锁");
                        return;
                    }
                    DoPrepareCast(150);
                    break;
                case 2:
                    if (PlayerDatas.Instance.skill.GetSKillById(250) == null)
                    {
                        DebugEx.Log("技能未解锁");
                        return;
                    }
                    DoPrepareCast(250);
                    break;
                default:
                    break;
            }
            var model = ModelCenter.Instance.GetModel<SkillModel>();
            var skillXpId = model.GetXpSkillID();
            if (PlayerDatas.Instance.skill.GetSKillById(skillXpId) == null)
            {
                DebugEx.Log("技能未解锁");
                return;
            }
            DoPrepareCast(skillXpId);
        }
        void PrepareCastBlinkSkill()
System/Skill/SkillModel.cs
@@ -176,6 +176,13 @@
        {
            int skillID;
            xpSkillsDic.TryGetValue(PlayerDatas.Instance.baseData.Job, out skillID);
            var model = ModelCenter.Instance.GetModel<TreasureSkillModel>();
            TreasureSkill skill;
            if (model.TryGetSkill(skillID, out skill))
            {
                return skill.GetSkillConfig(skill.level).SkillID;
            }
            return skillID;
        }
        #endregion
System/Skill/TreasurePotentialLevelUpWin.cs
@@ -144,7 +144,8 @@
                if (!isMax)
                {
                    m_Item.SetItem(config.ExAttr4, config.ExAttr5);
                    var nextConfig = potential.GetSkillConfig(potential.level + 1);
                    m_Item.SetItem(nextConfig.ExAttr4, nextConfig.ExAttr5);
                }
            }
@@ -165,8 +166,8 @@
            TreasurePotential potential;
            if (model.TryGetPotential(selectPotentialId, out potential))
            {
                var config = potential.GetSkillConfig(potential.level);
                ModelCenter.Instance.GetModel<GetItemPathModel>().SetChinItemModel(config.ExAttr4);
                var upConfig = potential.GetSkillConfig(potential.level + 1);
                ModelCenter.Instance.GetModel<GetItemPathModel>().SetChinItemModel(upConfig.ExAttr4);
            }
        }
System/Skill/TreasureSkillModel.cs
@@ -261,9 +261,9 @@
                    error = 1;
                    return false;
                }
                var config = skill.GetSkillConfig(skill.level);
                var count = packModel.GetItemCountByID(PackType.Item, config.ExAttr4);
                if (count < config.ExAttr5)
                var upConfig = skill.GetSkillConfig(skill.level + 1);
                var count = packModel.GetItemCountByID(PackType.Item, upConfig.ExAttr4);
                if (count < upConfig.ExAttr5)
                {
                    error = 2;
                    return false;
@@ -294,8 +294,9 @@
                        return false;
                    }
                }
                var count = packModel.GetItemCountByID(PackType.Item, config.ExAttr4);
                if (count < config.ExAttr5)
                var upConfig = potential.GetSkillConfig(potential.level + 1);
                var count = packModel.GetItemCountByID(PackType.Item, upConfig.ExAttr4);
                if (count < upConfig.ExAttr5)
                {
                    error = 13;
                    return false;
System/Skill/TreasureSkillWin.cs
@@ -181,7 +181,7 @@
                {
                    var nextSkillConfig = SkillConfig.Get(skill.skillId + skill.level);
                    m_SkillDescNext.text = nextSkillConfig.Description;
                    m_Item.SetItem(config.ExAttr4, config.ExAttr5);
                    m_Item.SetItem(nextSkillConfig.ExAttr4, nextSkillConfig.ExAttr5);
                    m_GetWay.AddListener(() =>
                    {
                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.Daily_EmperorRelic);
UI/Common/UI3DModelExhibition.cs
@@ -26,7 +26,8 @@
        [SerializeField] UI3DModelInteractProcessor m_InteractProcessor;
        [SerializeField] ColorCorrectionCurves m_CameraColor;
        public bool interactable {
        public bool interactable
        {
            get { return m_Interactable; }
            set { m_Interactable = value; }
        }
@@ -35,7 +36,8 @@
        int m_HorseModelId = 0;
        GameObject horseModel = null;
        public GameObject NpcModelHorse {
        public GameObject NpcModelHorse
        {
            get { return horseModel; }
            set { horseModel = value; }
        }
@@ -44,7 +46,8 @@
        GameObject npcModel = null;
        SFXController m_NpcEffect;
        readonly List<SFXController> m_BindEffectList = new List<SFXController>();
        public GameObject NpcModelPet {
        public GameObject NpcModelPet
        {
            get { return npcModel; }
            set { npcModel = value; }
        }
@@ -70,8 +73,10 @@
        public static UI3DModelExhibition Instance { get; private set; }
        static UI3DModelExhibition m_InstanceClone1 = null;
        public static UI3DModelExhibition InstanceClone1 {
            get {
        public static UI3DModelExhibition InstanceClone1
        {
            get
            {
                if (m_InstanceClone1 == null)
                {
                    CreateCloneStage();
UI/Common/UI3DModelFactory.cs
@@ -353,7 +353,7 @@
    public static GameObject LoadUIWing(int _id)
    {
        var prefab = InstanceResourcesLoader.LoadModelRes(_id, true);
        var prefab = InstanceResourcesLoader.LoadModelRes(_id, false);
        if (prefab == null)
        {
            return null;
@@ -371,7 +371,7 @@
    public static void ReleaseUIWing(int _id, GameObject _model)
    {
        var prefab = InstanceResourcesLoader.LoadModelRes(_id, true);
        var prefab = InstanceResourcesLoader.LoadModelRes(_id, false);
        var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
        var animator = _model.GetComponent<Animator>();
        if (animator != null)
Utility/RuntimeLogUtility.cs
@@ -188,9 +188,27 @@
    private Vector2 _start;
    private Vector2 _end;
    private int _triggerID;
    public override void OnInspectorGUI()
    {
        GUILayout.Space(5);
        EditorGUILayout.BeginHorizontal();
        _triggerID = EditorGUILayout.IntField("触发器ID", _triggerID);
        if (GUILayout.Button("触发客户端触发器"))
        {
        }
        EditorGUILayout.EndHorizontal();
        if (GUILayout.Button("清空任务"))
        {
            CA225_tagCMClientTaskCount _a225 = new CA225_tagCMClientTaskCount
            {
                CountID = 10000
            };
            GameNetSystem.Instance.SendInfo(_a225);
        }
        EditorGUILayout.LabelField("Log存储路径", RuntimeLogUtility.s_LogPath);
@@ -216,6 +234,7 @@
        RuntimeLogUtility.TEST_CLIENT_PVP = EditorGUILayout.Toggle("模拟客户端PVP状态", RuntimeLogUtility.TEST_CLIENT_PVP);
        RuntimeLogUtility.TEST_CLIENT_PVP_AI = EditorGUILayout.Toggle("模拟客户端PVP的AI状态", RuntimeLogUtility.TEST_CLIENT_PVP_AI);
        if (GUILayout.Button("创建PVP敌方"))
        {
            GActorPlayerBase.PlayerInfo _playerInfo = new GActorPlayerBase.PlayerInfo();