少年修仙传客户端代码仓库
client_linchunjie
2019-04-04 a51aad2ddcf0cb2ffc8e77cac145f6f5d70ffc6b
3335 灵宠坐骑技能整合
2个文件已删除
12个文件已修改
734 ■■■■ 已修改文件
Core/GameEngine/Model/TelPartialConfig/tagChinSkillConfig.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA3_Function/HA315_tagMCDailyActionCnt.cs 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/PetBackpackWrap.cs 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/PetBackpackWrap.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/XLuaGenAutoRegister.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountModel.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Mount/MountPanelAssignment.cs 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetAttributeMethods.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetModel.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/SkillButtonPet.cs 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewHorseDetailWin.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewHorseSkillCell.cs 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewPetDetailWin.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewPetSkillCell.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/tagChinSkillConfig.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using Snxxz.UI;
using System.Collections.Generic;
using System.Threading;
public partial class SkillConfig
@@ -128,5 +129,52 @@
        return 0;
    }
    public static SkillEffectValue GetSkillEffectValue(SkillConfig config)
    {
        if (config == null)
        {
            return default(SkillEffectValue);
        }
        return new SkillEffectValue()
        {
            effect1 = config.Effect1,
            effect2 = config.Effect2,
            effect3 = config.Effect3,
            effect4 = config.Effect4,
            effect5 = config.Effect5,
            effect6 = config.Effect6,
        };
    }
}
public struct SkillEffectValue
{
    public int effect1;
    public int effect2;
    public int effect3;
    public int effect4;
    public int effect5;
    public int effect6;
    const int INTERVAL = 1000000;
    public override bool Equals(object obj)
    {
        var compare = (SkillEffectValue)obj;
        return compare.effect1 == effect1 &&
            compare.effect2 == effect2 &&
            compare.effect3 == effect3 &&
            compare.effect4 == effect4 &&
            compare.effect5 == effect5 &&
            compare.effect6 == effect6;
    }
    public override int GetHashCode()
    {
        var value = INTERVAL + effect1 + INTERVAL * 2 + effect2
            + INTERVAL * 3 + effect3 + INTERVAL * 4 + effect4
            + INTERVAL * 5 + effect5 + INTERVAL * 6 + effect6;
        return value.GetHashCode();
    }
}
Core/NetworkPackage/ServerPack/HA3_Function/HA315_tagMCDailyActionCnt.cs
Lua/Gen/PetBackpackWrap.cs
File was deleted
Lua/Gen/PetBackpackWrap.cs.meta
File was deleted
Lua/Gen/XLuaGenAutoRegister.cs
@@ -1278,9 +1278,6 @@
        static void wrapInit8(LuaEnv luaenv, ObjectTranslator translator)
        {
        
            translator.DelayWrapLoader(typeof(PetBackpack), PetBackpackWrap.__Register);
            translator.DelayWrapLoader(typeof(PetReinforceModel), PetReinforceModelWrap.__Register);
        
        
System/Mount/MountModel.cs
@@ -62,6 +62,12 @@
    public static Action<int, bool> MultipleEvent;
    public static event Action PlayerLoginOKData;
    private Dictionary<int, int> DicDefaultMount = new Dictionary<int, int>();
    Dictionary<SkillEffectValue, int> integrationSkills = new Dictionary<SkillEffectValue, int>();
    Dictionary<SkillEffectValue, List<int>> integrationHorseSkills = new Dictionary<SkillEffectValue, List<int>>();
    Dictionary<int, SkillEffectValue> horseSkillEffectValues = new Dictionary<int, SkillEffectValue>();
    Dictionary<int, int> horseSkills = new Dictionary<int, int>();
    public override void Init()
    {
        ToAddSorting();
@@ -80,6 +86,39 @@
        DicDefaultMount = ConfigParse.GetDic<int, int>(MountRedDotstr);
        string HorseUpItem = FuncConfigConfig.Get("HorseUpItem").Numerical2;
        HorseDanExp = int.Parse(HorseUpItem);
        var funcConfig = FuncConfigConfig.Get("PetHorseSkillIntegration");
        var intArray = ConfigParse.GetMultipleStr<int>(funcConfig.Numerical2);
        for (int i = 0; i < intArray.Length; i++)
        {
            var skillConfig = SkillConfig.Get(intArray[i]);
            if (skillConfig != null)
            {
                var effectValue = SkillConfig.GetSkillEffectValue(skillConfig);
                integrationSkills.Add(effectValue, intArray[i]);
            }
        }
        var _horseSkills = GetMountSkillAndItem.Keys;
        foreach (var skillId in _horseSkills)
        {
            var skillConfig = SkillConfig.Get(skillId);
            var effectValue = SkillConfig.GetSkillEffectValue(skillConfig);
            if (integrationSkills.ContainsKey(effectValue))
            {
                List<int> skills = null;
                if (!integrationHorseSkills.TryGetValue(effectValue, out skills))
                {
                    skills = new List<int>();
                    integrationHorseSkills.Add(effectValue, skills);
                }
                skills.Add(skillId);
            }
            horseSkills.Add(skillId, GetMountSkillAndItem[skillId].HorseID);
            horseSkillEffectValues.Add(skillId, effectValue);
        }
    }
    public override void UnInit()
@@ -754,4 +793,64 @@
        return mountAttrDict;
    }
    #endregion
    #region 技能整合
    public bool TryGetIntegrationSkill(SkillEffectValue effect, out int skillId)
    {
        return integrationSkills.TryGetValue(effect, out skillId);
    }
    public bool TryGetHorseSkills(SkillEffectValue effect, out List<int> skills)
    {
        return integrationHorseSkills.TryGetValue(effect, out skills);
    }
    public bool IsSkillUnlock(int skillId)
    {
        var config = SkillConfig.Get(skillId);
        if (config == null)
        {
            return false;
        }
        var effect = SkillConfig.GetSkillEffectValue(config);
        if (integrationHorseSkills.ContainsKey(effect)
            && !integrationHorseSkills[effect].Contains(skillId))
        {
            var skills = integrationHorseSkills[effect];
            foreach (var id in skills)
            {
                if (IsSkillUnlock(id))
                {
                    return true;
                }
            }
        }
        else
        {
            if (GetMountSkillAndItem.ContainsKey(skillId))
            {
                var horseId = GetMountSkillAndItem[skillId].HorseID;
                if (_DicHorse.ContainsKey(horseId))
                {
                    var horseInfo = _DicHorse[horseId];
                    if (horseInfo.Lv >= GetSkillUnlockLevel(skillId))
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    public int GetSkillUnlockLevel(int skillId)
    {
        if (GetMountSkillAndItem.ContainsKey(skillId))
        {
            return GetMountSkillAndItem[skillId].HorseLV;
        }
        return 0;
    }
    #endregion
}
System/Mount/MountPanelAssignment.cs
@@ -28,6 +28,7 @@
        [SerializeField] UIEffect m_Uieffect3;//经验条特效
        [SerializeField] Transform GroupSkill;
        [SerializeField] FunctionUnlockFlyObjectTarget[] flyObjectTargets;
        [SerializeField] GameObject m_YiJieSuo;//解锁面板
        [SerializeField] GameObject m_BottomOperate;//关于经验条
@@ -89,7 +90,6 @@
            MountModel.Event_MountHA301U += OnMountHA301Update;
            allPetSkillCtrl.OnRefreshCell += RefreshAllMountSkillCell;
            FlySkillIconWin.FlySkillID += FlySkillID;
            CreateAllMountSkill();
        }
        private void OnDisable()
@@ -97,7 +97,6 @@
            mount_ID = 0;
            MountModel.Event_MountHA301U -= OnMountHA301Update;
            allPetSkillCtrl.OnRefreshCell -= RefreshAllMountSkillCell;
            FlySkillIconWin.FlySkillID -= FlySkillID;
            m_MountRawImg.gameObject.SetActive(false);
        }
@@ -127,22 +126,6 @@
                var animator = UI3DModelExhibition.Instance.NpcModelHorse.GetComponent<Animator>();
                animator.Play(GAStaticDefine.State_Dance);
            }
        }
        private void FlySkillID(int skillID)
        {
            int Index = 0;
            Index = GetAllMountSkill.FindIndex((x) =>
            {
                return x.SkillID == skillID;
            });
            if (Index == -1)
            {
                Index = 0;
            }
            int line = Index / 3;
            allPetSkillCtrl.JumpIndex(line);
            allPetSkillCtrl.JumpIndex(-50, 0, EnhancedScroller.TweenType.immediate);
        }
        private void OnMountHA301Update(int _HorseID)
@@ -479,6 +462,13 @@
                    {
                        mountSkill.SetModel(MountSkills[i].SkillID, MountSkills[i].HorseLV, false, HorseID, SkillType.MountSkill);
                    }
                    if (i < flyObjectTargets.Length)
                    {
                        var flyObjectTarget = flyObjectTargets[i];
                        flyObjectTarget.IdList = new int[] { MountSkills[i].SkillID };
                        flyObjectTarget.Z_UnLockType = FunctionUnlockType.Skill;
                        FunctionUnlockFlyObjectTargetCenter.Register(FunctionUnlockType.Skill, new int[] { MountSkills[i].SkillID }, flyObjectTarget);
                    }
                }
                else
                {
@@ -487,51 +477,84 @@
            }
        }
        List<HorseSkillClass> GetAllMountSkill = new List<HorseSkillClass>();
        List<int> displayTotalSkills = new List<int>();
        private void CreateAllMountSkill()//所有坐骑技能
        {
            GetAllMountSkill.Clear();
            foreach (int key in mountModel.GetMountSkillAndItem.Keys)
            displayTotalSkills.Clear();
            var skills = mountModel.GetMountSkillAndItem.Keys;
            foreach (var id in skills)
            {
                GetAllMountSkill.Add(mountModel.GetMountSkillAndItem[key]);
                var config = SkillConfig.Get(id);
                var skillId = 0;
                var effect = SkillConfig.GetSkillEffectValue(config);
                if (mountModel.TryGetIntegrationSkill(effect, out skillId))
                {
                    if (!displayTotalSkills.Contains(skillId))
                    {
                        displayTotalSkills.Add(skillId);
            }
                    continue;
                }
                displayTotalSkills.Add(id);
            }
            ToAddSorting();
            allPetSkillCtrl.Refresh();
            int line = GetAllMountSkill.Count / 3;
            int remain = GetAllMountSkill.Count % 3;
            if (remain > 0)
            {
                line += 1;
            }
            int line = Mathf.CeilToInt((float)displayTotalSkills.Count / 3);
            for (int i = 0; i < line; i++)
            {
                allPetSkillCtrl.AddCell(ScrollerDataType.Header, i);
            }
            allPetSkillCtrl.Restart();
        }
        void ToAddSorting()
        {
            GetAllMountSkill.Sort(Compare);
            displayTotalSkills.Sort(Compare);
        }
        int Compare(HorseSkillClass x, HorseSkillClass y)
        int Compare(int lhs, int rhs)
        {
            bool havex = IsDeblocking(x.SkillID);
            bool havey = IsDeblocking(y.SkillID);
            if (havex.CompareTo(havey) != 0)
            var lhs_unlock = mountModel.IsSkillUnlock(lhs);
            var rhs_unlock = mountModel.IsSkillUnlock(rhs);
            if (lhs_unlock != rhs_unlock)
            {
                return -havex.CompareTo(havey);
            }
            if (x.HorseID.CompareTo(y.HorseID) != 0)
            {
                return x.HorseID.CompareTo(y.HorseID);
                return -lhs_unlock.CompareTo(rhs_unlock);
            }
            if (x.HorseLV.CompareTo(y.HorseLV) != 0)
            var lhs_config = SkillConfig.Get(lhs);
            var rhs_config = SkillConfig.Get(rhs);
            var lhs_Id = 0;
            var rhs_Id = 0;
            var lhs_effect = SkillConfig.GetSkillEffectValue(lhs_config);
            var rhs_effect = SkillConfig.GetSkillEffectValue(rhs_config);
            var lhs_integration = mountModel.TryGetIntegrationSkill(lhs_effect, out lhs_Id);
            var rhs_integration = mountModel.TryGetIntegrationSkill(rhs_effect, out rhs_Id);
            if (lhs_integration != rhs_integration)
            {
                return x.HorseLV.CompareTo(y.HorseLV);
                return -lhs_integration.CompareTo(rhs_integration);
            }
            return 1;
            if (lhs_integration && rhs_integration)
            {
                return lhs_config.Effect1.CompareTo(rhs_config.Effect1);
            }
            var lhs_horseInfo = mountModel.GetMountSkillAndItem[lhs];
            var rhs_horseInfo = mountModel.GetMountSkillAndItem[rhs];
            if (lhs_horseInfo.HorseID != rhs_horseInfo.HorseID)
            {
                return lhs_horseInfo.HorseID.CompareTo(rhs_horseInfo.HorseID);
            }
            if (lhs_horseInfo.HorseLV.CompareTo(rhs_horseInfo.HorseLV) != 0)
            {
                return lhs_horseInfo.HorseLV.CompareTo(rhs_horseInfo.HorseLV);
            }
            return 0;
        }
        private bool IsDeblocking(int SkillID)//是否解锁
@@ -554,22 +577,19 @@
                return false;
            }
        }
        private void RefreshAllMountSkillCell(ScrollerDataType type, CellView cell)
        {
            int length = cell.transform.childCount;
            for (int i = 0; i < length; i++)
            {
                int cellCnt = cell.index * 3 + (i + 1);
                int index = cell.index * 3 + i;
                SkillButtonPet skillButton = cell.transform.GetChild(i).GetComponent<SkillButtonPet>();
                FunctionUnlockFlyObjectTarget functionUnlockFlyObjectTarget = cell.transform.GetChild(i).GetComponent<FunctionUnlockFlyObjectTarget>();
                if (cellCnt <= GetAllMountSkill.Count)
                if (index < displayTotalSkills.Count)
                {
                    skillButton.gameObject.SetActive(true);
                    HorseSkillClass horseSkillClass = GetAllMountSkill[cellCnt - 1];
                    skillButton.SetModel(horseSkillClass.SkillID, horseSkillClass.HorseLV, IsDeblocking(horseSkillClass.SkillID), horseSkillClass.HorseID, SkillType.MountSkill, true);
                    functionUnlockFlyObjectTarget.IdList = new int[] { horseSkillClass.SkillID };
                    functionUnlockFlyObjectTarget.Z_UnLockType = FunctionUnlockType.Skill;
                    FunctionUnlockFlyObjectTargetCenter.Register(FunctionUnlockType.Skill, new int[] { horseSkillClass.SkillID }, functionUnlockFlyObjectTarget);
                    var skillId = displayTotalSkills[index];
                    skillButton.SetModel(skillId, 0, mountModel.IsSkillUnlock(skillId), 0, SkillType.MountSkill, true);
                }
                else
                {
System/Pet/PetAttributeMethods.cs
@@ -210,7 +210,8 @@
            {
                var config = SkillConfig.Get(id);
                var skillId = 0;
                if (petmodel.TryGetIntegrationSkill(config.Effect1, out skillId))
                var effect = SkillConfig.GetSkillEffectValue(config);
                if (petmodel.TryGetIntegrationSkill(effect, out skillId))
                {
                    if (!displayTotalSkills.Contains(skillId))
                    {
@@ -668,8 +669,10 @@
            var rhs_config = SkillConfig.Get(rhs);
            var lhs_Id = 0;
            var rhs_Id = 0;
            var lhs_integration = petmodel.TryGetIntegrationSkill(lhs_config.Effect1, out lhs_Id);
            var rhs_integration = petmodel.TryGetIntegrationSkill(rhs_config.Effect1, out rhs_Id);
            var lhs_effect = SkillConfig.GetSkillEffectValue(lhs_config);
            var rhs_effect = SkillConfig.GetSkillEffectValue(rhs_config);
            var lhs_integration = petmodel.TryGetIntegrationSkill(lhs_effect, out lhs_Id);
            var rhs_integration = petmodel.TryGetIntegrationSkill(rhs_effect, out rhs_Id);
            if (lhs_integration != rhs_integration)
            {
                return -lhs_integration.CompareTo(rhs_integration);
System/Pet/PetModel.cs
@@ -1,10 +1,11 @@
using Snxxz.UI;
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
[XLua.LuaCallCSharp]
namespace Snxxz.UI
{
public class PetBackpack//宠物背包
{
    public int PetClass;//宠物阶级
@@ -12,14 +13,15 @@
    public int ItemPlace;//宠物位置索引
    public int[] PetSkill;//宠物当前学习的技能
    public int petExp; //宠物当前经验
}
public enum PetEnum
{
    PetDan = 0,//灵宠丹
    PetDebris = 1,//灵宠碎片
    PetStone = 2,//灵宠魂石
}
public class PetModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
{
    public Dictionary<int, int> _TagPetItem = new Dictionary<int, int>();//关于灵兽魂石
@@ -62,8 +64,9 @@
    private Dictionary<int, int> DicDefaultPet = new Dictionary<int, int>();
    List<PetInfoConfig> allPetConfigs = new List<PetInfoConfig>();
    Dictionary<int, int> integrationSkills = new Dictionary<int, int>();
    Dictionary<int, List<int>> integrationPetSkills = new Dictionary<int, List<int>>();
        Dictionary<SkillEffectValue, int> integrationSkills = new Dictionary<SkillEffectValue, int>();
        Dictionary<SkillEffectValue, List<int>> integrationPetSkills = new Dictionary<SkillEffectValue, List<int>>();
        Dictionary<int, SkillEffectValue> petSkillEffectValues = new Dictionary<int, SkillEffectValue>();
    Dictionary<int, int> petSkills = new Dictionary<int, int>();
    public override void Init()
@@ -105,7 +108,8 @@
            var skillConfig = SkillConfig.Get(intArray[i]);
            if (skillConfig != null)
            {
                integrationSkills.Add(skillConfig.Effect1, intArray[i]);
                    var effectValue = SkillConfig.GetSkillEffectValue(skillConfig);
                    integrationSkills.Add(effectValue, intArray[i]);
            }
        }
@@ -115,18 +119,21 @@
            for (int i = 0; i < config.SkillID.Length; i++)
            {
                var skillConfig = SkillConfig.Get(config.SkillID[i]);
                if (integrationSkills.ContainsKey(skillConfig.Effect1))
                    var effectValue = SkillConfig.GetSkillEffectValue(skillConfig);
                    if (integrationSkills.ContainsKey(effectValue))
                {
                    List<int> skills = null;
                    if (!integrationPetSkills.TryGetValue(skillConfig.Effect1, out skills))
                        if (!integrationPetSkills.TryGetValue(effectValue, out skills))
                    {
                        skills = new List<int>();
                        integrationPetSkills.Add(skillConfig.Effect1, skills);
                            integrationPetSkills.Add(effectValue, skills);
                    }
                    skills.Add(config.SkillID[i]);
                }
                petSkills.Add(config.SkillID[i], config.ID);
                    petSkillEffectValues.Add(config.SkillID[i], effectValue);
            }
        }
    }
@@ -166,6 +173,7 @@
            PlayerLoginOkData();
        }
    }
    private DateTime dateTimeA;
    private void secondEvent()
    {
@@ -830,12 +838,12 @@
        return petSkills.Keys;
    }
    public bool TryGetIntegrationSkill(int effect, out int skillId)
        public bool TryGetIntegrationSkill(SkillEffectValue effect, out int skillId)
    {
        return integrationSkills.TryGetValue(effect, out skillId);
    }
    public bool TryGetPetSkills(int effect,out List<int> skills)
        public bool TryGetPetSkills(SkillEffectValue effect, out List<int> skills)
    {
        return integrationPetSkills.TryGetValue(effect, out skills);
    }
@@ -852,10 +860,12 @@
        {
            return false;
        }
        if (integrationPetSkills.ContainsKey(config.Effect1)
            && !integrationPetSkills[config.Effect1].Contains(skillId))
            var effect = SkillConfig.GetSkillEffectValue(config);
            if (integrationPetSkills.ContainsKey(effect)
                && !integrationPetSkills[effect].Contains(skillId))
        {
            var skills = integrationPetSkills[config.Effect1];
                var skills = integrationPetSkills[effect];
            foreach (var id in skills)
            {
                if (IsSkillUnlock(id))
@@ -906,3 +916,4 @@
    }
    #endregion
}
}
System/Pet/SkillButtonPet.cs
@@ -21,6 +21,7 @@
        [SerializeField] Text lockLvText;
        PetModel petModel { get { return ModelCenter.Instance.GetModel<PetModel>(); } }
        MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        public void SetModel(int skillId, int skillUnlock, bool isUnlock, int petId, SkillType skillType, bool isAll = false)
        {
@@ -69,7 +70,8 @@
                        {
                            List<int> skills;
                            var value = 0;
                            if (petModel.TryGetPetSkills(skillConfig.Effect1, out skills))
                            var effect = SkillConfig.GetSkillEffectValue(skillConfig);
                            if (petModel.TryGetPetSkills(effect, out skills))
                            {
                                foreach (var id in skills)
                                {
@@ -86,13 +88,39 @@
                        }
                        break;
                    case SkillType.MountSkill:
                        HorseConfig horseInfo = HorseConfig.Get(petId);
                        if (horseInfo != null)
                        {
                            if (mountModel.GetMountSkillAndItem.ContainsKey(skillId))
                            {
                                var horseId = mountModel.GetMountSkillAndItem[skillId].HorseID;
                                var horseConfig = HorseConfig.Get(horseId);
                                if (horseConfig != null)
                        {
                            str[0] = skillConfig.Description;
                            str[1] = Language.Get("pet_SkillTipLv", horseInfo.Name, skillUnlock);
                                    str[1] = Language.Get("pet_SkillTipLv", horseConfig.Name, mountModel.GetSkillUnlockLevel(skillId));
                        }
                        fightPower = skillConfig.FightPower;
                            }
                            else
                            {
                                var effect = SkillConfig.GetSkillEffectValue(skillConfig);
                                List<int> skills;
                                var value = 0;
                                if (mountModel.TryGetHorseSkills(effect, out skills))
                                {
                                    foreach (var id in skills)
                                    {
                                        if (mountModel.IsSkillUnlock(id))
                                        {
                                            var config = SkillConfig.Get(id);
                                            value += config.EffectValue11;
                                            fightPower += config.FightPower;
                                        }
                                    }
                                }
                                str[0] = string.Format(skillConfig.Description, value);
                                str[1] = string.Empty;
                            }
                        }
                        break;
                }
                SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.PetSkill, fightPower, str);
System/RoleParticulars/ViewHorseDetailWin.cs
@@ -32,9 +32,11 @@
        List<int> skills = new List<int>();
        [NonSerialized] public List<int> activeSkills = new List<int>();
        [NonSerialized] public List<int> displayTotalSkills = new List<int>();
        [NonSerialized] public List<int> unlockTotalSkills = new List<int>();
        RoleParticularModel model { get { return ModelCenter.Instance.GetModel<RoleParticularModel>(); } }
        MountModel mountModel { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        #region Built-in
        protected override void BindController()
        {
@@ -157,14 +159,34 @@
        void DisplayTotalSkills(List<RoleParticularModel.HorseInfo> horses)
        {
            activeSkills.Clear();
            displayTotalSkills.Clear();
            unlockTotalSkills.Clear();
            for (int i = 0; i < horses.Count; i++)
            {
                HorseUpConfig.GetHorseSkills(horses[i].id, horses[i].lv, true, ref skills);
                activeSkills.AddRange(skills);
                unlockTotalSkills.AddRange(skills);
                foreach (var id in skills)
                {
                    var config = SkillConfig.Get(id);
                    var effect = SkillConfig.GetSkillEffectValue(config);
                    var skillId = 0;
                    if (mountModel.TryGetIntegrationSkill(effect, out skillId))
                    {
                        if (!displayTotalSkills.Contains(skillId))
                        {
                            displayTotalSkills.Add(skillId);
            }
                        continue;
                    }
                    displayTotalSkills.Add(id);
                }
            }
            displayTotalSkills.Sort(Compare);
            m_SkillController.Refresh();
            var line = Mathf.CeilToInt((float)activeSkills.Count / m_LineCount);
            var line = Mathf.CeilToInt((float)displayTotalSkills.Count / m_LineCount);
            for (int i = 0; i < line; i++)
            {
                m_SkillController.AddCell(ScrollerDataType.Header, i);
@@ -199,6 +221,40 @@
            var line = cell.index;
            ViewHorseSkillCell skillCell = cell as ViewHorseSkillCell;
            skillCell.Display(line, this);
        }
        int Compare(int lhs, int rhs)
        {
            var lhs_config = SkillConfig.Get(lhs);
            var rhs_config = SkillConfig.Get(rhs);
            var lhs_Id = 0;
            var rhs_Id = 0;
            var lhs_effect = SkillConfig.GetSkillEffectValue(lhs_config);
            var rhs_effect = SkillConfig.GetSkillEffectValue(rhs_config);
            var lhs_integration = mountModel.TryGetIntegrationSkill(lhs_effect, out lhs_Id);
            var rhs_integration = mountModel.TryGetIntegrationSkill(rhs_effect, out rhs_Id);
            if (lhs_integration != rhs_integration)
            {
                return -lhs_integration.CompareTo(rhs_integration);
            }
            if (lhs_integration && rhs_integration)
            {
                return lhs_config.Effect1.CompareTo(rhs_config.Effect1);
            }
            var lhs_horseInfo = mountModel.GetMountSkillAndItem[lhs];
            var rhs_horseInfo = mountModel.GetMountSkillAndItem[rhs];
            if (lhs_horseInfo.HorseID != rhs_horseInfo.HorseID)
            {
                return lhs_horseInfo.HorseID.CompareTo(rhs_horseInfo.HorseID);
            }
            if (lhs_horseInfo.HorseLV.CompareTo(rhs_horseInfo.HorseLV) != 0)
            {
                return lhs_horseInfo.HorseLV.CompareTo(rhs_horseInfo.HorseLV);
            }
            return 0;
        }
        [Serializable]
@@ -244,8 +300,9 @@
            {
                var config = HorseConfig.Get(horseId);
                var skillConfig = SkillConfig.Get(skillId);
                SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.ViewHorsePet, skillConfig == null ? 0 : skillConfig.FightPower,
                    Language.Get("pet_SkillTipLv", config.Name, HorseUpConfig.GetSkillCondition(horseId, skillId)));
                var label1 = skillConfig.Description;
                var label2 = Language.Get("pet_SkillTipLv", config.Name, HorseUpConfig.GetSkillCondition(horseId, skillId));
                SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.ViewHorsePet, skillConfig.FightPower, label1, label2);
            }
            public void SetActive(bool active)
System/RoleParticulars/ViewHorseSkillCell.cs
@@ -8,6 +8,8 @@
    {
        [SerializeField] SkillBehaviour[] m_Skills;
        MountModel model { get { return ModelCenter.Instance.GetModel<MountModel>(); } }
        ViewHorseDetailWin displayWindow;
        public void Display(int line, ViewHorseDetailWin win)
        {
@@ -15,10 +17,10 @@
            for (int i = 0; i < displayWindow.lineCount; i++)
            {
                var index = line * displayWindow.lineCount + i;
                if (index < displayWindow.activeSkills.Count)
                if (index < displayWindow.displayTotalSkills.Count)
                {
                    m_Skills[i].gameObject.SetActive(true);
                    m_Skills[i].Display(displayWindow.activeSkills[index]);
                    m_Skills[i].Display(displayWindow.displayTotalSkills[index]);
                    m_Skills[i].onClick -= OnSkillClick;
                    m_Skills[i].onClick += OnSkillClick;
                }
@@ -32,13 +34,41 @@
        public void OnSkillClick(int skillId)
        {
            int horseId = 0;
            if (HorseUpConfig.TryGetHorseBySkill(skillId, out horseId))
            {
                var config = HorseConfig.Get(horseId);
                var skillConfig = SkillConfig.Get(skillId);
                SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.ViewHorsePet, skillConfig == null ? 0 : skillConfig.FightPower,
                    Language.Get("pet_SkillTipLv", config.Name, HorseUpConfig.GetSkillCondition(horseId, skillId)));
            if (model.GetMountSkillAndItem.ContainsKey(skillId))
            {
                int horseId = model.GetMountSkillAndItem[skillId].HorseID;
                var config = HorseConfig.Get(horseId);
                var label1 = skillConfig.Description;
                var label2 = Language.Get("pet_SkillTipLv", config.Name, model.GetSkillUnlockLevel(skillId));
                SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.ViewHorsePet,
                    skillConfig == null ? 0 : skillConfig.FightPower, label1, label2);
            }
            else
            {
                List<int> skills;
                var value = 0;
                var fightPower = 0;
                var effect = SkillConfig.GetSkillEffectValue(skillConfig);
                if (model.TryGetHorseSkills(effect, out skills))
                {
                    foreach (var id in skills)
                    {
                        if (displayWindow.unlockTotalSkills.Contains(id))
                        {
                            var config = SkillConfig.Get(id);
                            value += config.EffectValue11;
                            fightPower += config.FightPower;
                        }
                    }
                }
                var label1 = string.Format(skillConfig.Description, value);
                var label2 = string.Empty;
                SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.ViewHorsePet,
                        fightPower, label1, label2);
            }
        }
    }
System/RoleParticulars/ViewPetDetailWin.cs
@@ -150,7 +150,8 @@
                {
                    var config = SkillConfig.Get(id);
                    var skillId = 0;
                    if (petModel.TryGetIntegrationSkill(config.Effect1, out skillId))
                    var effect = SkillConfig.GetSkillEffectValue(config);
                    if (petModel.TryGetIntegrationSkill(effect, out skillId))
                    {
                        if (!displayTotalSkills.Contains(skillId))
                        {
@@ -213,8 +214,10 @@
            var rhs_config = SkillConfig.Get(rhs);
            var lhs_Id = 0;
            var rhs_Id = 0;
            var lhs_integration = petModel.TryGetIntegrationSkill(lhs_config.Effect1, out lhs_Id);
            var rhs_integration = petModel.TryGetIntegrationSkill(rhs_config.Effect1, out rhs_Id);
            var lhs_effect = SkillConfig.GetSkillEffectValue(lhs_config);
            var rhs_effect = SkillConfig.GetSkillEffectValue(rhs_config);
            var lhs_integration = petModel.TryGetIntegrationSkill(lhs_effect, out lhs_Id);
            var rhs_integration = petModel.TryGetIntegrationSkill(rhs_effect, out rhs_Id);
            if (lhs_integration != rhs_integration)
            {
                return -lhs_integration.CompareTo(rhs_integration);
System/RoleParticulars/ViewPetSkillCell.cs
@@ -55,7 +55,8 @@
                var value = 0;
                var fightPower = 0;
                if (model.TryGetPetSkills(skillConfig.Effect1, out skills))
                var effect = SkillConfig.GetSkillEffectValue(skillConfig);
                if (model.TryGetPetSkills(effect, out skills))
                {
                    foreach (var id in skills)
                    {