using System;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
using UnityEngine;  
 | 
using LitJson;  
 | 
using System.Linq;  
 | 
  
 | 
  
 | 
//查看其他玩家的简短信息, 该模块处理数据,其他由各自功能模块处理 通过OnRevPackage  
 | 
public class RoleParticularModel : GameSystemManager<RoleParticularModel>  
 | 
{  
 | 
  
 | 
    public override void Init()  
 | 
    {  
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;  
 | 
    }  
 | 
  
 | 
    public override void Release()  
 | 
    {  
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;  
 | 
    }  
 | 
  
 | 
  
 | 
    public void OnBeforePlayerDataInitialize()  
 | 
    {  
 | 
        viewPlayerType = -1;  
 | 
    }  
 | 
  
 | 
    public int viewPlayer { get; private set; }  
 | 
  
 | 
    // 查询本服:0-查看其他玩家的简洁信息界面 1-查看战力界面 2(以上小于100)-返回数据不做处理,由调用者自行处理逻辑  
 | 
    // 查询跨服:100-查看其他玩家的简洁信息界面 101-查看战力界面 102以上-返回数据不做处理,由调用者自行处理逻辑  
 | 
    // 调用者需要的话自定义枚举值 EnumHelper的ViewPlayerType  
 | 
    public int viewPlayerType { get; private set; }    
 | 
  
 | 
    private Dictionary<int, ViewPlayerData> viewPlayerDataDic = new Dictionary<int, ViewPlayerData>();  
 | 
    private Dictionary<int, ulong> funcFightPowerDict = new Dictionary<int, ulong>();  
 | 
    public event Action PowerUpdate;  
 | 
    public static Action<int, int, ViewPlayerData> OnRevPackage; //尽量不要用第一个参数viewtype做判断,容易出错  
 | 
  
 | 
    public ViewPlayerData GetViewPlayerData(int player)  
 | 
    {  
 | 
        ViewPlayerData viewPlayerData = null;  
 | 
        viewPlayerDataDic.TryGetValue(player, out viewPlayerData);  
 | 
        return viewPlayerData;  
 | 
    }  
 | 
  
 | 
    // 查看玩家模型展示,查玩家装备详情需另外处理  
 | 
    // 本服查询:返回时打开查看其他玩家的简洁信息界面(可查看装备,宠物,坐骑等具体信息)RoleParticularsWin  
 | 
    public void ViewRoleEquip(int playerID)  
 | 
    {  
 | 
        if (playerID == PlayerDatas.Instance.baseData.PlayerID)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        viewPlayerType = (int)ViewPlayerType.viewPlayerEquip;  
 | 
        ViewRoleParticulars(playerID);  
 | 
    }  
 | 
  
 | 
    // 本服查询:返回时打开查看其他玩家战力界面(战力分布)ViewFuncPowerWin  
 | 
    public void ViewRoleFightPower(int playerID)  
 | 
    {  
 | 
        if (playerID == PlayerDatas.Instance.baseData.PlayerID)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        viewPlayerType = (int)ViewPlayerType.viewPlayerFightPower;  
 | 
        ViewRoleParticulars(playerID);  
 | 
    }  
 | 
  
 | 
    // 返回时不做任何操作,由调用者自行处理逻辑  
 | 
    public void ViewPlayerCacheData(int _playerId, int viewType = (int)ViewPlayerType.viewPlayerData)  
 | 
    {  
 | 
        viewPlayerType = viewType;  
 | 
        ViewRoleParticulars(_playerId);  
 | 
    }  
 | 
  
 | 
    // 查看玩家模型展示,查玩家装备详情需另外处理  
 | 
    // 跨服查询:返回时打开查看其他玩家的简洁信息界面(可查看装备,宠物,坐骑等具体信息)RoleParticularsWin  
 | 
    public void ViewCrossServerPlayerEquip(int _playerId)  
 | 
    {  
 | 
        if (_playerId == PlayerDatas.Instance.baseData.PlayerID)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        viewPlayerType = (int)ViewPlayerType.viewCrossPlayerEquip;  
 | 
        ViewRoleParticulars(_playerId);  
 | 
    }  
 | 
  
 | 
    public void ViewCrossPlayerFightPower(int _playerId)  
 | 
    {  
 | 
        if (_playerId == PlayerDatas.Instance.baseData.PlayerID)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        viewPlayerType = (int)ViewPlayerType.viewCrossPlayerFightPower;  
 | 
        ViewRoleParticulars(_playerId);  
 | 
    }  
 | 
  
 | 
    // 返回时不做任何操作,由调用者自行处理逻辑  
 | 
    public void ViewCrossPlayerCacheData(int _playerId, int viewType = (int)ViewPlayerType.viewCrossPlayerData)  
 | 
    {  
 | 
        viewPlayerType = viewType;  
 | 
        ViewRoleParticulars(_playerId);  
 | 
    }  
 | 
  
 | 
    public void ViewRoleParticulars(int playerID)  
 | 
    {  
 | 
        if (playerID == 0)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        viewPlayer = playerID;  
 | 
        if (viewPlayerDataDic.ContainsKey(playerID))  
 | 
        {  
 | 
            ViewPlayerData viewPlayerData = viewPlayerDataDic[playerID];  
 | 
            if ((DateTime.Now - viewPlayerData.getTime).TotalSeconds < 30)  
 | 
            {  
 | 
                ShowRoleParticulars(viewPlayerData, playerID);  
 | 
                return;  
 | 
            }  
 | 
        }  
 | 
        if (viewPlayerType >= (int)ViewPlayerType.viewCrossPlayerEquip)  
 | 
        {  
 | 
            //由子服服务器向跨服服务器查询; 会优先查本服数据(gameserver)  
 | 
            CC002_tagCGViewCrossPlayerInfo c002 = new CC002_tagCGViewCrossPlayerInfo();  
 | 
            c002.PlayerID = (uint)playerID;  
 | 
            GameNetSystem.Instance.SendInfo(c002);  
 | 
        }  
 | 
        else  
 | 
        {  
 | 
            //只查本服数据,有可能本地图有数据,就不查gameserver  
 | 
            CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();  
 | 
            pak.PlayerID = (uint)playerID;  
 | 
            GameNetSystem.Instance.SendInfo(pak);  
 | 
        }  
 | 
    }  
 | 
  
 | 
  
 | 
    //本服竞技场假查询模拟封包,返回查看机器人数据 打开RoleParticularsWin界面,专用接口其他地方不要调用  
 | 
    public void ViewFairyArenaRobot(int playerID, ViewPlayerData _viewPlayerData)  
 | 
    {  
 | 
        ViewPlayerData viewPlayerData = null;  
 | 
        viewPlayer = playerID;  
 | 
        if (!viewPlayerDataDic.TryGetValue(playerID, out viewPlayerData))  
 | 
        {  
 | 
            viewPlayerDataDic.Add(playerID, _viewPlayerData);  
 | 
        }  
 | 
        else  
 | 
        {  
 | 
            viewPlayerDataDic[playerID] = _viewPlayerData;  
 | 
        }  
 | 
  
 | 
        viewPlayerType = (int)ViewPlayerType.viewCrossPlayerEquip;  
 | 
        ShowRoleParticulars(_viewPlayerData, playerID);  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
    public void OnRevRoleEquip(HA705_tagSCQueryPlayerCacheResult package)  
 | 
    {  
 | 
  
 | 
        ViewPlayerData viewPlayerData = null;  
 | 
        if (!viewPlayerDataDic.TryGetValue((int)package.PlayerID, out viewPlayerData))  
 | 
        {  
 | 
            viewPlayerData = new ViewPlayerData();  
 | 
            viewPlayerData.getTime = DateTime.Now;  
 | 
            viewPlayerDataDic.Add((int)package.PlayerID, viewPlayerData);  
 | 
        }  
 | 
  
 | 
        viewPlayerData.getTime = DateTime.Now;  
 | 
        viewPlayerData.rolePropData.PlayerID = (int)package.PlayerID;  
 | 
        viewPlayerData.rolePropData.Name = package.PlayerName;  
 | 
        viewPlayerData.rolePropData.LV = package.LV;  
 | 
        viewPlayerData.rolePropData.Job = package.Job;  
 | 
        viewPlayerData.rolePropData.RealmLV = package.RealmLV;  
 | 
        viewPlayerData.rolePropData.Face = (int)package.Face;  
 | 
        viewPlayerData.rolePropData.FacePic = (int)package.FacePic;  
 | 
        viewPlayerData.rolePropData.TitleID = (int)package.TitleID;  
 | 
        viewPlayerData.rolePropData.ServerID = (int)package.ServerID;  
 | 
        viewPlayerData.rolePropData.FightPower = package.FightPower + package.FightPowerEx * (long)Constants.ExpPointValue;  
 | 
        viewPlayerData.rolePropData.FamilyID = (int)package.FamilyID;  
 | 
        viewPlayerData.rolePropData.FamilyName = package.FamilyName;  
 | 
        viewPlayerData.rolePropData.FamilyEmblemID = (int)package.FamilyEmblemID;  
 | 
  
 | 
  
 | 
        if (viewPlayerData.rolePlusData == null)  
 | 
        {  
 | 
            //第一次初始化  
 | 
            viewPlayerData.rolePlusData = new RolePlusData();  
 | 
        }  
 | 
        if (package.PlusDataSize != 0)  
 | 
        {  
 | 
            viewPlayerData.rolePlusData.AnalysisRolePlusData(package.PlusData);  
 | 
        }  
 | 
  
 | 
  
 | 
        ShowRoleParticulars(viewPlayerData, (int)package.PlayerID);  
 | 
    }  
 | 
  
 | 
    public void OnRevRoleFuncPower(HA3A1_tagMCModuleFightPowerInfo package)  
 | 
    {  
 | 
        if (package.MFPCnt == 0)  
 | 
            return;  
 | 
        for (int i = 0; i < package.MFPList.Length; i++)  
 | 
        {  
 | 
            funcFightPowerDict[package.MFPList[i].MfpType] = package.MFPList[i].FightPowerEx * Constants.ExpPointValue + package.MFPList[i].FightPower;  
 | 
        }  
 | 
        if (PowerUpdate != null)  
 | 
        {  
 | 
            PowerUpdate();  
 | 
        }  
 | 
    }  
 | 
  
 | 
    public ulong GetFuncFightPower(int type)  
 | 
    {  
 | 
        if (funcFightPowerDict.ContainsKey(type))  
 | 
        {  
 | 
            return funcFightPowerDict[type];  
 | 
        }  
 | 
        return 0;  
 | 
    }  
 | 
  
 | 
    #region 查看玩家坐骑灵宠属性  
 | 
      
 | 
  
 | 
    // int[] qualitys;  
 | 
    // string[] qualityTitles;  
 | 
    // public string GetQualityDisplay(int quality)  
 | 
    // {  
 | 
    //     if (qualitys == null)  
 | 
    //     {  
 | 
    //         var config = FuncConfigConfig.Get("PetQuality");  
 | 
    //         qualitys = ConfigParse.GetMultipleStr<int>(config.Numerical1);  
 | 
    //         qualityTitles = ConfigParse.GetMultipleStr(config.Numerical2);  
 | 
    //     }  
 | 
    //     for (int i = 0; i < qualitys.Length; i++)  
 | 
    //     {  
 | 
    //         if (quality == qualitys[i])  
 | 
    //         {  
 | 
    //             return qualityTitles[i];  
 | 
    //         }  
 | 
    //     }  
 | 
    //     return string.Empty;  
 | 
    // }  
 | 
  
 | 
  
 | 
    // public int GetPetFightPower(List<PetInfo> pets)  
 | 
    // {  
 | 
    //     var fightPower = 0;  
 | 
    //     for (int i = 0; i < pets.Count; i++)  
 | 
    //     {  
 | 
    //         fightPower += GetPetFightPower(pets[i].id, pets[i].lv);  
 | 
    //     }  
 | 
    //     return fightPower;  
 | 
    // }  
 | 
  
 | 
    // public int GetPetFightPower(int id, int lv)  
 | 
    // {  
 | 
    //     var fightPower = 0;  
 | 
    //     var config = PetInfoConfig.Get(id);  
 | 
    //     var _init_fightpower = 0;  
 | 
    //     int.TryParse(config.InitFightPower, out _init_fightpower);  
 | 
    //     fightPower += _init_fightpower;  
 | 
    //     PetInfoConfig.GetPetSkills(id, lv, true, ref skills);  
 | 
    //     var petUpConfig = PetClassCostConfig.GetPetIdAndRank(id, lv);  
 | 
    //     if (petUpConfig != null)  
 | 
    //     {  
 | 
    //         Dictionary<int, int> propertyDict = new Dictionary<int, int>();  
 | 
    //         propertyDict.Add(77, petUpConfig.AtkAdd);  
 | 
    //         propertyDict.Add(78, petUpConfig.AtkAdd);  
 | 
    //         fightPower += UIHelper.GetFightPower(propertyDict);// Mathf.FloorToInt(petUpConfig.AtkAdd * 2.5f);  
 | 
    //     }  
 | 
    //     for (int i = 0; i < skills.Count; i++)  
 | 
    //     {  
 | 
    //         var skillConfig = SkillConfig.Get(skills[i]);  
 | 
    //         if (skillConfig != null)  
 | 
    //         {  
 | 
    //             fightPower += skillConfig.FightPower;  
 | 
    //         }  
 | 
    //     }  
 | 
    //     return fightPower;  
 | 
    // }  
 | 
  
 | 
    // public int GetPetAtkProperty(List<PetInfo> pets)  
 | 
    // {  
 | 
    //     var atk = 0;  
 | 
    //     for (int i = 0; i < pets.Count; i++)  
 | 
    //     {  
 | 
    //         atk += GetPetAtkProperty(pets[i].id, pets[i].lv, pets);  
 | 
    //     }  
 | 
    //     return atk;  
 | 
    // }  
 | 
  
 | 
    // public int GetPetAtkProperty(int id, int lv, List<PetInfo> pets)  
 | 
    // {  
 | 
    //     var atk = 0;  
 | 
    //     var petUpConfig = PetClassCostConfig.GetPetIdAndRank(id, lv);  
 | 
    //     if (petUpConfig != null)  
 | 
    //     {  
 | 
    //         atk += petUpConfig.AtkAdd;  
 | 
    //     }  
 | 
    //     PetInfoConfig.GetPetSkills(id, lv, true, ref skills);  
 | 
    //     for (int i = 0; i < skills.Count; i++)  
 | 
    //     {  
 | 
    //         atk += GetPetAtkSkillProperty(skills[i], pets);  
 | 
    //     }  
 | 
    //     return atk;  
 | 
    // }  
 | 
  
 | 
    // public int GetPetAtkSkillProperty(int skillId, List<PetInfo> pets)  
 | 
    // {  
 | 
    //     SkillConfig skillconfig = SkillConfig.Get(skillId);  
 | 
    //     if (skillconfig == null)  
 | 
    //     {  
 | 
    //         return 0;  
 | 
    //     }  
 | 
    //     if (skillconfig.Effect1 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack)  
 | 
    //     {  
 | 
    //         return GetPetAttack(skillconfig.EffectValue11, skillconfig.EffectValue12, pets);  
 | 
    //     }  
 | 
    //     else if (skillconfig.Effect2 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack)  
 | 
    //     {  
 | 
    //         return GetPetAttack(skillconfig.EffectValue21, skillconfig.EffectValue22, pets);  
 | 
    //     }  
 | 
    //     else if (skillconfig.Effect3 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack)  
 | 
    //     {  
 | 
    //         return GetPetAttack(skillconfig.EffectValue31, skillconfig.EffectValue32, pets);  
 | 
    //     }  
 | 
    //     else if (skillconfig.Effect4 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack)  
 | 
    //     {  
 | 
    //         return GetPetAttack(skillconfig.EffectValue41, skillconfig.EffectValue42, pets);  
 | 
    //     }  
 | 
    //     else if (skillconfig.Effect5 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack)  
 | 
    //     {  
 | 
    //         return GetPetAttack(skillconfig.EffectValue51, skillconfig.EffectValue52, pets);  
 | 
    //     }  
 | 
    //     else if (skillconfig.Effect6 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack)  
 | 
    //     {  
 | 
    //         return GetPetAttack(skillconfig.EffectValue61, skillconfig.EffectValue62, pets);  
 | 
    //     }  
 | 
    //     return 0;  
 | 
    // }  
 | 
  
 | 
    // int GetPetAttack(int quality, int value, List<PetInfo> pets)  
 | 
    // {  
 | 
    //     var atk = 0;  
 | 
    //     for (int i = 0; i < pets.Count; i++)  
 | 
    //     {  
 | 
    //         var config = PetInfoConfig.Get(pets[i].id);  
 | 
    //         if (config != null && config.Quality == quality)  
 | 
    //         {  
 | 
    //             var petUpConfig = PetClassCostConfig.GetPetIdAndRank(pets[i].id, pets[i].lv);  
 | 
    //             atk += petUpConfig == null ? 0 : petUpConfig.AtkAdd;  
 | 
    //         }  
 | 
    //     }  
 | 
    //     return (int)(atk * ((float)value / 10000));  
 | 
    // }  
 | 
  
 | 
    public bool viewPetStone { get; set; }  
 | 
    #endregion  
 | 
  
 | 
    //尽量不要用第一个参数viewtype做判断,容易出错,比如同时发送两个不同的viewPlayerType请求的时候  
 | 
    private void ShowRoleParticulars(ViewPlayerData _viewPlayerData, int playerID)  
 | 
    {  
 | 
        // if (viewPlayerType == (int)ViewPlayerType.viewPlayerEquip || viewPlayerType == (int)ViewPlayerType.viewCrossPlayerEquip)  
 | 
        // {  
 | 
        //     if (!WindowCenter.Instance.IsOpen<RoleParticularsWin>())  
 | 
        //     {  
 | 
        //         RoleParticularsWin.viewType = viewPlayerType;  
 | 
        //         WindowCenter.Instance.Open<RoleParticularsWin>();  
 | 
        //     }  
 | 
        // }  
 | 
        // else if (viewPlayerType == (int)ViewPlayerType.viewPlayerFightPower || viewPlayerType == (int)ViewPlayerType.viewCrossPlayerFightPower)  
 | 
        // {  
 | 
        //     if (!WindowCenter.Instance.IsOpen<ViewFuncPowerWin>())  
 | 
        //     {  
 | 
        //         WindowCenter.Instance.Open<ViewFuncPowerWin>();  
 | 
        //     }  
 | 
        // }  
 | 
  
 | 
          
 | 
        OnRevPackage?.Invoke(viewPlayerType, playerID, _viewPlayerData);  
 | 
        viewPlayerType = -1;  
 | 
    }  
 | 
  
 | 
    public class ViewPlayerData  
 | 
    {  
 | 
        public RolePropData rolePropData;  
 | 
        public RolePlusData rolePlusData;  
 | 
  
 | 
        public DateTime getTime;  
 | 
  
 | 
        public int GetEquipSuitLevel()  
 | 
        {  
 | 
            return 0;  
 | 
        }  
 | 
  
 | 
  
 | 
    }  
 | 
  
 | 
  
 | 
    [Serializable]  
 | 
    public struct RolePropData  
 | 
    {  
 | 
        public int PlayerID;  
 | 
        public int LV;  
 | 
        public int RealmLV;  
 | 
        public string Name;  
 | 
        public string FamilyName;  
 | 
        public int Job;  
 | 
        public int FamilyID;  
 | 
        public long FightPower;  
 | 
        public int TitleID;  
 | 
        public int ServerID;  
 | 
        public int FamilyEmblemID;  
 | 
        public int Face;    //脸型  
 | 
        public int FacePic;    //脸型外框  
 | 
    }  
 | 
  
 | 
  
 | 
    public class RolePlusData  
 | 
    {  
 | 
        Dictionary<int, ulong> fightPowerDict = new Dictionary<int, ulong>();  
 | 
        Dictionary<int, int> godWeaponDict = new Dictionary<int, int>();  
 | 
        Dictionary<int, int> treasureDict = new Dictionary<int, int>();  
 | 
        public List<HorseInfo> horses = new List<HorseInfo>();  
 | 
        public List<PetInfo> pets = new List<PetInfo>();  
 | 
        public List<AlchemyDrug> alchemyDrugs = new List<AlchemyDrug>();  
 | 
        public int Horse { get; private set; } //改为等级  
 | 
        public int Pet { get; private set; }  
 | 
  
 | 
        public int AtkSpeed { get; private set; }  
 | 
        public int Rune { get; private set; }  
 | 
        public int orangeEquipsCount { get; private set; }  
 | 
        public int totalGemsLevel { get; private set; }  
 | 
        public int totalEquipWashLevel { get; private set; }  
 | 
        public int totalEquipStarLevel { get; private set; }  
 | 
        public int totalEquipStrengthLevel { get; private set; }  
 | 
        public int totalEquipEvolveLevel { get; private set; }  
 | 
        public int totalSkillLevel { get; private set; }  
 | 
  
 | 
        public ulong GetFightPower(int type)  
 | 
        {  
 | 
            if (fightPowerDict != null && fightPowerDict.ContainsKey(type))  
 | 
            {  
 | 
                return fightPowerDict[type];  
 | 
            }  
 | 
            return 0;  
 | 
        }  
 | 
  
 | 
  
 | 
  
 | 
        public void AnalysisRolePlusData(string jsonStr)  
 | 
        {  
 | 
            try  
 | 
            {  
 | 
                var jsonData = JsonMapper.ToObject(jsonStr);  
 | 
                if (jsonData.Keys.Contains("FightPowerDict"))  
 | 
                {  
 | 
                    var jsonPlusData = jsonData["FightPowerDict"];  
 | 
                    if (jsonPlusData.IsObject)  
 | 
                    {  
 | 
                        foreach (var key in jsonPlusData.Keys)  
 | 
                        {  
 | 
                            int type = int.Parse(key);  
 | 
                            fightPowerDict.Add(type, ulong.Parse(jsonPlusData[key].ToString()));  
 | 
                        }  
 | 
                    }  
 | 
                }  
 | 
  
 | 
                  
 | 
                // if (jsonData.Keys.Contains("Pet"))  
 | 
                // {  
 | 
                //     var jsonPlusData = jsonData["Pet"];  
 | 
                //     if (jsonPlusData.IsObject)  
 | 
                //     {  
 | 
                //         foreach (var _key in jsonPlusData.Keys)  
 | 
                //         {  
 | 
                //             if (_key.Equals("AtkSpeed"))  
 | 
                //             {  
 | 
                //                 AtkSpeed = int.Parse(jsonPlusData[_key].ToString());  
 | 
                //             }  
 | 
                //             else if (_key.Equals("PetLV"))  
 | 
                //             {  
 | 
                //                 var petInfos = JsonMapper.ToObject<PetInfo[]>(jsonPlusData[_key].ToJson());  
 | 
                //                 if (petInfos != null && petInfos.Length > 0)  
 | 
                //                 {  
 | 
                //                     for (int i = 0; i < petInfos.Length; i++)  
 | 
                //                     {  
 | 
                //                         var petInfo = petInfos[i];  
 | 
                //                         pets.Add(new PetInfo()  
 | 
                //                         {  
 | 
                //                             id = petInfo.id,  
 | 
                //                             lv = petInfo.lv + 1,  
 | 
                //                         });  
 | 
                //                     }  
 | 
                //                 }  
 | 
                //             }  
 | 
                //         }  
 | 
                //         pets.Sort(Compare);  
 | 
                //     }  
 | 
                //     Pet = pets.Count;  
 | 
                // }  
 | 
                // else  
 | 
                // {  
 | 
                //     Pet = 0;  
 | 
                // }  
 | 
                  
 | 
            }  
 | 
            catch (Exception e)  
 | 
            {  
 | 
                Debug.Log(e.StackTrace);  
 | 
            }  
 | 
        }  
 | 
  
 | 
        // int Compare(PetInfo x, PetInfo y)  
 | 
        // {  
 | 
        //     var config_x = PetInfoConfig.Get(x.id);  
 | 
        //     var config_y = PetInfoConfig.Get(y.id);  
 | 
        //     if (config_x == null || config_y == null)  
 | 
        //     {  
 | 
        //         return 0;  
 | 
        //     }  
 | 
        //     return -config_x.Sort.CompareTo(config_y.Sort);  
 | 
        // }  
 | 
  
 | 
        // int Compare(HorseInfo x, HorseInfo y)  
 | 
        // {  
 | 
        //     var config_x = HorseConfig.Get(x.id);  
 | 
        //     var config_y = HorseConfig.Get(y.id);  
 | 
        //     if (config_x == null || config_y == null)  
 | 
        //     {  
 | 
        //         return 0;  
 | 
        //     }  
 | 
        //     return -config_x.Sort.CompareTo(config_y.Sort);  
 | 
        // }  
 | 
    }  
 | 
  
 | 
    public struct HorseInfo  
 | 
    {  
 | 
        public int id;  
 | 
        public int lv;  
 | 
    }  
 | 
  
 | 
    public struct PetInfo  
 | 
    {  
 | 
        public int id;  
 | 
        public int lv;  
 | 
    }  
 | 
  
 | 
    public struct AlchemyDrug  
 | 
    {  
 | 
        public int item;  
 | 
        public int count;  
 | 
    }  
 | 
}  
 | 
  
 |